本人第一次写博客,写博客的初衷为了更好的巩固所学知识和锻炼一下自己各方面能力、以及记录工作和学习中遇到的问题和解决方案,同时与各位志同道合的朋友一起学习和进步, 个人能力有限,如有不妥之处,望大家海涵和指正。
通过wifi唤醒终端设备是指在终端设备通过wifi连接到路由器(AP)从而加入局域网或者Internet,在同一个网络中,通过其它终端设备(如PC)给唤醒终端设备发送唤醒数据包,从而实现远程唤醒终端。
在终端设备进入休眠的时候,唤醒终端设备常用的方法有按键、定时(RTC)、BT、电源、WIFI、以太网等唤醒方式,基本原理是给休眠的终端主控一个唤醒信号,使终端设备从休眠状态退出,从而达到节省终端功耗。
本文主要介绍WIFI唤醒功能的原理以及ARP数据包对唤醒功能的影响。
wifi唤醒主机CPU的原理是在终端设备整机进入休眠后,WIFI模块监听到符合唤醒数据包时,wifi模块恢复部分工作,给CPU一个唤醒信号。唤醒信号由HOS_WKAE GPIO给出(博通、RTL wifi模块支持唤醒功能都具备该功能引脚)。从而实现WIFI 唤醒CPU或者终端设备。
你会在想WIFI模块下在什么时候会给出唤醒信号,这个是可以配置的,如配置TCP、ICMP数据包唤醒或者Deauth、漫游等事件唤醒等。
WIFI模块在进入休眠前设置beacon帧监听间隔T1,即T1个Beacon时间间隔,AP beacon 中才包含dtim元素.
其中T1的值在市场中设备中大部分不超过5,有部分设备为1. T1的大小决定了终端设备休眠时间和监听Beacon时间。T1的值越大功耗越低、反之值越小功耗越大。(更多的原理可以一起交流学习)
通过TCP请求包唤醒主机,概率性的出现TCP连接失败、甚至偶尔出现TCP请求包唤醒不了终端的现象,以及唤醒比较慢的现象。
上述问题除了环境以及网络的原因存在如下二个方面:
1.TCP客户端建立TCP连接超时时间较短,导致TCP连接失败,介于各种环境和网络情况,TCP客户端需做容错处理,如增加重试次数。
2.偶尔唤醒不了是因为客户端没有接收到WIFI模ARP应答数据,导致客户端没有发送TCP数据包请求,不能够唤醒终端,同时唤醒较慢的原因也是wifi模块应答ARP请求数据包慢的导致。
下图为ARP应答较慢导致无法唤醒终端以及唤醒慢或者到致TCP连接超时的主要原因
下图为T1=3,beacon间隔为100ms时,wifi模块监听状态图
如上图所示当在0-300、300-600、600-900时间内WIFI模块是处于休眠状态的,无法接收和处理任何数据,假如此时ARP请求数据包的到来,WIFI模块无法感知,从而无法应答ARP数据包的原因或者应答较慢的原因。
ARP数据包为广播数据包,802.11关于低功耗的协议中,并未涉及到关于广播数据包在终端进入休眠时,路由器(AP)为终端缓存广播数据,也就是说广播数据包不会出现在beacon帧中TIM中,如果广播数据到来时,终端处于休眠状态,该数据包将会丢失。
知道ARP的原理的朋友都知道,在网络通信过程中,ARP是不可缺失的部分,然而在Windows系统中,一般默认ARP有效时间为2min,如果2min之内有数据交换,最大超时时间为10min(也就是说Windows ARP表将在2-10min钟内会失效,会重新发起ARP请求包进行确认).
也就是说ARP表失效后,PC机在下次进行数据通信或者超时时间到了的时候就会发送ARP请求数据包进行确认和更新。
从上述描述中可以通过修改T1时间间隔,增加WIFI模块监听时间,减少广播数据的丢失,从而改善休眠唤醒功能的性能以及唤醒时间等。
从PC机端修改ARP有效时间,减少ARP请求,从而减少因ARP请求的原因导致不能唤醒终端或者TCP连接超时或者唤醒慢的现象
1.设置Windows ARP有效时间。设置一个合适的时间减少或避免该问题的出现。修改Windows 注册表信息
HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Parameters
下增加如下键值(Windows 默认情况下没有)
键值1:ArpCacheLife,类型为Dword,单位为秒,默认值为120
键值2:ArpCacheMinReferencedLife,类型为Dword,单位为秒,默认值为600
注意:这些键值默认是不存在的,如果你想修改,必须自行创建;修改后重启计算机后生效
修改WIFI模块休眠参数T1,将T1设置为0或者1,WIFI模块监听图
因时间的原因,只能简单阐述了问题原因和给出解决方案, 很多的原理都为进行说明,以后有时间在进行说明和研究,也其盼大家一起交流学习
总结
因时间的原因,只能简单阐述了问题原因和给出解决方案, 很多的原理都为进行说明,以后有时间在进行说明和研究,也其盼大家一起交流学习