802.11协议精读2:DCF与CSMA/CA

序言

在802.11的MAC层中。分成了两种基本工作模式:

  • DCF(Distributed Coordination Function)
  • PCF(Point Coordination Function)
当中,因为DCF具有良好的分布式特性。从而应用更加广泛,而PCF模式则较为少用。在802.11e协议中,DCF被扩展为EDCA模式,PCF模式被扩展为HCCA模式。

本文所讨论的主要内容即有关DCF模式以及其核心CSMA/CA机制。

CSMA/CA机制

因为无线信道唯独一个冲突域的特性,所以须要设置一种随机接入机制,以避免多个节点同一时候訪问网络所带来的冲突问题,在WiFi协议中,该随机接入机制即是CSMA/CA。CSMA/CA的全称是Carrier Sense Multiple Access with Collision Avoidance。即载波侦听多路訪问/冲突避免。假设熟悉有线网络的能够知道。在集线器与中继器中也会採用一种CSMA/CD的机制。从协议设计的大思路上,两者是类似的,或者说两个都是基于CSMA机制的,而细节上。两者有非常多的出入,在本文中。我们尚不仔细讨论两者协议的详细区别,而只叙述CSMA/CA的工作机制。

为了方便文中讨论。我们首先假定一个网络拓扑环境例如以下:


在该拓扑中。存在一个AP。与两个节点(STA 1与STA 2),假设对于无线术语不是非常熟悉的话,能够把AP理解成无线路由器。因为无线环境下的广播特性。若STA 1与STA 2同一时候向AP发送数据,那么就会在AP处发生冲突,从而两者都无法正确接收。终于传输失败。CSMA/CA就是提供一种避免冲突发生的接入规则。

接下来我们须要详细描写叙述CSMA/CA的工作机制,为了方便理解,我们这里首先要给出四个概念:

  • DIFS与SIFS:该两种都是属于Inter-frame Spacing(IFS)。即帧间间隙。

    DIFS全称为Distributed Inter-frame Spacing,即分布式帧间间隙,SIFS称为Short inter-frame space,即短帧间间隔。

    在CSMA/CA中,发一个帧之前,都须要"等待"一个对应的帧间间隔,比方发送数据之前至少要等待DIFS时间。发送ACK之前须要等待SIFS时间。在802.11中还存在其它的一些帧间间隔,比方RIFS,PIFS。AIFS。EIFS,本文不再一一赘述。(注:该段落中所提到的等待,不是真正意义上节点什么都不做,详细的功能会在后文对应位置进行描写叙述)

  • Slot Time:时隙是指的一个时间片段,在CSMA/CA中。节点竞争接入信道之前须要经过对应的随机回退(backoff)过程,当中backoff过程就是由非常多个时隙所组成的。
  • Contention window:竞争窗体是用来让节点选择随机回退计数值(backoff counter)的范围。
  • Backoff:随机回退过程是指每个节点在竞争信道时,所经历的随机退避过程。在这一过程開始时,节点首先在竞争窗体中选择一个随机数为基准的随机回退计数值,同一时候每个时隙,节点为"监听"信道是否空暇,若信道空暇,那么进行一次倒数,即计数值减1,若信道忙,则不进行对应倒数。

    当该随机回退计数值回退到0时,节点能够发送数据。(注:1.该段落中所提到的监听,不仅包括了物理监听,也包括了虚拟监听机制,详细功能后文对应位置进行描写叙述。2.该文中所讨论的一些概念与有线网络中的概念会存在一些差别。我们这里并不加以细节对照,还请见谅)

接着。我们利用时序图描写叙述CSMA/CA的详细工作机制:


  1. 当STA 1与STA 2相继存在数据,须要在竞争信道进行发送时,其首先须要"等待" DIFS时间,若DIFS时间内,信道保持空暇状态。那么就能够进行backoff过程。
  2. 若STA 1与STA 2进入backoff过程时,其首先须要从竞争窗体(Contention window)选择一个随机数。在802.11协议中,默认的初始竞争窗体为31,即随机回退计数值的范围即是[0,31]。在上图中,STA 1则是选择了8,而STA 2选择了2。
  3. 在backoff过程中。每经过一个slot time。节点会"监听" 一次信道,若信道空暇。则对应的随机回退计数器的值减1。

    如上图中。经过3个slot time后,STA 1的随机倒数计数器从8递减至5,而STA 2对应从2递减至0。

  4. 当节点的随机倒数计数器倒数至0时,节点竞争获得信道。从而能够发送数据。如上图,STA 2获得信道后,发送PACKET A给AP。在AP接收到数据后。会採用CRC机制对数据进行校验,若校验通过。AP会在SIFS后,反馈ACK确认帧。
  5. 当STA 2成功发送完数据, "等待" 了SIFS的时间之后,AP会向节点反馈ACK确认帧。当STA 2成功接收到ACK帧之后,这一次传输完毕。

  6. 当这一次传输完毕后,节点须要再次 "等待" DIFS的时间后,又一次開始backoff过程。若节点刚刚发送完数据。那么在backoff过程開始时,须要又一次从竞争窗体中选择一个随机数进行倒数。若节点没有发送数据。那么直接从上一次的倒数结果继续倒数。

    如上图中,STA 1没有竞争到信道,那么其在第二次的backoff过程中,直接基于上次的5直接进行倒数至4。这种设计目的是为了保证网络传输的公平性。


若在上述的第5步中。AP没有成功接收节点的数据,或者AP对数据进行CRC校验错误。那么其不会反馈对应的ACK给节点。

节点在ACK timeout之后,则知道对方没有成功接收数据,该ACK timeout时间在理论分析时,一般与ACK接收时间相等,在详细project设计中。可能会大一点点。那么发送错误的节点,须要等待EIFS时间才干够再次接入信道,EIFS>DIFS。这样是为了避免一些较差的节点持续争抢信道资源。

比方图中STA 2即须要在等待EIFS之后,节点首先进行BEB(该机制我们后面具体讨论),然后又一次開始backoff过程。而STA 1则直接在DIFS之后进行backoff。

注:在这里的描写叙述中,我们所述,在介质忙时,节点通过监听信道。推断介质忙,从而挂起随机回退计数值。这也是非常多学术研究中能够看到的常见描写叙述。

有关挂起机制,笔者还存在一些理解。我们知道在节点竞争信道的过程中,也有可能会接收数据。因为802.11协议的特殊性,节点仅仅有在完整解调整个数据包之后,经过CRC校验后,才干够完整推断数据帧是不是自己的。从而进行丢包处理。

故挂起机制实际上是一种接收机制。即不管信道中的数据帧是不是发给节点的,该节点都须要对此数据帧进行接收,进而推断是否丢弃该帧。

故节点因为处于接收状态。从而无法继续进行backoff回退操作,故这里即是处于挂起的动作。

同一时候在《CWNA教材第三版》中。这里有可能会产生一种误导的理解,即利用Duration字段,即详细採用NAV机制来完毕这里挂起随机回退计数值的工作。在该书中,Duration字段用来保留之后SIFS+ACK的时间。而不是用来作为NAV字段保护该数据帧传输过程中挂起其它节点的。换言之,我们前面所提到的ACK timeout的机制,即是採用数据帧中的duration字段来详细设置的。只是除了CWNA书本上的样例外,现实中笔者没有抓到过数据帧MAC头部中Duration存在填充的情况,在这样的默认情况下,ACK timeout可能就是SIFS+ACK的标准时间。

BEB机制

这里BEB机制的全称为Binary Exponential Back off。即二进制指数退避算法。在CSMA/CA的机制中,还是存在发生冲突的可能性,从而为了避免在CSMA/CA机制下的再次冲突。故这里引入了BEB机制。我们举例进行说明:


与之前所述CSMA/CA过程类似,在 "等待" DIFS后,STA 1与STA 2从各自的竞争窗体CW中选择一个随机数。只是碰巧的是,两者随机到了一样的数值,如图中,STA 1与STA 2都是随机到了3作为随机回退计数值。在经过3个slot time之后,因为两者同一时候倒数至0。那么意味着两者会同一时候发送数据。如图中的红色虚线框表示,在AP处因为两者信号互相干扰,从而都无法正确解码,从而CRC校验错误。即发生冲突。在冲突之后,即若AP处CRC校验失败,则不会给随意节点反馈ACK数据包。故两节点在ACK timeout之后,则等待EIFS之后,准备进入下一次竞争。

而在正式进入下一次竞争之前,节点须要对竞争窗体(CW)採用BEB机制。按我们之前所述,在初始竞争时,节点的默认CW范围是[0,31]。而假设在节点数较多的情况下。那么就有可能引发之前我们所述的冲突问题,从而我们须要扩大竞争窗体CW。详细在CSMA/CA中,我们则是採用二进制指数退避的方法对竞争窗体CW进行扩展,即发生一次冲突后,那么CW范围就会从[0,31]变化到[0,63],如图中。在冲突之后,STA 1又一次随机选择50,STA 2又一次随机选择32。在802.11中,一共同意回退6次,第7次不倍增窗体。再次尝试重发,若再次失败,则丢包。

參考CWNA教材,有给出详细每一次回退的CW窗体大小,例如以下:


RTS/CTS模式

在DCF模式下,我们还须要知道存在两种子模式:Basic模式与RTS/CTS模式。

在之前CSMA/CA讨论中,我们所描写叙述的都是Basic模式。这一章我们理解RTS/CTS模式。

为了更好的理解RTS/CTS模式,我们首先要介绍无线网络中著名的隐藏终端问题(hidden terminal problem)。


在上图中。还是仅仅有一个AP和两个节点(STA 1与STA 2)。图中蓝色虚线代表STA 1的发送范围,绿色虚线代表STA 2的发送范围。

从图中,我们能够得知,因为两个节点的发送范围无法互相覆盖。从而两者在发送数据时,是无法通过物理监听的方法,探測对方是否有发送数据。从而依照我们之前所述的CSMA/CA机制,STA 1和STA 2一直会误觉得信道空暇。从而不断倒数,当计时器到0时。则发送数据。例如以下图:


在上图中,因为STA 1与STA 2无法互相监听,即STA 2发送数据后,STA 1还继续进行backoff过程,从而继续倒数。当STA 1的随机回退计数值倒数至0时。STA 1也会发送数据。

因为STA 1与STA 2的发送存在重叠区域,即也是发生了冲突,AP无法正确接收数据。即不会反馈ACK,终于这一轮传输失败。这一轮失败之后,STA 1与STA 2採用BEB算法又一次选择随机数进行回退,可是因为两者没有办法互相监听,所以非常easy再次出现同一时候传输的现象。

所以在隐藏终端的情况下,网络性能最差时是无法传递数据包的,换言之。STA 1与STA 2的吞吐量都趋近于0。

为了解决问题。故在DCF中,引入了RTS/CTS机制。

  • RTS:Request To Send,即请求发送。RTS帧是一个单播帧,没有加密,其duration字段中填充包括兴许发送过程中整体所须要时间。


  • CTS:Clear To Send,即信道清除帧。

    节点在收到CTS后。确认信道是空暇的,能够发送。CTS也是一个单播帧,没有加密,其duration字段包括除去RTS以及一个SIFS后,发送过程整体所须要时间。


接着我们採用下图解释RTS/CTS详细的工作方法:


在上图中,STA 2已经倒数至0,其首先发送RTS数据帧给AP。若在AP处没有冲突,即AP成功解调出STA 2的RTS,AP会在等待SIFS之后发送CTS帧给STA 2。

因为无线信道是一个广播信道,要是帧没有加密的话。那么全部节点都是能够解析其信息的,所以这里AP尽管是发送CTS给STA 2,只是STA 1也能够解析该CTS信息。这也是非常多书上写,RTS/CTS都是一个广播过程的原因。

  • 当STA 1接收到CTS之后,该CTS不是我所请求所获得的,或者说,该CTS不是相应发给我的CTS。从而STA 1会将CTS数据帧的duration给提出。并设置在自己本地的NAV(Network Allocation Vector)上。若NAV没有倒数到0,那么其会主动悬挂其随机回退计数值,在NAV没有倒数到0之前,其随机回退计数值不再继续倒数。
  • 当STA 2接收到CTS后。其发现该其是之前发送RTS的反馈。故节点已知信道空暇,在等待SIFS后,STA 2发送数据。当传输数据完毕之后,AP向STA 2反馈ACK,从而终于完毕一次传输。

RTS/CTS工作机制相应的时序图例如以下:


在上图中。我们能够发现,NAV的部分和我们在CSMA/CA的流程图中的Busy medium是一样的,其差别在于一者是物理载波监听(即之前的Busy medium是因为物理载波监听所引起的)。而另者是虚拟载波监听(即NAV是由虚拟载波监听所引起的)。在下一节。我们会讨论物理载波监听与虚拟载波监听机制。

在实际的路由器中,RTS/CTS模式不是以开关的形式存在。而是以RTS_threshold的形式存在的。RTS/CTS另外一个思维就是 "採用小的数据包碰撞。来避免大的数据包碰撞" 。从而假设数据包太小,那么则不须要採用RTS/CTS机制。设置RTS_threshold的范围一般为2347,其单位是byte,即假设数据包大小假设大于2347 byte,那么才会採用RTS/CTS模式。在现实应用中。能够依据详细的情况,设置一个最适合的值。

注:在本段中,我们所述RTS/CTS着重解决隐藏终端问题,同一时候RTS/CTS也是利用小数据包碰撞来避免大数据包碰撞的方法,该方法对于在没有隐藏终端,可是节点数非常多的网络中,也时非常有效果的。

同一时候,本章节中,我们提到採用RTS/CTS模式来设置NAV。这里须要强调的是。RTS/CTS能够设置NAV,可是NAV不是仅仅仅仅能用RTS/CTS来设置。仅仅要数据帧MAC头部的duration字段有数值。那么就能够设置NAV。该机制在802.11协议中,有非常广泛的应用,比方PCF的Contention Free周期。EDCA中的TXOP机制等。

物理载波监听和虚拟载波监听

在这一章节,我们讨论物理载波监听和虚拟载波监听机制,两者是在CSMA/CA过程中同一时候使用的,在《CWNA第一版》一书中,对此有较好的描写叙述:


从该图中。我们能够明显看出。物理载波监听和虚拟载波监听是同一时候运行推断的,当中仅仅要有一个是出于Busy状态,那么就不会触发随机回退计数值减1的过程,换言之,即是挂起了随机回退计数值。从该图中,我们能够明显得知。虚拟载波监听就是相应的NAV机制,而物理载波监听则是相应到了CCA(Clear Channel Assessment)机制。

以下我们着重关注物理载波监听的CCA机制:


在CSMA/CA中。CCA由能量检測和载波检測一起完毕:

  • 能量检測(Energy Detection):是直接用物理层接收的能量来推断是否有信号进行接入,若信号强度大于ED_threshold,则觉得信道是忙,若小于ED_threshold。则觉得信道是闲。同一时候该ED_threshold的设置与发送功率有关。比方发送功率大于100mW。那么ED_threhold约为-80dBm,发送功率在50mW至100mW之间。那么ED_threshold应该为-76dBm。只是至于详细的数值。须要查看其详细所相应版本号的802.11协议。
  • 载波侦听(Carrier Sense):载波监听的方法指的是用来识别802.11数据帧的物理层头部(PLCP header)中的preamble部分。简单的说,802.11中的preamble部分採用特定的序列所构造,该序列对于发送方和接收方都是已知的,其用来做帧同步以及符号同步。在实际监听过程中。节点会不断採样信道信号,用其做自相关或者互相关运算。当中自相关在基于OFDM的802.11技术中经常使用。比方802.11a。而互相关在基于DSSS技术中经常使用,比方802.11b。与能量检測类似,相关计算值须要与一个阈值进行推断,若大于,则觉得检測到了一个信号。若小于则没有检測到。

协议中规定,两种检測方式同一时候採用。且仅仅要两者检測方式中。有一种推断信道是busy的话,那么就觉得信道是busy的,仅仅有两者都觉得信道空暇时,那么再推断虚拟载波监听机制是否为0。以上条件都满足时,那么才干够进行backoff倒数。

DIFS,SIFS与Slot time

最后我们浅谈下DIFS,SIFS与Slot time的具体功能。在前面的叙述中,我们使用"等待" 这一词来描写叙述节点在DIFS与SIFS过程中的动作,同一时候我们描写叙述slot time内持续监听信道。在实际过程中。DIFS与SIFS不是纯粹的等待动作。而slot time也不是整个周期都是监听信道。我们首先谈谈slot time的构造,因为笔者这一部分没有具体翻阅协议,參考一篇论文《WiFi-Nano: Reclaiming WiFi Efficiency Through 800 ns Slots》,其举例一个9us的slot time的组成例如以下:


即Slot time由电磁波传播时延(Propagation),信道检測CCA时间(Clear Channel Assessment)以及天线的发送/接收切换(Rx/Tx Hardware Turnaround)组成。故这里就明白回答了。在一个slot time内不是整个周期都在监听信道。而仅仅有CCA时间这一部分在监听信道。而最后一个天线发送转换也好理解一些。这里我们在说CCA监听信道的过程中,除了为了之前我们所述的backoff过程,实际上节点也在利用CCA来监听。是不是有给我的数据包。假设该数据包不是给我的,那么CCA监听结果就是忙,然后等一个slot以后继续监听。假设监听该数据包是给我的,那么就直接转换到接收状态。而不是继续进行每个slot监听的动作了。

同一时候。这里我们之所以将DIFS,SIFS与Slot time放在一起讨论。是因为DIFS = SIFS + 2*Slot time。SIFS的功能我们能够理解成,包括天线发送接收转换,以及上层处理数据所须要的延迟时间。而DIFS中,因为正巧包括了两倍的Slot time,所以非常大程度上。在DIFS内,应该运行了两次信道监听过程,可是这两次的监听过程没有触发backoff。仅仅有监听到连续两次信道空暇后,那么DIFS之后才会进行backoff过程,该设计思想应该是源于P坚持-CSMA的,同一时候,这个思路也是和我们在讨论物理载波监听和虚拟载波监听中的插图所符合的。类似的,在802.11协议中,其它的部分帧间间隔也是基于slot time和SIFS计算所得,比方PIFS = SIFS + SLOT。EIFS = ACK time + SIFS + DIFS。

PS:在协议中,SIFS和Slot time组成例如以下:

aSIFSTime= aRXRFDelay+aRXPLCPDelay+aMACProcessingDelay+aRxTxTurnaroundTime
aSlotTime= aCCATime+aRxTxTurnaroundTime+aAirPropagationTime+aMACProcessingDelay

从其名字能够大致看出其详细的包括内容。

注:以上就是笔者对于DCF与CSMA/CA的基本理解,大部分内容都是參考笔者前一篇资料总结中所列之參考文献。

上述表述中,或许存在一些错误,还请见谅,也有一些细节,并没有在这一篇中展开叙述。有空笔者再继续进行整理。同一时候,笔者所学有限,若文中出现了的错误的地方。还请指出。谢谢。

posted on 2017-08-11 12:33  ljbguanli  阅读(3126)  评论(0编辑  收藏  举报