文章目录
- 一、802.11局域网的 MAC 层协议
- 1、CSMA/CA协议
- 2、时间间隔 DIFS 的重要性
- 3、争用信道的过程
- 4、对信道进行预约
- 二、802.11局域网的 MAC 帧
- 1)关于 802.11 数据帧的地址
- 2)序号控制字段、持续期字段和帧控制字段
一、802.11局域网的 MAC 层协议
1、CSMA/CA协议
虽然CSMA/CD协议已成功地应用于使用有线连接的局域网,但无线局域网能不能也使用CSMA/CD协议呢?下面我们从无线信道本身的特点出发来详细讨论这个问题。
“碰撞检测”要求一个站点在发送本站数据的同时,还必须不间断地检测信道。一旦检测到碰撞,就立即停止发送。但由于无线信道的传输条件特殊,其信号强度的动态范围非常大,因此在802.11适配器上接收到的信号强度往往会远远小于发送信号的强度(信号强度可能相差百万倍)。因此无线局域网的适配器无法实现碰撞检测。
我们知道,无线电波能够向所有的方向传播,且其传播距离有限。当电磁波在传播过程中遇到障碍物时,其传播距离就会受到限制。如下图所示的例子就是无线局域网的隐蔽站问题。我们假定每个移动站的无线电信号传播范围都是以发送站为圆心的一个圆形面积。
图 (a)表示站点A和℃都想和B通信(这里仅仅是讲解隐蔽站问题的原理,在通信的过程中省略了接入点AP。可以把B看成是接入点AP)。但A和C相距较远,彼此都检测不到对方发送的信号。当A和C检测到信道空闲时,就都向B发送数据,结果发生了碰撞,并且无法检测出这种碰撞。这就是隐蔽站问题(hidden station problem)。所谓隐蔽站,就是它发送的信号检测不到,但却能产生碰撞。这里C是A的隐蔽站,A也是C的隐蔽站。
当移动站之间有障碍物时也有可能出现上述问题。例如,图(b)的三个站点 A,B 和C彼此距离都差不多。从距离上看,彼此都应当能够检测到对方发送的信号。但A和C之间有高楼或高山,因此A和C都互相成为对方的隐蔽站。若A和C同时向B发送数据就会发生碰撞,使B无法正常接收。此时也无法检测出碰撞。
综上所述,在制定无线局域网的协议时,必须考虑以下特点:
- 无线局域网的适配器无法实现碰撞检测;
- 检测到信道空闲,其实信道可能并不空闲;
- 即使我们能够在硬件上实现无线局域网的碰撞检测功能,也无法检测出隐蔽站问题带来的碰撞。
我们知道,CSMA/CD有两个要点。一是发送前先检测信道,信道忙就不发送。二是边发送边检测信道,一发现碰撞就立即停止发送,并执行退避算法进行重传。因此偶尔发生的碰撞并不会使局域网的运行效率降低很多。无线局域网显然可以使用CSMA,但无法使用碰撞检测(由上述无线局域网特点决定的,一旦开始发送数据,就一定把整个帧发送完毕;一旦发生碰撞,整个信道资源的浪费就比较严重。
为此,802.11局域网使用CSMA/CA协议。CA表示 Collision Avoidance,是碰撞避免的意思,或者说,协议的设计是要尽量减少碰撞发生的概率。这点和使用有线连接的以太网有很大的区别。以太网当然不希望发生碰撞,但并不怕发生碰撞,因为碰撞的影响并不大。
802.11局域网在使用CSMA/CA的同时,还使用停止等待协议。这是因为无线信道的通信质量远不如有线信道的,因此无线站点每通过无线局域网发送完一帧后,要等到收到对方的确认帧后才能继续发送下一帧。这就是链路层确认。链路层确认也是解决碰撞后重传的手段
我们在进一步讨论CSMA/CA协议之前,先要介绍802.11的MAC层。
802.11标准设计了独特的 MAC层(如下图所示)。它通过协调功能(Coordination Fumnction)来确定在基本服务集BSS中的移动站,在什么时间能发送数据或接收数据。802.11的MAC层在物理层的上面,它包括两个子层。
- 分布协调功能 DCF (Distributed Coordination Function)。DCF 不采用任何中心控制,而是在每一个节点使用CSMA 机制的分布式接入算法,让各个站通过争用信道来获取发送权。因此 DCF向上提供争用服务。802.11标准规定,所有的实现都必须有DCF功能。为此定义了两个非常重要的时间间隔,即短帧间间隔 SIFS(Short Inter-Frame Spacing)和分布协调功能帧间间隔 DIFS(DCFJES)。关于这两个时间间隔后面还要讲到。802.11 标准还定义了其他几种时间间隔,这里从略。
- 点协调功能 PCF(Point Coordination Function)。PCF 是选项,是用接入点 AP 集中控制整个 BSS内的活动,因此自组网络就没有PCF子层。PCF使用集中控制的接入算法,用类似于探询的方法把发送数据权轮流交给各个站,从而避免了碰撞的产生。对于时间敏感的业务,如分组话音,就应使用提供无争用服务的点协调功能PCF。
我们目前大量使用的无线局域网都是使用上述的分布协调功能DCF。
CSMA/CA协议比较复杂。IEEE的802.11-2007标准文档共有1232页之多。这里介绍CSMA/CA协议的要点如下:
- 站点若想发送数据必须先监听信道。若信道在时间间隔DIFS内均为空闲,则发送整个数据帧。否则,进行(2)。
- 站点选择一随机数,设置退避计时器。计时器的运行规则是:若信道忙,则冻结退避计时器,继续等待,直至信道变为空闲(这叫作推迟接入);若信道空闲,并在时间间隔DIFS 内均为空闲,则开始争用信道,进行倒计时。当退避计时器的时间减到零时(显然这只能发生在信道空闲时),站点就发送数据帧,把一整帧发完。
- 站点若收到接收方发来的确认帧,且还有后续帧要发送,就转到(2)。若在设定时间内未收到确认,则准备重传,并转到(2),但会在更大的范围内选择一随机数。
下面详细解释上述协议中的内容。
2、时间间隔 DIFS 的重要性
在图 9-7中,站点A要向站点B发送数据。A监听信道。若信道在时间间隔DIFS内一直都是空闲的(理由下面就要讲到),A就可以在时间发送数据DATA。B收到后立即发回确认 ACK。B开始发送确认的时刻,实际上必然略滞后于B收完DATA 的时间,滞后的时间是 SIFS。这是因为B收到数据帧后,必须进行CRC检验。若检验无差错,再从接收状态转为发送状态,这些动作不可能在瞬间完成。SIFS值在802.11标准中均有规定。因此从 A发送数据帧 DATA 开始,到收到确认 ACK为止的这段时间(DATA+SIFS+ACK),必须不允许任何其他站发送数据,这样才不会发生碰撞。为此,802.11标准规定了每个站必须同时使用以下的两个方法。
第一个方法是用软件实现的虚拟载波监听(VirtualCarrier Sense)的机制。这就是让源站A把要占用信道的时间(即 DATA+SIFS+ACK),以微秒为单位,写入其数据帧 DATA的首部(在后面的9.1.4节还要介绍首部的各字段)。所有处在站点A的广播范围内的各站都能够收到这一信息,并创建自己的网络分配向量NAV(NetworkAllocation Vector)。NAV指出了信道忙的持续时间,意思是:“A和B以外的站点都不能在这段时间发送数据”。
第二个方法是在物理层用硬件实现载波监听。每个站检查收到的信号强度是否超过一定的门限数值,用此判断是否有其他移动站在信道上发送数据。任何站要发送数据之前,必须监听信道。只要监听到信道忙,就不能发送数据。
从上图可以看出,至这段时间 SIFS,信道是空闲的。为了保证在这小段空闲时间不让其他站点发送数据,802.11标准定义了比 SIFS 更长的时间间隔DIFS(DCFIFS),并且规定,凡在空闲时间想发送数据的站点,必须等待时间DIFS后才能发送。这就保证了确认帧 ACK得以优先发送。这个重要措施使得在这段时间(DATA+SIFS+ACK),整个信道好像是A和B专用的,因为其他站点暂时都不能发送数据。
3、争用信道的过程
现假定在站点A和B通信的过程中,站点C和D也要发送数据(如下图所示)。但C和D检测到信道忙,因此必须推迟接入(deferaccess),以免发生碰撞。很明显,如果有两个或更多的站,在等待信道进入空闲状态后,大家都经过规定的时间间隔DIFS再同时发送数据,那么必然产生碰撞。因此,协议CSMAICA规定,所有推迟接入的站,都必须在争用期执行统一的退避算法开始公平地争用信道。
上图中的争用期也叫作争用窗口CW(Contention Window)。争用窗口由许多时隙(timeslot)组成。例如,争用窗口 CW = 15 表示窗口大小是 15 个时隙。时隙长度是这样确定的:在下一个时隙开始时,每个站点都能检测出在前一个时隙开始时信道是否忙(这样就可采取适当对策)。时隙的长短在不同 802.11 标准中可以有不同数值。例如,802.11g 规定一个时隙时间为9μS,SIFS=10 μS,而 DIFS 应比 SIFS 的长度多两个时隙,因此 DIFS=28 μS。
退避算法规定,站点在进入争用期时,应在0~CW个时隙中随机生成一个退避时隙数,并设置退避计时器(backofftimer)。当几个站同时争用信道时,计时器最先降为零的站,就首先接入媒体,发送数据帧。这时信道转为忙,而其他正在退避的站则冻结其计时器,保留计时器的数值不变,推迟到在下次争用信道时接着倒计时。这样的规定对所有的站是公平的。
例如,上图中的站点℃的退避时隙数为3,而站点D的退避时隙数为9。当经过3个退避时隙后,站点C获得了发送权,立即发送数据帧,信道转为忙状态。站点D随即冻结其剩余的6个时隙,推迟到下一个争用信道时间的到来。如果此后没有其他站要发送数据,那么经过剩余的6个退避时隙,站点D就可以发送数据了。
请注意“推迟接入”和“退避(backof)”的区别。推迟接入发生在信道处于忙的状态为的是等待争用期的到来,以便执行退避算法来争用信道。这时退避计时器处于冻结状态。而退避是争用期各站点执行的算法,退避计时器进行倒计时。这时信道是空闲的,并且总是出现在时间间隔 DIFS的后面(如上图所示)。
802.11标准并未规定争用窗口CW的初始值,但建议W最小值可取为15,最大值为1023 。
为了减少碰撞的机会,协议CSMACA规定,如果未收到确认(可能是发生碰撞或数据帧传输出差错),则必须重传。但每重传一次,争用窗口的数值就近似加倍增大。
例如,假定选择初始争用窗口CW= 2 4 2^4 24-1=15,那么首次争用信道时,随机退避时隙数应在0~15之间生成。在进行重传时,第i次重传的争用窗口CW= 2 4 + i − 1 2^{4+i}-1 24+i−1。
- 第1次重传时,随机退避的时隙数应在0~31之间生成。
- 第2次重传时,随机退避的时隙数应在0~63之间生成。
- 第3次重传时,随机退避的时隙数应在0~127之间生成
- 第4次重传时,随机退避的时隙数应在0~511之间生成
- 第5次以及5次以上重传时,随机退避的时隙数应在0~1023之间生成,争用窗口CW不再增大了。
采用上面这些措施,发生几个站同时发送数据的概率可以大大减小。
归纳以上的讨论可以得出如下结论:当站点想发送数据,并检测信道连续空闲时间超过 DIFS 时,即可立即发送数据,而不必经过争用期。
在以下几种情况下,发送数据必须经过争用期的公平竞争:
- 要发送数据时检测到信道忙。
- 已发出的数据帧未收到确认,重传数据帧。
- 接着发送后续的数据帧。
上述的(3)是为了防止一个站长期垄断发送权。若一站点要连续发送若干数据帧,则不管有无其他站争用信道,都必须进入争用期(如下图所示)。
即使有了上述措施,碰撞仍有可能发生。例如,B站正好在上图中A占用信道时要发送数据。B 检测到信道忙,于是推迟到争用信道时与A一起争用信道。但正巧A和B又生成了同样大小的随机退避时隙数。结果就发生了碰撞,A和B都必须再重传。这就浪费了宝贵的信道资源。因此,要进一步减少碰撞的机会,还需要再采用一些措施。这就是下面要介绍的信道预约。
4、对信道进行预约
为了更好地解决隐蔽站带来的碰撞问题,802.11允许要发送数据的站对信道进行预约。我们假定在下图中的A站要和 B站通信。显然,A 站与 B站的通信都必须通过接入点AP 的转发。在前面讲解原理时,我们都把接入点 AP 省略了。下面我们要画出 A站和 AP 之间交换的信息,但为简单起见,图中省略了 AP 和B站之间交换的信息。
我们再假定,A站或B站向接入点AP发送数据时,远处的C站接收不到这些信号,而C站向AP发送的信号也传播不到远处的A站或B站。
在 A站向 AP 发送数据帧 DATA 之前,先发送一个很短的控制帧,叫作请求发送 RTS(Request To Send),目的是告诉所有能够收到 RTS 帧的站:“我将要占用信道一段时间:[SIFS+ CTS + SIFS+ DATA + SIFS+ ACK]”。这段时间写在控制帧 RTS 的首部中。A 站发
送的RTS帧,B站能够收到,但远处的℃站收不到。
接入点 AP 若正确收到 RTS 帧,经过最短的时间间隔 SIFS 后,就向 A站发送一个叫作允许发送 CTS(Clear To Send)的控制帧,目的不仅是告诉 A 站:“你可以发送数据了”,而且也是告诉所有能够收到CTS 帧的站:“A 站和我通信,要占用信道一段时间:[SIFS+DATA + SIFS+ACK]”。这段时间是写在控制帧 CTS 的首部中。AP 发送的 CTS 帧,A 站和B站以及C站都能够收到。
在随后 A 站发送的 DATA 帧的首部中,也写入了时间[DATA+SIFS+ACK]。如果有的站没有收到 RTS 和 CTS 帧,那么收到 DATA 帧后,也能设置其 NAV。
以上措施就使得A站和接入点AP(以及A站和B站)的通信过程中,发生碰撞的概率大大降低,特别是减少了隐蔽站的干扰问题。
显然,增加使用RTS帧和CTS帧会使整个网络的通信效率有所下降,要多浪费信道的时间[RTS+ SIFS + CTS+ SIFS]。但由于这两种控制帧都很短,其长度分别为 20字节和14字节,与数据帧(最长可达 2346字节)相比开销不算大。相反,若不使用这种控制帧,则一旦发生碰撞而导致数据帧重发,浪费的时间就更多了。
从上图可以看出,即使我们使用RTS和CTS对信道进行了预约,但碰撞也有可能发生。例如,有的站可能在时间t1或t2就发送了数据(这些站可能是没有收到 RTS 帧或CTS帧或 NAV),结果必定与 RTS 帧或 CTS 帧发生碰撞。A 站若收不到 CTS 帧,就不能发送数据帧,而必须重传 RTS 帧。A站只有正确收到CTS帧后才能发送数据帧。但我们可以看出在使用信道预约的情况下,即使发生了碰撞,信道资源的浪费是很小的。
信道预约不是强制性规定。各站可以自己决定使用或不使用信道预约。看来,只有当数据帧的长度超过某一数值时,使用RTS帧和CTS帧才比较有利。
因为无线信道的误码率比有线信道的高得多,所以,无线局域网的MAC帧长一般应当短些,以便在出错重传时减小开销。这样,有时就必须将太长的帧进行分片。
最后,我们要提一下关于无线局域网的数据发送速率问题。在第2章的2.3.2节中,已经指出无线信道中的误码率与信噪比(信道状况)以及所选择的调制技术(包括数据率)有关。802.11标准并没有对无线局域网数据率的自适应算法有具体的标准或规定。但生产无线局域网适配器的厂商,一般都使自己的产品能够自适应地改变数据率,以便更好地适应信道特性的变化。例如,可以采用这样的算法:如果一连发送两个数据但都没有收到确认,就认为信道的质量较差,这时就把数据率调慢一挡。反之,如果此后又能够连续收到10个数据帧的确认,那么就可以认为信道质量改善了,因而可以把数据率调快一挡。这与协议TCP中的拥塞控制的处理思路是相似的。
二、802.11局域网的 MAC 帧
为了更好地了解 802.11 局域网的工作原理,我们应当进一步了解 802.11 局域网的 MAC帧的结构。802.11 帧共有三种类型,即控制帧、数据帧和管理帧。通过下图所示的802.11 局域网的数据帧和三种控制帧的主要字段,可以进一步了解 802.11 局域网的 MAC 帧的特点。
从下图(a)可以看出,802.11数据帧由以下三大部分组成:
- MAC首部,共30字节。帧的复杂性都在帧的MAC首部。
- 帧主体,也就是帧的数据部分,不超过2312字节。这个数值比以太网的最大长度长很多。不过 802.11帧的长度通常都小于 1500 字节。
- 帧检验序列FCS是MAC尾部,共4字节。
1)关于 802.11 数据帧的地址
802.11数据帧最特殊的地方就是有四个地址字段。这几个地址与帧控制字段中的“去往AP”(移动站发送到接入点)和“来自AP”(从接入点发往移动站)这两个子字段的数值有关。
- 地址1永远是接收地址(即直接接收数据帧的节点地址)。
- 地址2永远是发送地址(即实际发送数据帧的节点地址)。
- 地址3和地址4取决于数据帧中的“来自AP”和“去往 AP”这两个字段的数值。
这里要再强调一下,上述地址都是MAC地址,即硬件地址(在数据链路层不可能使用IP地址),而AP的MAC地址就是在9.1.1节介绍的 BSSID。下表给出了802.11帧的地址字段最常用的两种情况(在有基础设施的网络中一般只使用前三种地址,很少使用仅在自组移动网络中使用的地址 4)。
现假定在一个基本服务集中的站点A向站点B发送数据帧。在站点A发往接入点AP的数据帧的帧控制字段中,“去往 AP=1”而“来自 AP=0”。
当接入点 AP,收到 802.11 数据帧后,就转换成802.3 帧(8023 帧只有两个地址),其目的地址是 M A C R − 1 MAC_{R-1} MACR−1,而源地址是 MAC(而不是接入点 AP;的地址 BSSID,)。
路由器R收到802.3 后,剥去首部和尾部,上交给网络层。网络层根据IP数据报首部中的目的地址IPB查找转发表,知道应从接口2转发给地址为IPB的设备。再使用协议ARP,获得此设备的硬件地址是MACB,这个地址就是802.3帧的目的地址,路由器R接口2的地址 M A C R − 2 MAC_{R-2} MACR−2是这个802.3 的源地址。
接入点 AP,收到 802.3 帧,将其转换为 802.11帧,其帧控制字段中,“去往 AP=0”而“来自 AP=1”。
2)序号控制字段、持续期字段和帧控制字段
- 序号控制字段占16位,其中序号子字段占12位(从0开始,每发送一个新帧就加1,到 4095后再回到0),分片子字段占4位(不分片则保持为0。如分片,则的序号子字段保持不变,而分片子字段从0开始,每个分片加1,最多到15)。重传的的序号和分片子字段的值都不变。序号控制的作用是使接收方能够区分开是新传送的帧还是因出现差错而重传的帧。这和运输层讨论的序号的概念是相似的。
- 持续期字段占16位。在9.1.3小节第4部分“对信道进行预约”中已经讲过CSMA/CA 协议允许发送数据的站点预约信道一段时间(见前面的图9-10的例子),并把这个时间写入到持续期字段中。这个字段有多种用途(这里不对这些用途进行详细的说明),只有最高位为0时才表示持续期。这样,持续期不能超过 2 15 2^{15} 215-1-1=32767,单位是微秒。
- 帧控制字段共分为11个子字段。下面介绍其中较为重要的几个。
- 协议版本字段现在是0。
- 类型字段和子类型字段用来区分帧的功能。上面已经讲过,802.11共有三种类型:控制帧、数据帧和管理帧,而每一种帧又分为若干种子类型。例如,控制帧有 RTS,CTS 和ACK 等几种不同的子类型。控制帧的几种常用的格式如图(b)和©所示。
- 更多分片字段置为1时表明这个帧属于一个帧的多个分片之一。我们知道,无线信道的通信质量是较差的。因此无线局域网的数据帧不宜太长。当帧长为"而误比特率p= 1 0 − 4 10^{-4} 10−4时,正确收到这个帧的概率P= ( 1 − p ) n (1-p)^{n} (1−p)n。若n=12144 bit(相当于 1518 字节长的以太网帧),则算出这时 P=0.2969,即正确收到这样的帧的概率还不到30%。因此,为了提高传输效率,在信道质量较差时,需要把一个较长的帧划分为许多较短的分片。这时可以在一次使用RTS 和CTS帧预约信道后连续发送这些分片。当然这仍然要使用停止等待协议,即发送一个分片,等收到确认后再发送下一个分片,不过后面的分片都不需要用RTS和CTS帧重新预约信道(如下图所示)。
功率管理字段只有1位,用来指示移动站的功率管理模式。我们知道,移动站的功率是其非常宝贵的资源。移动站在活跃状态时(即发送或接收信息)需要消耗功率,而在关机状态虽然不消耗功率,但却可能漏掉重要信息的接收。因此我们需要有第三种状态,这就是待机状态,或省电状态。这时移动站不进行任何实质性操作,屏幕也处于断电状态,但并未断开与 AP的关联,因此这种状态非常省电。若一个移动站在发送给接入点AP的MAC帧中的功率管理字段置为0,就表示这个移动站是处于活跃状态。但若把功率管理字段置为1则表示在成功发送完这一帧后,即进入待机状态。由于接入点AP总是处在活跃状态,因此AP发送的MAC帧的功率管理字段总是置为0。
接入点AP保存有处在待机状态的移动站的名单。所有要发送给待机状态的移动站的帧AP都暂时不发送,而是保存在自己的缓存中。由于AP要周期性地向周围的移动站发送信标帧(通常是每隔100ms发送一次),因此每个要转为待机状态的移动站都必须设置一个计时器,为的是在 AP即将发送信标帧时,把处在待机状态的移动站唤醒,以便接收AP发来的信标帧。唤醒时间很短,仅0.25ms。AP 发送的信标帧中有帧被缓存在 AP 中的节点列表若移动站从收到的信标帧中发现有发给自己的帧,就向AP发送请求把缓存的帧发过来。反之,若发现没有发给自己的帧,就再返回到待机状态。这样,若移动站既不发送也不接收数据帧,就可以有99%的时间处在待机状态,因而大大地减少了电池功率的消耗。
WEP字段占1位。若WEP=1,就表明对MAC帧的帧主体字段采用了加密算法。我们已经在 9.1.1节指出,WEP加密算法有安全漏洞。因此,IEEE 802.1li 就努力解决无线局域网的安全问题。2002年Wi-Fi联盟制定了符合802.1li功能的加密方式WPA。2004年制定的 WPA2增加了支持 AES 加密算法,并完全符合IEEE 802.11i-2004的安全功能。现在的 Wi-Fi产品几乎都支持 WPA2。但在MAC帧首部的帧控制字段中,WEP 字段的名称仍继续使用(已发现有的文献把 WEP 字段改为被保护帧(Protected Frame)字段,但字段的作用不变)。WPA2的加密算法相当复杂IKURO171,限于篇幅,这里从略。