目录
Bitmap Control和Partial Virtual Bitmap字段示例
背景
无线设备,特别是移动设备如笔记本电脑、智能手机和平板电脑等,通常都是由电池供电的。在无线通信过程中,设备的无线接口是电源消耗的主要部分。通过节电模式,设备可以在不需要传输或接收数据时关闭其无线接口,从而显著延长电池寿命,提升用户体验。
因此IEEE802.11制定了一系列措施来降低电量消耗。
如何节电
正所谓“知己知彼百战不殆”,想要有效节电又不影响WiFi的正常使用,那就要研究WiFi都在什么情况下在消耗电量。
WiFi主要处在下面是四个状态:
-
Sleep :STA进入休眠状态,关闭接收和发送,能耗最低;
-
Rx idle:接收空闲状态,其实这个是CCA检测状态,并未进行数据的接收;
-
RX:接收状态,STA检测到要发送给自己的数据,对数据进行接收;
-
TX:发送状态,就是发送数据。
Sleep状态本身就已经在节电了,而RX和TX都是在做有用功,无线设备正在繁忙工作且有实际产出,只有Rx idle虽然在工作消耗电量但是却没有实际产出,因此这部分功耗是要节省出来。节电的主导思想就是尽可能降低Rx idle状态的时间而增加Sleep状态的时间。
当然有时候STA距离AP比较近,TX不需要那么大功率,此时可以动态降低TX功率从而降低电量消耗。另外像WiFi6开始引入的OFDMA机制也可以通过降低带宽来降低TX的功率,从而也达到节电的目的。这都是另外一个维度了,这里暂时先不讨论。
传统节电(Legacy Power Save)
进入节电状态
无线设备在不需要传输或接收数据时,可以进入节电模式,此时设备会通过发送一个带有Power Management位设置为1的帧(例如:Null帧或Data帧)来通知AP。这个Power Management位在802.11帧的控制字段(Frame Control Field)中。Power Management位如下图所示:
无线空口抓包如下所示:
需要注意的是,STA要更改电源管理模式,必须基于一次成功的帧交换,目的是让AP明确知道STA改变了电源管理模式。因此STA可以发送数据帧,也可以是管理帧。比如一个PS-Poll帧可能得不到ACK回复,所以不能够使用该帧来通知AP改变节能状态。
AP行为
当AP接收到这个帧后,AP就知道无线设备已经进入节电模式,那么此时就会会开始缓存所有发送给这个设备的数据。
STA进入节电模式之后就进入了休眠状态,而所有发向该STA的数据帧都缓存在了AP的内存中,那么STA是如何知道AP有数据要发给自己呢?
TIM
TIM是在AP的Beacon帧中包含的一个字段,用于告诉在节能模式下的STA是否有缓存的数据帧等待传输。如果TIM字段指示有数据帧,那么STA将会唤醒并与AP进行通信以接收这些数据帧。
TIM在Beacon中,那么STA也要打开接收机监听Beacon,何时会打开接收机监听Beacon呢?