netgear的路由器就是一坨,连最基本的按标准周期发beacon都做不到。
当beacon间隔设置为100ms时,通过ellisys抓取的路由器发beacon的普遍周期在103ms左右。下图是通过ellisys抓到的netgear路由器发出的beacon周期,可以看到周期已经达到112ms,而且这并不是固定的,时长时短。
图1 ellisys抓到的netgear路由器发出的beacon周期
那么这会有什么影响呢?
这将导致你家里绝大部分连接到netgear路由器的设备功耗都高出一截。你的所有连接了wifi的电子设备,包括笔记本,手机,智能手表,智能音箱,以及各种智能家居设备,只要是带电池而且连wifi的,续航都莫名其妙比别人短了一截。
要理解上面这个结果,我们需要从802.11的节电模式,即Power saving模式说起。
· 下文中ap(access point)指代netgear路由器,sta(station)指代通过wifi连接路由器的设备。
在PS工作模式下,sta大部分时间都处于休眠状态,经过一段时间才醒来一次,接收beacon以及ap为其缓存的信息。若读者有兴趣,可以参考802.11权威指南中对此的描述。
802.11权威指南对ps mode的图例
像netgear这种乱发beacon的行为,最直观的结果就是,这将导致处于休眠模式的sta难以接收路由器发出的beacon。参考图一,假设下方逻辑1表示sta唤醒待接收beacon,ap发出的beacon完全没有落在开窗期间。
后果就是sta必须延长唤醒时间来接收netgear乱七八糟的beacon,如果设备厂家没有针对这种情况的策略,将导致高频且持续的唤醒,功耗成倍增长。
祸不单行,假如sta为了低功耗使用了较长的listen interval,例如每600ms唤醒一次来接收数据,那么最糟的情况下丢一次beacon就将直接导致延迟达到1.2s,突破秒级别。你以为是设备卡了,反应慢了,其实都是路由器太拉惹的祸。