【问题标题】:dropped frames over UDP通过 UDP 丢帧
【发布时间】:2014-10-28 00:11:31
【问题描述】:

这是我的第一个“问题”,我希望我做对了:)

我正在尝试网络编程,特别是我想通过无线网络使用 UDP 将数据从一台机器广播到其他超过 10 个设备。数据以大约 300 字节的数据包形式出现,大约每秒 30 帧,即每 ~ 33 毫秒一个。 我的实现是基于qt的例子:http://qt-project.org/doc/qt-4.8/network-broadcastreceiver.html

我只用一个客户端测试应用程序并遇到很多丢帧,不知道为什么。如果我使用以太网电缆,一切正常。我希望这里有人能帮我找到原因。

我可以发现丢帧,因为数据包包含时间戳:在我收到一个数据报后,我可以检查它的时间戳与最后一个收到的时间戳之间的差异,如果这大于例如50ms,这意味着我在途中丢失了一个数据包。 这种情况经常发生,即使我有一个专用的 Wi-Fi 网络(没有连接到互联网,只有 3 台机器连接到我刚买的路由器)。大多数时候我会丢掉一两个数据包,这不是问题,但有时时间戳之间的差异表明丢失了超过 30 个数据包,这对我想要实现的目标不利。

当我从一台机器 ping 到另一台机器时,我得到以下值:

50 packets transmitted, 50 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.244/91.405/508.959/119.074 ms 

对于一个只有 3 个客户端的专用网络中的新路由器来说非常糟糕,不是吗?该路由器被宣传为速度非常快的 Wi-Fi 路由器,其性能是 802.11n 路由器的三倍。

将它与我在办公时间坐在同一个房间内连接了大约 10 台机器的旧路由器获得的值进行比较:

39 packets transmitted, 39 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.458/47.297/142.201/37.186 ms 

可能是路由器坏了?

我无法解释的一件事是,如果我在运行 UDP 客户端/服务器应用程序时 ping,统计数据会有所改善:

55 packets transmitted, 55 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 1.164/6.174/197.962/26.181 ms 

我想知道是否有人有关于测试什么的提示,关于如何通过 wi-fi 在这些机器之间实现“可靠”UDP 连接的提示。可靠是指我可以丢弃 2 个连续的数据包,但不会更多。

谢谢。

编辑

似乎路由器 (?) 以突发方式发送数据包。我正在测量它在客户端上接收两个数据报之间经过的时间,对于大约 10 个数据包的序列,这个值大约是 3 毫秒,然后对于下一个数据包大约是 300 毫秒。我认为我在客户端的问题更多地与帧之间的间隔不一致有关,而不是丢帧。我可能只需要一个队列和服务器延迟 > 300 毫秒。

【问题讨论】:

  • 虽然 UDP 往往具有比 TCP 更高的吞吐量,但 UDP 是一种不可靠的协议,它可以并且将会丢弃数据包,并且您将接收到乱序的数据包或已接收到的数据包的重复。在设计应用程序协议时,您需要考虑这一点,并准备好处理这些情况。
  • 谢谢约阿希姆。我确实知道 UDP 是不可靠的,并且我确实希望在这里和那里丢弃一个数据包。不幸的是,我连续丢弃了 30 个数据包,这太多了,无法处理。我曾考虑在每个数据报中写入多个帧,但我不能这样做超过几个帧(数据包会比 MTU 大得多,我认为这会产生问题)。
  • 我的新路由器的 ping 时间有任何 cmets 吗?我正在考虑尝试将它带回商店并尝试另一个。
  • 这与Qt无关,与本站无关。

标签: c++ qt networking udp router


【解决方案1】:

解决与网络相关的任何问题的第一个也是最简单的方法是在wireshark上捕获它们。 并检查数据包是否真的从广播机发出。

此外,根据您的描述,如果数据包通过以太网电缆而不是 UDP 传输正常,那么 也可能是 UDP 端口的问题。

【讨论】:

  • 感谢您提供有关尝试数据包分析器的提示。我为 UDP 使用端口 33235,我认为应该没问题。
猜你喜欢
  • 2020-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
  • 2011-12-11
  • 2013-08-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多