V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
quadpixels
V2EX  ›  问与答

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

  •  
  •   quadpixels · 2015-10-06 04:20:13 +08:00 · 6403 次点击
    这是一个创建于 3097 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大家好,前几天我写了一个程序,需要在两台电脑之间用 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-06 04:30:01 +08:00   ❤️ 1
    WiFi endpoint 在和 AP 协商的时候,如果检测到有人传输,就会 backoff 静默一段时间。在蓝牙占用信道的时候也会如此。

    所以我觉得应该要用更多硬件分割网络吧,不过具体的网络部署就毫无经验了
    Showfom
        2
    Showfom  
       2015-10-06 05:06:19 +08:00 via iPhone
    就不会用个专门的 Wi-Fi 通道吗
    quadpixels
        3
    quadpixels  
    OP
       2015-10-06 05:26:20 +08:00
    @Showfom 设置专门的 Wi-Fi 通道是要改房间里的路由器的设定吗?如果是那样我改不了…
    quadpixels
        4
    quadpixels  
    OP
       2015-10-06 05:28:07 +08:00
    @fantasticfears 那有没有什么方法能“知道他们在 backoff ”呢?比如用 Wireshark 抓包或是某些性能测试工具?
    Showfom
        5
    Showfom  
       2015-10-06 05:31:25 +08:00 via iPhone   ❤️ 1
    @quadpixels 专门放个路由器
    CupTools
        7
    CupTools  
       2015-10-06 06:23:56 +08:00
    为什么是 CSMA/CA 而不是 CSMA/CD 脑补: https://en.wikipedia.org/wiki/Hidden_node_problem
    jasontse
        9
    jasontse  
       2015-10-06 07:11:04 +08:00 via Android   ❤️ 1
    你确定不是因为 AP 扛不住了吗
    c742435
        10
    c742435  
       2015-10-06 07:37:50 +08:00 via iPad   ❤️ 1
    ap 扛不住这么多人的。最简单的解决办法如楼上说的,单独搞个只有你用的 ap
    ryd994
        11
    ryd994  
       2015-10-06 08:11:23 +08:00   ❤️ 1
    要是连 ping 都 ping 不同,除非单独 AP ,否则根本就无解。
    Themyth
        12
    Themyth  
       2015-10-06 08:15:12 +08:00   ❤️ 1
    明显是你的无线路由器抗不住那么多人连接
    更换一台路由器就可以解决问题了。
    datocp
        13
    datocp  
       2015-10-06 08:52:30 +08:00 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-06 09:03:52 +08:00 via Android   ❤️ 1
    加个无线路由器自己用,而且信道要切到没有干扰的另一个信道。
    其实这种情况最好用有线,更可靠。
    flynaj
        15
    flynaj  
       2015-10-06 09:18:26 +08:00   ❤️ 1
    首先你的路由器性能要能支持 100 多个人,不然是空谈, http://routerboard.com/CRS125-24G-1S-2HnD-IN
    rssf
        16
    rssf  
       2015-10-06 09:43:46 +08:00 via iPhone   ❤️ 1
    一般的企业级 ap 都带不动这么多人。多么你就多带几个瘦 ap ,用 ac 控制
    deben
        17
    deben  
       2015-10-06 10:05:59 +08:00   ❤️ 1
    每个 UDP 包发十次(二十次),并且每包里面带一个 *时间戳* , server 接收的时候,判断 *时间戳* 是否相同,相同的不计。
    squid157
        18
    squid157  
       2015-10-06 10:55:38 +08:00 via iPhone   ❤️ 1
    这 AP 竟然还没彻底爆炸,也是神迹。 100 人,人均两个设备联网,差不多吧。
    ljbha007
        19
    ljbha007  
       2015-10-06 11:03:54 +08:00
    学到了 原来一般 AP 带不动 100 个客户端
    Halry
        20
    Halry  
       2015-10-06 11:03:55 +08:00
    100 人,这个 AP 怎么顶得顺...我见过最极端的也是 50 人...
    powergx
        21
    powergx  
       2015-10-06 11:58:56 +08:00 via iPhone   ❤️ 1
    要使用密集覆盖设备, 蜂窝状 1 , 6 , 11 布置。一定要用 ac 控制 覆盖范围以及负载平衡
    irainsoft
        22
    irainsoft  
       2015-10-06 17:34:10 +08:00
    WiFi 杀手....
    fantasticfears
        23
    fantasticfears  
       2015-10-06 18:28:57 +08:00
    @quadpixels 那是 MAC 层的...

    楼上们说的加 AP 是蛮正的解法,至于怎么部署...有点难,多试试好了
    quadpixels
        24
    quadpixels  
    OP
       2015-10-07 00:02:57 +08:00
    @CupTools 看到一篇文章中的几张试验结果图,即使是用了 CSMA/CA 在人多的时候竟然也有某些客户传输率降至 0 的区间 …
    @flynaj @Themyth 改天我看看能不能找到 AP 的型号
    @rssf @powergx 原来还有接入点控制器这个东西,看起来是能在未来某个时刻解救俺于水火之中的,赞一个
    @deben 这个方法真是够暴力哈 … 不过不知如果一段时间内的所有包全都丢掉,送 1 个还是送 10 个是否都是一样 …
    @squid157 AP 彻底爆炸是啥样?
    quadpixels
        25
    quadpixels  
    OP
       2015-10-07 00:05:20 +08:00
    @jasontse 我有怀疑是 AP 扛不住,但是无线延迟应该是渐渐变恶劣的吧,所以即使可以回避完全扛不住的情况,也还是需要准备应对“开始有点扛不住了”和“快要扛不住了”这样的情况的吧
    squid157
        26
    squid157  
       2015-10-07 00:09:16 +08:00
    @quadpixels 所有人都觉得卡的要死,例如我们学校上非常无聊的课的时候,教室里的 WLAN ,几个人能连上也是卡,剩下的都别想连上。那个还是中国移动的 WLAN ,优化过的,架不住几个教室里坐满的无聊的人。
    xuhaoyangx
        27
    xuhaoyangx  
       2015-10-07 03:03:46 +08:00 via iPhone   ❤️ 1
    @ljbha007 一般 ap 也就 70 人,在上顶不顺,几 k 一个的那种 ap 另说
    powergx
        28
    powergx  
       2015-10-07 03:13:16 +08:00 via iPhone
    无线通道 信道是共享的, 2.4g 20mhz 11n 一个信道最多跑 200mbits ,实际速率大概 12mbyte/s 假设 20 人分,每人才 600k
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5303 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 243ms · UTC 09:09 · PVG 17:09 · LAX 02:09 · JFK 05:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.