TCP TIME_WAIT暗杀

时间:2016-09-13 01:46:11

标签: tcp

我刚刚查看RFC1337有关TIME_WAIT暗杀事件,这是其中的一部分。

  

图1显示了TIME-WAIT暗杀的一个例子。细分1-5
  完全从RFC-793的图13中复制,显示正常关闭
  握手。数据包5.1,5.2和5.3是本文的扩展   序列,说明TWA。这里5.1是任何旧段   技术合作计划A是不可接受的。因为它可能是不可接受的   序列号或旧PAWS时间戳。在任一情况下,   TCP A为其当前的SND.NXT和RCV.NXT发送ACK段5.2   由于它没有此连接的状态,因此TCP B将其反映为RST   第5.3段,暗杀了A!

的TIME-WAIT状态      

**

    RFC 1337                 TCP TIME-WAIT Hazards                  May 1992
           TCP A                                                TCP B
       1.  ESTABLISHED                                          ESTABLISHED
           (Close)
       2.  FIN-WAIT-1  --> <SEQ=100><ACK=300><CTL=FIN,ACK>  --> CLOSE-WAIT
       3.  FIN-WAIT-2  <-- <SEQ=300><ACK=101><CTL=ACK>      <-- CLOSE-WAIT
                                                                (Close)
       4.  TIME-WAIT   <-- <SEQ=300><ACK=101><CTL=FIN,ACK>  <-- LAST-ACK
       5.  TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>      --> CLOSED
      - - - - - - - - - - - - - - - - - - - - - - - - - - - -
       5.1. TIME-WAIT   <--  <SEQ=255><ACK=33> ... old duplicate
       5.2  TIME-WAIT   --> <SEQ=101><ACK=301><CTL=ACK>    -->  ????
       5.3  CLOSED      <-- <SEQ=301><CTL=RST>             <--  ????
          (prematurely)

**

现在,让我感到困惑的是,在TCP / IP Illustrated第1卷中,它所说的是:

  

任何延迟的段在到达时都会到达   2MSL等待被丢弃。

那么,为什么RFC 1337的图1中的TCP A会确认旧的重复段?

1 个答案:

答案 0 :(得分:2)

RFC 793在“重置生成”中指出:

  
      
  1. 如果连接处于同步状态(ESTABLISHED,   FIN-WAIT-1,FIN-WAIT-2,CLOSE-WAIT,CLOSING,LAST-ACK,TIME-WAIT),   任何不可接受的段(窗口序列号或   不易察觉的确认号码)必须只引出一个空的   包含当前发送序列号的确认段   以及表示预期的下一个序列号的确认   接收,并且连接保持相同状态。
  2.