TIME_WAIT的意义

上图为TCP连接释放过程,在服务器A收到服务器B发送的FIN+ACK后,会向B发送ACK,进入到TIME_WAIT阶段,等待2MSL(MSL:Max Segment Lifetime,最长报文段寿命,报文段在网络中能够存活的最长时间)。

TIME_WAIT的意义

(1)可靠地实现TCP全双工连接的终止

为了保证A发送的最后一个ACK报文段能够到达B。

A给B发送的ACK可能会丢失,B收不到A发送的确认,B会超时重传FIN+ACK报文段,此时A处于2MSL时间内,就可以收到B重传的FIN+ACK报文段,接着A重传一次确认,重启2MSL计时器。最后,A和B都能够正常进入到CLOSED状态。

如果A在发完ACK后直接立即释放连接,而不等待一段时间,就无法收到B重传的FIN+ACK报文段,也就不会再次发送确认报文段,这样,B就无法按照正常步骤进入CLOSED状态。

(2)允许旧的报文段在网络中消逝  

A发送确认后,该确认报文段可能因为路由器异常在网络中发生“迷途”,并没有到达B,该确认报文段可以称为旧的报文段。A在超时后进行重传, 发送新的报文段,B在收到新的报文段后进入CLOSED状态。在这之后,发生迷途的旧报文段可能到达了B,通常情况下,该报文段会被丢弃,不会造成任何的影响。但是如果两个相同主机A和B之间又建立了一个具有相同端口号的新连接,那么旧的报文段可能会被看成是新连接的报文段,如果旧的报文段中数据的任何序列号恰恰在新连接的当前接收窗口中,数据就会被重新接收,对连接造成破坏。为了避免这种情况,TCP不允许处于TIME_WAIT状态的连接启动一个新的连接,因为TIME_WAIT状态持续2MSL,就可以保证当再次成功建立一个TCP连接的时,来自之前连接的旧的报文段已经在网络中消逝,不会再出现在新的连接中。

猜你喜欢

转载自blog.csdn.net/qq_36132127/article/details/81138873
今日推荐