繁体   English   中英

UDP丢帧

[英]dropped frames over UDP

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

我正在尝试进行网络编程,尤其是我想使用UDP通过无线网络将数据从一台计算机广播到其他10多个设备。 数据以约300字节的数据包的形式传入,并且以每秒约30帧的速度发送,即每33ms传送一次。 我的实现基于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。

解决与网络相关的任何问题的第一种也是最简单的方法是将它们捕获到Wireshark中。 还要检查是否真的从广播机发送了数据包。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM