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