我在计算机(C#)和微控制器(C ++)之间发送/接收非常短的UDP数据包。与速度无关,我丢失了大约50%的UDP数据包,有时更多,有时更少。
在c#中,我使用UDPClient发送到IPEndPoint(同步)并异步接收。
我的缓冲区足够大,我看到计算机在发送和接收时都会产生损失(微发送的数据包数量与收到的数量相同)。我试图每秒发送/接收大约60个数据包,但我可以调整,甚至每秒10个数据包我有损失。例如,我每秒发送20个数据包,微接收并发送15个,我的计算机每秒接收10个数据包。
我们正在谈论1千兆位,非常短(可能10英尺)的本地有线以太网连接。我正在发送单播数据包,虽然在网络中我也有一个多播视频(12 Mbps)。最大的数据包大约是120个字节,其中大部分大约是30-40个字节
有关如何调试问题或导致问题的建议?
感谢。
答案 0 :(得分:1)
以下是需要考虑的事项:
这是有线连接还是无线连接?在无线情况下,50%的UDP丢包当然会更常见,但只是在一个不良链路上。
假设它是无线连接,两台设备的信号强度是否相当高?您可以使用各种实用程序进行检查,例如{nix上的iwconfig
。
连接的实际比特率是多少?您提到您正在以不同的速率进行传输,但我认为这是指您发送数据包的频率,而不是链接的实际比特率。比特率越快,预期的数据包丢失就越高。我相信这是天线物理学的直接结果,如果以较低的比特率传输,数据可以以更高的功率传输。
这些数据包是单播还是广播?广播包将导致更高的丢包率。这是因为广播案例中网络堆栈的较低层缺乏重试机制。
虽然您说您的数据包很小,但影响UDP数据包丢失的另一个因素是数据包的大小。这一点非常直观:数据包越大,接收的可能性就越小。
希望这些考虑因素至少可以帮助您开始回答。