2015-04-22 279 views
1

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

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

我的缓冲区足够大,我看到损失是在计算机中发送和接收(微发送尽可能多的数据包)。我试图每秒发送/接收大约60个数据包,但是我可以调整,甚至每秒丢失10个数据包。例如,我每秒发送20个数据包,微型接收和发送15个数据,而我的计算机每秒接收10个数据包。

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

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

谢谢。

回答

1

这里有一些事情要考虑:

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

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

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

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

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

希望这些考虑至少可以让你开始朝着答案的方向发展。

+0

感谢您的回答。刚刚编辑添加额外信息的问题。 – chourizo

+0

@chourizo我遇到了多播/ udp广播数据包的问题,​​我也遇到了+ 60%的损失,我将回报任何可能有用的有关此问题的帮助/信息。与此同时,我将发送重复数据包,即发送每个数据包2次,首先是“丢失” – KGCybeX

+0

我希望我错了,但恐怕增加数据包的数量只会使事情变得更糟。我的部分问题是由于有两个网络接口的优先级不正确。请确保不是这种情况(禁用其中一个)。另外,为了减少开销,尝试使用更少数据的数据包。通过这样做我解决了我的问题。 – chourizo