Wi-Fi弱网传输优化不成功有感

总之,就是失败了。

我曾建议不要针对Wi-Fi弱网做传输优化,因为很难有大收益。本质原因:

  • Wi-Fi网络通过RTT变化识别拥塞不靠谱。
  • Wi-Fi网络通过丢包识别拥塞不靠谱。

RTT变化和丢包是端到端识别拥塞的唯二手段,两个都不靠谱,怎么办?什么都别做。当什么都不做的时候便闲了,不妨探究下Wi-Fi为什么拉胯。

同为无线网络,为什么LTE比Wi-Fi稳定太多呢?先从历史说起。

Wi-Fi直接继承于ALOHAnet,而LTE则是ALOHAnet的反面。

ALOHAnet是第一个随机访问的分布式无线网络,没有集中的资源管理:

  • 站点有数据帧就即时发送。
  • 检测到冲突便退避后重发。

ALOHAnet假设数据帧泊松到达,设成功发送所需的时间为 T T T,时间 T T T内帧到达量为 G G G,成功发送量为 S S S

为了让一个数据帧成功发送,需要 2 T 2T 2T时间没有一个数据帧到达,在 2 T 2T 2T时间内, λ = 2 G \lambda=2G λ=2G k = 0 k=0 k=0,带入泊松到达:

P 2 T 时 间 到 达 0 = ( 2 G ) 0 0 ! e − 2 G P_{2T时间到达0}=\dfrac{(2G)^0}{0!}e^{-2G} P2T0=0!(2G)0e2G

因此:

S = G ∗ P 2 T 时 间 到 达 0 = G e − 2 G S=G*P_{2T时间到达0}=Ge^{-2G} S=GP2T0=Ge2G

这就是ALOHAnet的通过量与到达量的关系。

如果将时间轴分割成时隙,便对数据帧的发送时间增加了约束。每个站点只能在固定某些时隙发送,冲突概率大大降低,这就是时隙ALOHAnet:

S = G ∗ P T 时 间 到 达 0 = G e − G S=G*P_{T时间到达0}=Ge^{-G} S=GPT0=GeG

对比一下上面两种ALOHAnet:
在这里插入图片描述

可见,时隙ALOHAnet可以容忍更大的到达率,可达更高吞吐。

来看下延时和到达率的关系:
在这里插入图片描述

时隙ALOHAnet的延时对到达率更不敏感,这多亏了时隙的约束。但无论哪种ALOHAnet,延时均随着到达率的增加而越发迅速地增加,继承了ALOHAnet的Wi-Fi CSMA/CA机制固然依旧如此,随着设备接入数的增加,冲突越来越激烈,RTT抖动便越来越大,可达5ms~100ms量级。这里便是延时抖动的根源!

可推论,如果时隙管理更加严格,延时对到达率会更不敏感,如果每个时隙只允许一个帧到达,延时将是一个固定值。

在什么情况下每个时隙只能发送一个数据帧呢?答案就是对资源进行统一管理。

如今,Wi-Fi和LTE正好在ALOHAnet的两端:

  • Wi-Fi信道资源通过CSMA/CA随机访问,继承了ALOHAnet,属于自组织分布式控制。
  • LTE的信道资源通过RRC统一管理,属于集中式控制。

对于LTE,RRC并非免费午餐,精细化控制开销很大,RRC算是耗电大户,但正是有了这些能量,LTE和Wi-FI才有所不同:

  • LTE在空闲时保持5mW极低功率,Wi-Fi则持续保持200mW。
  • LTE在传输时可达10倍于Wi-Fi的功率,达2000mW。
  • LTE精确分配和管理信道资源,Wi-Fi则争抢共享信道。
  • LTE第一跳延迟稳定在5ms,Wi-Fi则随设备数量及信道重叠情况剧烈变化。

Wi-Fi如今已经进化到了Wi-Fi6(即802.11ax),Wi-Fi7(即802.11be)已在路上,但所有的变化只是横向扩展,万变不离其宗的还是ALOHAnet的基底,争抢共享信道的本质没变,要看基因,而不是当前。

MU-MIMO,OFDMA等优化措施,并未让Wi-Fi脱胎换骨,有线以太网领域共享式以太网变身成交换式以太网的那种变革在Wi-Fi领域尚未发生,虽然它早晚会发生,但遗憾的是直到Wi-Fi7都没有让人看到。再花哨的优化也依然只是优化。

我推荐一篇文章,写得很好:802.11ax Is NOT A Wireless Switch

Wi-Fi的历史基因问题说到这里,下面看下频谱因素。

非授权频谱部署是Wi-Fi性能不稳定的第二个因素。

非授权频谱资源是开放的,天下共享,Wi-Fi的表现便由天不由你了。如果你的邻居和你使用了同一个频段,就会互相干扰。

相反,LTE则使用授权频谱(LAA试图在非授权频谱上部署LTE,当然,这需要更先进的技术),与非授权频谱不同,LTE频谱资源需要申请后使用,它是独占的。

举例,Wi-Fi是露天市场,而LTE则是需要预约的精品店。

Wi-Fi为什么不行就说到这里,下面才是正式的话题,终究还是要做些什么的,以及怎么做。

做传输优化,你肯定想知道“一般的做法”,各行各业的各种活计都有一般的,通用的做法,这种做法一搜就出来,比如你搜“干煎带鱼”,但如果你照着做,结局却总不佳。

没有人做错,事实上,真正的绝活儿没人会公开,根本没有一般的,通用的做法,有的只是常识。对于传输优化,常识是:

  • 激进发包。

具体说:

  • 丢包不降窗或少降窗,多发数据包。
  • 等待ACK或定时器超时的静默期,多发数据包。
  • 将拥塞控制算法计算的cwnd放大,多发数据包。
  • 冗余发送数据包,比如一个数据包发多遍。

没有人做错。

传输优化字面含义就是让数据尽快到达,最直接的想法就是使劲往外怼,就像早晚高峰期匆忙的司机,对道路拥堵视而不见,涌向最拥堵的地方,每人潜意识里都在等其他人退让,但大家没人退让。

如果数据包最终发往Wi-Fi网络,任何激进发包的措施在统计意义上都是大错特错:

  • 最后一跳并非名利场,得失总不相衡,拥塞控制的测量手段在Wi-Fi网络统统失效。

如果目标是将数据发到AP,似乎可以成功,但最终回复ACK的是无线终端,从AP到终端,这里并非安静中斗表的名利场,这里很像拉斯维加斯,起作用的是概率。那么到底应该怎么做,如果不激进发送,如何确保数据包更快被接收。

交换机可能会因为你激进发送为你出让更多buffer,但CSMA/CA只会因为你激进发送带来更多的冲突,激进发送在Wi-Fi网络起不到任何正面作用,你只能正常发送,然后听天由命。

但还是有一些小把戏可以尝试,这些把戏都在我的百宝箱里,我早就承诺不会写任何激进发送的代码,所以我不会多发一个满包:

  • 一个满包拆成两个小包,逆序发送,间隔跟随一字节小包护送。
  • 发送队列里最后两个包,逆序发送,跟随一字节小包护送。
  • 发送一个满包后,跟随第一个字节小包护送。
  • 多个包突发出去,在突发之间做pacing。
  • 宁等待,勿冲动。

浙江温州皮鞋湿,下雨进水不会胖

Guess you like

Origin blog.csdn.net/dog250/article/details/121683380