3.4.3 混合型MAC协议
竞争型MAC协议能很好地适应网络规模和网络数据流量的变化,可以更灵活地适应网络拓扑结构的变化,无须精确的时钟同步机制,较易实现;但存在能量效率不高的缺点,如存在由冲突重传、空闲监听、串扰、控制开销引起的能量消耗。分配型MAC协议将信道资源按时隙、频段或码型分为多个子信道,各个子信道之间无冲突,互不干扰。数据包在传输过程中不存在冲突重传,所以能量效率较高。此外,在分配型MAC协议(如TDMA)中,节点只在分配给自己的时隙中打开射频部分,在其他时隙关闭射频部分,可避免冗余接收,进一步降低能量损耗。但是分配型MAC协议通常需要网络中的节点形成簇,不能灵活地适应网络拓扑结构的变化。基于此,研究人员提出了混合型MAC协议,本节选择比较典型的ZMAC协议进行介绍,该协议对竞争方式和分配方式进行了组合,可实现性能的整体提升。
1)基本思想
ZMAC协议是一种混合型MAC协议,采用CSMA机制作为基本方法,在竞争加剧时使用TDMA机制来解决信道冲突问题。ZMAC协议引入了时间帧的概念,每个时间帧又分为若干时隙。在ZMAC协议中,在网络部署时每个节点执行一个时隙分配的DRAND算法。时隙分配完成后,每个节点都会在时间帧中拥有一个时隙。分配了时隙的节点成为该时隙的所有者,所有者在对应的时隙中发送数据的优先级最高。与TDMA的策略不同,在ZMAC协议中,节点可以选择任何时隙发送数据。节点在某个时隙发送数据需要先侦听信道的状态,但是该时隙的所有者拥有更高的发送优先级。发送优先级的设置可通过设定退避时间窗口的大小来实现。时隙的所有者被赋予一个较小的时间窗口,能够抢占信道。通过这种机制,时隙在被所有者限制时还能被其他的节点使用,从而提高信道利用率。该机制还隐含了根据信道的竞争情况在CSMA机制和TDMA机制间切换的方法。
2)关键技术
在网络部署阶段,节点启动以后ZMAC协议将顺序执行以下步骤:邻居发现→时隙分配→本地时间帧交换→全局时间同步。在网络的运行过程中,除非网络拓扑结构发生重大变化,否则节点不会重复上述步骤,避免浪费能量。
(1)邻居发现和时隙分配。当一个节点启动后,就会开始一个相邻节点的发现过程,周期性地发送PING消息。PING消息包含节点发现的所有一跳范围内的节点,可以在一定范围内随机发送。通过这个过程,每个节点可以获得自己两跳范围内的所有节点的信息,并作为时隙分配算法的输入参数。时隙分配算法采用DRAND算法,可以确保分配相同的时隙给两跳范围内的节点,从而使节点在给一跳相邻节点传输数据时不会被两跳相邻节点干扰。此外,DRAND算法分配给节点的时隙号不会超过其两跳范围内的节点数目。当有新的节点加入时,DRAND算法可以在不改变当前网络的时隙调度的情况下,实现本地时隙分配的更新。
(2)本地时间帧交换。每个节点在分配了时隙后需要定位时间帧,常规的方法就是所有的网络节点都保持同步,并且所有的节点对应的时间帧都相同,也就是具有同样的起始时刻和结束时刻。这种方法需要在整个网络中广播时间帧最大时隙数量,所有的节点都是用同一长度的时间帧,但不能满足局部时隙改变的自适应性。当网络有新节点加入导致WSN需要改变时,需要在全网中重新广播这个消息,这会带来很大的开销。ZMAC协议使用一种新的调度方法,这种方法采用一种局部的策略,每个节点维持一个本地的时间帧长度,那么节点i的本地时间帧长度就是2α,其中α满足2α−1<Fi<2α−1。时隙的分配采用DRAND算法,假设分配给i的时隙是Si,可以保证节点i两跳范围内的任何节点不会使用Si。
ZMAC使用局部时间帧,需要保证所有节点开始的第一个时隙是在相同的时刻。如果节点时钟同步,通过设定一个精确的时间作为每个节点的时隙是很容易实现的。新节点如果能够保证和网络的全局时钟同步,可以很容易地实现时隙的同步。为了达到全局时钟同步,ZMAC需要在网络启动的初期运行时钟同步算法,如TPSN。在初始化同步之后,每个节点运行一个低开销的局部同步协议。
3)传输控制
在网络的初始化阶段完成之后,每个节点都同步到了一个全局的时钟,并且都拥有了自己的时间帧和时隙,可以对外提供服务。在ZMAC协议下,每个节点可以工作在两个模式:低冲突级别(Low Contention Level,LCL)和高冲突级别(High Contention Level,HCL)模式。在一个节点的TECN周期,如果它从一个两跳相邻节点收到一个外部的冲突公告消息(Explicit Contention Notification,ECN),那么它就转入HCL模式,否则该节点就处于LCL模式。在LCL模式下,任何节点可以在任何时隙竞争信道,但是在HCL下,只有拥有该时隙的节点,以及它的一跳相邻节点才可以竞争信道。不管在哪种模式下,拥有该时隙的节点都拥有最高的优先级。当拥有该时隙的节点没有数据传送的时候,其他的节点可以使用这个时隙。ZMAC协议通过退避、信道空闲评估和低功耗监听(LPL)来实现HCL和LCL。
当节点i有数据传送时,它首先检查自己是不是现在时隙的拥有者,如果是的话,它就选择一个在[0,T0]之间的随机数作为退避时间。当退避时间到达后,它启动CCA来检查信道是否空闲,如果信道空闲,那么它就发送数据;否则它就等待,直到信道空闲为止,然后重复上面的过程。如果节点i不是现在时隙的拥有者,并且它处于LCL状态,但是当前的时隙没有被其两跳邻居范围内的节点占用,在这两种情况下,节点i首先等待一段时间T0,然后在[T0,Tn0]的退避窗口中选择一个随机的退避时间。当退避时间到达后,采用和前面一样的方法处理。还有第三种情况,即节点i处于LCL状态,在这种情况下节点会一直等待,直到遇到一个时隙,这个时隙要么被节点i拥有,要么节点i的两跳相邻节点没有任何节点使用它。
ECN的提出主要是为了解决隐藏终端的问题,虽然DRAND算法产生的时间片调度机制可以保证没有隐藏终端现象,但是由于节点可以窃取其他节点的时隙发送数据,这会产生隐藏终端现象。当节点探测到了一个冲突比较严重的隐藏终端问题后,会产生一个ECN消息。隐藏终端的探测方法有两种:一是计算节点的丢包率,这种方法需要MAC层提供ACK机制,这会带来额外的开销,降低信道的利用率;二是测量信道的噪声水平,当发生冲突时,信道的噪声水平较高,这种方法不需要额外的开销,噪声水平可以在数据发送的时候发送。当一个发送节点检测到一个严重的冲突后,该节点会发送一个单播数据包给它,检测出来发生冲突的那个节点,如果发送节点检测到了多个发生严重冲突的节点,那么它就发送一个带有这些发生冲突节点信息的广播数据包。当节点j收到节点i发送来的ECN消息后,它首先检查自己是否为ECN的目的节点,如果是的话,它就广播该ECN消息给自己的所有一跳相邻节点(不包括节点i),这些相邻节点中肯定有引起冲突的节点。节点j发送的ECN消息叫作两跳ECN,收到两跳ECN的节点设置自己的工作方式为HCL模式。HCL是一个软状态,网络系统会给出一个TECN周期,如果在这段时间内节点没有再次收到两跳ECN消息,那么当一个TECN周期结束后,节点会回到LCL模式。
4)局部同步
由于使用了载波侦听和拥塞退避机制,在发生时钟错位的情况下,ZMAC协议比TDMA协议有更强的生命力,在完全失去时钟同步的情况下,ZMAC退化为CSMA协议。在低冲突级别情况下,ZMAC可以不需要时钟同步,此时协议的性能和CSMA相仿。在高冲突级别情况下,ZMAC协议需要在时间同步的基础上实现HCL。ZMAC协议只需要维护邻近的发送节点之间的时间同步,是一种局部同步。同步的方式还是采用在发送的时间同步包中加入发送节点的时间信息,通过相关的算法来修正节点之间的偏移量。在ZMAC协议中,每个发送数据包的节点都会使用一部分带宽资源来发送时间同步包,发送的时间同步包个数和发送数据包个数的比率叫作Bsynch,如Bsynch为1%,则表示每发送100个数据包才发送1个时间同步包。
在ZMAC协议中,每个发送数据的节点都要周期性地发送时间同步包,当一个节点收到该时间同步包后,它采用下面的计算公式来修正自己与发送时间同步包的节点的时间偏差,即
Cavgnew=(1–βt)×Cavgold+βt×Cnew
式中,Cavgnew代表接收节点收到时间同步包后修正过后的时间,Cavgold代表接收节点现在的时间,Cnew代表发送时间同步包的节点的时间,βt是发送时间同步包的节点的可信因子,表示发送时间同步包的节点时钟的偏移程度,βt要通过计算得到。在此之前先搞清楚几个参数的意义:首先用rdrift表示传感器节点的时钟漂移率,用Eclock表示最大可接收的时钟漂移,用Isynch=Eclock/rdrift表示最小的同步间隔时间,也就是说在Isynch时间内最少要进行一次时间同步信息的维护,用S表示一个节点接收或者发送时间同步包的速度,用αsynch表示时间同步包中的时间在计算接收节点新的时间时所占的最大权重,βt可以用下面的公式来计算,即
βt={αsynch, S×Isynch×αsynch}
以MIC2节点为例,在要求时钟精度为1 ms,节点时钟漂移为40 μs的情况下,如果Bsynch为1%,要保持局部的时间同步,就要在Isynch时间内至少有一个时间同步包,也就是说节点的最小带宽为
包长度/Isynch×(1/Bsynch)=1.568 kb/s
ZMAC协议是一种混合型MAC协议,可以根据网络中的信道竞争情况来动态地调整MAC协议所采用的机制,在CSMA和TDMA机制之间进行切换。当网络数据量较小时,竞争者较少,ZMAC协议工作在CSMA机制下;当网络数据量较大时,竞争者较多,ZMAC协议工作在TDMA机制下,使用拓扑信息和同步时钟信息来改善协议性能。ZMAC协议结合了竞争型MAC协议和分配型MAC协议的特点,能很好地适应网络拓扑的变化并提供均衡的网络性能。但DRAND算法较为复杂,这在一定程度上限制了ZMAC的应用。