802.11p 标准中采用 IEEE 802.11e 中的 EDCA 机制来解决这个问题当 MSDU 到达 MAC 子层和适当的信道路由分配完成时,MAC 层通过将它的用户级别(UP)映射到接入类型指数(ACI)来缓存此数据;而不同的接入类型(AC) 通过设置不同的 EDCA 参数来体现优先级别。
802.11p采用多信道模式,每个设备都可以在控制信道和一个服务信道之间来回切换,但是同一时刻不能使用两个不同的信道。包含一个控制信道间隔时间和一个服务信道间隔时间的周期时间不能持续超过100ms,控制信道一般用于系统控制数据和安全性消息的传输,而非安全性消息只能在6个服务信道中进行交换。多信道的执行操作在后续系列中会详解。
为保证不同业务的不同QoS要求,EDCA算法定义了上层基于IEEE 802.1D的8类业务类别(Traffic Category,TC)和本层的4类的接入类别(Access Category,AC),8类TC分别映射至4类AC的队列中,即每个信道定义了四个不同的访问类别AC。访问类别可以表示为AC[0]-AC[3],优先级从低到高,每个访问类别都有一个独立的发送队列。通过为每个访问类别分配不同的竞争参数达到区分优先级高低的目的。
标准提供的四种不同的访问类型(背景流、语音、视频、尽力而为的数据)
•AC3: Voice traffic.
•AC2: Video traffic.
•AC1: Best effort traffic.
•AC0: Background traffic
可以视为有四个随机退避的状态机,将这一对发送队列和与之对应的随机退避状态机称为一个虚拟内部站点QSTA,这样,每个QSTA内有4个虚拟内部站点,通过设置EDCA参数来竞争获得发送机会(TransmissionOpportunity,TXOP)。
每个QSTA中的访问类型AC都是基于上面四种参数独立的竞争,获得访问信道的机会。
◆CWmin:最小竞争窗口,越小的CWmin其优先级越高;
◆CWmax:最大竞争窗口,越小的CWmax其优先级越高;
◆TXOP:传输机会,参数值为TXOPlimit,代表占用信道最长时间(无竞争)
◆AIFS:EDCA模式的QSTA要获得传输机会时,必须等待的信道空闲时间。
标准中规定的参数为
一旦某个AC侦测到无线媒介处于一个长为AIFS的空闲时间状态,它便启动如图1所示的退避规程,只有退避时间减为0的那个QSTA才有权发送数据帧;如果有多个AC的退避时间减至0,则来自高优先级AC将获得发送机会TXOP,开始发送相应的帧,而不发送来自较低优先级AC的帧。
下面,我们将详细解释关于802.11p的EDCA具体细节。
EDCA机制支持8个优先级,数值为0-7。带着UP值的MSDU将根据其优先级值决定其所属的TC(traffic category),分配到相应的AC,以不同的EDCA参数进行信道竞争。
其中,UP的参数设置在MAC header 的QoS control字段中,UP和AC的对应关系入下所示。
管理帧实体中包含了EDCA参数集,在基础型服务集中,AP发送给STA用以更新STA内EDCA相关的MIB属性值。
参数集的更新:WAVE工作模式,此时车辆节点在BSS之外通信时(此时dot11OCBEnabled 为1),车辆节点的EDCA参数采用默认的MIB属性值(此时TXOP limit=0)。车辆节点处在BSS中通信时,未接收到该BSS内AP发送的管理帧中的EDCA参数集,采用默认;否则用接收到的参数集修改自身EDCA参数。
上图,每个AC类别内都含有各自不同的参数,包括AIFSN、ECWmin/ECWmax、TXOP limit
WAVE工作模式下,TXOP limit字段值为0,表示单个MSDU或MMPDU,除了可能的RTS / CTS交换或CTS本身之外,在每个TXOP传输机会下,可以以任何速率发送MSDU或MMPDU。
注意:在非WAVE工作模式中,TXOP Limit是一个无符号整数,32μs为一个单位。在TXOP Limit时间内,可以无竞争发送帧。在若剩下的时间不足以发送一个MSDU或MMPDU,则节点放弃传送,进入退避程序。
前一次说到更新NAV的值是通过接收帧中的Duration值,EDCA机制中,Duration值的设置如下:
The default values for TXOP limit are expressed in milliseconds and are multiples of 32 μs.
{
Duration =
If TXOP=0, then Data+ACK+ 2SIFS;
elseif TXOP!=0, then SIFS+TXOP;
}
在DCF中,帧间间隔DIFS被用于衡量信道空闲DIFS时长后进入退避程序,采用EDCA机制的节点在检测信道空闲持续AIFS之后,节点进入退避程序。
在DCF中,当发生一个帧被检测到但是没有被成功解调时,站点必须后延EIFS。
此处可以分为两种情况:
1、接收错误,此时物理层向MAC报告错误发生,发送原语PHYRXEND.indication;
2、在解析MAC FSC中发现序列在传输中发生错误。
EDCA中的EIFS计算公式为:
EIFS = time(Ack) + SIFS + DIFS
注:time(Ack) 指的是以最低速率传输ACK的时间,最低速率为1Mb/s
站点在检测到但没有成功解调一帧时后延
EIFS-DIFS+AIFS[AC]
AIFS[AC] = AIFSN[AC] × aSlotTime + aSIFSTime
在非接入点AP的工作站STA中,STA通过MIB中的dot11EDCATableAIFSN属性设置AIFS[AC];
在infrastructure BSS中,AP会定时发布Beacon信标帧,QoS STAs通过接收Beacon 帧,读取其中的EDCA Parameter Set element 参数,更新工作站中的dot11EDCATableAIFSN 值。QoS AP 则是通过MIB中dot11QAPEDCATableAIFSN属性计算AIFS[AC]。
每个AC都维持着自己的CW[AC]窗口,在初始时候,CW[AC]等于CW[AC]min.
每当传送成功,单播接收到正确的ACK或者传送带有No Ack policy 的帧或者传送本就不需要ACK的组播帧,CW[AC]复位为CW[AC]min.
退避程序在以下事件发生时被唤醒:
当c)和d)的情况发生时,具体操作如下
QoS STAs为每一个MSDU、MMPDU维护着短帧重传计数器short retry counter以及 长帧重传计数器long retry counter,其初始值都为0。同时,QoS STAs为每个AC都维护着QSRC[AC] 和QLRC[AC],初始值同样为0.【四个计数器】
注意:分别针对 帧 和 信道
【外部】在发送需要确认ACK的帧之后,站点进入ACK进程。(即一定时间内等待ACK的接收,若没有,则失败)
a. 发送失败,
帧长度小于dot11RTSThreshold时,SRC加1,令QSRC[AC]=SRC
帧长度大于dot11RTSThreshold时,LRC加1,令QLRC[AC]=LRC
b. 发送成功,帧长度对应的计数器重置为0(针对信道和帧的计数器都要置0).
【内部】在内部发生冲突时,对应的QSRC[AC] 或者QLRC[AC]增加,直至其达到上限。
注意:重传的数据帧或者管理帧上的retry位要置为1.
当任意计数器到达其上限,dot11ShortRetryLimit或者dot11LongRetryLimit时,MAC将丢弃该帧,重置SRC/QSRC[AC]或者LRC/QLRC[AC]