Soap “的好处”;Don';“t片段”;关于TCP数据包?
我们的一位客户在将数据从应用程序(在其PC上)提交到服务器(不同的地理位置)时遇到问题。当在1100字节以下发送数据包时,一切正常,但在这上面,我们看到TCP每隔几秒钟重新传输一次数据包,但没有得到响应。我们用于测试的数据包约为1400字节(但小于1472字节)。我可以向www.google.com发送一个1472字节的ICMP ping,然后得到一个响应(所以这不是他们的路由器/最初的几跳) 我发现我们的应用程序为这些数据包设置了DF标志,并且我相信在通往服务器的途中,路由器的MTU小于/等于1100,并且丢弃了数据包 这会影响5000个客户中的1个,但由于每个人的路线都会不同,这是意料之中的 数据是一个SOAP信封,我们希望返回SOAP响应。我无法解释我们为什么要这么做,因为这样做的代码是由以前的开发人员编写的 所以为应用程序数据在TCP数据包上设置DF标志有什么好处或理由吗? 我能想到网络诊断应用程序需要它的原因,但在我们的情况下不需要(我们希望数据到达端点,不管是不是碎片化的)。我们的一位系统管理员说,这可能与我们使用SSL有关,但据我所知,SSL就像一个流,不管碎片如何,只要流最终重建,就没有问题 如果没有充分的理由,我将改变我们的应用程序的行为Soap “的好处”;Don';“t片段”;关于TCP数据包?,soap,ssl,tcp,packet,fragmentation,Soap,Ssl,Tcp,Packet,Fragmentation,我们的一位客户在将数据从应用程序(在其PC上)提交到服务器(不同的地理位置)时遇到问题。当在1100字节以下发送数据包时,一切正常,但在这上面,我们看到TCP每隔几秒钟重新传输一次数据包,但没有得到响应。我们用于测试的数据包约为1400字节(但小于1472字节)。我可以向www.google.com发送一个1472字节的ICMP ping,然后得到一个响应(所以这不是他们的路由器/最初的几跳) 我发现我们的应用程序为这些数据包设置了DF标志,并且我相信在通往服务器的途中,路由器的MTU小于/等于
提前谢谢 显然,一些协议(如NFS)可以从避免碎片()中获益。然而,您是对的,除非您确实需要DF,否则您通常不应该请求DF DF标志通常在承载TCP段的IP数据包上设置 这是因为TCP连接可以动态更改其段大小以匹配路径MTU,并且当TCP段在一个IP数据包中分别承载时,可以实现更好的总体性能 因此,TCP数据包设置了DF标志,如果中间路由器因为数据包太大而不得不丢弃数据包,则会导致返回ICMP碎片所需的数据包。然后,发送TCP将减少对连接路径MTU(最大传输单元)的估计,并在较小的段中重新发送。如果没有设置DF,发送TCP将永远不会知道它发送的段太大。此过程称为PMTU-D(“路径MTU发现”)
如果ICMP碎片所需的数据包无法通过,那么您正在处理一个断开的网络。理想情况下,第一步是识别配置错误的设备并进行纠正;但是,如果这不起作用,则向应用程序添加一个配置旋钮,告诉它使用
setsockopt()
设置TCP\u MAXSEG
socket选项。(配置错误的设备的典型示例是路由器或防火墙,该路由器或防火墙由没有经验的网络管理员配置为丢弃所有ICMP,但没有意识到TCP PMTU-D需要碎片所需的数据包)。路径MTU发现的操作在RFC 1191中描述。
对于TCP来说,发现路径MTU比将超过一定大小的每个数据包分成两部分(通常是一大一小)要好.您正在进行的导致设置DF位的实际套接字API调用是什么?这里有一些关于DF在哪里有用的讨论:-简而言之,这似乎是一种情况,如果您不知道您需要它,那么您就不需要它。