书本解释
为什么A在TIME-WAIT状态必须等待2MSL的时间呢?这有两个理由。
第一,为了保证A发送的最后一个ACK报文段能够到达B。这个ACK报文段有可能
丢失,因而使处在LAST-ACK状态的B收不到对已发送的FIN+ACK报文段的确认。B会超时重传这个FIN+ACK报文段,而A就能在2MSL时间内收到这个重传的FIN+ACK报 文段。接着A重传一次确认,重新启动2MSL计时器。最后,A和B都正常进入到 CLOSED状态。如果A在TIME-WAIT状态不等待一段时间,而是在发送完ACK报文段后立即释放连接,那么就无法收到B重传的FIN+ACK报文段,因而也不会再发送一次确认 报文段。这样,B就无法按照正常步骤进入CLOSED状态。
第二,防止上一节提到的”已失效的连接请求报文段”出现在本连接中。A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接待续的时间内所产生的所有报
文段都从网络中消失。这样就可以使下一个新的连接中不 会出现这种旧的连接请求报文段。
B只要收到了A发出的确认,就进入CLOSED状态。同样,B在撤销相应的传输控制块 TCB后,就结束了这次的TCP连接。我们注意到,B结束TCP连接的时间要比A早一些。
摘自《计算机网络基础》
感受:
我一开始看这段文字,是全部懵圈的感觉,但是多看几遍,多少会理解一些。就是它所指的最后指的是什么?,,,,等等等。
个人简单理解:第四次,也就是最末尾的阶段,A向B发送确认,ACK 可能丢失,B接受不到,因此会有超时重传机制,让B重新发送FIN和ACK 报文段,等待2MSL时间,
A 就能收到重传的ACK和FIN 报文段,最后重传一次确认,最终都进入CLOSED状态。
第二个原因这样解释,我感觉解释的有些勉强,不知道你们有没有。
以上是我的学习感受,有错误的还望广大学习者多多指教!
-TCP四报文挥手-