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