在之前介绍802.11中DCF工作模式时,我们讨论过信道检测的部分问题。在802.11中,信道检测包含两个部分,物理载波监听和虚拟载波监听,其中物理载波通常我们所述为CCA (Clear Channel Assessment)机制,本文就关于CCA的机制做一些介绍。
Remark:由于本文部分内容比较细节,建议是先阅读《802.11协议精读2:DCF与CSMA/CA》后,进而理解本文的一些内容。
我们知道802.11协议是基于半双工的物理层进行设计的,半双工的物理层在设计时会有很多的细节问题需要考量,包含单根天线如何切换,如何识别收发时机等。有了这些基本因素的考量,我们才能够进一步设计802.11的MAC层协议,很多情况下,我们对802.11的MAC层协议理解不够彻底,也是因为对于其物理层的设计以及限制了解的不够多。基于此,我们首先谈谈在半双工情况下,802.11协议有什么需求:
该需求实际上是从下行的角度考虑的。我们首先考虑一个更简单的场景,一个AP发送,一个节点接收。节点仅仅接收数据包,没有任何的发送功能,从而就不需要引入CSMA/CA的竞争过程。
节点需要接收由AP发送过来的数据包,此时节点仅仅有一根天线接收无线信道,其需要从茫茫信号的海洋中,找到一个数据帧,并且准确的抓取到数据帧的头部以及尾部,然后保存下来进行解调。
该需求的场景是从上行的角度考虑的。假设现在有一个AP负责收数据,有多个节点负责发送数据。此时,我们考虑采用CSMA/CA的机制,也就是所有节点发送之前都需要监听信道,即LBT (Listen Before Transmission)机制。
那么节点就需要先通过天线采集一小段信号,并从这段信号中分辨有没有人正在传输,无论传输的人是正在传输,还是刚刚开始传输,都需要监测到信道忙。
其实以上两点需求是作为发送方和接收方分别提出的,也是由于802.11协议本身是基于半双工的网络,并且是基于分布式的网络进行设计,也就是节点没有一个固定角色,有可能发送,也有可能接收。这样就会导致协议在设计的时候,需要同时考虑以上两个需求,并且引入到协议设计中。
CSMA/CA中很多细节设计,都是考虑到物理层半双工这样的原因。现在基于以上的需求,我们深入理解下。CSMA/CA的基本机制我们已经在《802.11协议精读2:DCF与CSMA/CA》里面介绍过一次。
简单回顾下,在CSMA/CA过程中,每个节点首先监听DIFS时间,然后选择一个随机数进行倒数,其中倒数的时间的最小间隔我们称为一个slot(即图上的Slot Time)。首先倒数到0的节点可以发送数据包,而其他的节点会检测到信道是Busy的,所以就悬挂倒数计数器。当发送完数据帧后,等待SIFS时间后,接收AP反馈来的ACK。如果接收ACK成功,那么本轮传输完成,如果失败,那么重来一次竞争,然后再次发送。
展开这个过程:
我们用下图具体描述上述三个时间间隙之间的关系,
上图出自于802.11协议中的DCF timing relations一节 ,其中D1=aRXRFDelay(射频延迟)+aRXPLCPDelay(物理层头部接收延迟),D2=D1+aAirPropagationTime(传播延迟),M1=aMACProcessingDelay(MAC层处理延迟),Rx/Tx=aRxTxTurnaroundTime(发送接收天线转换时间),CCAdel=aCCATime(CCA时间)-D1。
SIFS通常两种用法,一种是用作RTS/CTS或者DATA/ACK之间的,另外一种是用在DIFS内的。上图我们仅仅关注的是DIFS内的用法。参考上图,SIFS时间内经过了D1,M1后,进行Rx/Tx的转化,这个Rx/Tx的转化从时间上是属于SIFS的一部分,从工作顺序上,已经属于Slot Time的一部分,在Slot Time部分中,节点首先是工作在接收状态,然后经过了D2的延迟后,开始监听信道,也就是CCA过程(即图上的CCAdel),在每一个Slot Time中,节点都会做一次CCA的检测,判断信道中有没有数据帧正在传输。在一个DIFS中,需要连续做两次Slot Time,也就是连续检测两次信道,如果都空闲的话,那么才可以进入backoff过程。若在Slot的CCA过程中,发现有数据正在传输,那么节点转入接收状态。当DIFS结束后,节点进行第一次的Backoff,此时,节点在做完CCA之后,如果信道是空闲的,那么backoff counter-1,如果此时恰好倒数到0,那么此次天线从Rx切换为Tx之后,那么直接进行数据发送了。
若SIFS用于DATA/ACK之间的话,那么在SIFS时间之前,节点是处于发送状态,其现在需要“等待”SIFS时间来接收对方反馈过来的ACK帧。当其经过D1和M1两个处理时间后,其需要切换为接收状态。当切换为接收状态后,其开始接收ACK。
在整个802.11的backoff和IFS中,实际上是不停的进行收发状态的切换,因此来实现我们前面所述的一些802.11中的需求。以上讨论中,已经出现了本文要讨论的主要目标CCA (Clear Channel Assessment),以下我们具体展开CCA的具体内容。
前面我们讨论了,半双工的机制下802.11中的需求,因此在整个802.11过程中,就一直存在收发过程的切换,而且在Slot过程中的每一次切换,实际上都包含了一次信道检测CCA的机制。在协议中,CCA主要分成了两种方法,Energy Detection(能量检测)和Carrier sense(载波侦听)。
能量检测的阈值要大于载波监听,按照协议规定要大于20dBm。协议中规定,两种检测方式同时采用,且只要两者检测方式中,有一种判断信道是busy的话,那么就认为信道是busy的,只有两者都认为信道空闲时,那么再判断虚拟载波监听机制是否为0,以上条件都满足时,那么才可以进行backoff倒数。
在802.11中(以802.11a/g为例),载波侦听阈值为-82 dBm,能量检测阈值为-62 dBm。协议原文(参考2007第17.3.10.5 CCA sensitivity节)如下。
Remark:由于关联到primary channel和secondary channel的问题,本文不对802.11n以后的CCA进行展开,故只引用2007版本的协议。
在802.11协议中,并没有直接给出-82 dBm和-62 dBm阈值的计算方法,我们所知-82 dBm实际上和最小的MCS灵敏度(minimum modulation and coding rate sensitivity)是相等的。以笔者目前所知,可以有以下几种理解方式:
关于-62 dBm实际上是从RLAN时期开始就存在的了,这个是一个能量阈值,是根据发送功率所设定的,目前802.11协议中,关于能量检测的阈值默认是设置在-62 dBm,相比笔者在上一篇《802.11协议精读2:DCF与CSMA/CA》所提的要大一些。这个阈值是假设区域内,干扰的发送功率是在100 mW以下或者EIRP是在 200mW 以下时,能量检测的一个阈值,该阈值可以被用作Energy detection的threshold以外,还可以用作DFS的threshold,在主动回避雷达干扰上也有所用到。
其中STF的t1-t7这个部分是用作载波侦听检测的,采用相关计算的方式,通常采用自相关。我们可以从-62 dBm是单个能量检测的阈值,又因为我们知道相关检测实际上是可以带来信号单位能量的增益的,这里一共相当于16*7=112个采样点,所以大约能提供20dB左右的增益,所以我们可以通过-62 dBm-20 dB=-82dBm这种方式来理解,也就是说载波侦听检测可以在更低的信号强度下识别出目标。
还有一种关于-82 dBm的理解方式,参考IEEE 802.11-17/1479r1《CCA sensitivity》一文,其中给出了如下的计算方法:
第一部分是Noise floor,也就是本底噪声,这个数值的计算我们在《802.11协议精读15:链路模型(基于Free-Space Path Loss)》介绍过,这里是采用通常16.25MHz下的本底噪声-102.1 dBm,这个和CWNA书中第3.4节以及第3.6节指出,一般2.4G信道的本地噪声为-110dBm 至-100dBm是相符合的。第二个部分是在最小MCS的接收灵敏度上所带来的一个信号的增益,然后是Noise figure (噪声指数),这里是通常表述为RF接收放大所带来的增益,然后最后是Implementation marigin,实际上是实施中的一些裕度所带来的增益,这一块理解不多。最终计算出大约是-82.4 dBm,约等于-82 dBm。
其中关于Noise Figure(NF)和Implementation margins是早期802.11a协议中所指定的,目前我们就直接延续使用-82 dBm这个阈值了。