【问题标题】:TCP TIME_WAIT AssassinationTCP TIME_WAIT 暗杀
【发布时间】:2016-09-14 00:05:27
【问题描述】:

我刚刚查找了关于 TIME_WAIT 暗杀的 RFC1337,这是其中的一部分。

图 1 显示了 TIME-WAIT 暗杀的示例。 1-5 段
完全复制自 RFC-793 的图 13,显示正常关闭
握手。数据包 5.1、5.2 和 5.3 是对此的扩展
序列,说明 TWA。这里的 5.1 是任何旧段
TCP 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 插图卷 1 中,它说的是:

当连接在 2MSL 等待被丢弃。

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

【问题讨论】:

  • 延迟段是否暗示应用程序有效负载数据,而不是 tcp 控制数据?不是“确认” TIME-WAIT 状态告诉您该连接的状态是什么?
  • @SqlSurfer RFC:“这里 5.1 是 TCP A 不可接受的任何旧段”,似乎他没有指定段类型。
  • 而且我无法弄清楚“难道不是“确认”TIME-WAIT 状态告诉您该连接的状态是什么吗?”意思是因为我的英语水平很差......

标签: tcp


【解决方案1】:

RFC 793 在“重置生成”中声明:

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

【讨论】:

  • 这是否意味着它实际上并没有确认该段,因为丢弃了错误(不可接受的)段而只需要发送一个确认?
  • ACK 确实为您提供了一个新的序列号,这样您就可以在尝试进行一些专门的控制工作时发送一条不会乱序的消息。(对吗?)什么让我害怕关于这个讨论的是,你进入了堆栈的实现细节,然后你想知道为什么你的应用程序不能在未来的 1.21 Gigawatt 网卡上运行。这就是防火墙和虚拟硬件开始紧张的地方。
  • @Kevin 没错,它正在重新发布其当前的序列号和窗口。
  • @EJP 谢谢! :)
  • @SqlSurfer 我不知道你在“什么让我害怕”之后的评论部分与我的回答有什么关系,或者实际上是什么意思。
猜你喜欢
  • 2010-09-25
  • 1970-01-01
  • 1970-01-01
  • 2019-05-26
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多