﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-庄周梦蝶-随笔分类-u.n.p</title><link>http://www.cppblog.com/killme2008/category/7420.html</link><description>庄周梦蝶，孰蝶是我？我是孰蝶？一梦至今，蝶我已难分</description><language>zh-cn</language><lastBuildDate>Sun, 22 Jun 2008 17:54:48 GMT</lastBuildDate><pubDate>Sun, 22 Jun 2008 17:54:48 GMT</pubDate><ttl>60</ttl><item><title>TCP的TIME_WAIT状态</title><link>http://www.cppblog.com/killme2008/archive/2008/06/23/54322.html</link><dc:creator>dennis-zhuang</dc:creator><author>dennis-zhuang</author><pubDate>Sun, 22 Jun 2008 17:34:00 GMT</pubDate><guid>http://www.cppblog.com/killme2008/archive/2008/06/23/54322.html</guid><wfw:comment>http://www.cppblog.com/killme2008/comments/54322.html</wfw:comment><comments>http://www.cppblog.com/killme2008/archive/2008/06/23/54322.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/killme2008/comments/commentRss/54322.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/killme2008/services/trackbacks/54322.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp; 主动关闭的Socket端会进入TIME_WAIT状态，并且持续2MSL时间长度，MSL就是maximum segment
lifetime(最大分节生命期），这是一个IP数据包能在互联网上生存的最长时间，超过这个时间将在网络中消失。MSL在RFC
1122上建议是2分钟，而源自berkeley的TCP实现传统上使用30秒，因而，TIME_WAIT状态一般维持在1-4分钟。<br>
&nbsp;&nbsp;&nbsp; TIME_WAIT状态存在的理由：<br>
1）可靠地实现TCP全双工连接的终止<br>
&nbsp;&nbsp;&nbsp;
在进行关闭连接四路握手协议时，最后的ACK是由主动关闭端发出的，如果这个最终的ACK丢失，服务器将重发最终的FIN，因此客户端必须维护状态信息允
许它重发最终的ACK。如果不维持这个状态信息，那么客户端将响应RST分节，服务器将此分节解释成一个错误（在java中会抛出connection
reset的SocketException)。因而，要实现TCP全双工连接的正常终止，必须处理终止序列四个分节中任何一个分节的丢失情况，主动关闭
的客户端必须维持状态信息进入TIME_WAIT状态。<br>
<br>
2）允许老的重复分节在网络中消逝&nbsp; <br>
&nbsp;&nbsp;&nbsp;
TCP分节可能由于路由器异常而&#8220;迷途&#8221;，在迷途期间，TCP发送端可能因确认超时而重发这个分节，迷途的分节在路由器修复后也会被送到最终目的地，这个
原来的迷途分节就称为lost
duplicate。在关闭一个TCP连接后，马上又重新建立起一个相同的IP地址和端口之间的TCP连接，后一个连接被称为前一个连接的化身
（incarnation)，那么有可能出现这种情况，前一个连接的迷途重复分组在前一个连接终止后出现，从而被无解成从属于新的化身。为了避免这个情
况，TCP不允许处于TIME_WAIT状态的连接启动一个新的化身，因为TIME_WAIT状态持续2MSL，就可以保证当成功建立一个TCP连接的时
候，来自连接先前化身的重复分组已经在网络中消逝。<br>
<br>
新的SCTP协议通过在消息头部添加验证标志避免了TIME_WAIT状态。 <img src ="http://www.cppblog.com/killme2008/aggbug/54322.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/killme2008/" target="_blank">dennis-zhuang</a> 2008-06-23 01:34 <a href="http://www.cppblog.com/killme2008/archive/2008/06/23/54322.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>