TCP状态转换图和TIME_WAIT状态

TCP连接定义了11种状态,状态转换如下 

 

在网络交错复杂情况下,同时打开和同时关闭是很罕见的情况不过可能发生。

 

 

当TCP连接断开时候,执行主动关闭那一端会进入TIME_WAIT状态,知道等待2msl(每个分节最长生命期)

TIME_WAIT状态有两种存在的理由

  1,可靠的实现TCP全双工连接的终止

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

第一个理由可以通过考虑四次挥手最后一个ACK丢失,服务器重新发送最后一个FIN,客户端必须维护状态信息,以维护发送最终的ACK。

如果A端不维持TIME_WAIT状态,而是处于CLOSED 状态,那么会返回的信息会被服务器认为错误信息。TCP要彻底终止序列双向的数据流,那么必须处理4个分节中任意一个分节丢失的情况

第二个理由就是

TCP分节可能由于路由器异常而“迷途”,在迷途期间,TCP发送端可能因确认超时而重发这个分节,迷途的分节在路由器修复后也会被送到最终目的地,这个迟到的迷途分节到达时可能会引起问题。在关闭“前一个连接”之后,马上又重新建立起一个相同的IP和端口之间的“新连接”,“前一个连接”的迷途重复分组在“前一个连接”终止后到达,而被“新连接”收到了。为了避免这个情况,TCP协议不允许处于TIME_WAIT状态的连接启动一个新的可用连接,因为TIME_WAIT状态持续2MSL(往返各MSL),就可以保证当成功建立一个新TCP连接的时候,来自旧连接重复分组已经在网络中消逝。

 

posted on 2014-03-29 19:45  mtmzn  阅读(371)  评论(0)    收藏  举报

导航