TCP四次挥手过程中,为什么需要等待2MSL,才进入Closed关闭状态?

为什么需要等待?

  1. 为了保证客户端发送的最后一个ACK报文段能够到达服务端
  • 这个ACK报文段可能丢失,因而使处在last_ack状态的服务端收不到客户端对已经发送的FIN+ACK报文段的确认。
  • 服务端会超时重传这个FIN+ACK报文段,
  • 这样,客户端就能在2MSL时间内(超时+1MSL传输)收到这个重传的FIN+ACK报文段。
  • 接着客户端重传一次确认,重新启动2MSL计时器
  • 最后,客户端和服务器都正常进入到closed状态。
  1. 防止已失效的连接请求报文段出现在本连接中。
  • 客户端在发送完最后一个ACK报文段后,再过2MSL,可以使本连接持续的时间内所产生的所有报文段都从网络中消失。
  • 这样可以使下一个连接中不会出现旧的连接请求报文段。

为什么等待的时间是2MSL?

MSL是Maximum Segement Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

Time_wait等待2倍的MSL的理由:

  • 网络中可能存在来自发送方的数据包,
  • 当这些发送方的数据包被接受方处理后又会向发送方发送响应,
  • 所以一来一回需要等待2倍时间。

举例:比如

  • 服务端没收到断开连接的最后的ACK报文,就会触发超时重发FIN报文,
  • 另一方接收到FIN后,重发ACK给服务端,一来一去正好2个MSL。
posted @ 2025-06-03 19:01  kuki'  阅读(118)  评论(0)    收藏  举报