我们的一位客户在将数据从我们的应用程序(在他们的 PC 上)提交到服务器(不同的地理位置)时遇到问题。当发送小于 1100 字节的数据包时,一切正常,但在此之上,我们看到 TCP 每隔几秒就重新传输一次数据包并且没有得到响应。我们用于测试的数据包大约 1400 字节(但小于 1472)。我可以向 www.google.com 发送一个 1472 字节的 ICMP ping 并得到响应(所以这不是他们的路由器/前几跳)。
我发现我们的应用程序为这些数据包设置了 DF 标志,并且我相信通往服务器的路由器的 MTU 小于/等于 1100 并丢弃了数据包。
这会影响 5000 中的 1 个客户端,但由于每个人的路线都会有所不同,因此这是意料之中的。
数据是一个 SOAP 信封,我们期望得到一个 SOAP 响应。我无法证明我们为什么要这样做,这样做的代码是由以前的开发人员编写的。
所以...在应用程序数据的 TCP 数据包上设置 DF 标志有什么好处或理由吗?
我可以想到网络诊断应用程序需要它的原因,但在我们的情况下不需要(我们希望数据到达端点,无论是否碎片化)。我们的一位系统管理员说,这可能与我们使用 SSL 有关系,但据我所知,SSL 就像一个流,无论碎片如何,只要流在最后重建,就没有问题。
如果没有充分的理由,我将改变我们应用程序的行为。
提前致谢。