2.3 MAC 层的关键技术
IEEE 802.11 WLAN 的MAC 层关键技术主要有以下两大部分:
• 分布式协调技术(DCF);
• 点协调技术(PCF)。
具体如下。
2.3.1 DCF(分布式协调功能)
DCF(分布式协调功能)给802.11的各个网络站点提供了通过竞争机制互相访问的途径,它是802.11网络节点访问无线传输信道的最重要的手段。
1.原理概述
大部分的802.11网络传输操作在MAC层均采用分布式协调功能(DCF)机制,它提供了类似Ethernet的基于竞争的服务。DCF也允许多个独立的网络节点彼此交互而无需通过中心控制节点,因此它可以运用于IBSS网络或基础结构型网络。
DCF 是一种基于载波监听/冲突避免(Carrier Sense Multiple Access with CollisionAvoidance,CSMA/CA)的随机接入协议,采用二进制指数退避(Binary Exponential Backoff,BEB)机制来避免可能的传输冲突。DCF定义了两种信道访问方式,缺省的方式是基于两次握手机制的基本接入机制,在这种情况下,源站点发送完数据分组后如果收到目的站点的确认(ACK)分组,则表明分组发送成功,否则源站点需要重新发送。
除了基本接入机制外,DCF定义了一种可选的基于4次握手机制的请求发送/清除发送(Request-To-Send/Clear-To-Send,RTS/CTS)机制。源站点在发送数据分组之前,需要先发送一个特殊的 RTS 短控制分组,目的节点收到 RT S分组后回应一个CTS分组以表明该站点已准备好接收,接下来才开始数据分组以及确认(ACK)分组的传输。
具体说明如下。
(1)基本接入机制
使用基本接入机制的网络节点,在发送一个新的数据分组之前必须监测信道的状态,如果信道空闲并且持续时间等于一个分布式帧间间隔时间(DIFS),则站点直接发送数据分组。如果信道忙,则站点持续监听信道直到信道空闲时间等于一个DIFS。为了减小冲突发生的概率,在这个时刻,网络节点要等待一个随机产生的退避间隔时间后才能正式开始发送数据分组。为了防止无线信道被某个站点独占,对于连续的分组发送,即使信道空闲等于一个DIFS,每次分组发送前也必须等待一个随机产生的退避间隔时间。但是,如果上层到达的长数据按照需要分成多个相互关联的 MAC 层数据帧,则只有第一个数据帧需要竞争信道,后续的数据帧之间只需要间隔一个最小帧间隔时间(SIFS),就可以直接发送。
出于效率的原因,DCF 的退避过程采用离散时间刻度,即信道空闲持续一个DIFS之后的时间被划分成一个个的系统时隙σ,站点只能在每个时隙的起始点开始数据传输。时隙σ的大小设置必须保证一个网络节点的MAC层有足够的时间探测其他网络节点的发送状态,具体而言,时隙σ要包括物理层传播时延、无线收发机从接收状态到发送状态的转换时间以及 MAC 层感知到信道忙所需的时间(即信道忙探测时间),因此时隙的大小依赖于物理层所采用的具体标准。
DCF采用二进制指数退避(Binary Exponential Backoff,BEB)避让机制,每次发送前站点等待的时间由一个退避计数器来控制,计数器的值随机选取,在区间[0,CW-1]内服从均匀分布。
CW 称为竞争窗口,其大小由该分组此前传输失败的次数决定。在第一次传输前,CW的最小值等于W0,称为最小竞争窗口或初始竞争窗口。此后每次传输失败,竞争窗口CW的大小就加倍。设j为实际退避阶数,m为系统的最大退避阶数,则CW=2min(j,m)W0,其中W0和m 值也由物理层的技术标准决定。
在BEB过程中,如果信道一直处于空闲状态,则每经过一个系统时隙σ,退避计数器的值就递减一次。一旦探测到信道忙则退避计数器立即停止,若信道再次空闲并且空闲持续时间等于一个DIFS,则计数器再次被激活计数。当计数器的值递减到零时网络节点开始发送。因此,退避计数器一次递减所花费的时间可能包含无线信道上一次完整的成功发送过程。
按照 CSMA/CA 机制的工作原理,源站点发送完数据分组后需要目的站点回复一个确认(ACK)分组来表示数据分组已成功接收。目的站点接收完成数据分组后要等待一个最小帧间间隔(SIFS)时间才能发送 ACK 分组。源站点发送完数据分组后会设置一个ACK_timeout值,如果在这个时间范围内没有收到 ACK 分组,则认为发送失败,于是竞争窗口加倍,等待信道的空闲时间满足 DIFS 的大小后,就进入下一阶段的退避避让过程。如果发送的数据帧产生错误被其他网络节点探测到,则其他网络节点会设置一个错误帧间间隔(EIFS)时间。
设置了错误帧间间隔(EIFS)时间的网络节点,在随后使用上述CSMA/CA机制进行分组发送时,其需要监测的信道空闲状态的持续时间,必须以错误帧间间隔(EIFS)时间为基准,当信道空闲状态的持续时间不小于错误帧间间隔(EIFS)时间时,则直接接入信道;否则进入退避过程。同样,接收到错误的 ACK 数据帧的网络节点也进行相同的技术处理。
(2)RTS/CTS接入机制
RTS/CTS 接入机制与基本接入机制的区别在于源站点在发送数据分组之前要先发送一个短控制分组RTS,以预订无线信道的访问权,目的站点收到RTS分组后等待一个最小帧间间隔时间(SIFS)返回一个CTS分组,源站点收到正确的CTS分组后等待一个SIFS才能开始数据分组的发送。源站点在发送完RTS分组时要设置一个CTS_Timeout值,如果规定时间内没有收到CTS分组则认为RTS分组发生了冲突,于是进入下一阶段的退避避让过程。同样,旁观站点探测到一次失败的RTS传输就会设置一个EIFS时间。
另外,在RTS和CTS分组里面包含有即将发送的数据分组的长度,旁观站点监听到 RTS或者 CTS 分组就会更新自身的网络分配矢量(NAV)值,NAV的值用于虚拟信道监听(虚拟监听是指每个网络节点自身均有一个传输媒介预占定时器:NAV,每个网络站点在发起业务之间都根据本次业务的大小设定NAV的大小值:它以微秒(μs)为单位,表示预计要占用传输媒体多少时间。每个网络节点在发起业务之前,根据业务的大小设定NAV的值,然后通过广播方式向全网络的的其他节点广播。每个网络节点根据广播信息和自身的业务情况来维护自身的NAV值,只要NAV的数值不为零,就代表传输媒介处于忙的状态)指示信道会持续忙的时间,从而推迟自身的发送以避免冲突。因此,RTS/CTS 机制下采用的物理层载波监听和 MAC 层虚拟监听相结合的方式。虚拟监听过程是通过更新 NAV值来实现的。
在CTS、数据帧和确认帧中的两个相邻帧之间的时间间隔均为SIFS,由于 SIFS比DIFS小,因而CTS和ACK帧总是有更高的优先权来接入无线信道,保证了一次数据传送过程的完整性。
2.DCF的状态机
具备DCF功能的独立的网络节点,其MAC层的DCF部分发挥作用时,有各种不同的工作状态,归纳为以下3种。
• 空闲状态;
• 退避状态;
• 数据发送状态。
这3种状态之间的作用和相互关系如图2-13所示。
图2-13 网络节点的DCF状态图
对应图2-13中DCF的3种不同的工作状态,网络节点MAC层有专门进行相应的控制和信息处理的部分,它被称为DCF的状态机。
对应DCF的3种不同的工作状态,DCF状态机同样由3部分组成。
(1)空闲状态A的处理部分
空闲状态A为DCF状态机的起始状态,DCF状态机在此状态下接收来自MAC层以上的发送数据分组,而当DCF状态机完成一个完整的数据分组的发送处理之后,也回到此状态,继续从上层接收下一个需要发送的数据分组(发送数据分组的缓冲管理不能放在DCF状态机中)。
在图2-13中,DCF状态机在状态A的处理中,首先按照固定的系统时隙间隔(通常为一个系统时隙间隔),不断循环查询是否有上层发来的需要发出的数据分组。
一旦收到上层发来的需要发出的数据分组,则 DCF 就立即查询信道的忙闲情况,如果信道空闲,则DCF状态机立即从空闲状态A切换到发送数据分组的状态 C;如果信道忙,则 DCF 状态机根据系统设置,设置最小的退避阶数、最小的退避窗口以及在退避窗口中随机的退避起始的系统时隙(对应相应的随机退避计数),然后从空闲状态A的处理部分切换到退避状态B的处理部分。状态A的处理部分工作流程如图2-14所示。
图2-14 DCF状态机中状态A 的处理部分工作流程
(2)退避状态B的处理部分
DCF状态机在退避状态状态B的处理部分,主要完成退避工作,以便让其他的网络节点有机会接入信道进行数据分组的发送。它负责将需要发送的数据分组,按照状态A的处理部分给出的最小退避阶数、最小退避窗口以及随机选取的退避起始计数(对应退避窗口中的退避时隙的起始编号)或者状态C的处理部分给出的增大的退避阶数、扩大的退避窗口以及随机选取的退避起始计数(对应退避窗口中的退避时隙的起始编号),进行相应的退避工作,以便让其他的网络节点有机会接入信道,进行数据分组的发送。状态B的工作流程如图2-15所示。
图2-15 DCF状态机中状态B 的处理部分工作流程
(3)数据发送流程状态C的处理部分(基本接入机制)
数据发送流程状态C的处理部分的工作流程以常用的基本接入机制进行说明。在基本接入机制下,DCF状态机在数据发送状态C负责接入信道,发送数据分组。数据发送结束后,接收相应的ACK信息,并且设置ACK接收定时器。如果接收到正确的ACK信息,则所有的退避设置清零,关闭EIFS的激活功能,状态切换到空闲状态A。
如果接收到错误的ACK信息或ACK定时器超时(没有接收到ACK),则首先查看退避阶数是否最大,如果不是最大的退避阶数,则将设置的退避阶数加一,退避窗口扩大一倍,并设置随机的退避计数起始值(对应退避窗口中的起始时隙编号),然后激活 EIFS(仅在接收到错误的ACK信息,且 EIFS没有激活的情况下),状态切换到状态B。
如果退避阶数已经最大,则检查重传次数是否已经超过限制,如果没有超过限制,则保持退避阶数和退避窗口的设置不变,设置新的随机退避计数起始值,然后激活EIFS(仅在接收到错误的ACK信息,且EIFS没有激活的情况下),状态切换到状态B。
如果重传次数已经超过限制,则丢弃发送的数据分组,所有的退避设置清零,关闭EIFS的激活功能,状态切换到空闲状态A。状态C的工作流程如图2-16所示。
图2-16 DCF状态机中状态C(基本接入机制)的处理部分工作流程
DCF状态机的特点如下。
DCF 状态机依托 DCF 的 3 种不同的工作状态及其之间的关系,通过信道忙/闲状态的驱动,3种状态的处理部分之间来回灵活切换。其中状态A处理部分作为整个状态机处理的开始和终结;状态B处理部分作为状态机的处理核心,完成DCF的退避处理;状态C处理部分作为DCF状态机与下层数据分组发送的接口,在发送数据分组的同时,如果发送数据分组失败且重传次数没有达到最大的次数,则继续触发状态B的处理部分,在下一个退避窗口继续进行退避处理。
3.DCF的基本原则
DCF的基本原则如下。
① 错误恢复规则。
发送端预期每个帧均应收到确认,如果没有收到确认则负责重发,直到成功为止,详细说明如下。
• 只有收到肯定确认才表示发送成功;如果某个预期的确认迟迟未到,发送端即会认定其已丢失,重新发送。
• 所有单播数据被确认,广播数据则不予确认。
• 只要发送失败,重发计数器就会累加,然后重新发送。发送失败有可能是因为访问信道失败,也可能是因为得不到确认。
② 多帧序列可以在传送过程的每个步骤中更新NAV。当发现传输信道的预定时间比当前的NAV还长时,网络节点会更新NAV。设定NAV的方式是以单个独立的帧为基准。
③ 以下的帧类型:确认、RTS/ CTS交换过程中的CTS以及片段序列中的帧片段可在SIFS之后传输,满足以下规则。
• 一旦发送出第一个帧,网络节点就会取得信道的控制权。后续帧及其确认均可使用SIFS进行传送,以锁定信道不被其他网络节点占用。
• 传送过程中,后续帧会将NAV更新成该信道预计使用的时间。
④ 如果较高层的包大小超过所设定的阈值,则使用扩展帧序列。
• 包的大小超过RTS的阈值,使用RTS/CTS 的确认过程。
• 帧的长度超过分段阈值,则由MAC层加以分段。
4.DCF中的错误处理
在DCF应用过程中,信息发送错误的检测与纠正由发送端负责,一旦检测到错误,发送端负责重新发送。只要帧被重新发送,重发计数器就会累加。
每个帧或帧片段会分别对应到一个重发计数器。有两个重发计数器:短帧重发计数器与长帧重发计数器。长度小于RT S阈值的帧被视为短帧,长度超过该阈值的帧则为长帧。
不同的帧,根据其长度,可分别对应到长帧或短帧重发计数器。帧重发计数由零起算,只要帧传送失败即累加。
短帧重发计数器会在下列情况发生时清零。
① 之前传送的RTS得到CTS响应;
② 之前传送的未分段帧得到MAC层的响应;
③ 收到广播或组播的帧;
④ 重发次数达到上限。
长帧重发计数器会在下列情况发生时清零。
① 之前传送的帧大于RTS中参数的阈值并且得到MAC 层的响应;
② 收到广播或组播的帧;
③ 重发次数达到上限。
除了相应的重发计数器,MAC会赋予每个帧片段一个生存周期。传送出第一个帧片段之后,生存周期计时器随即启动。一旦超过生存周期,该帧便会被丢弃,不再会发生重传。
重发计数器的使用
和大部分其他的网络协议一样,802.11是通过重传机制来提供可靠性。当发送端传送帧时,得到接收端的确认,否则传送便被视为失败。若传送失败,则该帧(或帧片段)相应的重发计数器便会累加。如果达到重传上限,该帧随即被丢弃并将此状况告知上层协议,同时重发计数器清零。
2.3.2 PCF(点协调功能)
为了支持需要近乎实时服务的应用,802.11 标准中加入了第二种协调功能,以提供另外一种无线信道的访问方式,这就是点协调功能(PCF),它可让 802.11网络提供较为“公平”的信道访问机制。以PCF方式访问信道有点类似令牌式信道访问控制机制,由接入点掌控令牌,通过轮询的方式让各个网络节点平等地获得接入服务。
1.PCF和DCF的关系
PCF和DCF的关系包括以下内容:
• 时间周期之间的关系;
• 时间周期内的关系。
(1)时间周期之间的关系
使用PCF时,信道时间会被划分为无竞争周期(CFP)以及竞争周期(CP)。无竞争周期的信道访问受到PCF的控制,而竞争周期则是DCF所控制。竞争周期不能过短,至少要能够传送一个最大帧及其相关的确认。无竞争服务与竞争服务以固定周期交替。
(2)时间周期内的关系
无竞争周期一开始,接入点就会送出一个Beacon帧。该Beacon帧中的无竞争最大持续期间(CFP Max Duration)字段,用来标明无竞争周期最长持续多久。所有收到此Beacon帧的网络节点会将NAV设定为此时间值,并将DCF信道访问排除在这段期间之外。为了避免干扰,所有无竞争传输会另外以短帧间隔(SIFS)与PCF帧间隔(PIFS)加以隔离防护。由于这两者都比DCF帧短,因此在PCF周期内,没有其他DCF网络节点可以访问信道。
2.PCF的机制
(1)基础—轮询列表
接入点接管传输无线信道之后,会根据轮询列表分别询问与之关联的网络节点是否有数据待传。在无竞争周期内,除非接入点以轮询帧提出请求,否则网络节点不得传送数据。无竞争轮询帧通常简写为CF-Poll。一个CF-Poll帧表示授权传送一个帧。除非接入点送出多次轮询请求,否则每次只能传送一个帧。
轮询列表所列出的都是无竞争周期内受邀传送帧的特权网络节点,网络节点一旦与接入点关联,就会被列在轮询列表中。关联请求包含了一个字段,用来标识该网络节点能否在无竞争周期内响应轮询。
(2)周期内的帧的使用
在一个PCF周期内使用的帧包括以下几种。
• 来自接入点的帧;
• 互动的帧;
• 标志PCF结束的帧。
具体如下。
① 来自接入点的帧。
在无竞争周期内,接入点可以使用不同类型的帧。在此期间,点协调单元(接入点)需要完成以下任务。
• 传送缓存帧;
• 接收网络节点的信息;
• 征询、轮询列表中的网络节点以允许它们传送数据帧;
• 传送管理帧。
由于无竞争周期内时间十分宝贵,因此可以将确认信息、轮询及数据传送组合在一起以提高效率。如通过组合以后,单一帧就可以同时确认之前所收到的帧、征询其他网络节点是否有缓存数据以及送出本身的数据给轮询列表所列的网络节点。
在无竞争周期内可以使用下列帧。
• Data(数据帧)。
当接入点要送出一个帧的信息给网络节点,但不必确认之前所传送的信息时,就会使用标准的数据帧。
• CF-ACK(无竞争周期的确认 )。
如果没有数据待传,网络节点会以此帧确认之前所收到的帧。无竞争周期的确认信息比标准控制帧的确认信息长,因此实际应用时可能不会使用此帧。
• CF-Poll(无竞争周期的轮询)。
CF-Poll帧是由接入点发送给移动式网络节点的,用来赋予移动式网络节点传送一个缓存帧的权利。只有当接入点没有数据要传给移动式网络节点时才会使用这个帧。如果尚有数据要传给移动式网络节点,接入点会改用Data+CF-Poll帧类型。
• Data+CF-ACK。
此帧结合了数据传送以及确认信息。数据是针对帧接收者发送的,确认信息则是针对之前传送的帧,通常和数据接收者无关。
• Data+CF-Poll。
接入点使用此帧传送数据给某移动式网络节点,然后请求对方传送一个待传帧。Data+CF-Poll只能够在无竞争周期内由接入点发送。
• CF-ACK+CF-Poll。
此帧除了会确认接入点最近从某个网络节点所收到的帧,同时会要求轮询列表中下一个网络节点传送一个帧,尽管所确认的对象可能是任何一个关联此接入点的移动式网络节点。
• Data+CF-ACK+CF-Poll。
此帧将数据传送、轮询功能以及确认信息结合成单一帧,目的是达到最高效率。
• CF-End。
此帧用来终止无竞争周期,将信道控制权交回DCF竞争机制。
• CF-End+CF-ACK。
此帧与CF-End帧相同,不过它同时确认了之前所收到的数据帧。
• 任何管理帧。
802.11标准并未限制无竞争周期不能使用哪些管理帧。任何特殊类型的帧只要符合传送规则,接入点都会加以传送。
② 互动的帧。
• Data+CF–ACK。
Data+CF-ACK 帧结合了两种不同的功能以提高传输敛率,此帧除了包含所要传送的数据,也同时确认了SIFS之前所收到的数据。通常此帧包含的数据与确认信息分别针对两个不同的网络节点。
• Data+CF-Poll。
在无竞争周期内,接入点可以在具备基础结构的网络中使用 Data+CF-Poll帧。当接入点不需要确认任何帧时,就会以 Data+CF-Poll 传送数据给接收端,同时允许对方传送一个帧作为响应。帧主体所包含的数据是给发出询问的接收者,这两种功能针对同一个接收者。
• Data+CF-ACK+CF-Poll。
在无竞争周期内,接入点可以在具备基础结构网络中使用 Data+ CF-ACK+CF-Poll帧。如果接入点同时传送数据、确认帧以及探询轮询列表中的网络节点,则可以将这些功能组合在一个帧Data+CF-ACK+CF-Poll中。数据传送与轮询针对相同的网络节点,而确认信息则是针对前次的数据传送。
• CF-ACK(不含数据)。
如果只需要确认信息,那么可以传送一个仅含帧头及确认功能,不含数据的CF-ACK帧。
• CF-Polll(不含数据)。
CF-Polll可以独自传送,只有接入点才会使用这项功能。因此CF-Poll帧只有在无竞争周期内才会由具备基础结构的网络中的接入点传送。
如果接入点已经没有其他缓存数据要传给接收者且不必确认之前所收到的帧,就会传送CF-Poll。如:当接入点传送了一个CF-Poll进行轮询,但网络节点方面并无数据也无响应,这时候便不需要确认信息。
如果接入点没有数据要传给轮询列表中的下一个网络节点,就会传出不含数据的CF-Poll。
• CF-ACK+CF-Poll(不含数据)。
由接入点发送而且只能给接入点使用,和所有 CF-Poll 帧一样,此帧只用于无竞争周期,其中包含了确认以及轮询功能,但是不含任何数据。
③ PCF结束的帧。
• CF-END帧。
无竞争周期结束时,接入点会送出一个CF-End帧,让网络节点脱离PCF访问规则,然后开始采用基于竞争的服务。
• CF-END+CF-ACK。
当无竞争周期结束,接入点会送出一个CF-End帧,让网络节点脱离PCF访问规则,同时以DCF开始进行基于竞争的服务。如果接入点同时响应之前所收到的数据,则可用CF-End+CF-ACK帧来结束无竞争周期。