路由对与应用层来说是完全透明的。应用程序只需简单的向下发送去往任何设备的数据到
栈中,栈会负责寻找路径。这种方法,应用程序不知道操作是在一个多跳的网络当中的。
路由还能够自愈ZigBee网络,如果某个无线连接断开了,路由功能又能自动寻找一条新的
路径避开那个断开的网络连接。这就极大的提高了网络的可靠性,同时也是ZigBee网络的一个关键特性。
ZigBee执行基于用于AODV专用网络的路由协议。简化后用于传感器网络。ZigBee路由
协议有助于网络环境有能力支持移动节点,连接失败和数据包丢失。
当路由器从他自身的应用程序或者别的设备那里收到一个单点发送的数据包,则网络层(NWK Layer)根据一下程序将它继续传递下去。如果目标节点是它相邻路由器中的一个,则数据包直接被传送给目标设备。否则,路由器将要检索它的路由表中与所要传送的数据包的目标地址相符合的记录。如果存在与目标地址相符合的活动路由记录,则数据包将被发送到存储在记录中的下一级地址中去。如果没有发现任何相关的路由记录,则路由器发起路径寻找,数据包存储在缓冲区中知道路径寻找结束。
ZigBee终端节点不执行任何路由功能。终端节点要向任何一个设备传送数据包,它只需简
单的将数据向上发送给它的父亲设备,由它的父亲设备以它自己的名义执行路由。同样的,任何一个设备要给终端节点发送数据,发起路由寻找,终端节的的父亲节点都已它的名义来回应。
注意ZigBee地址分配方案使得对于任何一个目标设备,根据它的地址都可以得到一条路径。
在Z-Stack中,如果万一正常的路径寻找过程不能启动的话(通常由于缺少路由表空间),那么
Z-Stack拥有自动回退机制。
此外,在Z-Stack中,执行的路由已经优化了路由表记录。通常,每一个目标设备都需要
一条路由表记录。但是,通过把一定父亲节点记录与其子所有子结点的记录合并,这样既可以优化路径也可以不丧失任何功能。
ZigBee路由器,包括协调器执行下面的路由函数:(i)路径发现和选择;(ii)路径保持维护;
(iii)路径期满。
路径发现是网络设备凭借网络相互协作发现和建立路径的一个过程。路由发现可以由任意
一个路由设备发起,并且对于某个特定的目标设备一直执行。路径发现机制寻找源地址和目标地址之间的所有路径,并且试图选择可能的最好的路径。
路径选择就是选择出可能的最小成本的路径。每一个结点通常持有跟它所有邻接点的“连
接成本(link costs)”。通常,连接成本的典型函数是接收到的信号的强度。沿着路径,求出所有连接的连接成本总和,便可以得到整个路径的“路径成本”。路由算法试图寻找到拥有最小路径成本的路径。
路径通过一系列的请求和回复数据包被发现。源设备通过向它的所有邻接节点广播一个路
由请求数据包,来请求一个目标地址的路径。当一个节点接收到RREQ数据包,它依次转发
RREQ数据包。但是在转发之前,它要加上最新的连接成本,然后更新RREQ数据包中的成本值。这样,沿着所有它通过的连接,RREQ数据包携带着连接成本的总和。这个过程一直持续到RREQ数据包到达目标设备。通过不同的路由器,许多RREQ副本都将到达目标设备。目标设备选择最好的RREQ数据包,然后发回一个路径答复数据包(a Route Reply)RREP给源设备。
RREP数据包是一个单点发送数据包,它沿着中间节点的相反路径传送直到它到达原来发送请求的节点为止。
一旦一条路径被创建,数据包就可以发送了。当一个结点与它的下一级相邻节点失去了连
接(当它发送数据时,没有收到MAC ACK),该节点向所有等待接收它的RREQ数据包的节点
发送一个RERR数据包,将它的路径设为无效。各个结点根据收到的数据包RREQ、RREP或
者RERR来更新它的路由表。
网状网提供路径维护和网络自愈功能。中间节点沿着连接跟踪传送失败,如果一个连接被
认定是坏链,那么上游节点将针对所有使用这条连接的路径启动路径修复。节点发起重新发现直到下一次数据包到达该节点,标志路径修复完成。如果不能够启动路径发现或者由于某种原因失败了,节点则向数据包的源节点发送一个路径错误包(RERR),它将负责启动新路径的发现。这两种方法,路径都自动重建。
路由表为已经建立连接路径的节点维护路径记录。如果在一定的时间周期内,没有数据通
过沿着这条路径发送,这条路径将被表示为期满。期满的路径一直保留到它所占用的空间要被使用为止。这样,路径在绝对不使用之前不会被删除掉的。在配臵文件f8wConfig.cfg文件中配臵自动路径期满时间。设臵ROUTE_EXPIRY_TIME为期满时间,单位为秒。如果设臵为0,
则表示关闭自动期满功能。
ZigBee协议按照开放系统互联的7层模型将协议分成了一系列的层结构,各层之间通过相
应的服务访问点来提供服务。这样使得处于协议中的不同层能够根据各自的功能进行独立的运
作,从而使整个协议栈的结构变得清晰明朗。另一方面,由于ZigBee协议栈是一个有机的整
体,任何ZigBee设备要能够正确无误的工作,就要求协议栈各层之间共同协作。因此,层与
层之问的信息交互就显得十分重要。ZigBee协议为了实现层与层之间的关联,采用了称为服务
“原语"的操作。利用下图来说明原语操作的概念。
服务由N用户和N层之问信息流的描述来指定。这个信息流由离散瞬时事件构成,以提
供服务的特征。每个事件由服务原语组成,它将在一个用户的某一
层,通过与该层相关联的层服务访问A(SAP)与建立对等连接的用户的相同层之
问传送。层与层之间的原语一般情况下可以分为4种类型:
◆ 请求:请求原语从NI用户发送到它的N层,请求发起一个服务。
◆ 指示:指示原语从N层到N2用户,指示一个对N2用户有重要意义外部N
层事件。这个事件可能与一个远程的服务请求有关,或者由内部事件产生。
◆ 响应:响应原语由N2用户向它的N层传递,用来响应上一个由指示原语引
起的过程。
◆ 确认:确认原语由N层向Nl用户传递,用来传递与前面一个或多个服务请
求相关的执行结果。