linux - 超过一定大小 (~1450) 的 TCP 消息获取 "stuck"

标签 linux sockets tcp

我正在尝试通过我的硬件发送各种长度的数据包,当数据包达到特定大小(约 1450 字节)时,我遇到了问题。当数据包大小小于 ~1450 字节时,一切正常。

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

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

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

我不确定从哪里开始查找我的包裹被滞留的位置或原因......

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

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

最佳答案

这可能是您的盒子或中间的某些路由器错误地丢弃参与路径 MTU 发现 ( https://en.wikipedia.org/wiki/Path_MTU_Discovery ) 的 ICMP 数据包的症状。是否有什么东西正在限制这些,例如基于这样的假设:ICMP 只与 ping 相关,因此并不重要?

关于linux - 超过一定大小 (~1450) 的 TCP 消息获取 "stuck",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55819280/

相关文章:

docker - 服务器不在Docker之外监听

C# 套接字 : synchronous calls within asynchronous ones

java - 如何向 x 次 TCP 客户端请求 TCP 服务器数据?

Android Emulator 在硬件加速下不启动,linux/ubuntu

c - 地址空间布局随机化是否应用于 fork 进程

linux grep/sed 某些行 - 空间删除

c++ - C/C++ 套接字 : IPv6 TCP connection fails if I do anything before it

c++ - 为什么我的 C++ 对象丢失了它的 VPTr

基于fork()的c服务器练习

linux - 抓包长度大于MTU