问题背景

电池类Wi-Fi低功耗摄像头,APP点击远程预览唤醒设备,正常情况下设备最多2秒就可以收到唤醒包,异常情况下,要长达6秒或以上才能收到唤醒包。

唤醒采用TCP长链接,路由器beacon周期100ms,设备设置的预期休眠时间为2秒,也就是每2秒起来接收一次beacon。

问题分析

贴一篇ChatGPT描述的Wi-Fi低功耗设备数据交互流程。

问:如果设备处于省电模式时,路由器有数据到来,那么设备是怎么接收到这个数据的,中间的交互过程是怎么样的

当设备(STA)处于省电模式时,路由器(AP)有数据到来时,设备接收数据的过程涉及以下几个步骤和交互过程:

  1. 设备进入省电模式

    • STA通知AP它进入省电模式。这通常通过发送一个设置了Power Management字段的NULL DATA帧来完成。
    • AP在内部记录STA的省电状态,并将其数据缓存在队列中。
  2. AP缓冲数据

    • 当AP接收到发往处于省电模式的STA的数据帧时,它会将这些数据帧缓存在其内部的缓冲队列中。
  3. Beacon帧中的TIM信息

    • AP定期广播Beacon帧,Beacon帧中包含TIM(Traffic Indication Map)信息。
    • TIM字段是一个位图,每一位对应一个特定的STA。对于有未处理数据的STA,其对应的位会被置为1。
  4. STA周期性唤醒并检查TIM

    • STA周期性地从省电模式中唤醒,以监听Beacon帧。
    • STA检查Beacon帧中的TIM字段,判断是否有数据等待接收。如果TIM中指示有数据,STA将保持唤醒状态,否则重新进入省电模式。
  5. 发送PS-Poll帧

    • 如果STA发现TIM中有数据等待,它将发送一个PS-Poll(Power Save Poll)帧给AP,表示自己准备接收数据。
    • PS-Poll帧的作用是通知AP,STA已从省电模式唤醒,并准备接收缓存在AP中的数据。
  6. AP发送数据帧

    • AP收到PS-Poll帧后,开始发送缓存在队列中的数据帧给STA。
    • AP可以立即发送数据帧,或者发送一个带有More Data字段的数据帧,表明还有更多数据需要发送。
  7. STA接收数据

    • STA接收数据帧,并进行相应的确认(ACK)。
    • 如果有更多数据,AP会继续发送,直到所有数据发送完毕。
  8. STA重新进入省电模式

    • 当所有数据接收完毕后,STA可以再次发送NULL DATA帧,通知AP它将重新进入省电模式。
    • AP更新STA的状态,准备下一次的交互。

以下是一个简化的交互流程图:

  1. STA进入省电模式,通知AP。
  2. AP缓冲数据。
  3. AP定期广播Beacon帧,包含TIM信息。
  4. STA周期性唤醒并检查Beacon帧中的TIM。
  5. STA发现有数据等待,发送PS-Poll帧。
  6. AP接收PS-Poll帧并发送数据帧。
  7. STA接收数据帧并发送ACK。
  8. 所有数据接收完毕,STA重新进入省电模式。

通过这个流程,设备在省电模式下能够有效地接收AP发送的数据,同时保持低功耗状态。

问:beacon中的traffic indication map有什么作用

在802.11无线局域网(WLAN)中,Beacon帧是一种管理帧,定期由接入点(AP)广播,用于通知网络中的客户端有关网络参数和服务的信息。其中的Traffic Indication Map (TIM) 是Beacon帧的一个重要部分,主要作用如下:

  1. 省电管理:TIM用于通知处于省电模式的客户端(Station,简称STA)是否有未处理的数据帧在AP缓冲区中等待。STA可以通过解析TIM来决定是否需要从省电模式唤醒以接收数据。

  2. 指示帧队列:TIM包含一个位图,每一位对应一个特定的STA。当某一位被设置为1时,表示AP有该STA的未处理数据帧在缓冲区中。如果某一位被设置为0,表示没有未处理的数据帧。

  3. 定时唤醒:STA可以根据TIM中的信息确定自己是否需要唤醒并检查是否有数据需要接收。这有助于减少STA的功耗,因为它们不需要一直保持活跃状态,可以根据需要有选择地唤醒。

  4. 交替监听:对于那些处于省电模式的STA,TIM提供了一种机制,使得这些STA可以周期性地唤醒并监听Beacon帧,以了解是否有数据在AP处等待,并决定是否需要进一步的操作。

TIM字段的结构大致如下:

  • Bitmap Control字段:指示TIM信息的开始和结束位置,以及TIM中的部分字段。
  • Partial Virtual Bitmap字段:一个位图,每一位对应一个STA的AID(Association ID),指示该STA是否有未处理的数据帧。

通过TIM,802.11网络可以有效管理省电模式下STA的唤醒和数据接收,提高网络的效率和STA的电池寿命。

抓包分析

使用Omnipeek进行抓包,路由器下只连一个待测试的设备,将路由器加密方式设为无加密,方便查看数据包内容,设置过滤选项为只抓该路由器的包。

唤醒正常抓包


分析抓包内容:

唤醒异常抓包


分析抓包内容:

问题原因

从抓包可知,问题原因主要是设备未及时接收beacon包,从而未发现AP已经缓存了数据,也就没及时退出低功耗模式进行数据接收。由于设备是低功耗状态,每2秒才起来接收一次beacon,如果设备定时器不准,或者起来之后接收的时间太短,那就有可能错过这轮beacon,导致两边没同步上。当然也有可能是路由器发beacon的间隔不准,但从抓包来看,beacon间隔基本是准的,都是100ms左右,偏差不超过5ms

解决办法

调整设备的休眠参数,将休眠间隔从2秒改到1秒,或者将退出休眠模式开始接收beacon的时间拉长一些,尽量保证每轮起来后都能接收到beacon,参考 路由器参数对WiFi休眠功耗的影响
























  • 无标签