关于 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. 不清楚具体节点应该放哪里.. 如果放错了,希望管理帮我移到合适的节点把 :)

10980 次点击
所在节点    路由器
55 条回复
chinawrj
2017-06-29 19:02:18 +08:00
组播使用的是广播,11n 最大可以到 72m。详细可以联系我
Duluku
2017-06-29 19:15:58 +08:00
@chinawrj … 这跟楼上哥们说的不一样啊。你是怎么做到的
dndx
2017-06-30 03:39:22 +08:00
@Duluku 他说的是组播,multicast. 跟你说的广播 broadcast 不是一个东西。
chinawrj
2017-06-30 08:41:25 +08:00
@dndx
@Duluku
802.11 只有 unicast 和 broadcast。UDP 广播以及组播在实际传输上,根据设置的不同,可以被操作系统自动转换成 unicast 和 broadcast。转成 unicast 的好处很明显:
1. 可以使用 multi stream。即多个空间流传输,能够达到无线的标称速率比如:433Mbps/866Mbps
2. 可靠性比 broadcast 高,因为每一个包对会有物理层的 ACK。
3. 可以使用 802.11n 之后的高级特性,比如 A-MPDU,A-MSDU 等。
缺点也很明显,有多个 client 的时候,每个都要这样传输一遍,很占空域时间。实际上 OpenWrt 等路由器的默认广播 /组播就是用 unicast 发送的,要想修改可以参考如下: https://wiki.openwrt.org/doc/howto/udp_multicast。
使用 multcast 发送的好处如下:
1. 路由器端对于任何一个组播或者广播包只需要发送一次
坏处:
1. 没有 ACK,容易丢包
2. 不能使用 802.11n 的高级特性。比如 A-MPDU、A-MSDU。
3. 为了保证所有的 client 都能接收到,采用了信噪比比较高的 MCS,这个时候速率可能只有 1Mbps。

我之前在芯片厂商做个 Wi-Fi 芯片固件和驱动,也支持过客户做过视频 /文件的可靠 /不可靠分发。当时的情况是一个路由器至少带 60 个人。有什么问题,可以咨询一下我。PS:打很多字太累。。。
Duluku
2017-06-30 09:16:02 +08:00
@chinawrj 老哥,你这波太厉害了,多谢🙏… 我得研究研究才能回复你… v2 真是个好地方
Duluku
2017-06-30 18:08:15 +08:00
@chinawrj 您好,我今天经过一些测试和思考,有了些想法,但是还是碰到一些问题,诚惶诚恐还是想继续问您..

1. 我使用这个 TP-Link TL-WVR1200 的路由器。多播的代码使用的是 [java.net.MulticastSocket Example]( https://examples.javacodegeeks.com/core-java/net/multicastsocket-net/java-net-multicastsocket-example/) ,在两个电脑都通过有线接入路由器的时候,多播成功,接收端能够接收到数据。但是我测试将发送端切换为无线,或者将接收端换为无线,多播就失败了,这是路由器的原因吗? 在 TP-Link 的路由器 Web 设置页面并没有看到关于多播的有关设置,是需要使用 OpenWRT 的路由器吗?

2. Udp 广播破除 1Mbps 的限制的概率大吗?也许公司可以去定制路由器,但是最终想法是给手机分发,手机定制的概率就很低了,这种 1Mbps 的限制有没有可能提升呢?

3.有没有可能 Udp 单播给某个设备,其他设备监听这个网络从而获取数据呢? (这个脑洞可能有点大,实施起来可能比较难,但是理论上似乎可行),你怎么看?

再次表示感谢!
chinawrj
2017-06-30 18:34:01 +08:00
1. TP-LINK 路由器可能没有这种配置,你需要一个 OpenWrt 路由器。另外真的要调试 Wi-Fi 网络的话,弄个 macbook,装上 wireshark 和 airtools 就可以抓包了(抓 802.11 包,不是以太网包)。组播地址和 MAC 地址有一种映射关系,你也可以在 wireshark 中过滤。
2. 我记得最大可以到 72Mbps,有的路由器是可以设置的。但并不是所有的都可以。如果要给出一个可以设置的路由的话,我记得刷 tomato 路由的 broadcomm 方案是可以的。另外当时我们公司自己的 88W8864 是可以设置的。你的无线端发送失败有可能是路由器那边限制了,具体那种限制不清楚。你可以用 mtk/broadcomm/qualcomm/marvell 的方案都试试。
3. 理论上可行。实际上需要你的手机支持 wifi   monitor 模式,然后其他手机抓到握手包(发给单播接收数据的手机的包,并且不能使用多个空间流等高级特性),然后再根据握手包和路由器无线密码算出 PTK 来解密。不过 monitor 模式依赖于系统和 wifi 驱动 /固件,如果你的手机系统不是自己编译出来,并且 wifi 模块支持 monitor 的话,还是不要尝试了。不能控制用户手机端的情况下,这种方案肯定是不可行的。

不知道你做的具体项目,但是如果你要做文件分发的话。我可以提供一个 case 供你参考:曾经我们的客户就是用最高速率的 multcast 来发送 720P 的视频流和文件。应用场景是电子教室。总共50-60部手机,可以获得约每个手机 500KBytes 的速率(也许还能提高,但是当时的场景大概就是需要这么高的速率)。



如果不定制路由,我觉得你可以发送数据的时候不要一起发送,错开发送就好。这样可以有效利用空中带宽。毕竟上了 802.11ac 的路由器,单播最低实测也可以到 200Mbps。一起发送,无线干扰会很严重,会有很多空域的无线退避,导致贷款利用效率下降。

在发送协议上,可以使用 UDP,然后自己控制发送时采用的速率以及纠错功能。毕竟 TCP 的参数不太好调,而且好多系统不给权限调。
chinawrj
2017-06-30 18:36:20 +08:00
@Duluku
忘记 @了,不太清楚你的具体应用场景。有问题可以再问。也许能帮上。你的组播测试失败的话,建议换个普通路由器试试吧。有的路由还开启了无线隔离,甚至连无线客户端相互访问都不可以 。
Duluku
2017-06-30 19:18:21 +08:00
@chinawrj 非常感谢!应用场景还真就是文件分发,大概接收端设备在 40 台左右手机,发送端希望也是移动端,安卓平板之类的,空间也不算太大,类似于一个教室把,但是这个方案能不能做出来我这边还在尝试。如果能能做视频流也是很好的,如果技术做出来了,上面估计也能弄出需求出来 (哭笑) 。。我试试看继续做再回复您把! 厉害厉害!
huangmiao233
2017-07-01 17:31:11 +08:00
用组播。。
goodryb
2017-07-06 13:28:43 +08:00
公司有个这样的需求,想将一个文件尽快的分发给各个手机

一定要用软件吗,一个 ftp 是不是就能解决这个问题
Duluku
2017-07-06 18:51:30 +08:00
@chinawrj 搞来一个 Linksys WRT1200AC, 刷上 OpenWRT,无线组播是能收到了(不刷 OpenWRT 也无法通过无线发送组播),不过现在的组播的效果比较差,丢包率依然很高,85%以上... 有点懵逼。。 现在这个路由我特意是找的 88W8864,不过怎么上调 Udp 广播的带宽到 72Mbps 呢? 最近尝试把广播发送的时间间隔改到 20ms 左右的时候,广播那边的丢包率倒也不高(很奇怪),大概速度在 500KB 左右。。感觉很多东西都很迷茫。。。
Duluku
2017-07-06 18:52:16 +08:00
@goodryb Ftp 还是基于 TCP 协议做的,这种分发和单播是一样的,我就是想探究看有没有别的方案嘛 :)
chinawrj
2017-07-06 22:01:04 +08:00
@Duluku 忘了怎么设置了。回头我找找。找个 Mac book 抓包 802.11 ,802.11 头部直接有速率的
Duluku
2017-07-07 15:42:42 +08:00
@chinawrj 我用抓到广播了 ![microsoft-network-monitor]( )

的确显示的是 1Mpbs,不过接下来就完全不知道怎么继续下去了... 继续尝试组播的丢包把,不知道为什么丢包那么惨...
Duluku
2017-07-17 14:10:56 +08:00
@chinawrj 你好,公司打算有偿的方式做出这个问题,能给一个联系方式吗,或者联系我 MjY3MTM2NTY1MkBxcS5jb20=
Duluku
2017-08-02 14:45:51 +08:00
@chinawrj 您好,能方便私下联系嘛,公司对这块的确比较重视...
chinawrj
2017-08-04 17:32:01 +08:00
@Duluku 你好,我的 wechat 是 cWF6cGxtMDI1Mw==
heiher
2017-11-16 08:49:50 +08:00
@chinawrj 你好,求推荐组播性能好的无线路由或 AP 设备,谢谢!
chinawrj
2017-11-16 09:45:35 +08:00
@heiher 额,你想做啥用啊。只要提供能调到 54Mbps 的接口的 AP 都可以啊。

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

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

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

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

© 2021 V2EX