首先是四次挥手断开连接的状态变化图
总的来说,主动关闭连接的一方才会进入TIME_WAIT状态。
客户端主动关闭连接时,会发送最后一个ack后,然后会进入TIME_WAIT状态,再停留2个MSL时间,进入CLOSED状态
MSL时间
MSL就是maximum segment lifetime(最大分节生命期),这是一个IP数据包能在互联网上生存的最长时间,超过这个时间IP数据包将在网络中消失 。MSL在RFC 1122上建议是2分钟,而源自berkeley的TCP实现传统上使用30秒。
一个socket连接,可以得出以下几点:
1) 主动关闭连接的一方 – 也就是主动调用socket的close操作的一方,最终会进入TIME_WAIT状态 ;
2) 被动关闭连接的一方,有一个中间状态,即CLOSE_WAIT,因为协议层在等待上层的应用程序,主动调用close操作后才主动关闭这条连接 ;
3) TIME_WAIT会默认等待2MSL时间后,才最终进入CLOSED状态;
4) 在一个连接没有进入CLOSED状态之前,这个连接是不能被重用的
-
time_wait的作用,以及为什么是2*MSL
1. 防止连接关闭时四次挥手中的最后一次ACK丢失
如果没有TIME_WAIT状态,主动