启用节电模式的无线终端网络故障分析

标签:
无线终端节电模式休眠it |
分类: 应用实践 |
文/陈安
无线终端节电模式
在无线射频系统中,为维持最长的电池使用时间,802.11 终端可以关闭无线电波收发器,并进入休眠状态。进入休眠状态的终端不再进行任何数据的收发,若有数据发给此终端,则AP会将其数据进行暂存,待终端“苏醒”后,再将这些数据发给终端。这就是无线终端的节电模式。与节电模式对应的就是终端的活动模式,此时终端电波收发器正常工作,AP直接将数据发送给终端。通过在AP设备上查看终端状态时,可以判断终端是处于哪种模式,如下:
[AC]display wlan client
Total Number of Clients : 3
Total Number of Clients Connected : 3
Client Information
---------------------------------------------------------------------------
MAC Address BSSID AID State PS Mode QoS Mode
---------------------------------------------------------------------------
000b-6c2c-cbb7 0023-8917-9120 1 Running Active None
000b-6c2f-d767 0023-8936-6430 2 Running Sleep None
在PS Mode栏,Sleep即为休眠模式,Active即为活动模式。
1、休眠与苏醒
终端何时进入休眠模式是由其自行判断和完成的。由于802.11协议对此没有做具体规定,因此不同的终端判断机制不同。在此我们重点讨论终端进入休眠和苏醒的过程。
终端在进入休眠状态前会发送一个Pwr Mgmt位为1的报文,该报文告诉AP自己马上要进入休眠状态,需要AP做好配合工作。
http://www.h3c.com.cn/res/201104/14/20110414_1175259_image001_711492_30008_0.jpg图1 Frame Control中的休眠标志位
如图1所示,每一个802.11报文的帧头都有一个Frame Control字段,其中包含了一个Pwr Mgmt位。这就是终端是否处于节电模式的标志位,当该位为1时表示终端已经处于休眠模式,为0时表示终端处于活动模式。终端发送Pwr Mgmt为1的数据包后,就关闭发射器,进入休眠状态。当AP收到Pwr Mgmt为1的数据包后,会修改该终端的PS Mode为sleep,确认终端已经进入休眠状态,同时会缓存发送给终端的所有数据报文。
终端在休眠前会设定一个Listen Interval的聆听间隔,在过了聆听间隔后,终端必须醒来侦听一下是否有发给自己的数据。由于AP要缓存发给休眠终端的数据帧,因此缓存时长>=聆听间隔。如果在缓存时长之后,终端并没有苏醒来获取暂存的数据,AP就会直接将这些帧丢弃,而不再另行通知。聆听间隔是由终端驱动程序设定,不同终端的间隔长短不一。
2、获取暂存数据
若AP缓存了休眠终端的数据帧,则AP会通过数据待传指示信息(Traffic Indication Map,简称TIM)来告诉终端,该指示信息通过Beacon 帧加以传送。
http://www.h3c.com.cn/res/201104/14/20110414_1175260_image002_711492_30008_0.jpg图2 Beacon帧中的待传指示信息标志
从图2可以看出,若Bitmap Control字段的Traffic Ind为1,则表示AP上有暂存休眠终端的数据,为0则没有。
802.11协议规定无线终端必须定期苏醒监听Beacons 帧,通过检查Beacon帧的TIM字段,判定AP上是否有要发给自己数据帧。若确定AP上有要发给自己的数据帧,则终端通过发送PS-Poll来获取暂存数据,一个PS-Poll帧只用于获取一个暂存帧。整个过程如图3所示。
http://www.h3c.com.cn/res/201104/14/20110414_1175261_image003_711492_30008_0.png图3 通过PS-Poll帧获取暂存帧过程
3、AP的暂存空间
对于AP来说,暂存空间(buffer memory)是一项有限的资源,802.11标准要求AP必须使用某种老化功能(aging function),通过判断数据帧的暂存时长,超过某一时限的帧,将被丢弃。标准并没有对具体时限进行定义,但规定了在listen interval时间内,AP不得丢弃暂存数据。因此一般情况下,AP为终端暂存数据的时间至少大于listen interval所指定的时间。
某医院新建了一套无线网络,平时会使用手持式无线PDA进行无线查房等医疗业务。在使用过程中发现,PDA首次接入WLAN网络时可以正常使用,但在工作一段时间之后,PDA自动掉线,于是再次连接WLAN网络,但是失败,从而导致业务无法正常开展。
问题初识
PDA连接成功后,通过在AP上查看终端状态信息,发现AP上显示PDA的电源状态(PS Mode)一直处于Active-->sleep---Active-->……的循环过程中,且循环时间不固定,有时在1~2s内就会变化一次,有时会10多秒,而有时则要几分钟。
[AP]display wlan client
Total Number of Clients : 6
Total Number of Clients Connected : 6
Client Information
-------------------------------------------------------------------------------
MAC Address BSSID AID State PS Mode QoS Mode
-------------------------------------------------------------------------------
000b-6c2c-cbb7 0023-8917-9120 6 Running Active None
000b-6c35-dd0e 0023-8936-6b90 2 Running Sleep None
000b-6c35-dd57 0023-8936-6b90 1 Running Active None
-------------------------------------------------------------------------------
间隔5秒后,再次显示终端状态信息,发现MAC为000b-6c35-dd0e和000b-6c35-dd57的PS Mode已经发生了改变。
[AP]display wlan client
Total Number of Clients : 6
Total Number of Clients Connected : 6
Client Information
-------------------------------------------------------------------------------
MAC Address BSSID AID State PS Mode QoS Mode
-------------------------------------------------------------------------------
000b-6c2c-cbb7 0023-8917-9120 6 Running Active None
000b-6c35-dd0e 0023-8936-6b90 2 Running Active None
000b-6c35-dd57 0023-8936-6b90 1 Running Sleep None
-------------------------------------------------------------------------------
初步推断PDA出现异常的原因是:PDA在接入WLAN网后,在一段时间内没有进行使用,即没有与AP进行数据报文交互,则会自动进入节电模式(即AP上看到PS Mode状态为sleep)。由于PDA进入节电模式后出现异常掉线,因此PDA没有向AP发送解关联报文(de-authentication),AP继续认为此PDA在线,并且继续保留该客户端的信息。工作人员发现PDA断开连接后,立即重接连接,但是此时AP认为该PDA继续在线,于是拒绝了连接请求,导致PDA无法再次接入。
通过以上分析可以明确:PDA异常下线导致了问题的产生。根据节电模式的原理,进入节电模式是由终端自行判断的,然而为什么会重新连线WLAN失败?因此需要进一步分析排查。
故障分析
通过抓取整个故障过程中PDA与AP交互的所有无线报文,并进行分析发现:异常掉线后的PDA再次连接时一直发送802.11 Probe Request报文,并且此报文中Power Save Mode的设置为“1”,如图4所示。
http://www.h3c.com.cn/res/201104/14/20110414_1175262_image004_711492_30008_0.jpg
http://www.h3c.com.cn/res/201104/14/20110414_1175263_image005_711492_30008_0.jpg图4 PDA发送的probe request报文
按照节电模式的工作原理,当AP收到来自客户端的报文中携带休眠标记(power save mode位为1)时,则认为客户端处于休眠状态,此时AP需暂存发往该客户端的所有报文,并且通过beacon来通知客户端;当客户端苏醒后需要主动发送报文获取AP上为客户端缓存的报文。
重先连接WLAN时,PDA在不断的发送probe request,但是由于每个probe request报文都携带休眠标记,表明了PDA要进行睡眠,所以AP要回应的probe response(根据802.11协议原理,每个probe request报文必须回复probe response报文)也被缓存起来,并且通过beacon来通知PDA“AP有数据需要发送”,如图5所示。但是PDA始终没有苏醒过来,也不会主动向AP获取报文(苏醒过来的话会发送一个null报文通知AP),从而造成PDA无法获取这些probe response,而在此种情况下,PDA就不进行后续的关联过程,最终导致PDA无法接入成功。
http://www.h3c.com.cn/res/201104/14/20110414_1175264_image006_711492_30008_0.jpg图5 AP的beacon帧的TIM信息
通过以上分析,可以明确导致PDA再次连接失败的根本原因是:PDA以probe request报文发起再次连接请求,每个报文都携带了休眠标记,AP收到该报文后,认为PDA已经进入了节电模式,因此将probe response报文进行缓存。PDA一直都无法苏醒去获取暂存的probe response报文,最终导致连接失败。根据802.11协议原理,PDA发送的probe request报文中不应该携带休眠标记,且PDA需要定期苏醒以获取AP上暂存的数据,但PDA却无法苏醒,从而导致AP始终收到携带休眠标记的报文,这属于终端的功能设计缺陷。
PDA、手机终端设备,由于设备较小,电池带电能力较弱,尤其在使用WLAN网络时,对电量的消耗会加剧,因此许多厂商会将其产品设计成经常性进入休眠模式。也由于这个特性,使得许多PDA终端产品在功能上也存在较多问题。因此在使用终端时,需要注意节电模式的使用对网络连接可能产生的影响。
结束语
便携式终端在使用外置电源时,一般都不会使用节电模式,只有在使用电池时才会节省电力。由于节电模式改变了报文802.11协议的报文传输机制,因此也会带来种种奇怪故障。特别是随着Wifi终端种类增加,由节电模式引起的问题也越来越多。笔者建议,在出现网络故障时候,优先尝试关闭终端的节电模式,以确保数据报文按照正常机制传输。