TIME_WAIT状态

TIME_WAIT状态


TIME_WAIT状态_第1张图片

是谁有TIME_WAIT状态呢?为什么?

执行主动关闭的那一端、因为可能不得不重传最终那个ACK的就是这一端

TIME_WAIT有多久呢?

最长分节生命期的两倍。2MSL。MSL:任何IP数据报能够在因特网上存活的最长时间

什么是迷途的重复分组呢?

假设迷途的分组是一个TCP分节,他在迷途期间,发送端TCP超时并重传该分组,而重传的分组却通过某条候选路径到达最终目的地。然后不久后(自迷途的分组开始其迷途旅程起最多MSL)路由循环修复,早先迷失的分组最终也被送到目的地。这样的分组就叫迷途重复分组。

TIME_WAIT存在的理由:

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

假设上一节TCP连接分组交换中的最后一个ACK丢失了。服务器将重新发送他的最终的那个FIN,因此客户必须维护状态信息,以允许他重新发送最终那个ACK。客户如果不维护状态信息,它将响应一个RST,该分节被服务器解释成一个错误。如果要全双工关闭(执行所有必要的工作以彻底终止某个连接上两个方向的数据流),那么连接终止序列四个分节中的任何一个分节丢失的情况都得正确处理。

(2)允许老的重复分节在网络中消逝

假设一个套接字对之间建立了一个连接,我们关闭该连接后在相同的套接字对又建立了一个连接。后一个连接成为前一个的化身,TCP必须防止来自某个连接的老的重复分组在该连接已经终止后再现。为了不接受老的分组,TCP将不给处于TIME_WAIT状态的连接发起新的化身。TIME_WAIT状态持续时间为2MSL这就足以让某个方向上的分组最多存活MSL即被丢弃,另一个方向上的应答也最多存活MSL秒被丢弃。


在TCP连接中,当被动关闭连接的一方(图中client)发送的FIN报文到达时,被动关闭连接 的一方会发送ACK确认报文,并且进入TIME_WAIT状态,并且等待2MSL时间段(MSL:maximum segment life)。这么做有下述两个原因:

1、被动关闭连接的一方(图中的server)在一段时间内没有收到对方的ACK确认数据包,会重新发送FIN数据包,因而主动关闭连接的一方需要停留在等待状态以处理对方重新发送的FIN数据包。否则他会回应一个RST数据包给被动关闭连接的一方,使得对方莫名其妙。

2、在TIME_WAIT状态下,不允许应用程序在当前ip和端口上和之前通信的client(这个client的ip和端口号不变)建立一个新的连接。这样就能避免新的连接收到之前的ip和端口一致的连接残存在网络中的数据包。这也是TIME_WAIT状态的等待时间被设置为2MSL的原因,以确保网络上当前连接两个方向上尚未接收的TCP报文已经全部消失。


http://blog.csdn.net/yangliuhepanpan/article/details/51597851

http://blog.csdn.net/rain_qingtian/article/details/9977249

http://www.cnblogs.com/bethal/p/5292112.html

http://www.cnblogs.com/bethal/p/5292112.html



你可能感兴趣的:(TIME_WAIT状态)