AP向STA广播自己下行数据缓存信息(Buffer信息)的方式是采用了一种Bitmap结构。这里涉及三个点:
- AID
- TIM字段
- Bitmap
为了方便理解,我们可以将Bitmap结构看做是一个矩阵(如上图)。每行有8列,行数的范围是【1~251】;所以,该矩阵的存储空间范围为【1-251byte】。矩阵中的每一个元素点就代表一个STA:1代表有要发给它的数据缓存;反之则为0。易知,一个AP最多能关联8*251 - 1=2007个STAs。
AID
上述的矩阵中的某个位置对应的就是一个STA的关联ID(AID,Association ID)。
那么,AID有什么作用呢?其实,这是AP为与其关联的STA起的一个别名。在AP身上有一个Association ID table,其中每一个AID都是和其对应STA的MacAddr(MAC地址)进行绑定的。AID的范围是从0~2007(2007个节点),2007个节点的由来是:AID=0的位置为保留字段,并不分配给节点,用以代表所有的组播和广播(1代表有组播或广播数据;反之为0)。
例如,上图中STA4的AID值为4;STA24(这里其实为STA23更好)的AID为23。
AID的分配
当一个节点(STA)向AP发起关联请求(Association Request)后,AP会反馈的关联相应帧(Association Response)。如下图,是一个Association Response帧格式其中就包含了Association ID字段。
由于AID=0代表的是组播/广播,所以AP为STA分配AID时是从1开始的。而上图中Association ID字段为2Byte的原因是为了与Duration/ID字段兼容。
AP下行Buffer信息的广播(TIM字段)
当AID分配之后,AP就可以广播自己的下行Buffer信息。此Buffer信息是周期性广播i的,它被放在了Beacon帧中的TIM(Traffic indication map)字段。
TIM字段是基于上述的Bitmap结构图的,叫做流量指示图,用以标识AP的缓存信息。TIM字段的具体结构如下:
-
Element ID:元素识别码,用来标识beacon帧中这个位置的字段的类型(例如,标识这个位置是TIM字段还是Duration/ID字段);
-
Length:长度,描述的是该Element的长度;
-
DTIM Count &DTIM Period:在802.11协议中,我们可以看到三个概念,TIM,DTIM,ATIM。TIM是一种基本的流量指示图的结构,标准的TIM中仅仅指示AP缓存的单播信息,DTIM(Delivery Traffic Indication Map)是一种特殊的TIM,其除了缓存的单播信息,也同时指示AP缓存的组播信息。一般情况下,每一个beacon帧中都包含一个TIM信息,不过该TIM具体是不是DTIM,则需要考量DTIM Count和DTIM Period两个参数。DTIM Period是一个周期,是一个固定值,代表经过几个TIM之后就会出现一个DTIM。而DTIM count是一个计数值,是变化的,当DTIM count=0时,则代表这个TIM是一个DTIM。
-
Bitmap Control&Partial Virtual Bitmap:
4.1 该字段是真正用来描述上面提到的Bitmap矩阵的;
4.2 问题描述:如果按照之前提到的过的Bitmap结构图将251Byte都放在beacon帧中,那么会导致beacon帧过长。而AP发送beacon帧时采用的速率比较低,所以过长的beacon帧会导致其发送时间过长。(PS:采用较低速率发送beacon帧的原因:1)beacon帧是一个广播帧,其没有ACK反馈,所以无法设置重传机制,2)beacon帧目的是广播AP的基本信息,所以希望所有的节点都能够有效的接收该数据,从而采用较低的速率以保证信号较差的节点也可以接收该信息。)
4.3 问题解决:如下图,在实际应用中,1)对于后面没有使用到的AID位置,我们传输时可以省略,从而减少bitmap的空间;2)由于AP对于AID的分配并没有一个回收机制;所以有可能出现,AID从0–300的位置都是没有再使用过的节点信息,而真正活跃的节点都是在AID从300~330左右的位置。这样如果仅仅去除后面没用的AID位置,也会多出来300 bits左右的空间浪费。所以针对以上两点,可以将未用到的Bits去掉(即,AP上没有Bitmap图相应STA的数据Buffer)。
4.4 在802.11中,具体是设计了Bitmap Control和Partial Virual Bitmap的结构来解决这个问题,如下图所示:
4.5 Bitmap control:第1位用来指示是否有组播/广播信息缓存;第2–8位用来指示Partial virtual bitmap处AID位置的偏移量offset,即AID值的开始值。(偏移量以8为单位)
举例:Bitmap control值为【0 1 0 0 0 0 0 0】,Partial virtual bitmap值为【0 0 0 0 1 0 1 0】。那么,偏移量为2 * 8 = 16;所以AP处有需要向AID = 20和AID = 22两个STAs传送的数据Buffer。