当前位置:  技术问答>linux和unix

关于TIME_WAIT状态的疑问

    来源: 互联网  发布时间:2017-03-27

    本文导语:  UNP上说TIME_WAIT的作用之一,是为了防止旧链接的重复分组出现在新的相同链接中,想了很长时间也想不明白,疑问如下: 为什么TIME_WAIT的时间要是2MSL,既然一个包的最大生存时间为MSL,那么TIME_WAIT持续MSL时间后,所...

UNP上说TIME_WAIT的作用之一,是为了防止旧链接的重复分组出现在新的相同链接中,想了很长时间也想不明白,疑问如下:
为什么TIME_WAIT的时间要是2MSL,既然一个包的最大生存时间为MSL,那么TIME_WAIT持续MSL时间后,所有重复数据包应该就已经消失了啊?
如果说这是为了防止最后一个ACK成为重复数据包,那么下面的情况怎么处理:
假设主动关闭端为A,被动关闭端为B,A在收到B的FIN包,发送ACK之后状态就成了TIME_WAIT,如果这个ACK
丢失了,B端继续发FIN。如果A发送的ACK一直丢失,那么,在1MSL到2MSL之间的时间段内,如图*所在的时间点上,A发送的ACK就有可能成为重复数据包,这样再过不

到1MSL的时间,A状态变为CLOSED,接着AB之间马上建立相同的链接,之前的ACK还是有可能会出现啊,因为时间不到MSL,如图:


|------|------|
0      1   *  2
不知道我描述清楚了没有,望高手解答。

|
你的理解基本正确但是有一点需要澄清
在A处于time wait状态的时候,如果收到另外一个FIN (B的重传),需要reset 2MSL的timer
所以在你举的例子里面,当B resend FIN的时候,为了避免你所列举的问题,就需要重新开始等待

这也是为什么我们需要等2MSL而不是1MSL,就是为了等待可能的1MSL A的ACK timeout后给B resend FIN的机会




|


这个是RFC的规定,参见 http://tools.ietf.org/html/rfc793#page-52        

TIME-WAIT STATE

          The only thing that can arrive in this state is a
          retransmission of the remote FIN.  Acknowledge it, and restart
          the 2 MSL timeout.

收到重复报文,如果最近收到的seq no没有变化,可以发ack也可以不发,这个是实现相关的部分, 发ack的目的在于产生dup ack,促使receiver更快retransmit

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • netstat发现TIME_WAIT
  • TIME_WAIT
  • 怎么解决TIME_WAIT的问题?
  • linux上socket连接的TIME_WAIT能避免产生么?
  • socket 编程 运行正常 为什么netstat -an 还有 time_wait 的套接字?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,