1

我面临一个奇怪的问题。我们有两个通过 RFC 进行通信的系统,但是这种通信每次都会因以下问题而中断:

客户端收到一个 SLE=2734286 和 SLR=2777173 的 TCP ACK 客户端然后开始重新传输“丢失”的包 然后收到一个 TCP DUP ACK 和 SACK:2777089-2777173 2734286-2777173

这很奇怪,不是吗?SACK 参数重叠。然后客户端再次发送丢失的包,但总是收到 TCP DUP ACK。5 次尝试后,客户放弃了。

它的 Windows 2003 到 Linux 2.6.32。

你们中有人知道这样的问题吗?网络连接本身工作正常(例如,通过 SSH 复制数据时,SACK 协议似乎工作正常)。

4

1 回答 1

1

根据 RFC (http://tools.ietf.org/html/rfc2018),这些 SACK 没有任何问题。数据接收器应该修剪第二个 SACK,但这不是硬性要求(来自第 4 节):

SACK 选项应该通过重复最近报告的 SACK 块来填充(基于先前 SACK 选项中的第一个 SACK 块),这些 SACK 块不是已包含在正在构建的 SACK 选项中的 SACK 块的子集

我怀疑数据接收器的实现(这是您示例中的服务器)仅包括在段到达时生成一个 SACK 条目并将其推送到列表中,而不是每次都尝试折叠列表。

于 2012-11-07T20:14:32.967 回答