Beacon帧是802.11中一个周期性的帧,Beacon周期调高,对应睡眠周期拉长,故节能(即越来休息100ms再起来发一个包,现在休息200ms再起来发一个包这样),不够节能意味着本身就没有什么接入速率的要求。Beacon周期调低,发送beacon较为频繁,适合漫游之类的环境,可以高速切换到功率高,性能好的AP身上。不过一般家用模式的话,默认最好。
其次Beacon帧是802.11系列帧中间最为繁杂的一个帧,所以完全理解Beacon该如何设置也是一个非常繁杂的过程。以下按照个人理解整理一些。(注:Beacon在不同的场合下,还有很多区别,如IBSS模式【Ad-hoc】,基础架构模式,802.11s mesh模式,这里仅仅关注基础架构模式。)
![](https://img-blog.csdn.net/20160216205056046?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其次Beacon帧是802.11系列帧中间最为繁杂的一个帧,所以完全理解Beacon该如何设置也是一个非常繁杂的过程。以下按照个人理解整理一些。(注:Beacon在不同的场合下,还有很多区别,如IBSS模式【Ad-hoc】,基础架构模式,802.11s mesh模式,这里仅仅关注基础架构模式。)
1.首先从Beacon帧的结构上而言,如下图
其实从wireshark来看802.11的帧会感觉严谨一些(相对于omnipeek而言),wireshark是按照帧的结构来分析的,而omnipeek更偏向于里面的字段(换言之,从omnipeek所看beacon的结构不是这样)。
- 从该图上可以看到,Beacon帧从MAC来看,主要就是由802.11头部(对应图中IEEE 802.11 Beacon frame)和Beacon信息(对应图中IEEE 802.11 wireless LAN management frame)组成。
- 在Beacon的MAC header中,大部分的字段都是和标准802.11协议是相同的,唯一需要关注的就是这个Duration字段。在802.11的接入协议中,我们知道存在PCF和DCF两种模式,实际上在具体接入的时候是采用一种HCF的模式(PS:这里HCF可能表述有问题,还需要考证,有书中也说明这段即是PCF过程),换言之,简化我们可以理解成三个过程,即Beacon - PCF - DCF这个三个过程。而通常情况下PCF是默认关闭的,除非手动打开。为了避免PCF和DCF两个过程相互冲突,即在Beacon之后,首先进入叫做CFP模式(contention-free period),在这个无竞争周期内,采用PCF的模式进行调度,然后离开CFP周期之后就是DCF所使用的周期了。而有关节能模式基本都是属于PCF模式中的一个分支。有关该CFP周期是如何保证所有节点都不进行主动竞争,目前我所理解(不一定正确,还没有成功抓包验证,仅仅从文献上理解),还是通过NAV的手法。NAV是一个倒数的周期,同时该NAV时间就是一般所述的虚拟载波监听的方法,只有NAV时间倒数到0之后,STA才可以主动竞争信道。粗略理解,通过Beacon帧中的Duration字段来设置NAV时间通告全网节点,从而启用CFP时间。
(上面这里有不少细节带过,有兴趣可以看下,有点绕,首先该NAV不一定完全是由Duration字段设置,说先Duration一定会设置,Duartion一共有16个字节[0:15],其中倒数2个字节,即第14,15位是当做标志位。若普通的NAV即第15置0,其他按2进制。如果CFP的标识的话,那么第14位置0,15位置1,默认是32768us(microsecond)。如果是PS-POll的话,14,15置1。这里还需要注意的是,只要在CFP周期内,发送一个CFP frames,那么NAV又是被设置32768。如果CFP时间结束,启动DCF时间的话,那么NAV会被置0。
同时,上述方法是通过Duration设置,以保证所有节点,包含不能够识别Beacon中内容的节点。如果能识别Beacon中内容的节点,那么在Beacon中还包含一个叫做CF Parameter Set的字段。其具体如下,