综述
802.11中规定了两类媒体访问控制机制,PCF(点协调功能)和DCF(分布协调功能)。DCF是基于竞争机制,提供分布式接入,多个分布式无线节点抢同一资源,PCF使用无竞争模式,提供有中心控制的轮询式接入,所有的带宽分配(传输时间片)都由一个全局的Point控制。PCF是以DCF作为基础扩展的,802.11中PCF与DCF可以兼容工作。在PCF模式中,两者的兼容实际上是基于一种交替工作的机制,即PCF和DCF各占据一段时间,交替进行工作。该交替周期即是CFP重复周期(CFP repetition interval),在该周期内,包含CFP和CP两个部分。
这篇文章主要介绍DCF机制,DCF机制是基于CSMA/CS载波侦听冲突避免的多址接入协议。利用载波侦听和冲突避免技术来防止单一共享信道的冲突,同时通过四次握手机制完成分布式数据业务的信道接入,基本解决暴露终端和隐藏终端的问题。
DCF主要包含四个核心机制:
1.载波侦听机制
2.帧间间隔机制
3.随机退避机制
4.基于 RTS/CTS 的四次握手机制
1.载波侦听机制
载波侦听机制分为物理载波侦听和虚拟载波侦听,任意一个指标指示信道繁忙,则信道繁忙。
1.1物理载波侦听机制
物理层相关背景:
1.1.1 CCA概述
物理载波监听采用三种信道空闲检测方式,能量检测、载波检测和能量载波混合检测,统称为CCA。CCA工作模式由PHY MIB的属性:dot11CCAModeSupported来指出。
1. 能量检测(ED):对接收信号的能量大小进行判断,当接收的功率大于物理层规定的阈值ED_threshold时,就认为信道被占用。
2. 载波检测(CS) : 检测信道中是否存在高速PHY信号,PMD层将会识别该信号的preamble部分,展开运算得出SQ值衡量信号质量,如果信号质量超过设定阈值,认为信道存在PHY高速信号,信道被占用。其中,802.11中的preamble部分采用特定的序列所构造,该序列对于发送方和接收方都是已知的,其用来做帧同步以及符号同步。在实际监听过程中,节点会不断采样信道信号,用其做自相关或者互相关运算,其中自相关在基于OFDM的802.11技术中常用,比如802.11a,而互相关在基于DSSS技术中常用,比如802.11b。
在直接序列扩频DSSS技术的物理层中,PMD层对接收信号与本地的伪随机码(PN码)进行运算比较,如果其值超过某一极限,就认为信道被占用。
3. 能量和载波混合检测(ED & CS)
在802.11中根据具体物理层使用的技术来决定检测技术的采用。DSSS技术结合了能量检测和载波检测,而FHSS则仅采用载波检测技术。混合检测中,任意一种被检测到超限,就认为信道正在被占用。
1.1.2 CCA实现过程
1.802.11能量检测实现过程
当物理层接收到信号,它首先对该信号的能量展开归一化处理,得到RSSI(Received Signal Strength Indicator)是接收信号的强度指示。并在PMD层生成原语PMD_RSSI.indicate将RSSI提供给PLCP层,PLCP再把RSSI传递给MAC层。PLCP层通过原语PMD_RSSI.request将阈值ED_THRESHOLD传递给PMD层,其中,阈值是从MIB中获得。若RSSI的值超过阈值,则PMD层将原语PMD_ED.indicate的参数设置为enable通知PLCP层中,则PLCP层原语PHY_CCA.indication(STATE)的中的参数值值则为BUSY,通知MAC层信道繁忙。
2.802.11载波检测实现过程
CCA启动一个3.65ms长的定时器,在该定时范围内,如果检测到高速PHY信号,就认为信道忙。如果定时结束仍未检测到高速PHY信号,就认为信道空闲。3.65ms是一个5.5Mbps速率的PSDU数据帧可能持续的最长时间。
简单的说,当物理层接收到信号,根据preamble部分得出SQ信号质量,在PMD层生成原语PMD_SQ.indicate(SQ)来通知PLCP层,实时更新参数SQ的值。当SQ的值超过了阈值参数CS_THRESHOLD,PMD层向PLCP层发送原语PMD_CS.indicate(enable),通知PLCP层信道检测到PHY高速信号,正在解析该数据包,信道被占用。
备注:
RSSI:RSSI是接收到的射频能量的测量值(但不是能量的本身值)。RSSI值范围0~255,RSSI值随PHY Preamble部分的能量单调递增。因此RSSI值可以只选取PHY Preamble(前导码)的测量就行了。
PMD_RSSI.indicate:该可选的原语可由PMD产生,用于向PLCP提供接收到的信号强度。该原语有一个参数:RSSI,它是高速PHY接收的射频能量的测量值,长度为0-8bit。RSSI和SQ作为CCA机制的部分一起协同使用。
1.2虚拟载波侦听机制
虚拟载波侦听机制由MAC提供, 802.11标准使用网络分配向量NAV实现虚拟侦听。MAC帧中的Dur/ID字段中存放着的“持续时间”,对接收到的信息判断信道将被占用的时间,确定自身的发送需要延迟的时间。
NAV可以理解为一个Timer定时器用来定义当前链路还需要被占用多久,开始值是最后一次接收到的帧的持续时间,倒计时至0结束。每一个监听的Sta都使用该NAV定时器,数据通信时,占领信道的Sta会通过帧中的duration字段来告知其他Sta我还需要用多久,而未获取信道资源的Sta通过对比收到包中的duration值来更新自身NAV的值。
更新条件
1、只有收到包的duration值大于本身的NAV timer才被更新;
2、该帧并非发往本工作站,即该更新NAV的站点是侦听栈。
*当NAV值为0,且物理载波监听表明信道空闲时,才认为当前链路为空闲状态。
上图标出了三类距离范围:传输范围、载波侦听范围、载波监听带
针对不同的距离范围,节点更新自身NAV的值也不同,传输范围内的节点可以接收CTS并且正确解析其中的duration,据此更新NAV;载波监听带内的节点可以接收CTS但不能正确解析其中的duration,此时节点采用延时EIFS的策略。
2.帧间间隔机制
提供访问媒介的不同优先级
SIFS 短帧间隔 < PIFS PCF帧间隔 < DIFS DCF帧间隔 < EIFS 扩展帧间隔
2.1slot time
时隙是指一个时间片段,在CSMA/CA中,节点竞争接入信道之前需要经过相应的随机回退(backoff)过程,其中backoff过程就是由很多个时隙所组成的。
A Slot Time= a CCA Time(CCA时间)+a Rx/Tx turnaround Time(发送接收天线转换时间)+a Air Propagation Time(传播延迟)+a MAC Processing Delay(MAC层处理延迟)
2.2 SIFS, Short Interframe Space(SIFS)
在802.11系列无线局域网中SIFS是固定值,SIFS是最小的帧间 间隔,因此采用SIFS的节点具有访问无线链路的最高优先级。它等于节点从发送状态切换到接收状态并能正确解码所需要的时间,或者从接收状态转为发送状态所需要的时间,在SIFS过期后可能发送的数据包包括ACK、CTS帧,不同标准中规定的SIFS值不同。
A SIFS Time= a RXRF Delay(射频延迟)+a RXPLCP Delay(物理层头部接收延迟)+a MAC Processing Delay(MAC层处理延迟) + a RxTx Turnaround Time(发送接收天线转换时间)
2.3DIFS, DCF Interframe Space(DIFS)
在DCF协议中,节点在开始发送数据之前需要监测信道是否空闲。如果信道已经空闲,则节点仍需等待DIFS段时间才开始发送数据;而如果在DIFS时间段内任一时刻信道被监测为忙,则节点不得不推迟它的数据发送。DIFS和SIFS间的计算关系如下:
- 1
- 2
2.4PIFS, PCF Interframe Space(PIFS)
PCF使得AP等待PIFS而不是DIFS时间以访问信道,由于DIFS > PIFS > SIFS,因此AP总比普通节点具有更高的访问信道的优先级。
- 1
- 2
####2.5 EIFS, Extended Interframe Space(EIFS)
在前一帧出错的情况下,发送节点不得不延迟EIFS而不是DIFS时间段后再发送下一帧。
- 1
- 2
####2.6DSSS 物理层特征
此处附上DSSS 物理层特征,通过PLME-CHARACTERISTICS原语提供,在初始化的时候,原语生成,为层管理实体提供物理层特性参数。IEEE 802.11中定义的DSSS 物理层的特征见下表:
随机退避机制以及基于 RTS/CTS 的四次握手机制写在下一篇介绍中,文章篇幅太长看得难受。
3.随机退避机制
802.11中采用二进制指数退避法解决节点发送失败或者发生冲突时需要退避的时间。
下图是基本接入机制:
当MAC层有帧需要发送,在物理载波侦听和虚拟载波侦听都表示信道空闲之后,若退避窗口的计数值不为0,则继续一slot time为单位减少计数值,否则随机生成一个退避窗口进行退避。
此时,节点在竞争窗口中选择一个随机数为基准的随机回退计数值,退避时间选定后,就相当于设置了一个退避计时器(backoff timer)。站点在slot time内持续监听信道。这可能发生两种情况:
若检测到信道空闲,退避计时器就继续倒计减一;
若检测到信道忙,就冻结退避计时器的剩余时间,重新等待信道变为空闲并再经过时间DIFS后,从剩余时间开始继续倒计时。退避计时器的时间减小到零时,就开始发送整个数据帧。
- 1
- 2
其中,Random()是均匀分布在[0,CW]范围内的随机整数,CW就是contention window竞争窗口
竞争窗口的值是一个介于物理特征值最小竞争窗口CWmin与最大竞争窗口CWmax之间的参数值,用来让节点选择随机回退计数值(backoff counter)的范围。
- 1
- 2
不同的物理层技术有相应的物理特征值,下图为DSSS物理层的数据标准
下图为竞争窗口增长图
a.初始时CW=CWmin,则Backoff time为[0,CWmin]中的随机值乘上SlotTime,并使用该Backoff Time进行竞争;
b.若Backoff Time到0时报文仍未发送成功(发送失败或者发生冲突(另有节点的退避值同样等于0)),则CW值翻倍,并重新计算Backoff Time.
c. 以此类推,若发送不成功则CW值继续指数增长(x2),待CW=CWmax后,一直保持CW=CWmax,只有等到重传次数到达极限后(分为短包/长包重传最大次数,分别计数),丢弃此包并复位CW为CWmin;若报文发送成功,则CW初始为CWmin。
短包/长包重传最大次数会在下面重传部分详讲。
下图是退避实例过程:
从上图我们可以看出,A在发送成功以后,自行进入退避进程,不论它的后续有无帧需要发送,都要进入退避。当信道空闲DIFS时长后,其余各节点的退避计时器都开始以slot time为单位减少计时器的计数值。C的退避计时器最早到达0,则开始发送帧,而其余节点挂起退避计时器,等待下一次信道空闲。
4.RTS/CTS机制
802.11中可以选择使用或者不适用RTS/CTS机制来预约信道。在802.11中,并不是每次的数据帧、管理帧的传输过程都要借助RTS/CTS来预约信道,多余的RTS/CTS会导致效率降低,该机制并不是总是有效,尤其对于短数据帧(可能是短帧的发送成功率高,冲突可能性低吧)。广播和多目标传输不能使用RTS机制,因为其会引起多个目标地址进行CTS应答。
只有当定向帧的MPDU或者MMPDU的长度超过了属性值dot11RTSThreshold后STA才在帧交换前使用RTS/CTS交换。
属性dot11RTSThreshold是MIB的一个管理项目,它的值被MAC的LME(层管理实体)读和写。如果该值为0则表示所有的MPDU在传送前都使用RTS/CTS,dot11RTSThreshold的默认值是2347比特,默所有的MPDU在传送前都不需要RTS/CTS。这个值可以通过本地或者外地管理器修改。
STA设置了不发起RTS/CTS之后,仍然可以接收RTS和CTS,执行虚拟载波监听机制。同时可以对发送到该节点的RTS进行应答。
以下探讨采用RTS/CTS机制的原理及实现:
由于两个节点的发送范围无法互相覆盖,从而两者在发送数据时,是无法通过物理监听的方法,探测对方是否有发送数据。如果没有更多的措施,STA 1和STA 2一直会误认为信道空闲,从而不断倒数,当计时器到0时,则发送数据,如下图(图为引用802.11协议精读2:DCF与CSMA/CA):
隐藏终端的情况下,网络性能最差时是无法传递数据包的,换言之,STA 1与STA 2的吞吐量都趋近于0。
DCF中,引入了RTS/CTS机制。
- RTS:单播帧,没有加密,其duration字段中填充包含后续发送过程中总体所需要时间。
- CTS:单播帧,没有加密,节点在收到CTS后,确认信道是空闲的,可以发送。其duration字段包含除去RTS以及一个SIFS后,发送过程总体所需要时间。
下图结合退避过程理解,横轴单位为slot time
4.分段、重组
把一个长度较大的MSDU或MMPDU进行分成较小的MPDU的过程叫做分段,信道特性使得传输短帧的可靠性比长帧更高,目的STA接收分段后重新组装成MPDU。
MAC的属性值dot11FragmentationThreshold 定义了物理层能接收的最长帧长度,当发送的帧长度超过该参数,必须分段。其默认值依赖于物理层的信息管理库中的属性aMPDUMaxLength。若aMPDUMaxLength>=2347,则默认值设置为2347,aMPDUMaxLength<2347,则默认值设置为aMPDUMaxLength。该设置值可以通过外部管理器修改,但是要小于aMPDUMaxLength。
5.分段|MAC帧的传输规则
当MSDU或者MMPDU不是作为整体,当其分成几个片段,每个片段都是完整的帧需要传送时,信道控制过程为:
当源节点争取到信道的使用权,这个使用权有停驻时间边界。STA开启突发传送模式,持续发送片段帧,直至把MSDU或者MMPDU发送完成。期间可能出现的情况有:
1、 MSDU或者MMPDU发送完成,不论STA有无剩余的MSDU或者MMPDU需要发送,在接收到ACK之后进入退避模式,等待下一次使用权;
2、 一个需要ACK的分段,在传输之后没有收到应答,源STA将在Ack定时器过后,进入退避程序(在ACK定时器后仍未接收到ACK,则认为传输失败)。之后重新竞争信道,争取到信道使用权后,重新传输。
3、 在超出传送次数限制之后,MAC层丢弃该包,进入退避程序。
传送次数限制:MAC层会为每个MSDU或者MMPUD(按照帧长度)分配一个长帧计数器LRC或短帧计数器SRC,MIB中设置了属性dot11ShortRetryLimit(默认值为7)和dot11LongRetryLimit(默认值为4),是SRC和LRC的上限。
当传送失败时,相应LRC或SRC加1,当超出设置的上限时,丢包,计数器置零;传送成功时,计数器置零。
4、 当剩下的停驻时间已经不足以支持发送一个分组和一个应答,源节点将会在这个停驻时间段结束后进入退避模式,参与信道使用权竞争。
5、 接收节点会将重复的分段帧过滤丢掉
a.判断帧发送的失败与否规则
发送RTS之后,物理层发送原语PHY-TXEND.confirm表示发送结束,STA进入CTS规程。在等待了一个CTSTimeout间隔之后,如果没有收到PHY-RXSTART.indication原语,即没有表明物理层收到CTS帧,则表示发送失败。在CTSTimeout间隔之后调用退避规程。
发送数据帧或者管理帧之后,确认本次传输失败前,应该等待一个ACKTimeout。
b.过滤重复帧方法
通过内置在数据帧和管理帧中的顺序控制域。