【问题标题】:50% udp packets lost50% udp 数据包丢失
【发布时间】:2024-04-23 05:55:01
【问题描述】:

我在计算机 (C#) 和微控制器 (C++) 之间发送/接收非常短的 UDP 数据包。与速度无关,我丢失了大约 50% 的 UDP 数据包,有时更多,有时更少。

在 c# 中,我使用 UDPClient 发送到 IPEndPoint(同步)并异步接收。

我的缓冲区足够大,我看到计算机发送和接收都会产生损失(微发送的数据包与接收的数据包一样多)。我试图每秒发送/接收大约 60 个数据包,但我可以调整它,甚至每秒 10 个数据包我都有损失。比如我每秒发送20个包,微接收发送15个,我的电脑每秒接收10个包。

我们谈论的是 1 Gb 的本地有线以太网连接,非常短(可能是 10 英尺)。我正在发送单播数据包,尽管在网络中我也有一个多播视频(12 Mbps)。最大数据包约 120 字节,大部分在 30-40 字节左右

关于如何调试问题或可能导致问题的任何建议?

谢谢。

【问题讨论】:

    标签: networking udp


    【解决方案1】:

    以下是一些需要考虑的事项:

    • 这是有线连接还是无线连接? 50% 的 UDP 数据包丢失当然在无线情况下更常见,尽管只是在较差的链路上。

    • 假设它是无线连接,两个设备上的信号强度是否相当高?您可以使用各种实用程序检查这一点,例如 *nix 上的iwconfig

    • 连接的实际比特率是多少?您提到您正在以各种速率传输,但我认为这是指您发送数据包的频率,而不是链接的实际比特率。比特率越快,预期的丢包率越高。我相信这是天线物理学的直接结果,如果以较低的比特率传输数据,则可以以更高的功率传输数据。

    • 这些数据包是单播还是广播?广播包会导致更高的丢包率。这是由于在广播情况下,网络堆栈的较低层缺少重试机制。

    • 虽然您说您的数据包很小,但影响 UDP 数据包丢失的另一个因素是数据包的大小。这个比较直观:数据包越大,完整接收的可能性就越小。

    希望这些考虑至少能让你开始寻找答案。

    【讨论】:

    • 感谢您的回答。刚刚编辑了添加额外信息的问题。
    • @chourizo 我遇到了多播/udp 广播数据包的问题,​​我也遇到了 +60% 的损失,我将报告有关此问题的任何可能有用的帮助/信息。同时,我将发送重复的数据包,即每个数据包发送 2 次,以防第一个数据包以某种方式“丢失”
    • 我希望我错了,但我担心增加数据包的数量只会让事情变得更糟。我的部分问题是由于有两个优先级不正确的网络接口。请确保不是这种情况(禁用其中一个)。此外,尝试让更多的数据包具有更少的数据,以减少开销。通过这样做,我解决了我的问题。