一、ZigBee网络层次结构与地址分配机制
ZigBee网络中的所有节点都有两个地址:一个16位网络短地址和一个64位IEEE扩展地址。其中16位网络地址仅仅在网络内部使用,用于路由机制和数据传输。这个地址是在节点加入网络时由其父节点动态分配的。当网络中的节点允许一个新节点通过它加入网络时,它们之间就形成了父子关系。所有加入ZigBee网络的节点一同组成一棵逻辑树,逻辑树中的每一个节点都拥有以下两个参量:
1)16-bit的网络地址。只负责节点之间数据传输
2)网络深度。即从该节点到根节点协调器的最短跳数,标识了该节点在网络拓扑图中的层次位置。
当协调器(coordinator)建立了一个新的网络后,它首先将自己的16位网络地址初始化为O,同时初始化自己的网络深度Deptg,=0。
以下通过一个具体的实例来说明ZigBee网络父节点为子节点分配16位地址的规范。假设一个节点Node(n)想要加入网络。Node(n)首先发起网络发现过程,获取信道上的信标并进行信道选择后,决定连接到已经在网络中的节点Node(k)。随后Node(n)向Node(k)发起入网的关联请求。关联请求获得批准后,Node(n)式加入网络。Node(k)称为Node(n)的父节点。可以假设已经存在在网络中的父节点Node(k)的地址为 Depthk=Depthk+1。
如图是ZigBee树状结构视图。这里引入三个辅助参数: 参数表示每个深度可以容纳的最大子节点个数(Max Children), 表示每个深度可以容纳的最大路由器个数(Max Router),。 表示整个网络的最大深度。
根据以上说明,ZigBee网络父节点为网络深度d,子节点进行地址分配的规则如下:
(1)假设节点Node(n)是接入其父节点的第n个简化功能设备节点(RED),即没有路由能力的节点,则它的父节点Node(n)将会为它分配如F的地址:
(2)设节点Node(n)是接入其父节点的第n个全功能设备节点(FFD),即具各路由能力的节点,则它的父节点Node(n)将会为它分配如下的地址:
其中
当一个路由节点的 为0时,它就不再具备为子节点分配地址的能力,即该路由节点不能在接收新的节点加入网络。
二、ZigBee路由协议分析
路由技术主要作用是为数据以最佳路径通过通信子网到达目的节点提供服务。在传统的OSI参考模型中,网络层实现路由功能。路由协议是自组网体系结构中不可或缺的重要组成部分,其主要作用是发现和维护路由.具体的说主要有以下几个方面:监控网络拓扑结构的变化,交换路由信息,确定目的节点的位置,产生、维护以及取消路由,选择路由并转发数据。。为了达到低成本,低功耗,可靠性高的设计目标,ZigBee协议采用以下两种算法的结合体作为自身的路由算法[1][2]。
(1)AODV:Ad-Hoc On-Demand Distance Vector(按需距离矢量路由)
(2)Cluster-Tree algorithm(树型网络结构路由)
其中AODV路由协议是一种按需路由协议,利用扩展环搜索的办法来限制搜索发现过的目的节点的范围,支持组播,可以实现在ZigBee节点间动态的,自发的路由,使节点很快的获得通向所需目的的的路由。这也是ZigBee路由协议的核心。针对自身的特点,ZigBee网络中使用一种简化版本的AODV协议(AODV Junior,AODVjr[3])。
Cluster-Tree算法包括地址的分配(configuration of addresses)与寻址路由两部分(addresses routing)。包括子节点的16位网络短地址的分配,以及根据目的节点的网络地址来计算下一跳的算法。
作为两种算法的结合体,ZigBee网络中,节点可以按照网络树状结构的父子关系使用Cluster-Tree算法选择路径。即每一个节点都会试图将收到的信息包转发给自己的后代节点,如果通过计算发现目的地址不是自己的一个后代节点,则将这个数据包转发给自身上一级的父节点,由父节点进行类似的判断处理,直到找到目的节点。Cluster-Tree算法的特点在于使不具有路由功能的节点间通过与各自的父节点间的通信仍然可以发送数据分组和控制分组,但它的缺点是效率不高。为了提高效率,ZigBee中允许具有路由功能的节点使用AODVjr算法去发现路由,让具有路由功能的节点可以不按照父子关系而直接发送信息到其通信范围内的其他节点。
三、Cluster-Tree路由算法
Cluster-Tree路由算法的描述如下:当一个网络地址为A,网络深度为d的路由节点(FFD)收到目的地址为D的转发数据包时,路由节点首先要判断目的地址D是否为自身的一个子节点,然后根据判断的结果采取不同的方式来处理这个数据。若地址D满足一下判别式,则可以判断D地址节点是A地址节点的一个后代节点:
如果D不在这个范围之内则D地址节点是A地址节点的父节点。
判断后采取的数据包转发措施如下:
1) 目的节点是自身的一个后代节点,则下一跳(next hop)的节点地址为
2) 目的节点不是自身的一个后代节点,路由节点将把该包送交自己的父节点处理。这一点与TCP/IP协议中路由器将路由表项中不存在的数据包自己的网关处理类似。
四、AODVjr路由算法
AODVjr路由时一种按需分配的路由协议,只有在路由节点接收到网络数据包,并且网络数据包的目的地址不在节点的路由表中时才会进行路由发现过程。也就是说,路由表的内容是按照需要建立的,而且她可能仅仅是整个网络拓扑结构的一部分。
AODVjr的优点是,相对于有线网络的路由协议而言,它不需要周期性的路由信息广播,节省了一定的网络资源,并降低了网络功耗。缺点是在需要时才发起路由寻找过程,会增加数据到达目的地址的时间。由于ZigBee网络中对数据的实时性要求不大,而更重视对网络能量的节省,因此AODVjr非常适合应用在ZigBee网络中。
一次路由建立由以下三个步骤组成:
1) 路由发现
2) 反向路由建立
3) 正向路由的建立
经过这三个步骤,即可建立起一条路由节点到目的节点的有效传输路径。在这个路由建立过程中,AODVjr使用3种消息作为控制信息:
1)Route Request(RREQ),路由请求
2)Route Replies(RREP),路由回复
3)Route Error(RERR),路由错误
以下将对路由建立的三个过程进行详细描述。
(1)路由发现过程
对于一个具有路由能力的节点,当接收到一个从网络层的更高层发出的发送数据帧的请求,且路由表中没有和目的节点对应的条目时,它就会发起路由发现过程。源节点首先创建一个路由请求分组(RREQ),并使用多播(Multi.Broadcast)的方式向周围节点进行广播。
如果一个节点发起了路由发现过程,它就应该建立相应的路由表条目和路由发现表条目,状态设置为路由发现中。任何一个节点都可能从不同的邻居节点处接收到广播的RREQ。接收到后节点将进行如下分析:
1)如果是第一次接收到这个RREQ消息,且消息的目的地址不是自己,则节点会保留这个RREQ分组的信息用于建立反向路径,然后将这个RREQ消息广播出去。
2)如果之前已经接受过这个RREQ消息,表明这是由于网络内多个节点频繁广播产生的多余消息,对路由建立过程没有任何作用,则节点将丢弃这个消息。
(2)反向路由建立过程
当RREQ消息从一个源节点转发到不同的目的地时,沿途所经过的节点都要自动建立到源节点的反向路由。也就是记录当前接收到的RREQ消息是由哪一个节点转发而来的的。通过记录收到的第一个RREQ消息的邻居地址来建立反向路由,这些反向路由将会维持一定时间,该段时间足够RREQ消息在网内转发以及产生的RREP消息返回源节点。
当RREQ消息最终到达了目的节点,节点验证RREQ中的目的地址为自己的地址之后,目的节点就会产生RREP消息,作为一个对RREQ消息的应答。由于之前已经建立了明确的反向路由,因此RREP无需进行广播,只需按照反向路由的指导,采取单播的方式即可把RREP消息传送给源节点。
(3)正向路由建立过程
在RREP以单播方式转发回源节点的过程中,沿着这条路径上的每一个节点都会根据PREP的指导建立到目的节点的路由,也就是说确定到目的地址节点的下一跳(next-hop)。方法就是记录RREP是从哪一个节点传播而来.然后将该邻居节点写入路由表中的路由表项。一直到RREP传送到源节点。至此.一次路由建立过程完毕。源节点与目标节点之间可以开始数据传输。可以看出,AODV是按照需求驱动的、使用RREQ.RREP控制实现的、先广播,后单播的路由的路由建立过程。
转载:http://www.tuicool.com/articles/YnIvY3