关于 Udp 无线发送文件,广播和单播怎么差别这么大

2017-06-29 16:24:26 +08:00
 Duluku

公司有个这样的需求,想将一个文件尽快的分发给各个手机,所以我自然有想到通过 Udp 来一对多广播分发文件。但是广播的测试结果好像不太令人满意,下面是我的测试结果:


测试的环境:

2.4GHz 的 TP-Link TL-WVR1200, 发送端和接收端都是 Windows,Udp 发送的代码是 Java 写的。

这里我将一个 40M 的文件拆分 4000 左右个 10K 的包,然后依次发送过去。

发送端通过网线接入路由器, 接收端通过无线网卡接入。


测试 1. 更改发送包的时间间隔

修改发送端的每次发送一个 10K 包之间的时间间隔:

间隔 3ms 之后,单播基本就不丢包了,但是广播会很好的收取大概 100 多个包之后就卡住不动了,之后偶尔收到几个,然后就再也没有了。这里是不是路由器在广播这方面有限制?


测试 2. 更改发送端接入方式

这里都采取发送端发送间隔 5ms 进行。

这里我只是将开始的发送端的有线接入改成无线接入,但是发送的单播丢包率猛增。 广播我就不奢望什么了。


请问各位大佬,路由器 UDP 广播有什么可以设置的吗?还是要刷什么固件之类的? 甚至需要定制吗?

ps. 不清楚具体节点应该放哪里.. 如果放错了,希望管理帮我移到合适的节点把 :)

10974 次点击
所在节点    路由器
55 条回复
Duluku
2017-06-29 16:27:09 +08:00
不过 Udp 单播的效果的确比我平常想象的好啊很多,我把发送包的大小从 10KB 提高到 50KB,包的时间间隔为 5ms,基本上都发过去了,丢包率低于 1%, 但是广播简直没法看。
rrfeng
2017-06-29 16:27:28 +08:00
无线信道很拥挤的,从这方面入手查一下。
Duluku
2017-06-29 16:30:28 +08:00
@rrfeng 是的,我查过信道,2.4GHz 的信道的确拥挤,不过这里我关注的重点是单播和广播的差距非常大,单播基本上可以说是不丢包,这个差别令我比较在意。(也是因为手里没有 5G 的无线设备,拿到设备马上测试更新这个帖子)
hjc4869
2017-06-29 16:34:54 +08:00
一般先用广播发现设备,然后再用单播去发文件或者大量数据。
广播一般也就那么一两个包
rrfeng
2017-06-29 16:37:23 +08:00
自始至终只有一个接收端吗?
Duluku
2017-06-29 16:41:10 +08:00
@hjc4869 不能使用广播做文件分发吗? 虽然会丢包,但是只要丢包率低于 30%,发送端多广播几次应该基本能做到很好的分发效率吧?
不过的确这个想法感觉比较胡来,网上也没查到相关的方法...
Duluku
2017-06-29 16:42:41 +08:00
@rrfeng 暂时测试只测了一个接收端… 因为广播的丢包率太高了,所以就没测多个接收端了…
hjc4869
2017-06-29 16:44:21 +08:00
另外你的包太大了,目测 UDP 被分片了,加剧了丢包
Duluku
2017-06-29 16:49:32 +08:00
@hjc4869 好的,我现在去试试将包变小点,不过大概多少合适呢,5KB ? 太小了我觉得广播的带宽就太差了,现在每个包间隔 5ms 时,广播的数据每秒不到 2MB,我觉得已经很小了,再降低单个包的大小,可能还不如 TCP 一个一个发过去呢。。
hjc4869
2017-06-29 16:53:39 +08:00
@Duluku UDP 传输大量数据时整个 IP 包的大小不要超过 MTU,通常也就是 1472 ( MTU 1500 字节减去 20 字节 IP 头部和 8 字节的 UDP 头部)
hjc4869
2017-06-29 16:55:22 +08:00
传输大量数据需要做流量控制和拥塞控制,不是每个包间隔 5ms 这么 simple 的,建议还是用 UDP 发现设备,TCP 连接+传输数据。
Duluku
2017-06-29 17:03:55 +08:00
@hjc4869 刚刚试了试,结果是这样 ![]( )
Duluku
2017-06-29 17:04:54 +08:00
@hjc4869 不过总是让我在意的是这个 UDP 单播的效果,UDP 单播在 5ms 的发送间隔能过做到不丢包,但是广播就丢这么多,我怎么都觉得有点不理解。。
lan894734188
2017-06-29 17:09:32 +08:00
还是 tcp 吧
Duluku
2017-06-29 17:15:25 +08:00
@rrfeng 把接收端换了 5GHz 的无线网卡,效果没有变化…
hjc4869
2017-06-29 17:22:03 +08:00
@Duluku 计算一下广播产生的带宽,如果不是硬件性能问题,那么可能是被 QoS 了。为了防止广播风暴。
Duluku
2017-06-29 17:44:32 +08:00
@hjc4869 这个我觉得很有可能,在广播的时候,接收端最开始接收包我看起来挺好的,不过接收到 100 个左右的时候,突然就卡住不再接受得到数据了。 我在路由器的 web 设置界面找找,不过感觉很有可能没有...
xfspace
2017-06-29 18:12:14 +08:00
无线是半双工...用了 CSMA/CA,你还要用广播发文件...
无线接入点的价格和终端数量及环境干扰都会影响到无线网络传输
dndx
2017-06-29 18:26:30 +08:00
楼上的都没说到点子上。

最主要的问题是大多数无限适配器,广播的时候速率都会强制限制在 1Mbps,因为只有这个是所有连接的客户端都必须要支持的速率,当然丢包率会很高了。无线网络的广播因为这个基本就是个笑话。

参考:

https://networkengineering.stackexchange.com/questions/1782/why-does-my-udp-broadcast-wireless-communication-is-capped-at-1mbs/
Duluku
2017-06-29 18:52:44 +08:00
@dndx 原来如此。学到了... 多谢大佬

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/371950

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX