请问在恶劣的(大概一个房间中有百来人) WiFi 无线局域网中用 UDP,掉包率和延时能变得多坏,以及怎样应对? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
quadpixels
V2EX    问与答

请问在恶劣的(大概一个房间中有百来人) WiFi 无线局域网中用 UDP,掉包率和延时能变得多坏,以及怎样应对?

  •  
  •   quadpixels 2015 年 10 月 6 日 7131 次点击
    这是一个创建于 3765 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好,前几天我写了一个程序,需要在两台电脑之间用 UDP 传数据。这两个电脑中有一台充当 server ,有一台充当 client , client 的工作是一直往 server 发数据(尺寸不是很大),同时每隔半秒钟还发一个“心跳包”。我在 server 上做了一个设置,就是如果 2 秒内没有收到任何心跳包,就认为 client 不在线了,然后就退出。

    这样的设置,我在家里的 WiFi 测试没有问题,但是在真正使用时就出了问题。
    这个真正使用的环境是在一个大概面积 100 平米的房间里举行的一场晚会, client 与 server 就连接到这个房间里的同一个 WiFi 上。晚会开始之前有排练,在排练的时候,房间里有大概有十来个人,那时这个程序还能正常工作,但有时好像会偶尔丢一两个包。但是等后来房间里的人多到快 100 个的时候, WiFi 的性能好像就明显下降,我甚至没法在 client 机器上 ping 到 server 机器;而这个程序在一次侥幸连接上并运行之后正常工作了大概十秒钟,就因为在接下来的 2 秒钟内没有收到心跳包而不能正常工作了。

    因为当时我不知道有 iperf 之类的工具,所以我也不知道丢包率之类的信息。因为没有事故现场的记录,所以我现在也不是很清楚当时为什么会出现 2 秒内的 4 个心跳包全没收到的情况。后来为了查明原因并让程序更稳定一点,我就用了 tc 手工增加延时(到 10 秒)和丢包率(到 25%),在此种环境下将程序的 2 秒超时改成了 20 秒,并且改正了一些同步时的处理流程(简单说就是如果有很多包一起送来,只取最新的,然后计算 delta )。但是我还是不知道是否用 tc 模拟一下延时和丢包率是否真的能重现当时的恶劣的 WiFi 下的情况(因为网上还有人说延时能多至 40 秒的),以及这样的应对措施是不是够了。

    后来有一次回到了同一个房间,那时房间里只有 3 个人,这个程序又完美工作了。所以我想肯定是只有在那个房间里人多的时候才有问题。

    这个问题弄砸了晚会上的一个表演,程序当众出问题,好尴尬,要哭死了 :(((((
    28 条回复    2015-10-07 03:13:16 +08:00
    fantasticfears
        1
    fantasticfears  
       2015 年 10 月 6 日   1
    WiFi endpoint 在和 AP 协商的时候,如果检测到有人传输,就会 backoff 静默一段时间。在蓝牙占用信道的时候也会如此。

    所以我觉得应该要用更多硬件分割网络吧,不过具体的网络部署就毫无经验了
    Showfom
        2
    Showfom  
    PRO
       2015 年 10 月 6 日 via iPhone
    就不会用个专门的 Wi-Fi 通道吗
    quadpixels
        3
    quadpixels  
    OP
       2015 年 10 月 6 日
    @Showfom 设置专门的 Wi-Fi 通道是要改房间里的路由器的设定吗?如果是那样我改不了…
    quadpixels
        4
    quadpixels  
    OP
       2015 年 10 月 6 日
    @fantasticfears 那有没有什么方法能“知道他们在 backoff ”呢?比如用 Wireshark 抓包或是某些性能测试工具?
    Showfom
        5
    Showfom  
    PRO
       2015 年 10 月 6 日 via iPhone   1
    @quadpixels 专门放个路由器
    CupTools
        7
    CupTools  
       2015 年 10 月 6 日
    为什么是 CSMA/CA 而不是 CSMA/CD 脑补: https://en.wikipedia.org/wiki/Hidden_node_problem
    jasontse
        9
    jasontse  
       2015 年 10 月 6 日 via Android   1
    你确定不是因为 AP 扛不住了吗
    c742435
        10
    c742435  
       2015 年 10 月 6 日 via iPad   1
    ap 扛不住这么多人的。最简单的解决办法如楼上说的,单独搞个只有你用的 ap
    ryd994
        11
    ryd994  
       2015 年 10 月 6 日   1
    要是连 ping 都 ping 不同,除非单独 AP ,否则根本就无解。
    Themyth
        12
    Themyth  
       2015 年 10 月 6 日   1
    明显是你的无线路由器抗不住那么多人连接
    更换一台路由器就可以解决问题了。
    datocp
        13
    datocp  
       2015 年 10 月 6 日 via Android   1
    64 bytes from 192.168.10.27: seq=1180 ttl=64 time=11839.121 ms
    64 bytes from 192.168.10.27: seq=1181 ttl=64 time=11330.665 ms
    64 bytes from 192.168.10.27: seq=1182 ttl=64 time=10471.025 ms

    这是用 ubnt uap 时见到的最恐怖的延迟。通常为了解决大量弱信号托垮 ap 性能可以根据客户端的 SNR 值主动踢除弱信号。往往一个进入黑屏界面的手机 SNR 值就-80dbm 以上,当大量设备接入,人员到处移动被各种障碍物阻挡时,情况将变得非常复杂 wifi 将变得不可用。
    gamexg
        14
    gamexg  
       2015 年 10 月 6 日 via Android   1
    加个无线路由器自己用,而且信道要切到没有干扰的另一个信道。
    其实这种情况最好用有线,更可靠。
    flynaj
        15
    flynaj  
       2015 年 10 月 6 日   1
    首先你的路由器性能要能支持 100 多个人,不然是空谈, http://routerboard.com/CRS125-24G-1S-2HnD-IN
    rssf
        16
    rssf  
       2015 年 10 月 6 日 via iPhone   1
    一般的企业级 ap 都带不动这么多人。多么你就多带几个瘦 ap ,用 ac 控制
    deben
        17
    deben  
       2015 年 10 月 6 日   1
    每个 UDP 包发十次(二十次),并且每包里面带一个 *时间戳* , server 接收的时候,判断 *时间戳* 是否相同,相同的不计。
    squid157
        18
    squid157  
       2015 年 10 月 6 日 via iPhone   1
    这 AP 竟然还没彻底爆炸,也是神迹。 100 人,人均两个设备联网,差不多吧。
    ljbha007
        19
    ljbha007  
       2015 年 10 月 6 日
    学到了 原来一般 AP 带不动 100 个客户端
    Halry
        20
    Halry  
       2015 年 10 月 6 日
    100 人,这个 AP 怎么顶得顺...我见过最极端的也是 50 人...
    powergx
        21
    powergx  
       2015 年 10 月 6 日 via iPhone   1
    要使用密集覆盖设备, 蜂窝状 1 , 6 , 11 布置。一定要用 ac 控制 覆盖范围以及负载平衡
    irainsoft
        22
    irainsoft  
       2015 年 10 月 6 日
    WiFi 杀手....
    fantasticfears
        23
    fantasticfears  
       2015 年 10 月 6 日
    @quadpixels 那是 MAC 层的...

    楼上们说的加 AP 是蛮正的解法,至于怎么部署...有点难,多试试好了
    quadpixels
        24
    quadpixels  
    OP
       2015 年 10 月 7 日
    @CupTools 看到一篇文章中的几张试验结果图,即使是用了 CSMA/CA 在人多的时候竟然也有某些客户传输率降至 0 的区间 …
    @flynaj @Themyth 改天我看看能不能找到 AP 的型号
    @rssf @powergx 原来还有接入点控制器这个东西,看起来是能在未来某个时刻解救俺于水火之中的,赞一个
    @deben 这个方法真是够暴力哈 … 不过不知如果一段时间内的所有包全都丢掉,送 1 个还是送 10 个是否都是一样 …
    @squid157 AP 彻底爆炸是啥样?
    quadpixels
        25
    quadpixels  
    OP
       2015 年 10 月 7 日
    @jasontse 我有怀疑是 AP 扛不住,但是无线延迟应该是渐渐变恶劣的吧,所以即使可以回避完全扛不住的情况,也还是需要准备应对“开始有点扛不住了”和“快要扛不住了”这样的情况的吧
    squid157
        26
    squid157  
       2015 年 10 月 7 日
    @quadpixels 所有人都觉得卡的要死,例如我们学校上非常无聊的课的时候,教室里的 WLAN ,几个人能连上也是卡,剩下的都别想连上。那个还是中国移动的 WLAN ,优化过的,架不住几个教室里坐满的无聊的人。
    xuhaoyangx
        27
    xuhaoyangx  
       2015 年 10 月 7 日 via iPhone   1
    @ljbha007 一般 ap 也就 70 人,在上顶不顺,几 k 一个的那种 ap 另说
    powergx
        28
    powergx  
       2015 年 10 月 7 日 via iPhone
    无线通道 信道是共享的, 2.4g 20mhz 11n 一个信道最多跑 200mbits ,实际速率大概 12mbyte/s 假设 20 人分,每人才 600k
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     807 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 21:48 PVG 05:48 LAX 13:48 JFK 16:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86