TCP三次握手及TCP连接状态 TCP报文首部格式
建立TCP连接时的TCP三次握手和断开TCP连接时的4次挥手整体过程如下图:
开个玩笑
ACK: TCP协议规定,只有ACK=1时有效,连接建立后所有发送的报文ACK必须为1
SYN(SYNchronization同步):在连接建立用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使用SYN=1
ACK=1因此,SYN置1表示这是一个连接请求或连接接受报文
FIN(FINIS)即完,终结的意思,用来释放一个连接。当FIN=1时,表明此报文段发送方的数据已经发送完毕,并要求释放连接
TCP三次握手过程:
1. 首先由Client发出请求连接即SYN=1,声明自己的序号seq=X
2. 然后Server进行回复确认,即SYN=1 声明自己的序号seq=y,并设置ack=x+1
3 .最后Client再进行一次确认,设置seq=x+1 ack+y+1
注:seq 序列号范围:2^32-1 如果超过最大值,再从0开始
seq 序列号作用:依据这个序列号来组数据,如果发N个数据包,服务端会按序列号来重新组装数据
使用tcpdump抓取TCP三次握手
tcpdump 常用参数:
-c 指定包个数
-n ip,端口用数字方式显示
port 指定端口
Client:192.168.94.11
server:192.168.94.22
使用Client ssh Server
查看Server端
Flag[S]中的S表示为SYN包为1 。client主机返回ack=1 这个值为相对序号,如果想查看完整序号可以命令后面加-S
TCP连接状态 :
服务器端:LISTEN:侦听来自远方的TCP端口的连接请求
客户端:SYN-SENT:再发送连接请求后等待匹配的连接请求
服务器端:SYN-RECEIVED:再收到和发送一个连接请求后等待对方对连接请求的确认
客户端/服务器端:ESTABLISHED:代表一个打开的连接
客户端:FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
服务器端:CLOSE-WAIT:等待从本地用户发来的连接中断请求
客户端:FIN-WAIT-2:从远程TCP等待连接中断请求
服务器端:LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认
客户端:TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
服务器端:CLOSED:没有任何连接状态
在服务端返回一个确认的SYN-ACK包的时候有个潜在的弊端,如果发起的客户是一个不存在的客户端,那么服务端就不会接到客户端回应的ACK包
这时服务端需要耗费一定的数量的系统内存来等待这个未决的连接,直到等待超关闭时间,才能施放内存
如果恶意者通过通过ip欺骗,发送大量SYN包给受害者系统,导致服务端存在大量未决的连接并占用大量内存和tcp连接,从而导致正常客户端无法访问服务端,这就是SYN洪水攻击的过程
最新文章
- Android Studio 常用快捷键
- 支持向量机(SVM)——python3实现
- topshelf包装redis为windows服务
- iOS 目录的使用
- servlet学习笔记_1
- SAML - SSO(转)
- PHP+MySQL开发技术详解—学习笔记
- Delphi- 调用存储过程的方法
- HDU-1495 非常可乐(BFS)
- 数据层交换和高性能并发处理(开源ETL大数据治理工具--KETTLE使用及二次开发 )
- Linux标准目录
- 华为HG8245 电信 光猫破解获取超级密码
- python小工具:用python操作HP的Quality Center (二)----- 用异步方式提高速度
- salesforce 得到下拉列表控制依赖值的方法
- (十二)Deleting Documents
- 修改Windows server 时间同步
- UR#13 SRAND
- [No0000CF]想有一辈子花不完的钱?从了解“被动收入”开始吧
- string unicode utf8 ascii in python and js
- Win7是否可以把光盘当作U盘用
热门文章
- Python网络爬虫之三种数据解析方式
- 如何使用JavaScript实现纯前端读取和导出excel文件
- __x__(5)0905第二天__网页三大组成部分
- [LeetCode] Encode N-ary Tree to Binary Tree 将N叉树编码为二叉树
- 使用DevExpress.XtraTabbedMdi.XtraTabbedMdiManager控件来加载MDI窗体
- PAT甲级1049 Counting Ones【规律】
- WithOne 实体关系引起 EF Core 自动删除数据
- zrange 复杂度 O(log(N)+M), N 为有序集的基数,而 M 为结果集的基数
- MYSQL转换编码的解决方法
- Docker入门级简单的操作命令