SENDTO 发送数据包,但嗅探器看不到它



我在 2 台 Linux 机器之间有 UDP 连接。大约 40-50 毫秒后,A 端发送一个编号请求并等待来自 B 端的回复。在回复到达之前,不能发送任何内容,不包括 2 秒的超时。B 准备回复并发送大约需要 10-15 毫秒。连接是点对点的。

问题是,在 300-400 次交换中,A 方没有收到 B 的任何回复。

出于测试和调查目的,我将所有内容连接到集线器并在连接的PC上运行wireshark。我看到的是,当A方看不到回复时,wireshark也看不到。然而,B 端认为数据包已发送,因为日志打印(正好驻留在 sendto(...) 之后,始终打印"丢失"的数据包编号。

问题是:数据包在从应用程序(sendto(...))到线路的途中丢失的原因可能是什么。考虑到绝对没有负载 - CPU 在 B 端有 95% 的空闲空间,链路是点对点的。

UDP不可靠。数据报很可能在到达 A 之前丢失了。

你能分享在B上运行的Wireshark的wireshark文件吗?可能您会在那里看到丢失的数据报。其他可能性:-您有一个缓冲区溢出并破坏了发送数据中的某些内容。-sendto 在发送丢失的数据报时收到错误。您是否正在检查小于 0 和 errno 的返回代码?

但是如果没有wireshark文件,就很难猜测。共享代码也很有帮助。

感谢鲁多克的提示。不知道为什么我没有早点这样做:)

wireshark打印输出将没有用,因为它根本不显示丢失的数据包 - 没有什么可调查的。

发送是干净的,也没有错误。但这给了我查看界面统计信息的提示:cat/proc/net/dev从现在开始,一切都非常简单 - "coll"计数器与丢失的回复包的数量完全相同。

显然是一些硬件问题。

非常感谢社区的帮助。

最新更新