TCP的“四次挥手”
“四次挥手”详细过程
(1)客户端发起TCP连接释放,报文内容有FIN、ACK、seq、ack
(2)服务端收到客户端的释放请求,发送释放确认,报文内容有ACK、seq、ack
(3)客户端收到确认,进入等待关闭的状态,此时客户端到服务端的通道被关闭
(4)服务端继续发送未发送完的数据
(5)当未发送的数据发送完毕后,服务端发起TCP连接释放,报文内容有FIN、ACK、seq、ack
(6)客户端收到释放请求后,发送释放确认,报文内容有ACK、seq、ack,并进入时间等待状态
(7)服务端收到释放确认,正式关闭,进入close状态
(8)2MSL时间到,客户端正式关闭,进入close状态
加粗字段即为”四次挥手“
总结:
简单来说就是客户端先通知服务端,我不发数据了,服务端确认下,两次挥手。
服务端等未发送完的数据发送完,说我也不发了,客户端确认下,两次挥手
客户端为什么一定要等待2MSL
考虑到一种场景:
当客户端发送给服务端的释放确认报文缺失或者超时,如果不等待2MSL就关闭客户端,那么此时客户端无法进行超时重传,服务端也会收不到确认,一直给客户端发送释放,得不到确认
使用wireshark抓包分析四次挥手
- 这边使用wireshark并通过条件过滤抓了一些包
红色框选的四条数据包即为挥手四次过程
点进第一条即可查看报文详细内容