Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Soap “的好处”;Don';“t片段”;关于TCP数据包?_Soap_Ssl_Tcp_Packet_Fragmentation - Fatal编程技术网

Soap “的好处”;Don';“t片段”;关于TCP数据包?

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小于/等于

我们的一位客户在将数据从应用程序(在其PC上)提交到服务器(不同的地理位置)时遇到问题。当在1100字节以下发送数据包时,一切正常,但在这上面,我们看到TCP每隔几秒钟重新传输一次数据包,但没有得到响应。我们用于测试的数据包约为1400字节(但小于1472字节)。我可以向www.google.com发送一个1472字节的ICMP ping,然后得到一个响应(所以这不是他们的路由器/最初的几跳)

我发现我们的应用程序为这些数据包设置了DF标志,并且我相信在通往服务器的途中,路由器的MTU小于/等于1100,并且丢弃了数据包

这会影响5000个客户中的1个,但由于每个人的路线都会不同,这是意料之中的

数据是一个SOAP信封,我们希望返回SOAP响应。我无法解释我们为什么要这么做,因为这样做的代码是由以前的开发人员编写的

所以为应用程序数据在TCP数据包上设置DF标志有什么好处或理由吗?

我能想到网络诊断应用程序需要它的原因,但在我们的情况下不需要(我们希望数据到达端点,不管是不是碎片化的)。我们的一位系统管理员说,这可能与我们使用SSL有关,但据我所知,SSL就像一个流,不管碎片如何,只要流最终重建,就没有问题

如果没有充分的理由,我将改变我们的应用程序的行为


提前谢谢

显然,一些协议(如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在哪里有用的讨论:-简而言之,这似乎是一种情况,如果您不知道您需要它,那么您就不需要它。