TCP连接状态
图1是TCP三次握手、数据传输、四次挥手三个阶段的状态转移图,状态说明如下:
- LISTEN:侦听来自客户端的TCP端口的连接请求
- SYN-SENT:再发送连接请求后等待匹配的连接请求(如果有大量这样的状态包,检查是否中招了)
- SYN-RCVD:再收到和发送一个连接请求后等待对方对连接请求的确认(如有大量此状态,估计被flood攻击了)
- ESTABLISHED:代表一个打开的连接
- FIN-WAIT-1:等待远程TCP连接中断请求,或先前的连接中断请求的确认
- FIN-WAIT-2:从远程TCP等待连接中断请求
- CLOSE-WAIT:等待从本地用户发来的连接中断请求
- LAST-ACK:等待原来的发向远程TCP的连接中断请求的确认(不是什么好东西,此项出现,检查是否被攻击)
- TIME-WAIT:等待足够的时间以确保远程TCP接收到连接中断请求的确认
- CLOSED:没有任何连接状态,连接结束
本文通过实践例子模拟每个阶段的状态变化。
图1 TCP连接状态转移图
本文用tcpdump抓包分析TCP连接的交互过程,其中tcpdump Flags含义如下:
- S=SYN 发起连接标志
- P=PUSH 传送数据标志
- F=FIN 关闭连接标志
- R=RESET 异常关闭连接,链接重置
- . 表示没有任何标志,表示返回ack
为什么要三次握手?
-
如果只有一次握手,Client不能确定与Server的单向连接,更加不能确定Server与Client的单向连接;
-
如果只有两次握手,Client确定与Server的单向连接,但是Server不能确定与Client的单向连接;
-
只有三次握手,Client与Server才能相互确认双向连接,实现双工数据传输。
图2 TCP三次握手
为什么要四次挥手?
“三次握手”的第二次握手发送SYN+ACK回应第一次握手的SYN,但是“四次挥手”的第二次挥手只能发送ACK回应第一次挥手的FIN,因为此时Server可能还有数据传输给Client,所以Server传输数据完成后才能发起第三次挥手发送FIN给Client,等待Client的第四次挥手ACK。
图3 TCP四次挥手
摘自:https://baijiahao.baidu.com/s?id=1708621911214426696&wfr=spider&for=pc
标签:挥手,握手,四次,TCP,Server,好文,Client,连接 From: https://www.cnblogs.com/sword0077/p/17150055.html