S-MAC协议的介绍2因为传感器网络中节点的能量资源非常有限,所以设计MAC协议时能源有效性应放在首位来考虑。在无线传感器网络中,除了正常的数据收发消耗能量外,MAC层上的能量损耗主要来自以下几个方面:3(1)空闲侦听(idlelistening):网络中的节点不知道邻居节点何时向自己发送数据,其射频模块必须一直处于活动状态,因此消耗大量的能源。这是节点能量消耗的最主要来源,因为典型的射频收发器处于接收模式时消耗的能量比其处于待命模式多两个数量级。另外,为避免冲突,节点也需要不断的侦听信道,查询信道是否被占用。在没有或者很少有数据产生的网络应用中,空闲侦听的代价也是很大的。4(2)碰撞冲突(collision):主要由于两个或多个节点在同一个时间段向同一个节点发送数据包,处在接收状态的节点发生冲突,造成信号间相互干扰,导致数据包被破坏,接收节点收到的信息都是没用的,应丢弃,源节点需要重新发送。发送和接收这些错误数据的能量将被损耗掉,这样不仅造成了能量浪费还增加了消息延迟。利用RTS/CTS握手机制可解决冲突问题,但带来额外的协议开销。5(3)串扰(overhearing):在网络中,每个节点都是以广播的形式发送消息的,不是点对点的形式,节点广播范围内的节点就可能接收到发向其他节点的数据包,造成串音干扰。当节点密度很大或者需要传输的数据很多的时候,串扰消耗的能量也是很可观的。为尽量避免这种情况,节点应该在无数据收发时关闭其接收器。6(4)控制信息开销controlpacketoverhead):大多数的MAC层协议需要节点相互之间交换控制信息,这些信息的交换也将损耗一定的能量,MAC的报头和控制包(如RTS/CTS/ACK)不传送有效数据,消耗的能量对用户来说是无效的。当传送仅包含几个字节的数据时,协议开销很大。另外在无线传感网中,由于节点比较“脆弱”(携带有限的能量、易损坏等),每个节点需要确认其邻居节点处于什么状态(是否存活等),因此,也需要发送或接收一些消息。在有的无线传感网中需要进行同步,通过周期的发送同步消息,对节点进行同步,这些都需要消耗能量。7传感器网络的节点本身具有一定的计算能力和存储能力,可以根据物理环境的变化进行较为复杂的监控,传感器节点还具有无线通信能力,可以在节点间进行协同监控。考虑到监测应用中的实际情况,传感器节点很可能处在人很难触及或者无法接近的地方,因此难以更换电池。故对于这类网络应用,节能是MAC协议设计的首要考虑因素。因为传感器节点的计算能力、存储能力和通信能力都有限,每个节点只能获得局部网络拓扑信息,因此在节点上运行的网络协议也要尽可能的简单。8针对无限传感器网络的应用要求,S-MAC协议应运而生,协议主要是在一下几个方面做出了创新1.周期性侦听和休眠2.冲突避免3.流量自适应侦听机制9节点周期性侦听信道(listen)和休眠(sleep),在listen过程中收发SYNC信息,完成网络的维护工作;如果有数据要发送的话,通过握手机制竞争信道,并在随后的sleep时间进行发送数据。其中listen时间相对于sleep时间要小得多,这是由WSN网络的数据流量少且突发的特点决定的。10(1)休眠:节点进行周期性侦听和休眠,其工作的占空比是根据当时网络流量情况自适应调整的。在节点进行休眠时,设定sleep定时器定时。(2)监听信道:sleep定时器超时后,节点从休眠中醒来,启动listen定时器。节点从休眠中醒来后,首先监听信道。这里假设每个节点在传输信道之前有监听信道的能力。MAC要使用物理层协议提供的载波侦听API进行载波侦听,根据物理层传递过来的信道状态量来作为载波侦听的结果,确定信道的空闲。如果上层有数据要发送,则开始竞争信道。否则监听是否有数据传来。以下是S-MAC协议机制下的七个环节的介绍11(3)竞争信道:当一个节点要传送数据时,它首先侦听信道,看是否有其他节点正在传送。如果信道空闲,它就利用退避算法计算出一个随机退避时问来竞争信道,若退避结束后信道仍空闲则立即开始发送,如果发送信息产生冲突,且重传次数超过规定次数,则重复上述过程重新竞争信道;如果有多个待发送节点都监听到信道空闲,则利用退避算法产生的随机退避时间最小的节点最早结束退避,于是竞争到信道,其他节点退避结束后监听信道发现此时信道已被占用,它就持续等待直到当它侦听到信道空闲时,继续下一轮的信道竞争。如果在继续监听过程中listen定时器超时,则节点转入体眠,在下一个listen时间到来时醒来继续竞争信道。12(4)RTS/CTS握手过程:当节点竞争到信道后,开始发送一个短的发送请求帧(RTS)来通知目的节点,目的节点收到RTS后,随后用一个CTS信息帧进行回复。发送节点在接到CTS回复后便可开始发送DATA数据了。其他节点在收到RTS或CTS消息之后,如果确认这个数据包不是发给自己的,则利用一个NAV定时器设置虚拟载波侦听时间,然后进入休眠状态。休眠状态的时间由RTS或CTS信息包里的duration(传输持续时间)来确定,如此,便有效的避免了邻居节点此时传输数据造成冲突碰撞。13(5)数据传输:当源节点和目的节点握手完成后,便开始进行data数据的发送。目的节点接收到数据后,向源节点发出一个ACK应答帧。当源节点接收到ACK后,继续发送data分组,目的节点收到后回复ACK。直到所有数据分组发送完毕,源节点释放信道占有权供其他节点竞争。同理,在data数据帧和ACK应答帧里仍然携带duration数据传输持续时间值,其他的节点可根据此duration值设定休眠定时器,在传输结束后立即醒来监听信道,如果有数据要发送就竞争信道。14(6)数据重传:如果源节点在发出RTS后的一段时间内没有收到CTS帧应答,或在发出data数据后的一段时间内没有收到ACK应答,则说明发送失败,节点立即重传未收到应答的RTS帧或data分组,如果3次发送仍未收到应答,节点放弃发送,转入睡眠,在下一个侦听周期醒来重新竞争信道。(7)网络维护过程:节点需要定时进行SYNC广播,用以向网络中的邻居节点通告自己的时序调度信息。这个SYNC广播信息的收发是在侦听周期的开始初时。同时节点此时也根据接收到的邻居节点的SYNC信息来进行网络的维护,新节点的加入,邻居列表的更新,以及邻居节点是否消亡的判断。15S-MAC协议与IEEE802.11MAC相比,在节能方面有了很大的改善。但睡眠机制的引入,使得网络的传输延迟增加,吞吐量下降。针对S-MAC协议存在的不足,研究人员对其进行了改进,提出了一种带有自适应睡眠的S-MAC协议,有兴趣的同学可以自己找些资料拓展。