加载中…
个人资料
南冠彤
南冠彤
  • 博客等级:
  • 博客积分:0
  • 博客访问:415,028
  • 关注人气:59
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

(转)socket状态中time_wait

(2012-11-08 17:58:35)
标签:

杂谈

分类: CPP/C
http://blog.csdn.net/lllxy/article/details/1776243

time_wait是什么?

在上篇文章中讲到,在TCP断开的过程中会有四个状态变化过程,如下图所示:

http://p.blog.csdn.net/images/p_blog_csdn_net/lllxy/334215/o_TCPDisconnectState.PNG

在连接撤销过程中,有如下四个过程:                                  
1.         HOST1上的应用程序关闭己方的连接导致TCP发送一个FIN消息给HOST2。
2.         HOST2发送一个确认消息给HOST1,并且HOST2把FIN作为EOF递交给HOST2上的应用程序。
3.         一段时间过后,HOST2上的应用程序关闭它那边的连接,引发一个FIN消息给HOST1。
4.         HOST1给HOST2发送一个确认消息,然后HOST2关闭连接并释放资源,然而,HOST1却没有关闭连接,而
        是进入了TIME_WAIT状态,并为两个最大段生存时间(2MSL)保留在此状态.
 
为什么需要time_wait?
1.       因为在第四步的时候,HOST1发送的ACK可能丢失并导致HOST2重新发送FIN消息,TIME_WAIT维护连接状
       态.
       如果执行主动关闭的一方HOST1 不进入到TIME_WAIT状态就关闭连接那会发生什么呢?当重传的FIN消息到达
       时,因为TCP已经不再有连接的信息了,所以就用RST(重新启动)消息应答,导致HOST2进入错误的状态而不
      是有序终止状态,如果发送最后ACK消息的一方处于TIME_WAIT状态并仍然记录着连接的信息,它就可以正确
      的响应对等方HOST2的FIN消息了.
2.       TIME_WAIT为连接中”离群的段”提供从网络中消失的时间.
         考虑一下,如果延迟或者重传段在连接关闭后到达时会发生什么呢?通常情况下,因为TCP仅仅丢弃该数据并
         响应RST消息,所以这不会造成任何问题。当RST消息到达发出延时段的主机时,因为该主机也没有记录连接
         的任何信息,所以它也丢弃该段。然而,如果两个相同主机之间又建立了一个具有相同端口号的新连接,那么
        离群的段就可能被看成是新连接的,如果离群的段中数据的任何序列号恰恰在新连接的当前接收窗口中,数据
        就会被重新接收,其结果就是破坏新连接。


 

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有