802.11的CSMA/CA机制

时间:2024-03-20 07:28:36

        所谓CSMA/CA机制,是在无线局域网802.11中避免截止访问冲突的一个非常重要的机制。CSMA/CA(Carrier Sense Multiple Access with Collision Avoidance)机制主要分成两个部分:载波监听(CSMA)以及冲突避免(CA).

        载波监听指的是:在发送之前首先进行监听,如果介质为空,则节点传输帧;如果为忙,则等待到当前传输结束之后再进行传输。 对这部分不太熟悉的可以看一下文章最后面的拓展部分,有关于CSMA和ALOHA协定的详解。冲突避免指的是尽量避免无线传输冲突,协议中主要有两个部分,分别是随机后退算法优先级确认协议。

        CSMA/CA机制如下:当一个主机要发送消息之前首先要进行监听信道。不论是否信道为忙,发送端必须以一个帧间间隔的等待来开始自己的发送。具体为:当信道为空的时候,首先等待一个帧间间隔,之后再监听信道,如果还为空,那么开始一个随机后退过程,随机后退过程之后,再次监听,如果还为空,那么就开始发送。在上述等待过程中,如果任何时候出现信道忙的情况,那么终止上面的等待过程,并等待信道为空,之后重复上面的过程(从等待一个帧间间隔开始)。流程图如下:

802.11的CSMA/CA机制

        我们看这个流程图,从①到②之间,似乎等待了一个帧间间隔还为空就直接传输了,没有随机后退过程,这与我们说的似乎不相符。但是这仅仅是一种特殊情况:当信道很久没有被访问过之后(通常是主机的第一次监听),等待一个帧间间隔就认为也不会有信道访问冲突了,所以直接发送。但是在一般情况,信道经常被访问的情况下,还是要在等待一个帧间间隔之后再进行随机后退的,两者并不矛盾。


        那么重点说说这个帧间间隔和随机后退过程:

        1.帧间间隔:帧间间隔定义了不同种类帧的优先级,这样的好处是进一步避免信道使用冲突,避开不同帧的同时发送。帧间间隔有三种:SIFS(最高优先级) PIFS(中等优先级)以及DIFS(最低优先级)。最高优先级用于ACK(传输结束的确认)和CTS(避免隐藏节点的控制帧)的传输,DIFS用于一般数据的传输。对于这部分尤其是CTS和ACK不太明白的,可以看看文末拓展部分。他们的使用如下所示:

802.11的CSMA/CA机制

        在监听到信道忙之后,首先等待一个帧间间隔(SIFS,PIFS或者DIFS,视想发送什么消息而定),之后进入随机后退过程(contention window),如果信道还是空闲,那么就发送。现在是不是和之前的CSMA/CA的描述对得上了?

        为什么要指定不同的帧间间隔?我们知道数据是最普通的,而CTS和ACK是确定传输之后比较要紧的信息,理所应当首先发送他们。比如说A主机想发送数据信息,同时B主机想给C主机发送紧急的CTS信息,那么当信道空闲时候,AB都等一个帧间间隔,但是B等待的时间短,之后就开始随机后退,他期望的等待时间更短,所以更有可能比A先发送,而A还没有后退完,就发现信道又开始忙了(B给C发送CTS消息),只能再等待。从这个角度来说,帧间间隔的优先级保证了更要紧的消息更可能早的发送。

        2.随机后退过程Contention Window

        同CSMA/CD 协议一样,随机后退过程并不是简单的随机找一个时间后退,而是用二进制指数算法进行后退。假设已经冲突了i次,那么冲突窗口设置为Cw,Cw=(2^i-1). 那么进行随机后退的时候,后退时间Contention Window = randomT *单位时间,而这个randomT是从(0,Cw)之间随机选出来的。

        也就是说,冲突次数越多,每次随机后退的期望也就随着冲突次数增加而指数增长。并且如果冲突大于10次,那么认为i恒为10,也就是避免冲突次数太大时候无穷无尽的后退。最大的后退时间就是(2^10-1)*单位时间。后退时间是随着Cw控制的,因为randomT是在(0,Cw)之间随机选出来的,但是显然Cw会随着冲突变多而一直增大,所以设计了一个控制的办法:每次传输成功了(收方发送的CTS被发送方收到)那么Cw减半,如果没有收到(也就是冲突发生)那么就按照上面的方法,Cw加倍。在这点上面,CSMA/CA和CSMA/CD是一样的。


        弄明白了CSMA/CA之后,肯定会有疑问:为什么有线局域网802.11用的是CSMA/CD协议,而无线局域网用的是CSMA/CA协议呢?这个涉及到了无线局域网和有线局域网性质的区别。第一,CSMA/CA协议早期的帧间间隔有助于避免冲突,原因上文已经说了。在无线传输中,冲突并不好避免,并且付出的代价极其昂贵,所以在发之前一定要尽量避免冲突。第二,CSMA/CA协议有ACK的确认机制,用有无ACK来确定是不是有冲突,而CSMA/CD则没有这个机制。总结来看,就是无线网络更不好检测冲突,冲突也更难处理,所以只能在机制上面更加完善,来避免冲突,这就是CSMA/CA协议的由来。

        我觉得要想弄懂CSMA/CA ,首先要弄明白CSMA/CD在有线局域网是怎么检测冲突的,两者比较,才能弄明白有线和无线局域网对于冲突的检测和避免到底是怎么回事。


        延伸阅读:

        载波监听多路访问CSMA以及CSMA/CD详解 

        802.11的隐藏节点和RTS/CTS机制

        介质访问控制MAC以及ALOHA协议