ZigBee网络中的路由问题Word格式.docx
《ZigBee网络中的路由问题Word格式.docx》由会员分享,可在线阅读,更多相关《ZigBee网络中的路由问题Word格式.docx(7页珍藏版)》请在冰豆网上搜索。
![ZigBee网络中的路由问题Word格式.docx](https://file1.bdocx.com/fileroot1/2022-11/26/5747f049-eb4b-4242-b418-41069c4b0cee/5747f049-eb4b-4242-b418-41069c4b0cee1.gif)
1
概述
随着无线通信和网络技术的不断发展,ZigBee联盟在2004年推出了面向低成本设备无线联网要求的ZigBee技术,它是一种近距离、低复杂度、低功耗、低数据速率、低成本的双向无线通信技术,主要适合于自动控制、远程控制领域及家用设备联网。
ZigBee网络基本组成如图1所示。
每个ZigBee网络中有协调器(A)、路由器(B)和终端(C)三种设备。
协调器是整个网络的核心设备,负责网络的建立和全部设备的管理,可以允许其他设备加入或离开网络,具有路由、启动路由发现和路由修复的功能,每个ZigBee网络中只能有一个协调器;
路由器是网络的中间设备,可以选择已有的网络加入,入网后可以允许其他设备加入或离开网络,具有路由、启动路由发现和路由修复的功能,每个ZigBee网络中可以有多个路由器,应根据网络设计的需要而确定,为了降低成本应尽量减少路由器的数量;
终端是网络的末端设备,可以选择已有网络加入,不具备路由功能。
网络中允许加入和加入设备之间构成父子关系,如图1中所示,A是B1的父设备,B1是A的子设备,B2为B1的子设备,A的从设备。
网络中的每一个节点可以分为四层,IEEE802.15.4标准定义了媒体访问控制层和物理层,ZigBee标准在其基础上定义了一种堆栈协议,包括应用层和网络层。
这种协议能够确保无线设备在低成本、低功耗和低数据速率网络中的互操作性。
2
ZigBee网络中的路由问题
ZigBee网络具有自组网和多跳功能,而这当中最关键的技术就是路由和路由发现。
ZigBee网络支持树状和网状路由,通过设置nwkUseTreeRouting参数使得两种路由能力可以交互,确保网络信息传递的可靠性的同时减少了通信量。
nwkUseTreeRouting是网络层数据库中包含的一项参数,nwkUseTreeRouting=true表示在传递数据帧时可以使用树状路由,即网络中按父子关系传递信息,nwkUseTreeRouting=false表示不使用树状路由,若该设备同时也不具备网状路由能力(通过判断设备中是否有路由发现表以及表中是否有剩余空间确定设备是否具备路由能力)则该设备不能转发信息。
当网络中某个节点与网络失去联系时,网络中的路由将遭到破坏,为了保证网络的通信畅通,协调器和路由器还应当能够启动路由修复功能,但其占用网络资源较多,容易造成网络堵塞,故不可频繁启动。
2.1路由算法
路由算法采用AODV(AdhocOnDemandDistanceVetor)算法。
每个路由器维护一张路由表,并定期与其邻居路由器交换路由信息,根据最小路由矢量更新自己的路由表。
表中存储的路由信息包括目标地址(destinationaddress)、下一跳地址(nexthopaddress)和该条目状态(status)。
状态包括活动(active)、非活动(inactive)、路由发现中(underdiscover)和路由发现失败(discoverfailed),路由算法如图2所示。
网络层接收到的数据帧来自应用层则首先判断是否是广播信息,即该数据帧是否传输给网络中的所有节点,若是则按照广播信息的处理规则(参考ZigBee协议)转发信息,若数据帧来自下层则在广播的同时将数据帧上传到上一层。
如果不是广播地址则将目标地址与自己的网络地址比较,相等则上传到应用层,不等则判断目标地址是否是自己的一个终端子设备的地址,如果是则直接路由到目标设备。
否则,如果该设备不具备路由能力,而nwkUseTreeRouting=true则按照树结构路径转发数据;
否则丢弃该数据帧。
如果该设备具备路由能力,提取数据帧中的discoverrouter参数,discoverrouter=0X02则立即启动路由发现;
discoverrouter=0X01则首先对照路由表,如果有与目标地址相对应的路由条目,且状态为active则根据路由表中的下一跳地址转发数据帧,若状态为underdiscover则认为已经为该数据帧启动了路由发现,缓存该数据帧;
若路由表中没有相应条目,或者状态为非活动(路由发现失败)则启动路由发现;
若discoverrouter=0X00,表示禁止启动路由发现,此时若nwkUseTreeRouting=true则按照树结构路径转发数据,若nwkUseTreeRouting=false则该数据帧丢弃。
2.2路由发现
启动路由发现后首先要在路由表中添加一个新条目,网络中的协调器和路由器应对接收到的路由发现请求和路由发现回答作出恰当的处理。
2.2.1添加路由发现条目
网络层接收到数据帧后若判定要启动路由发现,则在路由表中添加一个新条目,状态设为underdiscover,同时在路由发现表中创建一个对应的路由发现条目,每添加一个条目,RouterequestID自动加1,源地址设为启动路由发现设备的网络地址,源地址和路由请求ID唯一的标示一条路由发现条目。
发送地址设为转发路由发现请求帧的设备中路由消耗(反映的是设备成功接收数据帧的概率,具体算法参考ZigBee协议)最小的设备网络地址。
前向路由消耗Ctf是从启动路由发现的设备到接收设备的路由消耗,等于路由发现请求帧中的消耗值加上转发路由发现请求帧的设备到接收设备的连接消耗值。
后向路由消耗Ctr为目标设备到接收设备的路由消耗,等于路由发现回答帧中的消耗值加上转发路由发现回答帧的设备到接收设备的连接消耗值。
有效时间即该路由发现条目的存在时间,超过这一时间将删除该路由发现条目,若与之对应的路由表中的条目的状态为underdiscover则也将其删除。
路由发现表结构如表1所示:
表1路由发现表结构
项目
说明
RouterequestID
标示一条路由发现条目,每创建一个新条目该值自动加1
源地址
启动路由发现的设备地址
发送地址
转发路由发现帧的设备中路由消耗最小的设备地址
前向路由消耗(Ctf)
启动路由发现设备到接受路由发现请求帧设备之间的路由消耗
后向路由消耗(Ctr)
目标设备到接受路由发现回答帧之间的路由消耗
有效时间
该路由发现条目存在的最长时间
2.2.2处理路由发现请求帧
设备网络层启动路由发现后向外发送一个路由请求命令帧,帧格式如表2所示。
帧控制部分的帧类型设为0X01,表示这是一个网络命令帧。
路由域的目标地址为广播地址,有效载荷域的目标地址为路由表中的目标地址,即要发送的数据帧的目标设备的地址。
路由请求ID设为路由发现表中的ID。
表2路由发现请求帧格式
长度(字节)
2
1
组成部分
帧控制部分
目标地址
传送半径
序列号
命令帧ID=0X01
命令选项
路由请求ID
路径消耗
路由域
网络层帧头
网络层有效载荷
协调器和路由器对接收到的路由发现请求帧应作出恰当的处理,其流程如图3所示。
设备接收到路由发现请求帧后若具备路由能力则查找路由发现表,如果没有对应条目则创建一个,表中信息与请求帧中的一致,然后判断目标地址是否与自己的网络地址相同,相同则发送一个路由发现回答帧,不同则继续广播请求,请求帧中的路径消耗参数值修正为原路径消耗加上连接消耗;
如果路由发现表中存在对应条目,则判断目标地址是否与自己的网络地址相同,或是否是自己的一个终端子设备,如果是而且帧中的路径消耗与发送和接收设备间的连接消耗的和Cf小于路由发现表中的前向消耗值Ctf,则修正表中的发送地址为路由请求帧的源地址,同时修正表中的路由消耗值为Cf并发送一个路由发现回答帧;
若Cf>
Ctf则丢弃该请求帧;
若目标地址与自己的网络地址不同,也不是终端子设备的地址,这种情况下如果Cf<
Ctf,则修改表中的发送地址为路由请求帧的源地址,同时修改表中的路由消耗值并继续广播路由发现请求帧,请求帧中的路径消耗修正为Cf,若该设备支持双向路径(即从A到B与从B到A都是有效的),则在路由表中创建一个新条目,目标地址为请求帧的源地址,下一跳地址为之前转发请求帧设备的地址,状态设为active;
Ctf则丢弃该请求帧。
若接收设备不具备路由能力,则判断是否是有效路径,有效路径是指数据帧来自接收设备(A)的子设备(B1),而源地址是其子设备(B1)的从设备(C),或者数据帧来自接收设备(B1)的父设备(A),而源地址不是接收设备的从设备(B2或C),如图1所示。
不是则丢弃该请求帧;
如果是则判断目标地址是否与自己的网络地址相同,相同则发出一个路由发现回答帧;
不同则单播路由发现请求帧,这时帧的路由域的目标地址与有效载荷的目标地址相同。
2.2.3处理路由发现回答
设备接收到路由请求帧后若判定符合其要求,则向启动路由请求的设备发送一个路由回答帧。
路由发现回答帧格式如表3所示。
路由域的目标地址为路由发现表中的发送地址(senderaddress)。
有效载荷域的原始地址为发出路由发现请求设备的网络地址,响应地址为发出路由发现回答设备的网络地址。
路由请求ID与接收到的路由请求中的相等。
表3路由发现回答帧格式
命令帧ID=0X02
原始地址
响应地址
设备接收到路由发现回答帧后,若具备路由能力,则将回答帧中的原始地址与自己的网络地址相比较,若相等则根据原始地址和路由请求ID判断路由发现表中是否有与之对应的条目,没有则丢弃该回答帧,如果有但路由表中没有对应条目,则丢弃该回答帧,并删除对应的路由发现条目;
如果路由表中有对应条目且状态为active,则将帧中的路径消耗与发送设备和接收设备的连接消耗的和Cf与表中的后向消耗值Ctr比较,若Cf<
Ctr,则修正路由发现表中的后向消耗值为Cf,并把路由表中的下一跳地址修改为刚刚发送该路由回答帧的设备的网络地址,Cf>
Ctr则丢弃该路由发现回答;
如果路由表中对应条目的状态不是active,则修正为active,下一跳地址为刚刚发送该路由回答帧的设备的网络地址,路由发现表中的后向消耗修正为Cf。
如果原始地址与自己的网络地址不相等,则根据原始地址和路由请求ID判断路由发现表中是否对应条目,没有则丢弃该回答帧;
如果有则比较Cf和Ctr,如果Cf<
Ctr则修正路由发现表中的后向消耗为Cf,同时转发路由发现回答帧,帧中的目标地址修改为路由发现表中的发送地址,路经消耗修正为Cf;
如果Cf>
Ctr则丢弃该路由发现回答帧。
如果接收路由发现回答帧的设备不具备路由能力,则将原始地址与自己的网络地址比较,若相等则丢弃该回答帧;
如果不相等,则判断是否支持树结构路由,若支持则按照树结构路径转发路由发现回答帧,并修正路由消耗为Cf,否则丢弃该路由发现回答帧。
2.3路由修复
网络层中有一个表示向邻接设备传送数据帧失败次数的值,称为失败值(failurecounter),若该值超过一个预定值nwkcRepairThreshold(ZigBee网络中规定为0X03),则认为与邻接设备失去联系,应启动路由修复功能,若该设备具备路由能力则向网络广播一个路由发现请求,其处理方法与路由发现相同;
若该设备不具备路由能力或由于其他原因而不能启动路由修复,则向数据帧的源设备发送一个路由错误命令帧,说明转发数据错误原因,由源设备重新启动路由发现。
需要注意的是,由于路由修复占用网络资源较多,容易造成网络堵塞,所以不可频繁的启动路由修复。
3小结
ZigBee网络支持树状路由和网状路由,树状路由根据网络中的父子关系传递信息,对路由器的要求较低,路由也较简单,故本文主要探讨的是网状路由中的一些问题,网状路由要求路由设备维护一张路由表,并通过路由发现功能寻找从源设备到目标设备之间的最佳路径,这其中使用路由消耗这个参数进行路由比较,以选择最佳路径。
在路由消耗值的计算中较准确的方法是使用每个设备成功接收数据帧的概率,但实际应用中存在一定的困难,ZigBee协议中推荐使用底层提供的连接质量(LQI)参数,故如何获取更准确地路由消耗值仍需进一步讨论。
参考文献:
[1]
ZigBeeSpecificationVersion1.0
December14th,2004
[2]IEEE802.15.4Specification
1October2003
[3]
MicrochipZigBee协议栈
NileshRajbharti
MicrochipTechnologyInc
李天璞鞠海玲崔莉
传感器网络
[4]
结合ZigBee和GPRS的无线数据传输网络
[5]
一种崭新的无线通信网络标准-ZigBee
作者介绍:
邮编:
211101
联系电话:
130********
E-mail:
youhaibo1983@163.c0m