Beacon的设置还是默认为100ms为好,一般设置过高过低都有可能导致网络无法连接,而上下些许浮动可能一般用户影响不大,所以除非特殊需要(比如只采用被动扫描,漫游之类的情况),否则不建议修改。
首先先简单回答下题目中的思路,Beacon周期调高,对应睡眠周期拉长,故节能(即越来休息100ms再起来发一个包,现在休息200ms再起来发一个包这样),不够节能意味着本身就没有什么接入速率的要求。Beacon周期调低,发送beacon较为频繁,适合漫游之类的环境,可以高速切换到功率高,性能好的AP身上。按照题目的描述也没问题的,都有好处。不过一般都与家用路由无关,节能模式基本没的开,家用环境,除非布置多个AP,否则也谈不上漫游的模式,且多个AP如果设置不同,那么还存在问题,所以默认最好。
其次Beacon帧是802.11系列帧中间最为繁杂的一个帧,所以完全理解Beacon该如何设置也是一个非常繁杂的过程。以下按照我所理解的尽量拆解一些。(注:Beacon在不同的场合下,还有很多区别,如IBSS模式【Ad-hoc】,基础架构模式,802.11s mesh模式,这里仅仅关注基础架构模式。)
以下部分主要从Beacon的结构和功能上而言:
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两种模式。若在PCF接入模式中,简化我们可以理解成三个过程,即Beacon - PCF - DCF这个三个过程(有关这三个过程是出现在PCF还是HCF还需要确认下,这里有可能有错误,还请见谅)。而通常情况下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的字段。其具体如下
【该字段没有抓到具体的数据包,应该对应的就是beacon中的TIM字段,基本结构类似,TIM字段之后进行分析】,通过该字段中的CFP MaxDuration和CFP DurRemaining字段,可以控制NAV的时间流程。)
在Beacon帧的内容中,我们可以看到包含两部分,即Fixed parameters和Tagged parameters。这里需要补充的是,该Beacon的抓取是来自于一个工作在802.11b/g/n mixed模式下的AP,其物理层是采用802.11b的最低速率1M模式进行发送,整个帧长195Byte(未包含PLCP部分),传输大于1500us左右。换言之,其默认是一个802.11b的beacon,即对应的Fixed parameters,然后附加的部分显示对802.11g/n的支持,即对应Tagged parameters。至于802.11ac这里不加以讨论。
2.有关Fixed parameters的结构,如下图
这个字段是802.11b默认的Beacon的字段,也可以认为是较为初始的Beacon设计的字段。由Timestamp时间戳,Beacon的周期,以及相应的Capabilities组成。
时间戳一共64位,单位是us,用来同步该BSS内的STA,貌似是从AP启用开始,从0进行计时。(注:从这里可以可以看出,Beacon帧也是负责网络中的时间同步功能的)。
Beacon Interval,通常情况下100ms,即0.1s。如果看协议的话,这里有个单位TU(time unit),TU是少有的按照1024进行步进的单位,1TU=1024us。通常情况下,网速都是按照10进制进行步进的,即1kbps=1000bps这样,k是kilo的意思(即国际单位),而硬盘之类的存储单元还是按照2进制进行步进的,其中的k不是kilo,而是kilo-binary的缩写。曾经知乎有一个帖子有关网速讨论的也对这个内容加以详述,这里TU是按照kilo-binary的形式进行描述的,所以有些特殊,需要注意下。
Capabilities information字段,主要是描述AP,换言之是该BSS内能够兼容哪些工作模式的。0为不支持,1为支持。STA需要判断自己是不是支持这些Capabilities,如果不支持,则无法关联上该AP(即无法加入该BSS)。可以看到,CFP是否支持,即PCF模式也相应列在该区域内。至于一些具体含义的细节可以参考《802.11权威指南》中文版的第97~98页的部分,写的还是比较清楚的,英文版的由于看的不是pdf的版本,所以不知道具体的页数。
3.有关Tagged parameters的结构,如下图
基本的内容如上,红色的箭头代表这里还缺了一个部分,即country部分,该部分在onmipeek中能够解析出来。如下
这一块内容由于很多,所以就直接从Tag上进行分析,就不打开Tag里面的内容了。
第一个:SSID,很简单的一个字段,其中SSID是一个[0:32]byte的字段,其中如果全部置为0,即空SSID就是一个probe request帧,通过该帧做主动扫描。该字段细节可以查阅《802.11权威指南》4.3.3.1节。
第二个:Supported Rates,所支持的速率部分。该字段细节可以查阅《802.11权威指南》4.3.3.2节。
第三个:DS Parameter Set字段,描述了当前工作的信道。实际上这个字段在Radiotap中也有包含(Radiotap是网卡在接收信号的时候,去除PLCP header部分后,在本地增加的头部,其中就有包含功率,信道这样的物理层信息)。
这里中间实际上还有一个描述跳频参数的字段,从Element ID中可以看到,DS Parameter Set的Element ID是3,TIM的Element ID是5,中间跳跃了一个。故说明跳频参数的字段是保留的,只是当前在AP中都没有使用了。同时PS:这里Element ID是用onmipeek才可解析出来的,在wireshark下,其将Element ID解析成Tag Number,不大明白为什么这样解析,按照协议应该是Element ID好一些。
第四个:TIM,这里主要就是与DTIM有关了,换言之,有关Beacon周期设置与节能有关的部分,就与该字段有关。这个字段可以打开如下
其中DTIM count和DTIM period是和前面在描述CF Parameter Set中的CFP count和CFP period对应的,在这里也是一个独立的字段。至于Bitmap control以及之后的字段主要是用来描述STA工作在节能模式时候,对应在AP中的缓存情况的。细节可以参考4.3.3.5节。这里主要回来看下DTIM的概念【实际上这里还有一个概念容易混,即ATIM,注ATIM是一个帧,而DTIM是一个时间周期。且ATIM一般在IBSS,也就是Ad-hoc的节能模式下使用,故这里ATIM不进行展开】。在每一个TIM中不一定都包含DTIM,这两个是不应样的概念且主要由于DTIM period决定,若DTIM period为1,则每一个TIM对应一个DTIM,若为0,则表示不使用。该位实际上也对应到路由器设置中的,DTIM间隔。而发送站间隔对应的就是beacon周期(同时beacon的周期在协议中又被描述为TBTT周期,target Beacon transmission time),如下图
为了理解DTIM的设置,我们需要简述下802.11的节能模式,即PS模式(Power saving)
按协议中(标准版本,非802.11n扩展,这里仅仅讨论了最简单的PS模式,扩展模式简单点可以参考CWNA的教材),在功率管理模式下,一共有两种情况,STA要不是全速率工作,要不然就是出于休眠状态,其中休眠是指的既不能发,又不能收。
即在PS工作模式下,节点大部分都是出于休眠模式下的,经过很久时间才醒一次,然后跟AP要信息。在STA休眠这段时间内,AP负责缓存该STA对应的信息。这里STA要睡多久才醒一次去跟AP要信息,就是对应的DTIM周期。这里可以直接贴下《802.11权威指南中》中的叙述,貌似本身就是写的比较清楚的。在协议里面图基本也差不多,只不过考虑了两个STA而已,用兴趣可以参考协议第10.2.1.3节。
故上述表明,首先DTIM周期是以TIM周期,也就是Beacon周期为基准的,若Beacon周期越长,那么睡眠时间就越长,从而达到节能的作用。 不过PS:从上面我抓的包上也可以看到,一般情况下,貌似STA和AP的节能模式都是没有工作的,所以为了节能设置beacon,那么首先要启用节能模式才可以,且AP和终端处都要启用。
第五个:ERP information部分,ERP全称是Extended Rate PHY,就是802.11g对应的模式。在这里主要是为了兼容模式所存在,主要关注其中的Non ERP Present位,通过该位,可以同步全网开启对802.11b的兼容,否则就关闭兼容。由于是beacon进行同步的,所以一旦开启,全网所有的STA都是工作在兼容模式下。有关兼容模式的问题可以参考11n only和11bg mixed和11bgn mixed区别? - 知乎用户的回答
第六个:实际上这里对应的country字段。表面上这个字段用处不大,仅仅表明了国家代号。实际上这个字段是用来控制TPC,也就是发送功率控制的。由于每一个国家都有相应的法律管理RF发射功率,不能够违法。在beacon中,即通过country字段来限制所有节点的发射功率。同样的,也有限定能够使用的信道范围。
之后的几个:RSN是用来做安全的,Extended Supported Rates是表明802.11g的扩展速率的,HT的两个都是描述802.11n的,即high throughput模式,其中HT capabilities是用来描述802.11n默认的一些配置的,需要STA也包含这些性能,比如天线数量,链路所支持的速率,MCS方式等。HT information是用来描述一些接入细节的,比如primary channel是多少,secondary channel是多少。最后两个,一个是厂家标识,一个也是安全的字段。这里有关安全的字段都不展开了。
--------------------------------------------------------------------------------------------------------------------------------
几个地方前面理解不是特别准确,对应修改下,
其一,若开启的PCF的模式,即包含CFP时间后,前面所述,网络工作是按照beacon-PCF-DCF这样的顺序周而复始是有些问题的。在协议中,该图是一个一个示意,不一定按照这样的结构,即也有可能出现beacon-PCF-beacon-DCF,或者隔几个周期出现PCF周期的情况,故这里实际上也有一个PCF周期的问题,只是一般在路由设置里面没有这个环节,故忽略了。PS:对于这一部分的理解暂时还有保留,我还需要再查一查资料确认下,比如在《计算机网络与因特网教程》
一书中,就把PCF部分的过程称呼为超帧(superframe),其中该超帧就是按照beacon-PCF-DCF这样的情况组成的。其二,有关Duration字段,在CFP周期内,上行帧(也就是STA发往AP的Polling帧)中,duration的前面几个字段是解析成AID的,该AID实际上对应STA的标号(即这里就没有采用BSSID的方法进行标识)。
--------------------------------------------------------------------------------------------------------------------------------
继续分界线,前面所述的Non-ERP Not Present是针对802.11g对802.11b的兼容性而言的。在802.11n的兼容这里并没有提及。目前发现应该是在802.11n的beacon中的HT Capability Info位,中有一位是Device is Not Able to Receive PPDUs with GF Preamble ,该中GF Preamble就是greenfield preamble,从而即是是否兼容绿地模式。
--------------------------------------------------------------------------------------------------------------------------------
这里还有一个概念的细节没有理解好,即TIM和DTIM,前者貌似是在反馈单播缓存的,后者是反馈多播缓存的,同时,根据一些网上搜的资料而言(未查协议),应该一个beacon帧中,必定包含一个TIM,而DTIM则是根据DTIM周期所决定。该处在上面所述比较模糊,故这里还有待查证。
文章作者:https://www.zhihu.com/people/edward_xu