为什么 TIME-WAIT 状态必须等待 2MSL 的时间呢?

1、为了保证 A 发送的最后一个 ACK 报文段能够到达 B。这个 ACK 报文段有可能丢失,因而使处在 LAST-ACK 状态的 B 收不到对已发送的 FIN + ACK 报文段的确认。B 会超时重传这个 FIN+ACK 报文段,而 A 就能在 2MSL 时间内(超时 + 1MSL 传输)收到这个重传的 FIN+ACK 报文段。接着 A 重传一次确认,重新启动 2MSL 计时器。最后,A 和 B 都正常进入到 CLOSED 状态。如果 A 在 TIME-WAIT 状态不等待一段时间,而是在发送完 ACK 报文段后立即释放连接,那么就无法收到 B 重传的 FIN + ACK 报文段,因而也不会再发送一次确认报文段,这样,B 就无法按照正常步骤进入 CLOSED 状态。

2、 防止已失效的连接请求报文段出现在本连接中。A 在发送完最后一个 ACK 报文段后,再经过时间 2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样就可以使下一个连接中不会出现这种旧的连接请求报文段。

发表评论

后才能评论

评论(3)

  • 文峯 普通 2022-04-29 10:50 上午

    MSL 是 Maximum Segment Lifetime,报文最大生存时间,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。2MSL时长 这其实是相当于至少允许报文丢失一次。

  • 一叶知秋 普通 2021-10-13 9:17 上午

    确实如此,“接着 A 重传一次确认,重新启动 2MSL 计时器。”,之前看的视频里都没讲这个,然后我就到处查资料了了,有的博客写了,有的没???,当时就纳闷,不重新计时的话,时间都不够了。

  • 周立广 普通 2021-08-20 10:01 下午

    加油