数据到栈中,栈会负责寻找路径。这种方法,应用程序不知道操作是在一个多跳的网络当中的。
路由还能够自愈ZigBee网络,如果某个无线连接断开了,路由功能又能自动寻找一条新的路径避开那个断开的网络连接。这就极大的提高了网络的可靠性,同时也是ZigBee网络的一个关键特性。
5.2 路由协议(Routing Protocol)
ZigBee执行基于用于AODV专用网络的路由协议。简化后用于传感器网络。ZigBee路由协议有助于网络环境有能力支持移动节点,连接失败和数据包丢失。
当路由器从他自身的应用程序或者别的设备那里收到一个单点发送的数据包,则网络层(NWK Layer)根据一下程序将它继续传递下去。如果目标节点是它相邻路由器中的一个,则数据包直接被传送给目标设备。否则,路由器将要检索它的路由表中与所要传送的数据包的目标地址相符合的记录。如果存在与目标地址相符合的活动路由记录,则数据包将被发送到存储在记录中的下一级地址中去。如果没有发现任何相关的路由记录,则路由器发起路径寻找,数据包存储在缓冲区中知道路径寻找结束。
ZigBee终端节点不执行任何路由功能。终端节点要向任何一个设备传送数据包,它只需简单的将数据向上发送给它的父亲设备,由它的父亲设备以它自己的名义执行路由。同样的,任何一个设备要给终端节点发送数据,发起路由寻找,终端节的的父亲节点都已它的名义来回应。
注意ZigBee地址分配方案使得对于任何一个目标设备,根据它的地址都可以得到一条路径。在Z-Stack中,如果万一正常的路径寻找过程不能启动的话(通常由于缺少路由表空间),那么Z-Stack拥有自动回退机制。
此外,在Z-Stack中,执行的路由已经优化了路由表记录。通常,每一个目标设备都需要一条路由表记录。但是,通过把一定父亲节点记录与其子所有子结点的记录合并,这样既可以优化路径也可以不丧失任何功能。
ZigBee路由器,包括协调器执行下面的路由函数:(i)路径发现和选择;(ii)路径保持维护;(iii)路径期满。
5.2.1 路径的发现和选择(Route Discovery and Selection)
路径发现是网络设备凭借网络相互协作发现和建立路径的一个过程。路由发现可以由任意一个路由设备发起,并且对于某个特定的目标设备一直执行。路径发现机制寻找源地址和目标地址之间的所有路径,并且试图选择可能的最好的路径。
路径选择就是选择出可能的最小成本的路径。每一个结点通常持有跟它所有邻接点的―连接成本(link costs)‖。通常,连接成本的典型函数是接收到的信号的强度。沿着路径,求出所有连接的连接成本总和,便可以得到整个路径的―路径成本‖。路由算法试图寻找到拥有最小路
径成本的路径。
路径通过一系列的请求和回复数据包被发现。源设备通过向它的所有邻接节点广播一个路由请求数据包,来请求一个目标地址的路径。当一个节点接收到 RREQ数据包,它依次转发RREQ数据包。但是在转发之前,它要加上最新的连接成本,然后更新RREQ数据包中的成本值。这样,沿着所有它通过的连接,RREQ数据包携带着连接成本的总和。这个过程一直持续到RREQ数据包到达目标设备。通过不同的路由器,许多RREQ副本都将到达目标设备。目标设备选择最好的RREQ数据包,然后发回一个路径答复数据包(a Route Reply)RREP给源设备。
RREP数据包是一个单点发送数据包,它沿着中间节点的相反路径传送直到它到达原来发送请求的节点为止。
一旦一条路径被创建,数据包就可以发送了。当一个结点与它的下一级相邻节点失去了连接(当它发送数据时,没有收到MAC ACK),该节点向所有等待接收它的RREQ数据包的节点发送一个RERR数据包,将它的路径设为无效。各个结点根据收到的数据包RREQ、RREP或者 RERR来更新它的路由表。
5.2.2 路径保持维护(Route maintenance)
网状网提供路径维护和网络自愈功能。中间节点沿着连接跟踪传送失败,如果一个连接被认定是坏链,那么上游节点将针对所有使用这条连接的路径启动路径修复。节点发起重新发现直到下一次数据包到达该节点,标志路径修复完成。如果不能够启动路径发现或者由于某种原因失败了,节点则向数据包的源节点发送一个路径错误包(RERR),它将负责启动新路径的发现。这两种方法,路径都自动重建。
5.2.3 路径期满(Route expiry)
路由表为已经建立连接路径的节点维护路径记录。如果在一定的时间周期内,没有数据通过沿着这条路径发送,这条路径将被表示为期满。期满的路径一直保留到它所占用的空间要被使用为止。这样,路径在绝对不使用之前不会被删除掉的。在配置文件f8wConfig.cfg文件中配置自动路径期满时间。设置 ROUTE_EXPIRY_TIME为期满时间,单位为秒。如果设置为0,则表示关闭自动期满功能。
5.3 表存储(Table storage)
路由功能需要路由器保持维护一些表格。
5.3.1 路由表(Routing table)
每一个路由器包括协调器都包含一个路由表。设备在路由表中保存数据包参与路由所需的信息。每一条路由表记录都包含有目的地址,下一级节点和连接状态。所有的数据包都通过相邻的一级节点发送到目的地址。同样,为了回收路由表空间,可以终止路由表中的那些已经无用的路径记录。
路由表的容量表明一个设备路由表拥有一个自由路由表记录或者说它已经有一个与目标地址相关的路由表记录。在文件―f8wConfig.cfg‖文件中配置路由表的大小。将MAX_RTG_ENTRIES设置为表的大小(不能小于4)。
5.3.2 路径发现表(Route discovery table)
路由器设备致力于路径发现,保持维护路径发现表。这个表用来保存路径发现过程中的临时信息。这些记录只在路径发现操作期间存在。一旦某个记录到期,则它可以被另一个路径发现使用。这个值决定了在一个网络中,可以同时并发执行的路径发现的最大个数。这个可以在f8wConfig.cfg文件中配置 MAX_ RREQ_ENTRIES。
5.4 路径设置快速参考(Routing Settings Quick reference)
设置路由表大小
MAX_RTG_ENTRIES,这个值不能小于4 (f8wConfig.cfg文件)
设置路径期满时间
ROUTE_EXPIRY_TIME,单位秒。设置为零则关闭路径期满(f8wConfig.cfg文件)
设置路径发现表大小
MAX_RREQ_ENTRIES,网络中可以同时执行的路径发现操作的个数
6. ZDO消息请求(ZDO Message requests)
ZDO模块提供功能用来发送ZDO服务发现请求消息,接收ZDO服务发现回复消息。下图描述了应用程序发送IEEE 地址请求和接收IEEE地址回复的函数调用。
ZDO IEEE地址请求及应答
下面这个例子,一个应用程序想知道什么时候一个新的设备加入网络。一个应用想要接收所有ZDO设备的通知信息。
ZDO Device Announce delivered to an application
7. 便携式设备(Portable Devices)
在ZigBee2006中终端节点就是便携式的设备。这就意味着当一个终端节点没有侦听到它的父节点回应(超出范围或者无法胜任),它将试着重新加入网络(加入到另一个新的父亲节点)。没有设置或者编译标志位来设置这个选项。
终端节点通过巡检(MAC 数据请求)失败或者通过数据消息失败侦听它的父亲节点都没有回应。MAX_POLL_FAILURE_RETRIES用来控制失败的敏感度。这个值可以在 f8wConfig.cfg
文件中修改。并且,这个值越大敏感度就越低,重新加入网络需要的时间就更长。
当网络层侦测到它的父亲节点没有回应,它将调用ZDO_SynIndicationCB()函数,这个函数将启动重新加入。重新加入过程首先对已有的父亲节点进行孤儿扫描(orphan-scan),然后扫描潜在的父亲节点并且跟它的潜在父节点加入网络。
在一个安全网络中,假设设备都拥有一个钥匙,新的钥匙不用在分发给设备。
8. 端到端确认(End-to-end acknowledgements)
对于非广播消息,有两种基本的消息重试类型:端到端的确认(APS ACK)和单级确认(single hop acknowledgement)(MAC ACK)。MAC ACK默认情况下是一直打开的,通常能够充分保证网络的高可靠性。为了提供附加的可靠性,同时使发送设备能够得到数据包已经被发送到目的地的确认,可以使用APS ACK。
APS acknowledgement在APS层完成,是从目标设备到源设备的一个消息确认系统。源设备将保留这个消息知道目标设备发送一个APS ACK消息表明它已经收到了消息。对于每个发出的消息可以通过调用函数AF_DataRequest()的选项来使能/禁止来禁止这个功能。这个选项区域是一个位映射选项,对于将要发送的消息的选项区域或上(OR)AF_ACK_REQUEST就可以使能APS ACK。消息重试(如果APS ACK消息没有收到)的次数和重试之间的时间间隔的配置项在f8wConfig.cfg文件中。APSC_MAX_FRAME_RETRIES是APS层在放弃发送数据之前,没有收到APS ACK确认重新发送消息的次数。APSC_ACK_WAIT_DURATION_POLLED是重新发送之间的时间间隔。
9. 其他(Miscellaneous)
9.1 配置信道(Configuring channel)
每一个设备都必须有一个DEFAULT_CHANLIST来控制信道集合。对于一个ZigBee协调起来说,这个表格用来扫描噪音最小的信道。对于终端节点和路由器几点来说,这个列表用来扫描并加入一个存在的网络。
9.2 配置PAN ID和要加入的网络(Configuring PAN ID and network to join)
这个可选配置项用来控制ZigBee路由器和终端节点要加入那个网络。文件f8wConfg.cfg中的ZDO_CONFIG_PAN_ID参数可以设置为一个0~0x3FFF之间的一个值。协调器使用这个值,作为它要启动的网络的PAN ID。而对于路由器节点和终端节点来说只要加入一个已经用这个参数配置了PAN ID的网络。如果要关闭这个功能,只要将这个参数设置为0xFFFF。
要更进一步控制加入过程,需要修改ZDApp.c文件中的ZDO_NetworkDiscoveryConfirmCB函数。
9.3 最大有效载荷大小(Maximum payload size)
相关推荐: