通过UDP丢弃帧

时间:2014-09-03 13:09:05

标签: c++ qt networking udp router

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

我正在尝试网络编程,特别是我想通过无线网络使用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毫秒。我认为我在客户端的问题更多地与帧之间的间隔不一致,而不是丢帧。我可能只需要一个队列和服务器的延迟> 300ms wrt。

1 个答案:

答案 0 :(得分:1)

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

而且,根据您的描述,如果使用以太网电缆传输数据包,而不是使用UDP 它也可能是UDP端口的问题。