LEACH是WSN中第一个基于分簇的路由算法,它将网络中的节点分为簇头节点和簇内节点。由于簇头节点需要协调簇内节点的工作,负责数据的融合和转发,能量消耗相对较大,所以LEACH采用周期性地随机选择簇头节点以均衡网络中节点能量消耗。从而达到延长网络生命周期目的。LEACH协议以“轮”作为运作周期,每一轮分成两个阶段:建立阶段和稳定传输阶段,为了节省频繁选择簇头带来的能量开销,数据的稳定阶段的持续时间要长于建立阶段的时间。在每轮的建立阶段,所有节点用CSMA的MAC协议广播“短消息”通信,自组织成簇,每个簇选取一个节点作为簇头节点。簇形成之后,簇头节点负责为簇内节点建立一个TDMA时隙表。簇建立完成后,簇内节点根据簇内TDMA方案将每帧采集的数据发送给簇头节点,簇头节点对接收到的数据经过过滤冗余数据融合处理后传送给基站。
若网络中簇已经形成,并且簇头节点已经生成TDMA时隙表,就进入数据的稳定传输阶段。
假设传感器节点有连续数据需要发送,成员节点根据簇内TDMA机制,在属于自己的时隙里,将每帧采集的数据发送给自己的簇头节点。若属于自己的时隙尚未到来,则成员节点可以关闭收发器以节省能耗。但在整个传输阶段的过程中,簇头节点的接收器必须一直处于工作状态,用于接收来自不同成员节点的数据。在一轮的数据传输完成后,簇头节点将对接收到的数据进行融合处理,压缩成一个新的复合信号发送到基站。持续一段时间后,开始新的一轮,整个网络进入下一轮运作周期。在网络处于正常工作状态时,一般有多个簇同时工作,簇与簇之间难免会相互受到影响。
LEACH动态随机选取簇头节点,由不同的节点以概率当选簇头节点,将消耗能量较多的融合、转发任务轮流地分配给网络中的节点,有效避免了某些节点能量过快耗尽,能够较好地均衡网络负载,提高整体网络的性能;采用分层结构,节点不需要储存大量的路由信息,也不需要很复杂的计算功能,路由信息的储存以及路径的选择简单明了,非常适用于结构简单的传感器网络;簇头节点对接收的数据也进行压缩融合处理,大大减少了网络原始数据传输通信量。因此,LEACH在性能上要大大优于直接通信协议和静态簇首协议。研究表明:LEACH协议比平面直接通信协议网络寿命(首节点能量耗尽时间)延长了约8倍,比分簇路由算法中固定簇首协议网络寿命延长了约10倍。但是,LEACH算法周期性随机选取簇头节点也会带来一些问题可能会出现部分簇头节点相距基站较远,若此时簇头节点与基站通信仍然采用单跳路径模式,则会消耗较多能量,而且扩展性较差,不适合较大规模的网络;网络中簇头节点的位置经常会发生变化,可能某些处于网络边缘的节点不在任何簇首节点的通信范围之内,被网络所分离;当节点的通信距离有限时,还可能出现簇头节点不能与基站顺利通信等等。
在LEACH 算法中,每一轮循环都要重新构造簇,而构造簇的能量开销比较大。其次, 远离汇聚节点的簇头节点可能会由于长距离发送数据而过早耗尽自身能量, 造成网络分割。另外,LEACH算法没有考虑簇头节点当前的能量状况,如果能量很低的节点当选为簇头节点,那么将会加速该节点的死亡,影响整个网络的生命周期。
针对上述LEACH协议的局限性,提出一种改进LEACH协议——LEACH-T协议。
同LEACH协议一样,LEACH-T协议运行周期也被划分为一个个轮。在每一轮的开始阶段,网络中的每一个节点依据概率当选簇头节点。
在LEACH-T协议中,为使离基站较远的簇头节点能方便地与基站通信,由簇头节点组成以基站节点为根的一棵树,并令基站的深度为0。网络中的所有节点(包括簇头节点)都选择最低深度的邻居簇头节点作为父亲节点,并可以将数据包向前传递给父亲节点。对于基站节点来说,父亲节点实际上就是与其相连接的计算机PC。簇头节点接收叶子节点传来的数据,与此同时还会接收比其在树中深度高的簇头节点传来的数据包,通过将这些数据进行融合处理,最后将数据包沿着生成树路径传送至基站。经过树中簇头节点的层层融合处理,就可大大减少原始数据传输量,从而降低能耗。因为在网络中簇头节点随机选择,其位置经常会发生变化,所以可能有部分叶子节点不在簇头节点的通信范围之内。为了解决这个问题,LEACH-T协议允许一个叶子节点在无邻居簇头节点时请求与之相邻的另一个叶子节点成为其父亲节点。
LEACH-T协议运行周期被划分为一个个轮,并通过增加轮数来定义新的一轮开始。每一轮可以分为簇头选择建立阶段、路由更新建立阶段和数据传输阶段。下面将对这三个过程进行详细说明。
在每一轮的开始阶段,由基站节点发送更新路由数据包(包含轮转数)来通知网络中的所有节点。接收到路由更新消息的节点依据概率当选簇头节点,依概率选定簇头节点的目的和方法与LEACH协议相同。簇头节点选定后,由簇头节点来形成树状结构,基站作为树根。基站本身就是一个簇头,深度定义为0,其他簇头节点的深度在每一轮刚开始时初始设置为无限大。在基站节点一跳通信范围内的节点收到路由更新消息后,将基站作为父亲节点加载到邻居表中,将自己的深度定为l,然后将该更新消息在物理信道上广播。广播消息类型如表3-1所示。
在本章中,我们以TinyOS作为仿真实验平台对LEACH-T协议进行仿真测试,以验证改进后的LEACH协议具有较好的节能效果,能够延长生命周期。
LEACH-T协议仿真实验程序主要包括四个模块:1、控制模块:实现协调各模块之间的功能,是其他三个模块的管理者,对外界提供开放的功能接口;2、通信模块:负责调用系统的通信接口,为其他模块提供数据传输服务;3、数据采集模块:作为一般节点,负责在稳定阶段采集环境数据,按照一定的策略将数据发送给簇头节点。作为簇头节点,负责接收其他节点数据,与自己采集的数据一起进行简单的数据融合处理,发送给汇聚节点;4、簇头节点产生逻辑模块:在建立过程中运行,各个节点产生自己的随机数,计算本轮阈值,将随机数与阈值比较,决定自己是否是簇头节点。
LEACH-T协议仿真实验主要调用的组件如下所示:
TimeSyncM:该组件为网络提供了一个基本的时间同步服务。网络的全局时间基于0号节点的本地时间,所有节点都与网络全局时间相同步。
MHEngineM:该组件是多跳消息层的主要组件,并且提供了数据包的逻辑发送过程,是对TinyOS多跳路由组件库中的ultiHopEngineM的改写。
MHLeachPSM:该模块为改进的LEACH协议提供了路由选择的逻辑方式。
TempMonM:该模块周期性的为含有感知数据的数据包的发送提供网络传输服务。
1.常量
1)、定义通信信道:AM LEACHRADIO=6;
2)、定时器周期:TIMER PERIOD MILLI=250,表示小间隔的等待周期,以微妙为单位;
3)、定时器周期:TIMER LEACH=60000,表示簇周期,此处以一分钟为例,方便调试,实际应用中应该适当调整,使簇头选举引起的损耗经济;
4)、定时器周期:TIMER DATA=1000,表示数据采集周期,此处以一秒钟为例,理由同上。程序中的形式如:
enum
{
AM_LEACHRADIO=6,
TIMER_PERIOD_MILLI=250,
TIMER_LEACH=60000,
TIMER_DATA=1000
};
2.通信数据结构体
主要在簇建立阶段使用,包括本地节点的ID号等其他信息,使用的数据类型为16位无符号整型。其形式如下:
typedef nx_struct LeachRadioMsg
{
nx_uintl6_t nodeid;
}LeachRadioMsg;
3.实用数据结构体
用于保存、传输传感器采集的实用数据,主要包括一个16位无符号整型数据,根据实际情况应当有所调整,此处只为实验使用。形式如下:
typedefnx struct LeachDataMsg
{
nx_uintl6_t data;
)LeachDataMsg;
1.控制模块
使用接口:Boot,Leds,Timer。
实例:Timerl,Timer2,Timer3。
1)Timerl作为簇周期定时器,每次触发引起一次簇头选举,在选举成功后设置开始计时,相对周期较长;
2)、Timer2作为数据采集定时器,每次触发引起节点读取传感器数据行为,一般定为簇周期的1/n(n为一个周期采集数据的次数),每次触发后重新设置;
3)、Timer3等待定时器,用作短时间的等待;
4)、Boot用于初始化传感器,Leds控制LED灯。
2.通信模块:
使用接口:Packet,AMPacket,AMSend,SplitControl,Receive,Send,StdCon, DisseminatiomUpdate
实例: RadioControl,DisseminationControl,Value,Update。
1)、RadioControl是SplitControl的实例,该接口提供初始化通信设备的功能,以及负责控制数据发送和接受;
2)、DisseminationControl是StdControl的实例,该接口用于控制节点广播数据;
3)、Value是DisseminationValue
4)、Update是DisseminationUpdate
5)、Packet用于打包数据;
6)、Send和Receive分别用于发送和接受数据。
3.数据采集模块:
使用接口:Read
实例:Read,RoutingControl。
1)、Read是Read
2)、RoutingControl是StdControl的实例,用于控制数据传送过程中的路由;
3)、RootControl用于建立数据采集树,设置其根节点。
4.簇头选举模块:
维护变量:round,number of node
round:表示节点目前所在的Leach协议周期;
number of node:表示节点个数,初始化由基站统计并广播通知。
实现函数:cluster()
Cluster():实现簇头选举算法,为了使各个节点能够均衡的成为簇头节点,采用轮流方法当选簇头节点。由于每个节点都维护了一个变量round,此变量在局部范围内可以认为是同步,即各个节点上的round值都是一样的,这样就构成了无冲突的条件。同时,每个节点拥有各自的邻居节点表。利用此表的相关信息进行选择判断就可以指定在这一轮中节点是否成为簇头节点,避免了过多的通信开销。
随机部署100个节点,在100 m x100 m正方形区域内,LEACH-T协议与原LEACH协议的网络生命周期对比结果如图所示。
在讨论网络生存时间时,主要是比较首节点能量耗尽出现时间(FND)和末节点耗尽出现时间(LND)。由图4.5中可知,LEACH-T协议相比原LEACH协议,FND提高了17%左右,LND提高了14%。
但是,从上图也可以看出,LEACH-T协议虽然总体能耗大幅度降低,但是首节点死亡时间到10个节点死亡出现时间的趋势较大,即有少部分节点消耗能量比其他节点较多。这是因为路由建立后,虽然每个节点依据邻居表选择父亲节点时考虑了邻居节点的能量,但还是会优先选择深度较低的簇头节点作为父亲节点,因此,靠近基站附近的簇头节点(深度较低)不仅要接收本簇内成员节点数据,还要接收较高深度的簇头节点发来的数据,然后再进行融合处理后发给基站,这过程需要消耗较多能量。
2.FND和LND随节点个数变化
保持区域面积100 m x100 m不变,当节点个数在100到300之间变化时,LEACH-T协议与原LEACH协议的首节点死亡时间(FND)随节点数的变化关系如图所示,末节点死亡时间(LND)随节点数变化关系如图所示。
首节点死亡时间(FND)随网络节点数变化图
末节点死亡时间(LND)随网络节点数变化图
LEACH-T协议与原LEACH协议的LND随着节点数增加都有所增大,且LEACH-T协议的LND增长幅度较大。这是由于节点数密集,簇头节点数相应增多,LEACH-T协议中通过对深度较低的簇头节点数据多次融合,因而节省能量消耗。