我有 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% 空闲,并且链接是点对点的。