【问题标题】:Receive data on socket in TIME_WAIT state在 TIME_WAIT 状态的套接字上接收数据
【发布时间】:2013-02-02 21:31:36
【问题描述】:

在以下情况下,当 TIME_WAIT 中的套接字接收到段时会发生什么

  • a) 当它收到丢失的 ACK 时
  • b) 当发送节点想要使用服务器上相同的 src_ip:src_port 与服务器已经有 TIME_WAIT 套接字的相同 dst_ip:dst_port 建立另一个新连接时。

它会忽略/丢弃它、发送重置还是重用 TIME_WAIT 套接字?

谢谢

M

【问题讨论】:

    标签: linux sockets tcp time-wait


    【解决方案1】:

    a) 当它收到丢失的 ACK 时

    什么都没有。

    b) 当发送节点想要使用服务器上相同的 src_ip:src_port 建立另一个新连接到服务器已经有一个 TIME_WAIT 套接字的相同 dst_ip:dst_port 时。

    什么都没有。

    这两种情况都不符合你的标题。

    【讨论】:

    • 你的意思是它会丢弃它吗?我知道我说的是数据,但我的意思是说接收任何东西
    • @Mardanian 没什么意思。这不是一个陌生的词。
    • @Mardanian:换句话说,当套接字处于 TIME_WAIT 时,它只是忽略接收到的数据,但它至少会将其从网络中移除。在套接字离开 TIME_WAIT 之前,无法使用相同的 src ip:port 和 dst ip:port 建立新连接。
    【解决方案2】:

    好的。在深入挖掘并阅读了这本书 [第 43 页]“Unix 网络编程”之后,我终于弄清楚了我的问题出了什么问题(回答我自己的问题)。

    a) 'Active-Closer' 在 TIME_WAIT 状态下将重新发送 ACK 到丢失/徘徊的 FIN(在此状态下不期望任何 ACK [link]http://upload.wikimedia.org/wikipedia/commons/5/55/TCP_CLOSE.svg)

    b) TCP 不会启动处于 TIME_WAIT 状态的连接的新化身。 (我仍然不知道它是如何阻止它的,即它是否重置了该连接,我们如何通过读取 tcpdump 来解决这个问题)

    【讨论】:

    • (a) 你没有询问 FIN。 (b) 你可以从tcpdump 中通过观察是否发送了 RST,我对此表示怀疑,或者没有,这就是我所说的。
    • (a) 是的,问题是错误的,但 nothing 不是正确答案。正确的答案是澄清是否有人有误解,即在我的情况下,正确的答案是“不,ACK 是不可能的,因为 TCP 终止的工作方式”(b)没有什么不是“重置”,因为“重置”是一个东西,而不是一个nothing。
    • (a) 我不认为像“由于 TCP 终止的工作方式而无法实现”这样的重言式陈述在任何方面都比“无”有所改进。它没有解释任何东西,当然也不再“正确”。 (b)当然“无”不是“重置”,所以如果你通过wireshark观察到RST我错了,如果你没有观察到我不是。我可以忍受它。是哪一个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    相关资源
    最近更新 更多