无线传感器网络拓扑的监控与维护
扫描二维码
随时随地手机看文章
摘要:以ZigBee协议为基础,提出了一种新的无线传感器网络拓扑结构的监控和维护方法。创新性地设计了基于叶子节点的通讯模式,该模式运用协议栈自有运行流程来获取节点的加入或丢失信息、实现网络拓扑的监控,并通过设计一种基于关联表的链表式存储结构来进行动态网络拓扑的维护。经过在实际办公环境监控平台上验证表明,该方法数据传输量小,资源占用少,操作简便,具有较强的应用推广价值。
关键词:无线传感器网络;ZigBee;拓扑结构;监控与维护
0 引言
随着无线传感器网络技术在军事、工农业、城市管理、环境监控等各个领域的快速发展,作为系统基础组成部分的网络拓扑结构成为研究的一个重要方面。目前,国内外的科研机构在网络拓扑发现以及拓扑的监控和管理方面开展了大量的相关研究工作,但大多停留在理论和仿真层面,这些通过在高性能的PC机上搭建仿真模型来验证算法效果的研究,大多缺乏能够应用到实际系统的可行性案例。安徽财经大学的赵涛,根据在聚合节点(sink)收集到网络内部节点报文接收或丢失的情况,通过发现网络中所有叶子节点到sink节点的数据传输路径,来推测网络的逻辑拓扑。该方法计算比较复杂,120节点规模网络在主频为2.8 GHz的CPU主机上运行尚需9秒的时间,同时会受到节点资源、计算速度、实施条件等限制,因此,这种方法很难在实际应用中实现。德州仪器(TI)公司的官方网站也给出了一种获取网络拓扑结构的方法,该方法采用发送网络发现命令的方式,并通过返回结果来确定网络拓扑结构。此法虽然能够在实际应用中实施,但需要定期向网络中的所有节点发送发现命令,因而数据消耗量巨大。
本文以Z-stack协议栈为基础,采用叶子节点通讯方式,并利用协议自身的运行流程,提出了一种轻量数据消耗、真正面向应用的拓扑监控方案,同时通过设计一种基于关联表的链式存储结构来实现对网络拓扑信息的维护,因而在解决网络监控与维护方面更具有实际应用价值。
1 Z-stack协议栈原理简介
作为ZigBee联盟的一个重要的组织成员,2007年,TI公司宣布推出业界领先的ZigBee协议栈Z-Stack。Z-Stack符合ZigBee 2006规范,能支持多种平台,其中包括本系统使用的、面向IEEE 802.15.4/ZigBee的CC2430片上系统解决方案。
1.1 ZigBee协议栈的体系结构及信息传递流程
ZigBee协议栈的体系结构如图1所示,由图可见,ZigBee协议采用分层体系结构,由物理层(PHY)、介质接入控制子层(MAC层)、网络层(NWK)和应用层(APL)组成。其中,应用层框架包括了应用支持子层(APS)、ZigBee设备对象(ZDO)及由制造商制定的应用对象。
在ZigBee网络中,信息或数据的传递将依照上述层次结构实现。上层发送的数据或指令按照应用层-网络层-MAC层-物理层的顺序,从上至下依次进行处理;底层返回的数据则按照物理层-MAC层-网络层-应用层的顺序,从下至卜处理后返回给上层用户。每个层次负责发送到本层数据的分析和判断,并对于属于本层次的数据或指令做出相应的动作响应;对于不属十本层的数据,则按照规定格式打包后发送给上、下一层。
1.2 节点加入与失步流程
为了维护系统的正常运行,ZigBee协议栈还提供了一些必须的消息响应流程,其中包括节点加入网络和失步响应的流程。
节点加入流程如图2所示。当子节点申请加入网络时,会启动加入流程。子节点的加入请求通过其NWK层、MAC层、PHY层传递给父节点;父节点收到加入通知消息后,又通过其PHY层、MAC层、NWK层将该情况上传给应用层,最后通过ZDO JoinIndicationCB()函数的调用,得到子节点加入的消息。
节点失步流程是指终端节点丢失其父节点的同步信号时,向上层报告的失步情况发生的流程。其具体流程如图3所示。
终端节点每隔一段时间就会开启与父节点的同步,当在设定时间内没有接收到父节点的同步信号时,就会产生失步指示信息,协议栈将该失步信息层层上传,最后通过调用ZDOSynclndicationCB()函数,将信息传达到应用层。
1.3 关联表
TI的Z-stack协议栈在全功能节点中可以维护associateddevices t结构的关联表,关联表中保存有与本节点直接关联(父子节点)的相关信息,包括关联节点的短地址、设备类型、连接状态等,基本上可以满足网络拓扑结构监控和维护的信息需求。
TI的ZigBee协议栈虽然可为用户开发提供强大支持,但是在网络监控和维护上并没有专用的接口。一方面,该协议栈只能发现节点加入网络,但是无法发现节点非主动性的丢失或退出,因而不具备网络拓扑监控的功能;另一方面,协议在每个全功能节点中部维护了与之关联设备的关联表,但是并没有维护整体网络的关联信息,因而无法掌控网络拓扑的全貌。鉴于协议栈在网络拓扑功能上的不足和缺陷,本文以协议基本流程为基础,提出一种实现整体网络拓扑监控和维护的方法,该方法可以满足一般系统对于拓扑结构的监控和维护需求。
2 网络拓扑结构监控
网络拓扑结构监控的主要目的是实现拓扑结构的建立和在结构发生变化时及时获取变化情况,其中最主要的是实现节点加入和退出事件的捕捉。节点加入事件的获取相对容易,可以通过加入节点主动上报等方式来获取;而节点丢失事件获取要复杂得多。现阶段,对节点丢失情况的监控多采用系统定期查询的手段。采用查询方法时,其实时性与查询周期的长短直接相关:查询周期设置较长,拓扑变化反映时间增长,实时性变差;而查询周期设置较短,则传输数据量增大,占用系统资源,往往很难在二者之间找到平衡点。协议栈中数据或消息的传递是一个复杂的过程,为了尽可能地降低系统资源的占用、节约能耗,除了维护系统正常运行所必须的数据通讯外,还应尽量减少人为添加(应用层)的数据通讯量。因此,最好的办法就是利用协议自身的数据传递或者节点加入、失步等流程来实现相关信息的获取。
本文设计了一种基于网关——叶子节点通讯的节点丢失情况获取方法,该方法可以利用协议栈自身的运行流程,以较少的数据通讯量和简单的操作,实现网络中所有节点的丢失情况获取。
2.1 节点加入事件的获取
通常情况下,节点加入事件多采用加入节点主动上报的方法来获取。该方法操作简单,但是需要人为地发送相关加入信息,会增加系统数据通讯量。由图2所示的节点加入流程可知,如果有子节点加入网络,加入的指示信息都会通过ZDOJoinIndmationCB()函数的调用报告给父节点。即该函数的调用证明有了节点的加入事件。因此,本文通过在此函数中添加向应用程序报告的功能,即可通知用户了节点加入事件的发生。
2.2 节点丢失信息的获取
由图3所示的流程可知,协议栈通过调用vold ZDOSyncIndicationCB(byte type,uint16 shortAddr)函数可实现失步情况的报告。该函数具有节点丢失的指示功能,并能够指示丢失节点与本节点的父子关系和短地址等。但在实际的应用中发现,该函数的调用是有条件限制的,具体实施条件如下:
父节点丢失:从失步报告流程可知,终端节点能够自动轮询发现其父节点同步信号的丢失,而无需人为添加任何触发条件,引发函数调用。但路由节点不支持与父节点的轮询机制,因而不能产生父节点丢失情况的报告。
子节点丢失:对于包括终端节点在内的所有类型节点的子节点丢失,在未加相应处理的情况下,协议栈都不会引发该函数的调用。
由实施条件可知,该函数的丢失指示并不适用于所有类型节点的丢失情况,因此,如果要得到除终端父节点外网络中所有节点的丢失情况,就需要人为加入其他处理,以触发ZDOsynclndicationCB()函数的调用,从而实现丢失事件的获取。
2.3 叶子节点通讯触发方法
通常采用的基于查询的网络发现机制部需要在所有节点间发送数据,因而增大系统的数据开销。这里以图4所示的拓扑结构为例,图中的叶子通讯需要进行14条数据的查询和14条数据的应答才能够完成一次节点丢失情况的获取。为了尽可能减少数据通讯和操作的复杂度,本文设计了一种基于网关——叶子节点通讯的节点丢失情况获取方法,以便用较少的数据通讯量和简单的操作来实现网络中听有节点的丢失情况获取。
研究发现,失步函数的触发可以通过加入数据通讯来实现。因为在数据发送的过程中,协议栈会开启数据发送流程,数据发送后则会自动检测接收方应答帧。这样,如果节点丢失,则发送节点无法接收到有效应答,进而引发节点失步指示函数的触发。
具体触发时,如果节点之间有数据通讯,发送数据节点则能够发现接收数据节点的丢失,从而引发vold ZDOSynclndicationCB(byte type,uint16 shortAddr)函数的调用。
在同一条数据通路上的节点进行数据转发时,数据传递路径上的各个节点都会发现其父节点(数据由下而上)或者子节点(数据由上而下)的丢失,进而调用void ZDOSynclndicationCB(byte type,uint16 shortAddr)函数。如图4所示,如果网关发送数据到终端节点1,则在网关到终端节点1数据路径上的所有节点(网关、路由1、路由2、终端1)都能够发现其了节点的丢失;终端节点1发送数据到网关,则路径1上的所有节点都能发现其父节点的丢失。
该方法通过建立数据通路上起始节点和末端节点的数据通讯来实现整条路径上节点丢失情况的获取。其具体操作过程分为两个部分:其一是父节点丢失情况的获取。由前面提到的实施条件可知,终端节点无需任何人为操作就能够发现其父节点的丢失,而无需对此部分做特殊处理,因而只需对路由节点做出处理。而由路由叶子节点(如图4中路由节点2、4)向网关发送数据时,则可实现整条路径上所有节点丢失情况的获取。其二是了节点丢失情况的获取。子节点丢失的获取可以通过网关向叶子节点(图4中所有终端节点和路由4)发送数据的方法来覆盖整个网络中的所有节点,从而使全部节点都能够发现其了节点的丢失情况。
人为加入上述两部分数据通讯后,只要整个网络中有节点丢失,该丢失节点的父节点和子节点都会产生失步函数voidZDO_SyncIndicat ionCB(byte type,uint16 shortAddr)的调用,这样就可以简单地在该函数中添加向上层应用报告的功能,实现网络中节点丢失信息获取。并且数据通讯量由原来的28条减少到6条,从而大大减少了数据消耗和由此带来的系统资源占用。
3 网络拓扑结构与维护
Z-stack协议栈在全功能节点中只维护与本节点直接关联的节点信息的关联表,没有整体网络信息的存储功能。为了解决Z-stack关于网络全貌信息缺失的缺陷,结合本文提出的网络拓扑结构监控方法,设计一种拓扑结构维护的方法,在占用少量资源的情况下获取整个网络的拓扑信息,并将信息整合到网关节点中统一维护和管理,从而建立网络拓扑的管理办法,实现具有自组织、自适应能力的智能网络管理机制。
3.1 管理模式
网络信息管理可采用搜集模式和监控模式相结合的方式。搜集模式通过发送指令搜集网络拓扑信息,赋予用户即时获取当前网络结构的能力;监控模式通过监控从网络组建起历史网络的结构变化,实现网络拓扑信息更新,从而整合为当前网络拓扑结构。
搜集模式在实现时,首先由网关设备广播一个命令来搜集设备信息;然后,收到广播信息的路由节点再按照一定的数据格式,由网关返回子节点关联信息;当网关收到各个路由节点的返回信息后,再将其组合为整个网络中的设备信息。
监控模式则是从网络形成起,网关节点就开始监控所有节点的状态;当路由节点检测到其子节点加入或者退出的时候,向网关上报该子节点的状态变化信息,而网关节点检测到子节点加入或者退出则不用上报,直接在网关内部处理;当网关接收到路由节点上报的状态信息后,就会删除或者增加该路由子节点的关联信息,同时更新整体网络结构。
3.2 网络拓扑存储结构
网关节点作为整个网络拓扑结构管理的中心,负责拓扑结构的添加、删除和更新,因此,必须在网关节点存储整体的网络拓扑结构信息。受网关资源的限制,本文采用分级动态链表的形式保存网络拓扑信息,以便以较少的资源占用实现拓扑信息的动态存储。本设计的网络拓扑存储结构如图5所示。
图5中,AssocLisHead是装载路由节点头信息的数组,包含有该路由节点的长地址、短地址、父节点短地址和拥有的子节点数以及指向其子节点链表assoc list的头指针;assoclist链表中记载着这一路由下的了节点信息,包括子节点的短地址、长地址、类型、连接状态等。在该路由下每增加一个子节点,就会在assoc list链表中添加一个节点信息,当节点离开时,又会将相对应的链表删除。这样,网关就可以方便地对当前网络中的昕有节点的拓扑和相关信息进行查找、更新、维护。
3.3 网络维护方案
网络维护的实施要建立网络中所有类型节点间的区分与协作机制。区分是根据节点类型的不同、事件类型的不同做出区别处理;协作是在所有节点间建立连动响应机制,相互配合,并实现信息的汇聚和统一管理。具体的网络维护分为事件响应和信息维护两部分。
3. 3. 1 拓扑变化事件的响应
拓扑变化主要是指节点加入事件和节点退出事件。当节点加入事件是指节点加入网络时,其父节点负责将该子节点加入信息上报网关;节点退出事件则是指获取到的网络节点丢失信息的处理。处理可分为两种情况:一种是当传递来的type=1时,即丢失节点为本节点的父节点时,开启网络加入流程,使节点可以重新加入网络,并恢复网络的正常运行;第二种情况是type=0时,即本节点发现其中一子节点丢失。本方法对于长时间无法连接的子节点,将启动移除(LEAVE)流程,将该子节点从网络中删除,同时向网关节点报告子节点退出的消息。
需要注意的是:当子节点丢失时,有的时候是真正丢失了(长时间或永久无法连接),但更多的时候只是暂时地失去联系,随着子节点的重新加入申请,又可以加入网络,恢复正常的运行状态。因此,设计时需要将暂时失步和真正丢失这两种情况区分开,再分别做出合理的处理。
本文采用延时判断的方式,即当检测到失步现象发生后,先定时一段时间,冉做判断:如果定时一段时间后,节点仍旧失去联系,则判定是真的丢失了节点,此时可通过NLMELeaveReq移除子节点,同时上报网关节点丢失的消息;否则认为只是暂时的节点失步。节点退出情况的处理流程如图6所示。
3.3.2 拓扑信息的维护
由网络各个路由上报的节点加入或退出的信息最终将存网关汇集,网关按照上报的节电加入、退出信息对网络拓扑存储关联表进行添加、删除、更新,以维护当前网络拓扑状态。其具体方法是先判断接收信息的种类,然后对节点加入信息和节点退出信息分别处理。对于加入信息,可核查是否是已经存在于网络中的点,如果是已经存在的,则更新存储的节点信息;如果是一个全新的点,则为该节点分配存储空间,并在对应的父节点下增添子节点分支。对于退出信息,同样核查是否是存在于网络中的点,如果该节点已经不存在了,则报错处理;
如果是存在的点,则将该节点信息删除,并解除与其父节点的父子联系。
网关在接收到由父节点上报的节点加入消息时,还需要对加入子节点类型进行判断;如果是终端节点,则在其父节点的链表中更新或加入该子节点的相关信息;如果加入节点是路由节点,除了在该路由节点父节点的链表中加入该子节点信息外,还要添加该子路由关联头信息。图7所示是实现网络拓扑维护管理的示意图。
4 实验验证
本文的实验验证可在基于CC2430搭建的WSN开发平台上进行,该平台共使用5个终端节点、5个路由节点、1个网关和PC调试机。所有传感器节点自组织成无线网络,并将感知信息和拓扑信息汇报给网关节点,网关节点与PC机通过串口相连,操作人员可以通过上位机的调试软件对网络状态进行实时监控。图8所示是其上位机监控程序界面。该试验网络的节点布局示意图如图9所示。
实验时随机选取监控过程中两个时间点的网络拓扑结构监控过程示意图如图10所示。其中两个时间点在实验过程中上报的拓扑变化信息如表1所列。
从实验结果可以看出,一方面,父节点能够实时上报其子节点加入和丢失的网络变化情况;另一方面,子节点也能够及时检测出其父节点的丢失,并选择其他父节点重新申请加入网络。可见,本系统具有网络的自组织、自适应的动态网络监控与维护功能。
5 结语
本文提出了一种通过终端与父节点间的失步信号来捕捉与基于叶子节点人为触发失步函数调用的方法,可以实现整个网络节点丢失情况的获取。其中,通过终端与父节点间失步信号来捕捉节点丢失信息的方法无需人为干预,能够通过协议自动实现,从而减少了查询的数据量和对其操作带来的系统资源占用;基于叶子节点的失步函数触发机制,只通过叶子节点与网关的数据传输,就能够完成整个线路上节点丢失情况的获取,在实际应用中,经常由终端上报数据,相当于终端自动完成数据线路上父节点丢失情况的发现,使该方法的实施更加简单。这两种方法的结合,能够以较小的数据通讯量、简单的操作和较小的系统资源占用来实现网络发现的功能,因而具有较高的实际应用价值。
本文提出的网络拓扑维护方法具备网络拓扑的自组织、自适应功能,可满足无线传感器网络系统对于网络组织结构的动态性能要求。同时具备拓扑结构的存储功能,能以较少的系统资源保存整个网络的动态拓扑结构,十分方便网络的管理和控制。