Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.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
Linux 超过一定大小(~1450)的TCP消息将获得;";_Linux_Sockets_Tcp - Fatal编程技术网

Linux 超过一定大小(~1450)的TCP消息将获得;";

Linux 超过一定大小(~1450)的TCP消息将获得;";,linux,sockets,tcp,Linux,Sockets,Tcp,我试图通过我的硬件发送不同长度的数据包,当数据包达到特定大小时,我遇到了一个问题,约1450字节。当数据包大小小于~1450字节时,一切正常 我一直在用我的NIC驱动程序调试这个问题,并在发送数据之前输出我得到的信息。我可以看到TCP握手,以及发送

我试图通过我的硬件发送不同长度的数据包,当数据包达到特定大小时,我遇到了一个问题,约1450字节。当数据包大小小于~1450字节时,一切正常

我一直在用我的NIC驱动程序调试这个问题,并在发送数据之前输出我得到的信息。我可以看到TCP握手,以及发送<~1450字节时的数据包

一旦我尝试发送超过1450字节的数据包,我就再也看不到TCP握手,也看不到NIC驱动程序中的数据包。因此,我确信数据包在Linux中的某个地方丢失了。。。这看起来是Linux中的数据包碎片错误,但我不确定

是否有人在尝试发送某个阈值的数据包时遇到数据包丢失,在我的情况下,在Linux中约1450字节?

我不确定从哪里开始寻找,以找出我的包被挂在哪里或为什么

我使用的是Linux 3.10.39,无法更改。我还将NIC驱动程序中的MTU大小增加到一个更大的值,但这似乎没有影响,约1450字节的数据包继续被卡住


我正在使用一个基本的Perl tcp服务器/客户端来测试通信。

超过网络MTU的tcp数据包应该会丢失。分段会严重降低TCP性能,因此允许足够大的数据包进行分段会适得其反

端点会这样做,减少数据报大小以获得良好的性能。这是事情按预期运行,不是问题。端点将尝试更小的数据包,以发现在没有碎片的情况下可以发送的最大数据包大小,并使用它


请参阅Tomasz Noinski的回答,其中讨论了配置错误的防火墙可能会干扰路径MTU发现的可能性。ICMP是Internet主机的一项要求,不加区别地阻止它将破坏TCP。

这可能是您的机箱或介于两者之间的某个路由器错误地丢弃参与路径MTU发现()的ICMP数据包的症状。是不是有什么东西阻碍了这些,例如,基于这样一种假设,即ICMP与ping有关,因此并不重要?

我正在通过媒体网络进行通信,很可能是我正在通过的cisco交换机造成了问题。我将查看该侧注释,我可以确定ping可能会导致控制消息丢失。网关在丢弃数据报时不必发送数据包。我将查看MTU的发现以便澄清,如果我通过网络发送一个大小为2000字节的数据包,而MTU为1500字节,那么它应该一起丢弃数据包,对吗?我想我的印象是,数据包将被分割成块,以允许它通过网络,这样2000字节的消息将被分割成1500字节和500字节的消息,然后重新组装?@RAZ_Muh_Taz TCP实现特别要求通过设置“Don't Fragment”使其数据报不被分割IP头中的位。无论如何,TCP都会进行自己的分段,而分段会放大数据包丢失。(如果10%的数据包丢失,而你将一个数据包分成两个数据包,那么数据包丢失率为19%,每个丢失的数据包丢失两个充满数据的数据包。哎哟。)我不熟悉网络,因此我很欣赏你的见解,这非常有帮助。没有TCP消息这样的东西。这是一个字节流协议。你的期望没有任何依据。