3.4 无线传感器网络的MAC协议
3.4.1 基于竞争的MAC协议
1. S-MAC协议
S-MAC协议是由美国南加利福尼亚大学的Wei Ye等人较早提出的,它适用于无线传感器网络的MAC协议,而且是在总结传统无线网络的MAC协议的基础上,根据无线传感器网络负载量小、针对节点间的公平性及通信时延要求不高等特点来设计的,其主要的设计目标是提供大规模分布式网络所需的可扩展性,并同时降低能耗。S-MAC协议的设计参考了PAMAS和IEEE 802.11MAC协议等MAC协议,并做出了如下假设。
• 大多数节点之间是进行多跳短距离通信的;
• 节点在无线传感器网络中的作用是平等的,即一般情况下没有基站;
• 为了减少通信量,采用网内数据处理方式;
• 运用信号的协作处理,改善感知信息的质量;
• 节点具有较长的空闲时间而且可以容忍一定的时延;
• 网络寿命是首要考虑的问题。
S-MAC协议采用的机制有以下几种。
• 将节点的工作模式分为侦听和睡眠两种,并让节点尽可能长时间睡眠以达到节能的目的;
• 通过协商的一致性睡眠调度机制让相邻节点在相同时间活动、相同时间睡眠,从而形成虚拟簇;
• 通过突发传递和消息分割机制来缩短消息的传输时延和减少控制消息的开销;
• 通过流量自适应的侦听机制,减少网络时延在传输过程中的累加效应。
S-MAC协议虽然减少了空闲侦听所消耗的能量,但其缺点是在协议初始节点的工作周期就已经被设定并保持不变,无法适应网络负载的动态变化。
1)周期性地侦听和睡眠
S-MAC协议基本的节能手段是依靠传感器节点定期进入睡眠状态从而减少节点空闲侦听的时间来实现的。S-MAC把时间分割成许多时隙,在每个时隙中又划分为侦听和睡眠两种状态,如图3.1所示。一次完整的侦听和睡眠称为一帧,其中侦听的时间占一帧的比值称为占空比。在侦听状态,节点可以和其通信范围内的相邻节点自由地进行通信;在睡眠状态,为了减少节点功耗,节点不参与任何的数据传递活动,只是设定计时器开始计时,这样在经过一段时间后自己就能自动醒来,醒来后则立刻查看是否有消息传递给自己。在S-MAC协议中规定,相邻节点要最大限度地采用相同的调度时间表,也就是说要在相同的时间唤醒和睡眠,这样有利于确保相邻节点能及时进行通信,减少在传输消息时的控制开销。在无线网络中,节点可以通过定期向相邻节点广播同步包(SYNC)来交换调度信息,以达到同步的目的。
图3.1 睡眠侦听机制
S-MAC协议将节点的活动状态分为两部分以保证节点能接收到数据包和同步包,第一部分用于发送和接收同步包,第二部分用于发送和接收数据包,每部分都设有载波帧听时间。在实际应用中,发送同步包和数据包可能存在三种情况,如图3.2所示,其中发送者1只发送同步包,发送者2只发送数据包,而发送者3既发送同步包又发送数据包。
理论上,网络中所有的节点都需要遵守相同的调度时间,不能有丝毫的误差。但是由于传感器节点的时间表本身就是随时变化的,而且无线传感器网络还是多跳地传输数据,所以只有在局部节点之间才有可能形成同步。如果节点之间的调度时间是相同的,那么它们将构成“虚拟簇”(Virtual Cluster),在部署区域广阔的传感器网络中,能够形成众多不同的虚拟簇。假如某个节点的周围有不同的虚拟簇,那么该节点就处于虚拟簇的边界,称为边界节点(Border Node)。如图3.3所示,节点A就是边界节点,它一定要与其相邻节点保持同步,所以边界节点一般会记录下两个或两个以上的调度信息,从而成为虚拟簇之间通信的桥梁。
图3.2 一个节点与多个不同发送节点之间的定时关系
图3.3 边界节点和其相邻节点的关系
2)冲突避免
如果有两个或两个以上的相邻节点想同时与一个节点进行通信,那么它们都会试图在该节点的侦听时段发送消息,在这种情况下必然发生数据的冲突和碰撞,于是它们就需要开始争夺对信道的使用权。S-MAC采用虚拟载波侦听和物理载波侦听的方法,并使用RTS/CTS(请求发送/清除发送)来解决冲突和碰撞问题。RTS/CTS/DATA/ACK是每个节点在数据传输时都要历经的通信过程,在每个传输包中都有一个域值表示剩余的通信过程还需要维持多长的时间,所以如果某一个节点在收到一个不是发给自己而是发给其他节点的数据包时,它就会判断自己还需要睡眠多长时间,同时该节点会将这个值报告给网络分配矢量(NAV)并设置一个定时器,该矢量会随着接收到的数据分组而持续更新。当定时器开始计时,节点就每次将NAV值递减1,一直到0。当节点需要传输数据时,它会首先查看NAV值,如果NAV不为0,那么节点就认为此时介质忙;反之,则认为介质空闲。这个过程常被称为虚拟载波侦听。
物理载波侦听是指在物理层侦听信道,从而判别是否有数据传输。载波侦听时间是在竞争窗口中随机选择的,这样做是为了防止发生碰撞。只有当虚拟和物理载波侦听都指出介质空闲时,介质才能被认定空闲。
例如,图3.4所示是一个多跳网络,它由节点A、B、C、D、E、F构成,每个节点只能和其一跳以内的相邻节点进行数据的传输。假设此时节点A正向节点B发送数据,那么显然节点D应该睡眠,因为它的传输干扰了节点B正确接收节点A发出的数据。而节点E和节点F不会影响其他节点,所以它们不需要睡眠。节点C和节点B之间的距离有两跳远,即使它传输数据也不会干扰到节点B接收,所以它可以自由地向其他节点(如节点E)发送数据。但是,节点C却无法接收节点E的应答(CTS或其他数据等),这是因为节点E和节点A同时传输会在节点C处发生冲突,所以即使节点C传输数据,也是浪费能量。总而言之,不管是发送者还是接收者,它们之间相邻的节点在侦听到CTS或RTS包后都需要睡眠,一直要等到传输结束才可以醒来。
图3.4 多跳网络冲突避免机制
3)自适应侦听
在S-MAC协议中,节点周期性地进入睡眠状态会增加时延,这种时延并不会自动消除,而是会在每跳中累积,所以S-MAC采用自适应侦听策略来减少这种累加的效应。它的基本思想是当一个节点在其通信范围内得知相邻的节点要传输数据时就睡眠,并记录其传输数据的时间,只有当其相邻的节点传输数据结束后才能醒来一个短暂的时间,这时它可以通过侦听信道查看信道的状态(忙或空闲),判断是否有数据需要传输。在这种方式下,如果此时正好有一个消息需要传递给该节点,那么它就可以立刻接收,而不用等到该节点的睡眠结束后再进行传递;假如没有任何消息需要传递给该节点,那么它就继续睡眠。
4)消息传递
在无线信道中,数据包越长,在传输时出错的概率越大;反之,数据包越短,在传输时出错的概率越小。也就是说,数据传输时出错的概率与数据包的长度成正比,长包成功传输的概率要小于短包。根据这一原理,S-MAC协议将长消息分成很多子段,只采用一次RTS/CTS握手,就可以连续集中发送全部子段,这便是消息分段机制,如图3.5所示。每个子段的发送都需要等待接收者的答复(ACK),假如发送者没有收到某个子段的答复,就重传该子段。整个发送过程只需要一次RTS/CTS握手,这样既可减少控制开销,又可提高发送成功率。
图3.5 消息分段机制
2. T-MAC协议
通过前面的分析可以知道,S-MAC虽然在一定程度上提高了能量效率,但是它不能根据网络负载调整自己的调度周期。在S-MAC协议的基础上,研究人员提出了一种新的MAC协议—T-MAC协议。无线传感器网络中MAC协议主要解决能量消耗问题,在几个主要的耗费能量的因素中,持续侦听所耗费的能量占了绝大部分,因此我们必须合理地安排侦听时间,T-MAC协议根据一种自适应占空比的原理,通过动态地调整侦听与睡眠时间的比值,从而实现节能的目的。
1)基本思想
T-MAC协议相对于S-MAC协议来说,保持了S-MAC的周期,根据网络负载的流量自适应地调整激活的时间。在T-MAC协议中,为了减少无用的空闲侦听,采用以下方式来发送数据,如图3.6所示,每个节点周期性地进行睡眠,被唤醒进入活动状态,进行收发数据,接着又进入睡眠状态,下一周期开始。
图3.6 S-MAC和T-MAC协议的基本机制
节点单播通信过程采用的是RTS/CTS/DATA/ACK交互的原理,节点有规律地被唤醒,如果在一个周期中没有发现需要激活的事件,那么活动结束,开始进入睡眠状态。激活事件的定义为:
• 周期定时器溢出,唤醒事件;
• 物理层接收到数据;
• 显示无线信道忙,接收信号强度指示;
• 通过RTS/CTS帧的监听来确认相邻节点的数据交换是否已经结束。
T-MAC协议规定,当相邻节点还没有结束通信时,节点不能进入睡眠状态,因为该节点很有可能就是下一个数据的目的节点。假设节点检测到串扰以后能够触发一个空闲间隔TA,TA必须足够大,以保证节点能够监测到串扰的CTS,T-MAC协议规定TA取值约束为
TA>C+R+T
式中,C为竞争信道的时间,R为发送RTS的时间,T为RTS分组发送结束到开始发出CTS的时间。
节点发送完RTS分组之后,如果未收到对应的CTS分组,则有以下三种情况:
• 由于无线信道发生碰撞,目的节点没有接收到RTS分组;
• 目的节点已经收到串扰的分组;
• 目的节点正处于睡眠状态。
如上面所述,如果发送节点在TA时间间隔内没有收到CTS分组,它就会进入睡眠状态。但是从上面的前两种情况可以看出节点还没有收到CTS分组,直接进入睡眠状态会导致实时性降低,接收节点一直处于空闲监听状态,浪费大量的能量,因此T-MAC协议规定,节点发送RTS分组之后没有收到CTS分组,则重新发送一次RTS分组,若还没有收到则进入睡眠状态,T-MAC协议的基本数据交换如图3.7所示。
2)主要解决的问题
在T-MAC协议中,当一个节点准备向其相邻节点发送数据时,相邻节点已进入了睡眠状态,那么我们称这种情况为早睡,这也是T-MAC协议主要解决的问题。例如,AB、BC、CD是三对相邻节点,可以相互通信,数据传输方向为A→B→C→D。当节点A通过竞争方式获得与节点B的通信权利之后,节点A发送一个CTS分组给节点B,节点B接收到之后应答一个CTS分组给节点A,则完成AB之间的通信。当节点B发送CTS分组时,节点C也可以接收到,从而触发了一个新的侦听时段,在AB通信结束后接收节点B发送过来的数据,而节点D由于没有接收到CTS数据,因此节点D在BC通信结束后处于睡眠状态,这样节点C就只能等到下一个周期唤醒之后才能发送数据。
图3.7 T-MAC协议的基本数据交换
图3.8 早睡问题的两种解决方法
在T-MAC协议中,有两种方法可以解决早睡问题,如图3.8所示。第一种是满缓冲区优先(Full-Buffer Priority)。当节点的缓冲区快满时,节点对收到的RTS分组不回复CTS,而是立即向缓冲区内数据的接收节点发送RTS,建立连接之后发送数据,以减轻缓冲区负载。如图3.8(b)所示,节点B向节点C发送RTS,而节点C因为缓冲区满不回复一个CTS分组,而是向节点D发送RTS以求数据传输。
这种方法在一定程度上减少了早睡问题的发生概率,并可以控制网络负载流量,但在网络负载过大时更容易发生冲突。
第二种方法是未来请求发送(Future Request-To-Send,FRTS),这种方法采用提前通知需要接收数据的节点的方法来避免早睡,如图3.8(a)所示。当节点C接收到CTS后,除了触发自己保持监听状态,还发送一个FRTS分组给节点D,FRTS分组中含有节点D需要等待的时间,在此空闲状态中,节点D必须要保持侦听状态。当节点C发送FRTS时看哪个节点会干扰节点A发送的数据,节点A需要延迟原数据的发送响应的时间,但是又必须保持对信道的占用,因此节点A在这段时间内发送一个与FRTS一样长度的分组,该分组不包含任何有用的数据,然后才接着发送有用数据信息。这样当数据传到节点C之后节点D还是处于唤醒状态,保证数据的实时传输。由于采用了未来请求发送机制,协议需要增加一个FRTS分组传输的时间,该方法提高了系统吞吐量和实时性,但是多了一些控制消息,相应地要消耗能量。
T-MAC协议对S-MAC协议进行了一定的改进,减少了空闲侦听,从而提高了能量效率。为了有效解决节点的早睡问题,T-MAC提出了两种方案,但都不是很理想,该协议有待进一步的研究。
3)Sift协议
无线传感器网络中存在这样一种现象,多个相邻的节点都会发现同一事件并传输相关信息,因此节点会存在空间上的竞争,Sift协议就是为了解决这个问题而提出来的。Sift协议与无线局域网的MAC协议有所不同,它采用的是CSMA机制,竞争窗口的大小是原本就设定好的,采用非均匀概率来决定是否发送数据,它具有以下几个特点。
(1)无线传感器网络中基于空间的竞争。一般来说,许多无线传感器网络都在某一区域放置了多个节点,利用多个节点监测到同一事件来保证数据的可靠性。这种冗余数据的发生将导致相邻节点间相互抢占信道,从而造成基于空间的竞争。
(2)基于事件的报告方式。在无线传感器网络中,并非所有的节点都需要报告事件,汇聚节点只需接收到所发生事件的相关信息即可。
(3)感知事件节点密度的自适应调整。大量的无线传感器节点接收到同一事件后,随着目标的移动或者时间的推移,传感器网络感知到事件的节点也会相应地发生变化,从而能够更好地观测目标事件。
由于无线传感器网络节点的空间竞争,对于同一事件,只需要监测到事件的部分节点发送数据给目的节点就可以实现有效数据的传输。Sift协议规定,当有N个传感器节点共享同一信道并同时监测到同一事件时,R个节点(R<N)能够以最快的速度无碰撞地发送这个事件的相关信息,从而阻止剩余N−R个节点发送该事件的相关信息。
Sift协议采用固定竞争窗口方式来实现数据的传输。一般来讲,在基于竞争的MAC协议中,节点在发送数据前,需要先在发送窗口[1,CW]内随机选择一个时隙,并一直侦听到该时隙来临。若信道在侦听期间一直保持空闲状态,则节点立即发送数据,否则就一直等待,直到无线信道空闲为止,但这样会存在以下几个问题。
(1)当多个节点侦听到同一事件并在同一时刻发送数据时,会造成信道忙,同时发生竞争,因此需要重新调整CW值来重新发送数据,这将浪费大量时间。
(2)若调整后CW值过大,但当同时侦听到事件的节点数目很少甚至没有时,等待时间过久将导致传输延迟。
(3)选择的CW值必须能保证需要发送数据的节点都有机会发送数据,每个时隙被选中的概率也相同。而传感器网络只需要满足N个节点中的R个节点成功发送事件的相关信息即可。
图3.9展示了Sift协议的相关代码,采用的是CW值固定的窗口,节点不再从此窗口中选择发送时隙,而是根据窗口中的时隙来决定发送数据的概率。如图所示,Sift协议采用pickslot在窗口[1,CW]中选择时隙,Wait用来表示等待的时间。
Sift协议的工作流程是:当发送节点需要发送消息时,先假设有N个节点竞争,如果节点在第一个时隙没有发送消息,也没有侦听到其他节点发送数据,则节点将减少假想的与它竞争的发送节点,并增加它在第二个时隙内发送消息的概率,如果第二个时隙内还是没有节点发送数据,那么节点再减少假想的竞争节点,同时进一步增加它在下时隙内发送消息的概率。根据这样的规定,节点在第r个时隙内发送数据的概率为
式中,α为分布参数,0<α<1;Pr随r的增加呈指数增加,表示在窗口中时隙越靠后,发送的概率越大。参数α的选择与N和CW的值有关,Sift协议的设计希望满足下面的性质:
(1)在第一个时隙,当存在N个节点需要发送数据时,有且仅有一个节点在这个时隙成功发送数据的概率最高。
(2)在第二、第三……,直到发送窗口的最后一个时隙中,有且仅有一个节点在时隙中成功发送数据的概率最高。参考文献[4]证明当α=N−1/(CW−1)时满足上面的两条性质。
Sift协议的状态及状态转换描述代码如图3.9所示,节点有空闲、竞争、接收和等待确认4种状态,如果节点有消息需要发送,则按式(3.1)在各个时隙计算发送概率。如果在发送时隙之前有其他节点发送数据,则节点需要更新计算时隙,而IEEE802.11 MAC协议需要记忆剩余时隙个数。
图3.9 Sift协议的状态及状态转换描述代码
Sift协议是一种非常新颖的竞争性MAC协议,它充分考虑了无线传感器网络的业务特点,特别适合冗余、竞争与空间相关的应用场景。Sift协议实现方法简单,关键在于在固定长度的竞争窗口中选择时隙时需要用到一种递增的非均匀概率分布,而不是传统协议中的可变长度竞争窗口。Sift协议提高了事件消息的实时性与网络的带宽利用率,但是没有充分考虑能量效率,研究人员下一步将考虑把Sift协议与SPAN或GAR协议结合,来提高能量效率。