我有两台Linux机器之间的UDP连接。一旦进入大约40-50ms,A侧发送编号请求并等待B方的回复。 在答复到达之前不能发送任何内容,不包括2秒的超时。 B准备回复并发送它需要大约10-15ms。 连接是点对点的。
问题是,在300-400次交换中,A方未收到B的任何回复。
出于测试和调查目的,我将所有内容连接到集线器并在连接的PC上运行wireshark。 我看到的是,当A面看不到回复时,wireshark也看不到它。 然而,B方认为数据包已被发送,因为日志打印完全位于sendto(......)之后,它始终打印“丢失”的数据包编号。
问题是:数据包从应用程序(sendto(...))到线路丢失的原因可能是什么。 考虑到绝对没有负载 - B侧的CPU空闲率为95%且链路是点对点的。
答案 0 :(得分:0)
UDP不可靠。数据报很可能在到达A之前丢失了。
你能分享在B上运行的Wireshark的wireshark文件吗?可能你会在那里看到丢失的数据报。其他可能性: - 你有一个缓冲区溢出并破坏发送数据中的内容。 -sendto在发送丢失的数据报时收到错误。您是否正在检查小于0且错误的返回码?
但没有wireshark文件,很难猜到。共享代码也很有帮助。
答案 1 :(得分:0)
感谢rodolk提示。不知道为什么我之前没有这样做......:)
wireshark打印输出没有用,因为它根本不显示丢失的数据包 - 无需调查。
sendto很干净,也没有错误。 但这给了我一些关于界面统计信息的提示: cat / proc / net / dev 从现在开始,一切都非常简单 - ' coll' counter与丢失的回复包的数量完全相同。
显然存在一些硬件问题。
非常感谢社区的帮助。