ZigBee协议学习之网络层
ZigBee的体系结构中,底层采用IEEE 802.15.4的物理层和媒介层,再次基础上,ZigBee联盟建立了自己的网络层(NWL)和应用层框架。
ZigBee网络层的主要功能包括设备的连接和断开、在帧信息传递时采用的安全机制、路由发现和路由维护的交互,并且,网络层完成对一跳邻居设备的发现和相关节点信息的存储。
ZigBee网络由所有节点都有两个地址:16位的网络地址和64位的IEEE扩展地址。其中,16位的网络地址仅仅在网络内部使用,用于路由机制和数据传输。这个地址实在节点加入网络时,有其父节点动态分配的。
1. ZigBee组网功能
ZigBee网络层的主要功能室路由,路由算法是它的核心。根据组网类型的不同,支持三种路由算法,星型路由、树形路由和网状路由。
1.1 星型网络
星型网络有一个中心节点,所有消息都经它传输。
1.2 树型网络
树型网络由一个顶端节点,下面有枝有叶,消息先上行再下传。
树型路由把网络看成是以协调器为根的一棵树,因为整个网络是由协调器所建立的,而协调器的子节点可以是路由器或者末端节点。
树型路由利用一种默认分布式地址分配算法,使用四个参数(由PAN协调器确定):PAN协调器的地址为0,深度为0,
- 树状网络的最大深度(不包括PAN协调器本身) Lm
- 网络路由器所能拥有的最大子节点数 Cm
- 网络路由器所能拥有的最大子路由器数 Rm
- 设备在网络中的深度 d (0---Lm-1)
- 来计算新节点的地址。在寻址时,根据地址就能计算出路径。路由只有两个方向--向子节点发送或者向父节点发送。无需路由表,节省存储资源。
一个父设备通过Lm,Cm和Rm来完成Cskip(d)的计算。
如果一个设备Cskip值为0,则表明该设备为终端设备。
如果设备的Cskip的值大于0,则表示其可以接受子设备,并且将
1. 父设备首先为它的第一个路由器子设备分配一个比它自己更大(+1)的地址
2. 给随后的路由器分配的地址将以Cskip(d)的数值为间隔,依次类推为所有的路由器分配地址
第n个终端设备的网络地址按照如下公式来分配:
以下图作为实例说明:Lm=3,Cm=2,Rm=2,d取值为[0,3]
每个深度对于的Cski值都计算出来,在每层之间,首先加入的节点(X)比父节点地址(C)大1,其次加入的节点(Y)的地址值为上一个节点X的地址值加上父节点的Cskip值。依次类推。
Cskip值为0的设备为终端设备,对于每个终端设备来说,其地址计算方式如下:
父设备直连的,第一(n)个终端设备的地址=它的父设备地址+该父设备的Cskip*Rm+1(n)
当一个设备想要去路由信息时,Cskip的值很重要。路由设备需要知道将要传递的信息的目的设备是否为自身的子节点。
如果路由设备在深度d,它自身的地址为A,需要传递的目的设备有一个目的地址D。如果满足A< D < Cskip(d-1)的话,那么设备D一定为设备A的子孙节点,进行下行路由(route down)。否则进行上行路由(route up)。
一旦可以确定目的地址是自身地址的子节点,下一步就是计算下一跳的地址。如果目的地址为终端设备类型,下一跳地址就是为目的地址(l例如信息在设备Y,前往地址为9的设备)。
如果目的地址为非直连子节点(例如信息在设备Y,前往地址为10的设备),则下一跳地址遵循如下的计算方式:
树族型拓扑的树簇算法是指消息沿着树形拓扑进行传输的算法,它是静态的,不需要存储路由表,适用于节点静止或者移动较少的场合
网状路由AODVjr算法是对Ad Hoc按照距离矢量路由算法的改进,按需分配的路由协议,只有在路由节点收到网络数据包时,并且网络数据包不在节点的路由表中时才会进行路由发现过程。AODVjr的优点是,相对于有线网络的路由协议而言,它不需要周期性的路由信息广播,节省了一定的网络资源和网络功耗。缺点是在需要时才发起路由寻找过程,会增加数据到达目的地的时间。由于ZigBee网络中个,对数据的实时性要求不大,而更重视对网络能量的节省,因此AODVjr更适合在ZigBee网络中。
依次路由的建立由以下三个步骤组成:
1. 路由发现
2. 反向路由建立
3. 正向路由建立
经过这三个步骤,即可建立起一条路由节点到目的节点的有效传输路径,在此过程中,AODVjr使用3种消息
Route Request(路由请求,RREQ), Route Replies(路由回复,RREP),Route Error(路由错误,RERR)
路由发现流程:
路由建立:
这两种算法的结合使用确定了WSN路由的三种模式
1. 禁止路由模式(SUPPRESS): 禁止对路径进行查找,只能使用树簇算法沿着树型拓扑进行路由。
具体操作,如果发现网络路由器存在,则数据包指向该路由器,否则,数据包沿着树形推进。
2. 使能路由模式(ENABLE): 将树簇算法和AODVjr算法相结合,视具体情况使用哪种算法。
具体操作:
如果发现网络路由器存在,则数据包指向该路由器
如果网络路由器不存在,路由器可以启动路由发现能力的话,则发起路由发现,数据包沿着计算的路由传送。
如果该路由器没有路由发现能力,数据包沿着树形推进。
3. 强制路由模式(FORCE):完全使用AODVjr算法,。
具体操作:只要设备具备路径查找能力,不管消息传输路径是否已经存在,都要启动路径查找过程,当查找完成后,数据包将沿着计算出来的路径传送,如果没有路由发现能力,数据包沿着树形推进。
这三种方式具体怎么选择?在代码里面,目前没有找到,疑惑中…..
1.3 mesh网络
网状网络与树型类型,但它的某些枝叶可以直接连接。网状路由是AODV路由算法的一个简化版本,非常适合于低成本的无线自组织网络的路由,适用于较大规模的网络,需要节点维护一个路由表,使用灵活,路由效率高。使用路由发现和维护机制。
除了以上两种路由方式外,PAN协调器或路由器本身还有邻接设备表,记录一定区域内与其具有邻接关系的设备。只需要一跳就可以发送到目的节点。
对于网状拓扑结构来说,要使用路由表来进行路由。
网状网络提供路径维护和网络自愈功能。
每一个路由器(包含协调器)都包含一个路由表,设备在路由表中保存数据包参与路由所需的信息,每一条路由记录都包含目的地址、下一级节点和连接状态。
路径发现表:保存路径发现过程中的临时信息,这些记录只在路径发现操作期间存在。