【问题标题】:Can an application affect TCP retransmits应用程序会影响 TCP 重传吗
【发布时间】:2009-09-29 06:21:11
【问题描述】:

我正在解决一些通信问题,并且在网络跟踪中我偶尔会遇到 TCP 序列错误。我的一个例子是:

  1. 服务器到客户端:Seq=3174,Len=50
  2. 客户端到服务器:Ack=3224
  3. 服务器到客户端:Seq=3224,Len=50
  4. 客户端到服务器:Ack=3224
  5. 服务器到客户端:Seq=3274,Len=10
  6. 客户端到服务器:Ack=3224,SLE=3274,SRE=3284

数据包 4 和 5 几乎同时记录在跟踪中(来自客户端和服务器之间的路由器),因此它们很可能在传输过程中交叉。

TCP 会话与客户端失去同步,丢失了来自服务器的最后两次传输。这两个数据包应该已经被重新传输但他们没有,跟踪中的下一个日志是数据包 6 后 24 秒来自客户端的 RST 数据包。

我的问题与无法从数据包 3 和 5 重新传输服务器数据的原因有关?我会假设重传将在操作系统级别,但无论如何应用程序会影响它并停止发送它吗?线程阻塞或进入睡眠状态或类似的东西?

【问题讨论】:

    标签: networking tcp


    【解决方案1】:

    从服务器到客户端仅丢失了一个数据包 - 数据包 3。数据包 6 包含数据包 5 的选择性确认 (SACK),因此可以通过。

    在回答您的具体问题时,不,应用程序级问题不应阻止 TCP 重新传输。

    【讨论】:

    • 我不认为应用程序参与其中,但这意味着我在网络上发生了一些奇怪的事情,更难以解决:(。我认为数据包 5 中的数据不会'在收到数据包 3 的数据之前不会将其传递给应用程序?
    • sipwiz:正确。您接下来可能需要做的是在两端获取数据包日志,而不是在中间获取。
    猜你喜欢
    • 1970-01-01
    • 2019-06-19
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    相关资源
    最近更新 更多