总之,就是失败了。
我曾建议不要针对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} P2T时间到达0=0!(2G)0e−2G
因此:
S = G ∗ P 2 T 时 间 到 达 0 = G e − 2 G S=G*P_{2T时间到达0}=Ge^{-2G} S=G∗P2T时间到达0=Ge−2G
这就是ALOHAnet的通过量与到达量的关系。
如果将时间轴分割成时隙,便对数据帧的发送时间增加了约束。每个站点只能在固定某些时隙发送,冲突概率大大降低,这就是时隙ALOHAnet:
S = G ∗ P T 时 间 到 达 0 = G e − G S=G*P_{T时间到达0}=Ge^{-G} S=G∗PT时间到达0=Ge−G
可见,时隙ALOHAnet可以容忍更大的到达率,可达更高吞吐。
时隙ALOHAnet的延时对到达率更不敏感,这多亏了时隙的约束。但无论哪种ALOHAnet,延时均随着到达率的增加而越发迅速地增加,继承了ALOHAnet的Wi-Fi CSMA/CA机制固然依旧如此,随着设备接入数的增加,冲突越来越激烈,RTT抖动便越来越大,可达5ms~100ms量级。这里便是延时抖动的根源!
可推论,如果时隙管理更加严格,延时对到达率会更不敏感,如果每个时隙只允许一个帧到达,延时将是一个固定值。
在什么情况下每个时隙只能发送一个数据帧呢?答案就是对资源进行统一管理。
如今,Wi-Fi和LTE正好在ALOHAnet的两端:
对于LTE,RRC并非免费午餐,精细化控制开销很大,RRC算是耗电大户,但正是有了这些能量,LTE和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为什么不行就说到这里,下面才是正式的话题,终究还是要做些什么的,以及怎么做。
做传输优化,你肯定想知道“一般的做法”,各行各业的各种活计都有一般的,通用的做法,这种做法一搜就出来,比如你搜“干煎带鱼”,但如果你照着做,结局却总不佳。
没有人做错,事实上,真正的绝活儿没人会公开,根本没有一般的,通用的做法,有的只是常识。对于传输优化,常识是:
具体说:
没有人做错。
传输优化字面含义就是让数据尽快到达,最直接的想法就是使劲往外怼,就像早晚高峰期匆忙的司机,对道路拥堵视而不见,涌向最拥堵的地方,每人潜意识里都在等其他人退让,但大家没人退让。
如果数据包最终发往Wi-Fi网络,任何激进发包的措施在统计意义上都是大错特错:
如果目标是将数据发到AP,似乎可以成功,但最终回复ACK的是无线终端,从AP到终端,这里并非安静中斗表的名利场,这里很像拉斯维加斯,起作用的是概率。那么到底应该怎么做,如果不激进发送,如何确保数据包更快被接收。
交换机可能会因为你激进发送为你出让更多buffer,但CSMA/CA只会因为你激进发送带来更多的冲突,激进发送在Wi-Fi网络起不到任何正面作用,你只能正常发送,然后听天由命。
但还是有一些小把戏可以尝试,这些把戏都在我的百宝箱里,我早就承诺不会写任何激进发送的代码,所以我不会多发一个满包:
浙江温州皮鞋湿,下雨进水不会胖