【发布时间】:2013-11-07 18:23:23
【问题描述】:
我有 2 台 Linux 机器之间的 UDP 连接。大约 40-50 毫秒后,A 方发送一个编号请求并等待 B 方的回复。 在回复到达之前,什么都不能发送,除了超时时间为 2s。 B准备回复并发送大约需要10-15ms。 连接是点对点的。
问题是,在 300-400 次交换中,A 方没有收到 B 的任何回复。
出于测试和调查目的,我将所有东西都连接到集线器并在连接的 PC 上运行 wireshark。 我看到的是,当A方看不到回复时,wireshark也看不到。 然而,B 方认为数据包已发送,因为位于 sendto(...) 之后的日志打印总是打印“丢失”的数据包编号。
问题是:数据包在从应用程序 (sendto(...)) 到线路的过程中丢失的原因可能是什么。 考虑到绝对没有负载 - B 端 CPU 有 95% 空闲,并且链接是点对点的。
【问题讨论】:
-
您的问题是什么?数据包是否会在以太网中丢失?是的,它可以。该怎么办?使用超时、重传和类似的方法(提示:阅读 TCP 的工作原理)。
-
同意以上海报。此外,如果您不从“两台 Linux 机器之间的 UDP 连接”开始,您可能会对您的问题更感兴趣...... UDP 是无连接的。
标签: linux network-programming udp