TCP四次挥手过程中,为什么需要等待2MSL,才进入Closed关闭状态?
为什么需要等待?
- 为了保证客户端发送的最后一个ACK报文段能够到达服务端 。
- 这个ACK报文段可能丢失,因而使处在last_ack状态的服务端收不到客户端对已经发送的FIN+ACK报文段的确认。
- 服务端会超时重传这个FIN+ACK报文段,
- 这样,客户端就能在2MSL时间内(超时+1MSL传输)收到这个重传的FIN+ACK报文段。
- 接着客户端重传一次确认,重新启动2MSL计时器
- 最后,客户端和服务器都正常进入到closed状态。
- 防止已失效的连接请求报文段出现在本连接中。
- 客户端在发送完最后一个ACK报文段后,再过2MSL,可以使本连接持续的时间内所产生的所有报文段都从网络中消失。
- 这样可以使下一个连接中不会出现旧的连接请求报文段。
为什么等待的时间是2MSL?
MSL是Maximum Segement Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。
Time_wait等待2倍的MSL的理由:
- 网络中可能存在来自发送方的数据包,
- 当这些发送方的数据包被接受方处理后又会向发送方发送响应,
- 所以一来一回需要等待2倍时间。
举例:比如
- 服务端没收到断开连接的最后的ACK报文,就会触发超时重发FIN报文,
- 另一方接收到FIN后,重发ACK给服务端,一来一去正好2个MSL。

浙公网安备 33010602011771号