打印

Zigbee协议栈中文说明

[复制链接]
楼主: 说书先生
手机看帖
扫描二维码
随时随地手机跟帖
21
说书先生|  楼主 | 2016-9-11 15:34 | 只看该作者 回帖奖励 |倒序浏览

3.5命令帧

网络层定义的命令帧,如表3.39所示。本小节详细介绍网络层管理实体如何构造要传递的各种命令。

表3.39网络层命令帧

命令帧标识符
命令名称

0x01
路由请求
3.5.1节
0x02
路由应答
3.5.2节
0x03
路由错误
3.5.3节
0x04
断开
3.5.4节
0x05
路由记录
3.5.5节
0x06
重新连接请求
3.5.6节
0x07
重新加入响应
3.5.7节
0x08
连接状态
3.5.8节
0x09
网络报告
3.5.9节
0x0A
网络更新
3.5.10节
0x0B- 0xFF
保留
——

3.5.1路由请求命令

设备使用路由请求命令来请求在其无线通信范围内的其他设备发现到达目的设备的路由,以便在网络中建立一条稳定的使信息更快更经济地到达目的设备的路由。路由请求命令的载荷格式如图3.9所示。

字节:1
1
1
2
1
命令帧标识符(见表3.39)
命令选择
路由请求标识
目的地址
路由开销
网络层载荷

图3.9路由请求命令帧格式

3.5.1.1MAC数据服务请求

为了利用MAC层数据服务(在IEEE 802.15.4-2003【B1】)来传输这个命令,在MAC层帧报头包含如下信息:

(1)目的PAN标识符设置为发送路由请求命令设备的PAN标识符。

(2)目的地址必须为广播地址0xffff。

(3)源MAC地址和PAN标识符设置为发送路由请求命令设备的地址和PAN标识符,该设备不一定是命令源发送设备。

(4)因为任何来自于网络层的可靠帧都使用网络层的安全协议,帧控制域将禁止MAC层对MAC层数据帧使用安全功能。由于该帧为广播帧,因此不需要确认。地址模式以及内部PAN标记设置为支持在这里所描述的地址域。

3.5.1.2网络层帧报头域

为了传送路由请求命令帧到它的目的设备,且为了路由发现过程正确完成,应提供如下信息:

(1) 网络层帧头的源地址域设置成发送设备的地址。

(2) 网络层帧头的目的地址域设置成设备的广播地址,macRxOnWhenIdle的值等于TRUE(参见表3.51)

(3) 网络层帧头的发现路由子域设置成抑制路由发现(参见表3.36)

(4) 作为一个网络层命令帧,帧控制域的源IEEE地址子域设置成1,且网络层帧头的源IEEE地址域存在且包含帧发送此帧设备的64位IEEE地址。如果试图发现的设备的64位IEEE地址已经知道,那么帧控制域的目的IEEE地址子域的值是1,且网络层帧头的目的IEEE地址域存在且包含设备的64位IEEE地址。

3.5.1.3网络层帧有效载荷域

网络层帧的载荷包含命令标识符域、命令选择域、路由请求标识符域、目的地址和最新的路由总开销域。

命令帧标识符应包含表明路由请求命令帧的值。

3.5.1.3.1命令选择域

8位的命令选择域格式如图3.10所示。

比特:0-4???5哪去了
6
7
保留
多播
保留

图3.10路由请求命令选择域

3.5.1.3.1.1多播子域

多播子域是1位。只有命令帧请求多播组路由时,它的值是1,在这个情况下,目的地址域包含期望组的Group ID。

3.5.1.3.2路由请求标识符

路由请求标识符为一个8bit的路由请求序列号,在特定设备的网络层每发送一次路由请求,该标识符增加1。

3.5.1.3.3目的地址

目的地址长2字节,标识路由请求命令帧的目的地址。

3.5.1.3.4路由开销

路由开销域长度为8bit,常常用来积累路由请求命令帧在网络中传送的开销信息。(参见3.7.3.5.2节)

3.5.2路由应答命令

路由应答命令的目的设备使用路由应答命令来通知路由请求的源设备已接收到请求命令。ZigBee路由请求所经路由器建立一种能使帧更快捷地从源地址路由到目的地址的状态路由应答命令的载荷格式如图3.11所示。

字节:1
1
1
2
2
1
命令标识符(参见表3.39)
命令选择
路由请求标识符
源地址
响应地址
路由开销
网络层载荷

图3.11路由应答命令帧格式

3.5.2.1MAC层数据服务请求

根据802.15.4协议标准,为了利用MAC层数据服务来传输该命令,在MAC层帧报头中应包含一下信息。

(1) 目的MAC层地址和PAN标识符分别设置为路由请求命令帧的发起端路由中第一跳的网络地址和PAN标识符。目的PAN标识符必须与命令起始端的PAN标识符相同。

(2) 源MAC地址和PAN标识符设置为发送路由应答命令的设备的地址和PAN标识符,该设备不一定为源命令发送的设备。

(3) 帧控制域设置为禁止MAC数据帧使用MAC层安全功能,因此任何来自于网络层的可靠的帧都使用网络层的安全协议。传输选择应设置为请求命令确认。地址模式以及内部PAN标记设置为支持这里所描述的地址域。

3.5.2.2网络层帧报头域

为了传送路由应答到目的地,并且使路由发现进程正确无误,必须提供下列信息:

(1) 网络层帧控制域中的帧类型子域应设置为表明此帧为网络层命令帧。

(2) 在网络层帧报头中的目的地址域应设置为回到相应路由请求的发起端路由的第一跳的网络地址。

(3) 网络层帧报头中的源地址应设置为传送此帧设备的网络层的16位网络地址。

(4) 网络层帧报头中的发现路由子域设置成抑制路由发现(参见表3.36)

(5) 作为一个网络层命令帧,帧控制域的源IEEE地址子域设置成1,且网络层帧头的源IEEE地址域存在且包含帧发送此帧设备的64位IEEE地址。如果试图发现的设备的64位IEEE地址已经知道,那么帧控制域的目的IEEE地址子域的值是1,且网络层帧头的目的IEEE地址域存在且包含所应答的路由请求命令帧的发送端的64位IEEE地址。

3.5.2.3网络层有效载荷域

网络层有效载荷域包含命令标识符、命令选择域、路由请求标识符域、源地址和应答地址和最新的路由开销总和。

命令标识符域包含表明路由应答命令帧的值。

3.5.2.3.1命令选择域

8bit的命令选择域的格式如图3.12所示。

比特:0-5
6
7
保留
多播域
保留

图3.12路由应答命令选择域格式

3.5.2.3.1.1多播子域

多播子域是1位。只有命令帧应答多播组路由时,它的值是1,在这个情况下,响应者地址域包含期望组的Group ID。

3.5.2.3.2路由请求标识符

路由请求标识符应长度是8位的所应答的路由请求帧序列号。

3.5.2.3.3源地址

源地址长度为2字节,包含所应答的路由请求命令帧发起端的16位的网络地址。

3.5.2.3.4响应地址

响应地址长度为2字节,且与相应的路由请求命令帧的目的地址域的值相同。

3.5.2.3.5路由成本

路由成本用来收集当路由应答命令帧穿梭于网络时链路成本。




使用特权

评论回复
22
说书先生|  楼主 | 2016-9-11 15:49 | 只看该作者

3.5.3路由错误命令

当设备无法向前传送数据时,便使用路由错误命令。该命令通知发送数据帧源设备,在传送数据帧时出现错误。路由错误命令的载荷格式如图3.13所示。

字节:1
1
2
命令帧标识符(参见表3.39)
错误代码
目的地址

图3.13路由错误命令帧格式

3.5.3.1MAC层数据服务要求

为了利用MAC层数据服务来传输该命令,根据802.15.4协议标准,应提供下列信息。

(1) 目的MAC层地址和PAN标识符应分别设置为出现传送故障的数据帧的发起端所经路由中第一跳的地址和PAN标识符。

(2) 源MAC层地址和PAN标识符应设置为发送路由错误命令的设备地址和PAN标识符。

(3) 帧控制域应设为使MAC数据帧禁止使用MAC安全功能,因此任何来自于网络层的可靠的帧都使用网络层的安全协议。是否执行发送该路由错误命令须取决于是否需要确认。

(4) 地址模式和内部PAN标记应设置为这里所描述的支持地址域。

3.5.3.2网络层帧报头域

为了传送路由错误命令帧,网络层帧报头中的地址域应为与出现传送错误数据帧的发起端地址相同。

网络层帧报头中的源地址应设置为发送路由错误命令的设备地址。

网络层帧报头中的发现路由子域应设置为抑制路由发现(参见表3.36)

3.5.3.3网络层载荷域

路由错误命令帧的网络层帧载荷域包含如下描述的命令标识符域、错误代码域和目的地址域。命令帧标识符域设置为为了描述如表3.39所定义的路由错误代码命令帧。

3.5.3.3.1错误代码

错误代码为表3.40所示的非保留值之一。

表3.40路由错误命令帧的错误代码

错误代码
0x00
无有效路由
0x01
树状态链路失败
0x02
非树状态链路失败
0x03
低电池电压
0x04
无路由能力
0x05
无间接能力
0x06
间接传送终止
0x07
目的设备没有获得
0x08
目的地址没有获得
0x09
父设备链路失败
0x0a
有效路由
0x0b
源路由失败
0x0c
多对一路由失败
0x0d
地址冲突
0x0e
校验地址
0x0f
PAN标识符更新
0x10-0xff
保留

这些错误代码是表示错误代码命令帧的错误代码域的值和NLME-ROUTEERROR.indication原语的状态参数值。简单的解释如下:

(1)             无有效路由:路由发现和/或已经尝试修复和到目的地址没有发现路由。

(2)             树状态链路失败:帧沿树进行路由失败时,路由失败发生。

(3)             非树状态链路失败:尝试沿树路由的结果没有失败。

(4)             低电池电压:因为应答设备工作在低电压状态下,所以帧没有应答。

(5)             无路由能力:因为应答设备没有路由能力所以失败发生。

(6)             无间接能力:休眠终端子设备缓存该帧和应答设备没有足够的缓冲能力,所以失败发生。

(7)             间接传送终止:该帧代表休眠子设备time-out的结果缓存。

(8)             目的设备没有获得:响应设备的终端子设备由于一些原因没有获得。

(9)             目的地址没有获得:该帧是响应设备的终端子设备不存在的地址。

(10)         父设备链路失败:RF链路到设备的父设备失败。

(11)         有效路由:在目的地址域中多播路由标识符有效。

(12)         源路由失败:源路由失败可能表明源路由链路中的一个链路失败。

(13)         多对一路由失败:多对一的路由请求失败。

(14)         地址冲突:目的地址域的地址被两个或者更多设备使用。

(15)         校验地址:源地址在源IEEE地址域里有IEEE地址,且如果目的IEEE地址域存在,它包含的目的的期望的IEEE地址。

(16)         PAN标识符更新:设备的操作网络PAN标识符已经更新。

3.5.3.3.2目的地址

目的地址长度为2字节,包含出现传送错误数据帧的目的地址。

3.5.4断开命令

网络层管理实体用断开命令通知网络中的其他设备设备正在离开网络或者请求一个设备离开网络。断开命令帧的载荷格式如图3.14所示。

字节:1
1
命令帧标识符(参见表3.39)
命令选择

图3.14断开命令帧格式

3.5.4.1MAC数据服务请求

为了利用MAC层数据服务来传输该命令,根据802.15.4协议标准,应提供下列信息。

(1)目的MAC层地址和PAN标识符应分别设置为该帧要发送到的邻居设备的地址和PAN标识符。

(2)源MAC层地址和PAN标识符应设置为发送断开命令的设备地址和PAN标识符。

(3)帧控制域应设为使MAC数据帧禁止使用MAC安全功能,因此任何来自于网络层的可靠的帧都使用网络层的安全协议。请求被应答。

(4)地址模式和内部PAN标记应设置为这里所描述的支持地址域。

3.5.4.3网络层帧报头域

为了发送网络层断开命令帧,如果请求子域设置成1,那么在网络层帧头中的目的地址子域设置成请求断开子设备的网络地址,帧控制域中的目的IEEE地址设置成请求离开的设备的IEEE地址。如果请求子域设置成0,那么网络层帧报头中的目的地址域设置成0xfffd以表明被带有macRxOnWhenIdle的值等于TRUE的所有设备接收,帧控制域的源IEEE地址子域设置成1,且源IEEE地址应设置为断开网络设备的IEEE地址。网络层帧头的半径域设置成1。

网络层帧报头中的发现路由子域应设置为抑制路由发现(参见表3.36)

3.5.4.3网络层载荷域

断开命令帧的网络载荷域包含一个命令帧标识符和一个命令选择域。命令帧标识符域与表3.39描述的断开命令帧一样。

3.5.4.3.1命令选择域

8bit的命令选择域的格式如图3.15所示。

比特:0-4
5
6
7
保留
重新连接
请求
断开子设备

图3.15断开命令帧选择子域

3.5.4.3.1.1重新连接子域

重新连列子域是1bit在比特5的位置上。如果这个子域的值是1,同它目前父设备断开的设备重现连接到网络。如果该子域值是0,设备将不重新连接网络。

3.5.4.3.1.2请求子域

请求子域长度是1bit在bit6位置上。如果该子域的值是1,那么断开命令帧请求另一个设备离开网络。如果该子域值是0,那么断开命令帧表明发送设备准备断开网络。

3.5.4.3.1.3断开子设备子域

断开子设备子域是1bit长度在bit7的位置。如果该子域的值是1,那么断开设备的子设备也断开网络。


使用特权

评论回复
23
说书先生|  楼主 | 2016-9-11 15:50 | 只看该作者

3.5.5路由记录命令

路由记录命令允许穿梭于网络中的单播数据包在命令载荷中记录路由,且传送到目的地址。路由记录命令的载荷格式如图3.16所示。

字节:1
1
可变长
命令帧标识符
应答计数器
应答列表
网络层载荷

图3.16路由记录命令帧格式

3.5.5.1MAC层数据服务请求

为了利用MAC层数据服务来传输该命令,根据802.15.4协议标准,应提供下列信息。

(1)目的MAC层地址和PAN标识符应分别设置为该帧要发送到的邻居设备的地址和PAN标识符。

(2)源MAC层地址和PAN标识符应设置为发送路由记录命令的设备地址和PAN标识符。

(3)帧控制域应设为使MAC数据帧禁止使用MAC安全功能,因此任何来自于网络层的可靠的帧都使用网络层的安全协议。请求被应答。

(4)地址模式和内部PAN标记应设置为这里所描述的支持地址域。

3.5.5.2网络层帧报头域

网络层帧控制域的帧类型子域应社这为表示该帧是网络层命令帧。网络层帧头的源地址域和目的地址域分别设置成发起设备和目的设备的地址。帧控制域源路由子域应设置为0。

网络层帧头的发现路由子域应设置为抑制路由发现(参见表3.36)

3.5.5.3网络层有效载荷

网络层帧载荷包含命令标识符、应答计数器域和应答列表域。命令帧标识符域包含的值表明路由记录命令帧。

3.5.5.3.1应答计数器域

这是个长度1字节的域,包含路由记录命令的应答列表域的应答数。发起设备把它初始化为0,且每接收一个应答加1。

3.5.5.3.2应答列表域

应答列表域是应答数据包的节点的2字节的短地址的列表。地址是最少的有意义的格式。在发送一个数据包之前接收节点附加它们的短地址给列表。

3.5.6重新连接请求命令

重新连接请求命令允许设备重新连接它的网络。通常是响应通信失败才这么做,例如当终端设备不能同它的发起父设备通信。

字节:1
1
命令帧标识符(参见表3.39)
能力信息
网络层载荷

图3.17重新请求命令帧格式

3.5.6.1MAC层数据服务请求

为了利用MAC层数据服务来传输该命令,根据802.15.4协议标准,应提供下列信息。

(1)目的MAC层地址和PAN标识符应分别设置为预期的父设备的地址和PAN标识符。

(2)源MAC层地址和PAN标识符应设置为先前的短地址和传送重新请求命令帧的PAN标识符。

(3)传送选择应设置为请求确认。

(4)地址模式和内部PAN标记应设置为这里所描述的支持地址域。

3.5.6.2网络层帧报头域

当发送一个重新连接请求命令帧,网络层管理实体将设置网络层帧头的源地址域是先前的传送帧的设备的短地址,帧控制域的源IEEE地址子域将设置为1,且源IEEE地址域将设置为发送请求设备的IEEE地址。半径域设置为1。

网络层帧报头中的发现路由子域应设置为抑制路由发现(参见表3.36)

3.5.6.3网络层有效载荷域

网络层载荷域包含一个命令标识符域和一个能力信息域。命令帧标识符包含表明重新连接请求命令帧的值。

3.5.6.3.1能力信息域

是一个1字节的域,这个域包含在连接请求命令中的能力信息域的格式,在表3.18中有描述。

3.5.7重新连接响应命令

设备发送重新连接响应命令来通知它的短地址的子设备和重新连接状态。

字节:1
2
1
命令帧标识符(参见表3.39)
短地址
重新连接状态
网络层载荷


图3.18重新连接响应命令帧格式

3.5.7.1MAC层数据服务请求

为了利用MAC层数据服务来传输该命令,根据802.15.4协议标准,应提供下列信息。

(1)目的MAC层地址和PAN标识符应分别设置为请求重新连接网络的设备的地址和PAN标识符。

(2)源MAC层地址和PAN标识符应设置为接收和处理重新请求命令帧的网络地址和PAN标识符。

(3)请求确认。

(4)地址模式和内部PAN标记应设置为这里所描述的支持地址域。如果包含在重新请求命令的’Capability Information’字节的’Receiver on when idle’位的值等于0x00,那么TX操作将请求“间接传送”。反之使用’directtransmission’。

3.5.7.2网络层帧报头域

当发送一个重新连接响应命令帧,网络层管理实体将设置网络层帧头的目的地址域是先前的连接设备的短地址,帧控制域的源IEEE地址子域将设置为1,且网络层帧头的源IEEE地址域存在且包含发送响应的父设备的64位IEEE地址。帧控制域的目的IEEE地址这也是1,且网络层帧头的目的地址子域存在且包含响应重新连接请求命令帧的源的子设备的64位IEEE地址。

网络层帧报头中的发现路由子域应设置为抑制路由发现(参见表3.36)。

3.5.7.3网络层载荷域

当发送一个重新连接响应命令帧,网络层管理实体将设置网络层帧头的目的地址域是先前的重新连接设备的短地址。

3.5.7.3.1短地址域

如果重新连接成功,那么这个2字节域包含一个新的被指定的重新连接设备的短地址。如果重新连接没成功,这个域包含广播地址(0xffff)。

3.5.7.3.2重新连接状态域

这是1字节的域,包含在【B1】中规定的非保留连接状态值之一。


使用特权

评论回复
24
说书先生|  楼主 | 2016-9-11 15:51 | 只看该作者

3.5.8连接状态命令

连接状态命令帧允许邻居路由器之间通信,直到它们彼此的输入链路成本如3.7.3.4描述。链路状态命令载荷格式如图3.19所示。

字节:1
1
可变长
命令帧标识符
命令选择
链路状态列表
网络层载荷

图3.19链路状态命令帧格式

8bit的命令选择域的格式如题3.20所示。

比特:0-4
5
6
7
入口计数器
第一帧
最后帧
保留

图3.20链路状态命令选择域

在链路状态列表中的一个入口的格式如图3.21所示。

字节:2
1
邻居设备网络层地址
链路状态

图3.21链路状态入口

链路状态入口的链路状态域的格式如下:

比特:0-2
3
4-6
7
输入成本
保留
输出成本
保留

3.5.8.1MAC层数据服务请求

为了利用MAC层数据服务来传输该命令,根据802.15.4协议标准,应提供下列信息。

(1)目的MAC层地址和PAN标识符应分别设置为发送链路状态命令设备的地址和PAN标识符。

(2)目的地址必须设置成广播地址0xffff。

(3)源MAC层地址和PAN标识符应设置为发送状态命令设备的地址和PAN标识符。

(4)帧控制域应设为使MAC数据帧禁止使用MAC安全功能,因此任何来自于网络层的可靠的帧都使用网络层的安全协议。

(5)地址模式和内部PAN标记应设置为这里所描述的支持地址域。

3.5.8.2网络层帧报头域

为了发送一个链路状态命令帧,网络层帧头的源地址域应设置为发送设备的地址。

网络层帧报头的目的地址设置成仅仅是路由器的广播地址。(参见表3.51)

网络层帧报头中的发现路由子域应设置为抑制路由发现(参见表3.36)。

3.5.8.3网络层有效载荷域

每一个链路状态入口白含路由器邻居设备的网络地址,最没有意义字节在链路状态字节之后。输入成本域包含设备为邻居设备估计的链路成本,其值在1到7之间。输出链路成本域包含邻居表的输出成本域的值。

链路状态入口按网络地址的上升顺序存储。如果所有的路由器邻居设备不适合一个单帧,多针发送。当发送多帧时,对于帧N的链路状态表中最后网络地址等于帧N+1的链路状态表的第一个网络地址。

命令选择域的入口计数器子域表明链路状态表中的目前链路状态入口的值。如果是发送者的链路状态的第一帧那么第一帧子域值设置为1.。如果是发送者的链路状态的最后帧那么最后帧子域值设置为1。如果发送这状态适合单帧,第一帧和最后帧位都设置为1。

链路状态帧作为一个没有重发的单跳广播传输。

3.5.9网络层报告命令

网络层报告命令允许设备报告网络事件给协调器。可以报告的事件是无限电通信信道条件和PAN ID冲突。网络层报告命令载荷格式如图3.22所示。

字节:1
1
8
可变长
命令帧标识符(参见表3.39)
命令选择(参见图3.23)
EPID
记录信息
网络层载荷

图3.23网络层记录命令帧载荷

3.5.9.1MAC层数据服务请求

为了利用MAC层数据服务来传输该命令,根据802.15.4协议标准,应提供下列信息。

(1)目的MAC层地址和PAN标识符应分别设置为发送网络记录命令设备的地址和PAN标识符。

(2)目的地址必须设置成NIB中的nwkManagerAddr

(3)源MAC层地址和PAN标识符应设置为发送网络记录命令设备的地址和PAN标识符,这个设备不一定是发出命令的设备

(4)帧控制域应设为使MAC数据帧禁止使用MAC安全功能,因此任何来自于网络层的可靠的帧都使用网络层的安全协议。传送选择需要设置请求确认。

3.5.9.2网络层帧报头域

为了是网络记录命令到达包含NIB中nwkManagerAddr参数的地址指定的设备,必须提供下列信息。

网络层帧控制域的帧类型子域设置成表明这个帧是网络层命令帧。

网络层帧报头域的目的地址域应设置成包含NIB中nwkManagerAddr参数的16位网络地址。

网络层帧报头域的源地址域应设置成发送此帧的设备的16位网络地址。

网络层帧报头中的发现路由子域应设置为抑制路由发现(参见表3.36)。

3.5.9.3网络层有效载荷域

网络层帧载荷包含一个命令标识符域、一个命令选择域、一个EPID和一个记录信息载荷。

命令标识符域包含表明一个网络记录命令帧的值。

3.5.9.3.1命令选择域

8bit的命令选择域的格式如图3.23所示。

比特:0-4
5-7
记录信息计数器
记录命令标识符(参见图3.24)

图3.23网络层记录命令选择子域

3.5.9.3.1.1记录信息计数器子域

记录命令标识符子域包含一个目标表明记录信息命令的类型。图3.24包含能插入这个域的值。

命令标识符值
记录类型
0x00
PAN标识符出土
0x01
本地冲突记录
0x02-0x07
保留

图3.24 记录命令标识符子域

3.5.9.3.2EPID子域

EPID域包含64位EPID,定义一个网络,记录设备是这个网络中的一个成员。

3.5.9.3.3记录信息

记录信息域根据记录命令标识符子域的值提供正在记录的信息,域的格式。

3.5.9.3.3.1PAN标识符冲突记录

如果记录命令标识符子域的值表示一个PAN标识符冲突记录,那么记录信息域由一个16位PAN标识符列表组成,这个标识符是在记录设备的邻居运行的。记录信息计数器将设置等于包含在记录信息域中的PAN标识符的数。

3.5.9.3.3.2本地信息记录

如果记录命令标识符子域的值表示一个本地信息记录那么记录信息域是有能量扫描值列表(每个信道1字节)和所有邻居设备的Tx失败总和(2字节)组成。记录信息计数器包含正在记录的信道的数。


使用特权

评论回复
25
说书先生|  楼主 | 2016-9-11 16:10 | 只看该作者

3.5.10网络更新命令

网络更新命令允许由NIB中的nwkManagerAddr参数确定的设备广播配置信息的改变到网络中的所有设备。例如广播网络将改变短PAN标识符。

网络更新命令帧的载荷格式如图3.25所示。

字节:1
1
8
2
命令帧标识符
命令选择(参见图3.23)
EPID
更新信息
网络层载荷

图3.23网络更新命令帧格式

3.5.10.1MAC层数据服务请求

为了利用MAC层数据服务来传输该命令,根据802.15.4协议标准,MAC层帧报头包含如下信息。

(1) 为了使命令帧能到达没有接收到更新命令的网络设备,目的PAN标识符将设置成ZigBee协调器的老PAN标识符。目的地址必须设置成广播地址0xffff。

(2) 源MAC地址和PAN标识符设置成发送网络记录命令设备的网络地址和老的PAN标识符,这个设备不一定是发送这个命令的设备。

(3) 帧控制域应设为使MAC数据帧禁止使用MAC安全功能,因此任何来自于网络层的可靠的帧都使用网络层的安全协议。传送选择需要设置请求确认。

3.5.10.2网络层帧报头域

为了发送一个网络更新命令帧,网络层帧头的源地址域应设置为发送设备的地址。

网络层帧报头的目的地址设置成广播地址0xFFFF。

网络层帧报头中的发现路由子域应设置为抑制路由发现(参见表3.36)。

3.5.10.3网络层有效载荷域

网络层帧载荷包含一个命令标识符域、一个命令选择域、一个EPID和一个更新命令可变域。

命令标识符域包含表明一个网络更新命令帧的值。

3.5.10.3.1命令选择域

8bit的命令选择域的格式如图3.26所示。

比特:0-4
5-7
更新信息计数器
更新命令标识符(参见图3.27)

图3.23网络层更新命令选择子域

3.5.10.3.11更新信息计数器域

更新信息计数器子域包含一个整数表明包含在更新信息域里的记录数。记录的大小根据更新命令标识符的值。

3.5.10.3.1.2更新命令标识符子域

更新命令标识符子域包含一个整数表明更新信息命令的类型。图3.27包含能插入这个域的值。

命令标识符值
记录类型
0x00
PAN标识符更新
0x01
网络更新
0x02-0x07
保留

图3.27更新命令标识符子域

3.5.10.3.2EPID域

EPID包含64位EPID确定网络在更新。

3.5.10.3.3更新信息

更新信息域根据更新命令标识符子域的值提供正在更新的信息,域的格式。

3.5.10.3.3.1PAN标识符更新

如果更新命令标识符子域的值表示一个PAN标识符更新,那么更新信息域由一个单独的16位PAN标识符组成,这个标识符是网络正在使用的新的标识符。更新信息计数器将设置等于1,仅仅只有一个单独的PAN标识符包含在更新信息域中的。

3.5.10.3.3.2网络更新

如果更新命令标识符子域的值表示一个网络更新,那么更新信息由潜在的网络使用的有效信道的32位bitmask,使用的信道的32位bitmask和nwkManager Addr组成。


使用特权

评论回复
26
说书先生|  楼主 | 2016-9-11 16:18 | 只看该作者

3.6常量和NIB属性

3.6.1网络层常量

网络层所定义的特性常量如表3.41所示。

常量
描述
nwkcCoordinatorCapable
布尔标记,表明设备是否具有成为ZigBee协调器的能力。其中0x00表明设备不具备这样的能力;0x01表明设备有成为ZigBee协调器能力
在初始化时设定
nwkcDefaultSecurityLevel
使用的缺省安全级别(参见第4章)
ENC-MIC-64
nwkcDiscoveryRetryLimit
路由发现重试的最大次数
0x03
nwkcMaxDepth
一台设备拥有的最大深度(离ZigBee协调器的最小逻辑跳数)
0x0f
nwkcMinHeaderOverhead
由网络层加到载荷中的最大字节数
0x08
nwkcProtocolVersion
设备中ZigBee网络层协议的版本
0x02
nwkcWaitBeforeValidation
在接收路由应答和发送有效路由信息之间,多播路由请求发送者持续时间(单位:毫秒)
0x500
nwkcRepairThreshold
链路失败和网络层启动维修机制后,所能允许的最大通信错误数
0x03
nwkcRouteDiscoveryTime
直到路由发现终止,所需的持续事件(单位:毫秒)
0x2710
nwkcMaxBroadcastJitter
最大广播不稳定时间(单位:毫秒)
0x40
nwkcInitialRREQRetries
路由请求命令帧的第一个广播传输的重试次数
0x03
nwkcRREQRetries
中间ZigBee路由器或协调器请求命令帧广播重传次数
0x02
nwkcRREQRetryInterval
广播路由请求命令帧重传的间隔(单位:毫秒)
0xFF
nwkcMinRREQJitter
路由请求命令帧重传的最小不稳定(2毫秒间隔)
0xFE
nwkcMaxRREQJitter
路由请求命令帧重传的最大不稳定(2毫秒间隔)
0x40
nwkcMACFrameOverhead
ZigBee网络层使用的MAC层帧头的大小。ZigBee协议栈Profile能增加这个常量值以保证与IEEE802.15.4 2003协议兼容
0x0b

3.6.2网络层信息库

网络层信息库(NIB)由管理设备网络层所需要的属性组成。每一个属性都可以分别使用NLME-GET.request和NLME-SET.request原语进行读写。NIB属性如表3.42所示。

表3.42网络层信息库属性

属性
代码
类型
有效值范围
描述
缺省值
nwkSequenceNumber
0x81
整型
0x00-0xff
加到输出帧上的序列号
范围内的随机值
nwkPassiveAck-
Timeout
0x82
整型
0x00-0x0a
父设备与所有子设备重传广播信息的最长持续时间(单位:秒,被动确认超时)
0x03
nwkMaxBroadcast-
Retries
0x83
整型
0x00-0x05
广播帧传送失败后最大重传次数
0x03
nwkMaxChildren
0x84
整型
0x00-0xff
现有网络上所能拥有的最大子设备数
0x07
nwkMaxDepth
0x85
整型
0x01-
nwkcMaxDepth
设备拥有的蛇深度
0x05
nwkMaxRouters
0x86
整型
0x01-0xff
设备能接入的路由器数。网络中所有设备的此值都是由ZigBee协调器来决定
0x05
nwkNeighborTable
0x87
设置
可变
设备中现有的邻居表
未设置
nwkNetworkBroadcast-
DeliveryTime
0x88
整型
(nwkPassive
AckTimeouT*
nwkBroadcast
Retries)-0xff
广播信息漫布整个网络的持续时间(单位:秒)
nwkPassiveAck
Timeout *
nwkBroadcastR
etries
nwkReportConstantCost
0x89
整型
0x00-0x01
如果设置为0,则网络层将使用MAC层所报告的LQI值计算所有邻居节点链路的成本。否这它将报告一个常量值
0x00
nwkRouteDiscovery-
RetriesPermitted
0x8a
整型
0x00-0x03
在失败路由请求之后允许重试的最大次数
Nwkc
Discovery
RetryLimit
nwkRouteTable
0x8b
设置
可变
设备的现有路由表
未设置
nwkSymLink
0x8e


布尔型
TRUE or FALSE
现有的路由对称设置TRUE,表示路由默认由对称链路组成。路由发现期间建立了前向和后向路由,并且二者是相同的。FALSE表示路由不是由对称链路组成。在路由发现期间只有前向路由被保留
FALSE
nwkCapabilityInformation
0x8f

比特组
参见表3.18
包含网络连接期间建立的设备能力信息
0x00
nwkAddrAlloc
0x90
整型
0x00 - 0x02
确定分配地址方法的值:0x00=使用分布式地址分配,0x01=保留,0x02=使用随机地址分配
0x00
nwkUseTreeRouting
0x91
布尔型
TRUE orFALSE
确定网络层是否有使用分等级路由(树形路由)能力的标志:TRUE=有使用分等级路由能力;FALSE=不使用分等级路由
TRUE
nwkManagerAddr
0x92
整型
0x0000 -0xfff7
指定的网络管理地址
0x0000
Reserved
0x93




Reserved
0x94




nwkTransaction-
PersistenceTime
0x95



整型
0x0000 -0xffff
协调器存储处理的最大时间(在超帧周期)且表明在它的信标内。这个属性反应了MAC PIB属性中的Transaction- PersistenceTime的值且高层对此值的任何改变将反应在MAC PIB属性值中
0x01f4
nwkShortAddress
0x96



整型
0x0000 -0xfff7
设备使用的PAN通信的16位地址。这个属性反应了MAC PIB属性中的macShortAddress的值且高层对此值的任何改变将反应在MAC PIB属性值中
0xffff
nwkStackProfile
0x97
整型
0x00-0x0f
设备中使用的ZigBee协议栈的profile标识符
0
Reserved
0x98




nwkGroupIDTable
0x99
设置
可变
设备是这个网络组的成员,标识符的设置范围在0x00 -0xff
未设置
nwkExtendedPANID
0x9A
64位扩展地址
0x000000
0000000000-
0xffffffff
fffffffe
设备是这个网络的成员的扩展PAN标识符。0x000000000-
0000000标识扩展的PAN标识未知
0x0000000
000000000

nwkUseMulticast
0x9B

尔型
TRUE orFALSE
确定多播信息在哪一层发生的标志。TRUE=多播发生在网络层;FALSE=多播发生在应用子层且使用应用子层帧报头
TRUE
nwkRouteRecordTable
0x9C
设置
可变
路由记录表
未设置
nwkSetConcentrator
0x9D
布尔型
TRUE or FALSE
确定设备是否是集中器的标志。TRUE=是被是集中器;FALSE=设备不是集中器
FALSE
nwkConcentratorRadius
0x9E
整型
0x00 - 0xff
协调器路由发现的跳计数器被半径
0x0000
nwkConcentrator-
DiscoveryTime
0x9F

整型
0x00 - 0xff
两个协调器路由发现的间隔时间(单位:秒)如果设置成0x0000只有高层在启动时发现路由
0x0000
nwkLinkStatusPeriod
0xA0
整型
0x00 - 0xff
链路状态命令帧之间的间隔(单位:秒)
0x0F
nwkRouterAgeLimit
0xA1
整型
0x00- 0xff
在链路成本复位到0前,丢失的链路状态命令帧个数
3
nwkUniqueAddr
0xA2
布尔型
TRUE or FALSE
确认网络层是否检测和改正冲突地址的标志:TRUE=所用地址是唯一的;FALSE=所用地址不唯一
TRUE
nwkAddressMap
0xA3
设置
可变
64位IEEE当前的设置到16位网络地址地图
未设置
nwkTimeStamp
0xA4
布尔型
TRUE or FALSE
确定输入输出数据包是否提供一个时间表示的标志。TURE=提供了时间表示;FALSE=未提供了时间表示
FALSE

表3.43路由记录表入口帧格式

域名
域类型
有效值范围
相关信息
Network Address
整型
0x0000-oxfff7
路由记录的目的短地址
Relay Count
整型
0x0000 -0xffff
从协调器到目的设备的应答节点的计数器
Path
网络地址设置

短地址的设置表示从协调器到目的设备的路由顺序

表3.44网络地址地图

64位IEEE地址
16位网络地址
一个有效的64位IEEE地址或者如果未知就是NULL
0x0000 - 0xfff7

使用特权

评论回复
27
说书先生|  楼主 | 2016-9-11 16:19 | 只看该作者

3.7功能描述

3.7.1网络和设备的维护

所有的ZigBee设备都具有以下功能:

1.连接网络。

2.断开网络。

ZigBee协调器和路由器都具有以下附加功能:

  • 允许设备用如下方式与网络连接:

①    MAC层的连接命令。

②    应用层的连接请求命令。

  • 允许设备以如下方式断开网络:

①MAC层的断开命令。

②应用层的断开命令。

③对逻辑网络地址进行分配。

④维护邻居设备表。

ZigBee协调器应具有建立一个新网络的功能。

ZigBee路由器和终端设备在一个网络中应提供轻便支持。

3.7.1.1建立一个新的网络

设备通过NLME-NETWORK-FORMATION.request原语来启动一个新的网络的建立过程。仅仅当具有ZigBee协调器能力,且当前还没有与网络连接的设备才可以尝试着去建立一个新的网络。如果该过程由其他设备开始,则网络层管理实体将终止改过程,并向其上层发出非法请求的报告。该步骤通过发出状态参数为INVALID_REQUEST的NLME-NETWORKFORMATION.confirm原语来完成。

当建网过程开始后,网络层将首先请求MAC层对协议所规定的信道,或由物理层所默认的有效信道进行能量检测扫描,以检测可能的干扰。为实现能量检测扫描,设备网络层通过发送扫描类型(ScanType)参数设置为能量检测扫描的MLME-SCAN.request原语到MAC层进行信道能量检测扫描,扫描结果通过MLME-SCAN.confirm原语返回。

当网络层管理实体收到成功的能量检测扫描结果后,将以递增的方式对所测量的能量值进行信道排序,并且抛弃那些能量值超出了可允许能量水平的信道,选择可允许能量水平的信道有待进一步处理。此后,网络层管理实体将通过发送MLME-SCAN.request原语执行主动扫描,其中该原语的ScanType参数设置为主动扫描,ChannelList参数设置为可允许信道的列表,搜索其他的ZigBee设备。为了决定用于建立一个新网络的最佳通道,网络层管理实体将检查PAN描述符,并且所查找的第一个信道为网络的最小编号。

如果网络层管理实体找不到适合的信道,就将终止建网过程,并且向应用层发出启动失败信息,即通过发送参数状态为STARTUP_FAILURE.的NLME-NETWORK-FORMATION.confirm原语向其上层通告。

如果网络层管理实体找到了合适的信道,则将为这个新网络选择一个PAN标识符。为了选择一个PAN标识符,设备将选择一个随机的PAN标识符值小于等于3ffff没有在已选择信道里使用的。一旦网络层管理实体做出了选择,则它通过发出MLME-SET.request原语将这个值写为MAC层macPANId属性。

如果选择不出唯一的标识符,网络层管理实体将终止程序,并且通过发送状态参数为STARTUP_FAILURE的NLME-NETWORK-FORMATION.confirm原语向其上层通告。

网络层管理实体一旦选择了一个PAN标识符,将选择一个等于0x0000的16位网络地址,并且设置MAC层的macShortAddress PIB属性,使其等于所选择的网络地址。

一旦选择了网络地址,网络层管理实体核对PIB属性的endedPANId的值。如果这个值是0x0000000000000000这个属性以MAC常量aExtendedAddress初始化。

一旦nwkExtendedPANId的值核对,网络层管理实体通过MLME-START.request原语给MAC层开始新的PAN操作。MLME-START.request原语的参数根据NLME-NETWORK-FORMATION.request原语来施舍,即根据信道扫描和所选择的PAN标识符来设置。PAN的启动状态通过MLME-START.confirm原语返回到网络层。

当网络层管理实体收到PAN的启动状态后,将向启动ZigBee协调器请求状态的上层报告,即通过发出the NLME-NETWORK-FORMATION.confirm原语向其上层报告,其原语的状态参数为从MAC层的MLMESTART.confirm原语所返回的值。

成功启动一个新网络的信息流程如图3.28所示。

3.7.1.2允许设备与网络连接

通过NLME-PERMIT-JOINING.request原语来允许设备与网络连接。仅仅只有设备为ZigBee协调器或者路由器时,才能企图允许设备与网络连接。

当此过程开始时,若设置PermitDuration参数为0x00则启动该过程,并且网络层管理实体把在MAC层的macAssociationPermit PIB属性设置为FALSE。MAC层的属性设置通过MLME-SET. Request原语来完成。

当此过程开始时,若设置PermitDuration参数为一个0x01和0xFE之间的值时,则网络层管理实体将把在MAC层中的macAssociationPermit PIB属性设置为TRUE,并且网络层管理实体将启动一个定时器,用来对一个特定的时间进行计时,达到该时间时,定时器停止计时,在该定时器停止时,网络层管理实体将把MAC层中的macAssociationPermit PIB属性设置为FALSE。

当此过程开始时,若设置PermitDuration参数设置为0xFF,则网络层管理实体将把在MAC层中的macAssociationPermit PIB属性设置为TRUE,以表示无限定时间,除非发送另一个NLME-PERMITJOINING.request原语。

允许设备同网络连接的过程如图3.29所示。




使用特权

评论回复
28
说书先生|  楼主 | 2016-9-11 16:19 | 只看该作者

3.7.1.3.3直接方式连接网络

本小节将介绍子设备如何通过预先分配的父设备(ZigBee协调器或路由器)直接同网络连接的过程。在这种情况下,父设备将为子设备预先分配一个64位地址。下面将描述如何使用这个优先地址来建立父子网络关系。

ZigBee协调器或者路由器直接将一个设备加入它所在的网络的流程是从发送NLME-DIRECT-JOIN.request原语开始的,其原语的DeviceAddress参数设置为要连接网络的设备地址。仅仅只有设备为ZigBee协调器或者路由器时,才可以执行这个流程。如果其他设备执行这个流程,网络层管理实体将终止该流程,并且将发送NLME-DIRECT-JOIN.confirm原语向其上层通告其非法请求,其原语的状态参数设置为INVALID_REQUEST。

当该流程开始后,父设备的网络层管理实体将首先确定所指定的设备是否存在于网络中。为完成这个过程,网络层管理实体将搜索它的邻居表,以确定是否有一个相匹配的64位扩展地址。如果存在一个相匹配的64位地址,则网络层管理实体将终止该流程,并发送NLME-DIRECT-JOIN.confirm原语向其上层通告该设备已经存在于网络设备列表中,其原语的状态参数设置为ALREADY_PRESENT。

如果不存在一个相匹配的64位地址,如果可能,网络层管理实体将为这个新设备分配日一个16位网络地和一个新的邻居表入口。见3.7.1.5节和3.8.1.6节地址分配机制。如果父设备在邻居表中没有足够的空间,那么网络层管理实体将终止该流程,并且发送NLME-DIRECT-JOIN.confirm原语向其上层通告空间不够,其原语状态参数设置为NEIGHBOR_TABLE_FULL。如果存在足够的空间,则网络层管理实体将发送NLME-DIRECT-JOIN.confirm原语向其上层通告设备已经同网络连接,其原语状态参数设置为SUCCESS。

一旦父设备将子设备同网络连接,子设备为了建立父子网络关系必须与父设备进行通信。子设备将启动孤点流程来完成这个请求,古典流程将在3.7.1.3.3.1描述。

父设备成功地将子设备直接同它的网络连接流程如图3.34。在这个流程中他们不在空中交换任何信息。


3.7.1.3.3.1通过孤点方式连接或重新连接网络

本小节介绍了一个已经直接同网络连接的设备(通过孤点方式)或者一个以前同网络连接的设备,但目前没有和它的父设备失去联系,它将(通过孤点方式重新连接)如何执行孤点连接流程同网络连接。

一个已经同网络连接的设备为了完成建立它与其父设备的关系,应开始执行孤点流程,设备的应用层将决定是否开始该流程,如果开始,则应用层将通过网络层打开电源。

如果一个以前已经同网络连接的设备,其网络层管理实体将不断地接收到来自于MAC层发送的通信失败通知,则它将开始执行孤点流程。

3.7.1.3.3.2子设备流程

子设备通过发送NLME-JOIN.request原语来开始执行孤点方式同网络连接,其原语的RejoinNetwork参数设置为0x01.

当开始执行流程时,首先,网络层管理实体请求MAC层对ScanChannels参数给定的信道进行孤点扫描。通过向MAC层发送MLMESCAN.request原语开始进行孤点扫描,其扫描的结果通过MLME-SCAN.confirm原语返回到网络层管理实体。

如果孤点扫描成功(即子设备扫描到父设备),网络层管理实体将通过发送NLME-JOIN.confirm原语向其上层通告请求连接或者重新连接网络已成功执行,其原语状态参数设置为SUCCESS。

注意如果子设备是第一次连接或者以前已经同网络连接但是保持树形深度信息失败(树形深度在3.4.6.1中规定),它有可能在网络中不能正确操作,对于消息的恢复超出了规定的范围。

如果孤点扫描不成功(即没有扫描到父设备),网络层管理实体将终止该流程,并通过发送NLME-JOIN.confirm原语向其上层通告没有扫描到网络,其原语的状态参数设置为NO_NETWORKS。

子设备通过孤点方式连接网络或者重新连接网络的流程如图3.35。



3.7.1.3.3.3父设备流程

一个父设备收到来自于MAC层发送来的MLME-ORPHAN.indication原语时,就可得知存在一个孤点设备。仅仅当设备为Zigee协调器或者路由器(也就是具有父设备能力)时,才能执行该连接流程;否这其他设备执行该流程时,网络层管理实体将终止该流程的执行。

该流程开始执行时,网络层管理实体首先判断该孤点是否是它的子设备。为了对其进行判断,需要将孤点设备的扩展地址和邻居表中所记录的子设备地址向比较,如果存在向匹配的地址(即古典设备是它的子设备),则网络层管理实体将得到其相对应的16位网络地址以及它随后对MAC层的孤点响应状态。网络层管理实体通过向MAC层发送MLME-ORPHAN.response原语对其孤点进行响应,并且通过MLME-COMM-STATUS.indication原语得到其传输状态。

如果不存在相匹配的地址(即孤点设备不是它的子设备),流程终止且不通知上层。

父设备连接或者重新连接孤点设备的流程如图3.36。


使用特权

评论回复
29
说书先生|  楼主 | 2016-9-11 16:20 | 只看该作者

3.7.1.4邻居表

一个设备的的邻居表中应包含在其传输范围中每一个设备的信息。

邻居表是很有用的。首先,它用在网络发现或者重新连接来存储路由相关的信息(在RF接收范围内)能成为候选父设备。其次,在设备连接到网络之后,它存储在这个网络中的邻居设备的关系和链路状态信息。一个设备从相应的邻居表中接收到任何帧时表入口都要更新。

输出成本域包含邻居表中测试的链路成本。这个值是从邻居表接收到的最新链路状态命令帧处得到的。如果值是0表明接收到的设备没有链路状态命令表。

年龄域表明nwkLinkStatusPeriod间隔的数值是从已经收到的最后链路状态命令帧直到nwkRouterAgeLimit的最大值。(p376)

在正常网络操作中固定的和可选的数据如表3.45所示。

表3.45邻居表入口格式

域名
域的类型
有效值范围
描述
Extended address
整型
一个扩展的64位IEEE地址
每个设备的唯一的64位IEEE地址。如果邻居设备是父设备或子设备,在存在该子域
Network address
网络地址
0x0000-0xffff
邻居设备的16位网络地址。在每一个邻居表中都存在该子域
Device type
整型
0x00-0x02
邻居设备的类型:
0x00为ZigBee协调器
0x01为ZigBee路由器
0x02为ZigBee终端设备
在每一个邻居表中都存在该子域
RxOnWhenIdle
布尔型
TRUE or FALSE
表示邻居设备接收机在超帧活动期的空闲期是否工作。
TRUE为接收机关
FALSE为接收机开
Relationship
整型
0x00-0x04
邻居设备和当前设备的关系:
0x00=邻居设备为父设备
0x01=邻居设备为子设备
0x02=邻居设备为同属设备
0x03=不为上述设备
0x04=先前的子设备
在每个邻居表中都存在该子域
Transmit Failure
整型
0x00-0xff
表明以前设备的传送是否成功。值越大则表明越失败。在每个邻居表中都存在该子域
LQI
整型
0x00-0xff
估计RF传输链路质量。在每个邻居表中都存在该子域
Outgoing Cost
整型
0x00-0xff
邻居设备计算的输出链路成本。值是0表示输出成本有效。该项为选择项
Age
整型
0x00-0xff
接收到链路状态命令后的nwkLinkStatusPeriod间隔的值。该项为选择项
Incoming beacon
timestamp
整型
0x000000-0xffffff
从邻居表中接收到的最后一个信标帧的时间标记。这个值等于当就收到信标帧时采用的timestamp。该项为选择项
Beacon transmission
time offset
整型
0x000000-0xffffff
邻居设备信标与它的父设备的信标之间的传输时间差。从响应的输入信标时标减去该偏差就可得计算出邻居父设备传送信标时间。该项为选择项

在网络发现和重新连接用到的信息如上描述如表3.46所示。所有域都是可选的且在网络层管理实体选择连接网络之后就不能保持。不是所选择网络的设备的邻居表的入口被丢弃。

表3.46附加邻居表域

域名
域类型
有效值范围
描述
Extended PAN ID
整型
0x0000000000000001 -
0xfffffffffffffffe

设备属于的网络的64位唯一的标识符
Logical channel
整型
PHY支持的可用逻辑信道
网络工作的逻辑信道
Depth
整型
0x00-nwkcMaxDepth
邻居设备的树状深度
Beacon order
整型
0x00-0x0f
设备的IEEE802.15.4的信标顺序
Permit joining
布尔型
TRUE or FALSE
表示设备是否接受连接请求。
TRUE=设备正在接受连接请求
FALSE=设备没有接受连接请求
Potential parent
整型
0x00-0x01
表示是否排除设备为潜在的父设备。
0x00表示设备不是潜在的父设备。
0x01表示设备是潜在的父设备。

3.7.1.5分布式地址分配机制

NIB属性nwkAddrAlloc的缺省值是0x00,采用分布式地址分配方案来分配网络地址,即该方案为每一个父设备分配一个有限的网络地址段。这些地址在一个特殊的网络中是唯一的,并且由它的父设备分配给它的子设备。ZigBee协调器决定在其网络中允许连接的子设备的最大个数。对于这些子设备,参数nwkMaxRouters为路由器最大个数,而剩下的设备数为终端设备数。每一个设备具有一个连接深度,即连接深度表示仅仅采用父子关系的网络中,一个传送帧传送到ZigBee协调器所传递的最小跳数。ZigBee协调器自身深度为0,而它的子设备深度为1.ZigBee协调器决定网络的最大深度。

假定父设备拥有子设备数量的最大值为nwkMaxChildren (Cm),网络的最大深度为nwkMaxDepth (Lm),父设备将路由器最为它的子设备的最大数为nwkMaxRouters (Rm),则可计算函数Cskip(d),该函数为在给定网络深度d和路由器以及子设备个数的条件下,父设备所能分配子区段地址数为:


如果一个设备的Cskip(d)的值为0,则它没有接收子设备的能力,并且将这样的设备看作为一个ZigBee网络的终端设备。该设备的网络层管理实体将发送MLME-SET.request原语,将MAC层的个域网信息库中的macAssociationPermit属性设置为FALSE,且对将来所接收到参数PermitDuration的值等于或大于0x01的NLME-PERMIT-JOINING.request原语进行响应,其响应是状态参数为INVALID_REQUEST的NLME-PERMIT-JOINING.confirm原语。然后终止这个允许连接的流程。

如果父设备的Cskip(d)的值大于0,则可以接受子设备,并且将根据子设备是否具有路由能力来向子设备分配不同的地址。

利用Cskip(d)作为偏移,向具有路由能力的子设备分配网络地址。父设备为它的第一个路由子设备分配一个比自己大1的地址,随后分配给路由子设备的地址将以Cskip(d)为间隔,以此类推为所有的路由器分配地址。nwkMaxRouters的最大值将分配这样的地址。第n个终端设备的网络地址将按照如下的公式进行分配:


其中1≤n≤(Cm-Rm),Aparent为父设备地址。

图3.37给出了一个具有最大子设备数(nwkMaxChildren)为4,最大路由数(nwkMaxRouters)为4,网络最大深度(nwkMaxDepth)为4的ZigBee网络,则利用上述公式计算出的Cskip(d)值如表3.47表示。

表3.47深度与偏差

网络深度d
偏移Cskip(d)
0
21
1
5
2
1
3
0

由于在设备之间不能共享一个地址段,因此,当第二层的父设备所具有的地址不用时,则第一层的父设备有可能用尽它的所有地址。一个不具备可用地址的父设备将不允许新设备加入该网络。在这种情况下,新设备将寻找另一个父设备,如果在其传输范围内设备找不到有效的父设备,则该设备将不能加入到该网络,除非物理移动它或者网络有一些其他的变化。

3.7.1.6随机地址分配机制

当NIB属性的nwkAddrAlloc是0x02时,随机选择地址。当设备连接到网络它的父设备选择一个随机地址,这个随机地址不是已经出现在父设备的NIB终端的任何入口。ZigBee协调器,它没有任何父设备,但仍然有地址0x0000。

3.7.1.7安装和寻址

可以清楚的看出nwkMaxDepth大致决定了从网络树根到最远的终端设备之间的距离。从理论上来说,nwkMaxDepth也决定了整个网络的直径。在特殊情况下,对于一个以ZigBee协调器为网络中心的理想网络结构来说,如图3.37所示,其网络直径为2 *nwkMaxDepth。在实际情况中,应用驱动布置方式与布置的顺序可以减小网络的直径。在这种情况下,nwkMaxDepth为网络直径的下界,而2* nwkMaxDepth为网络直径的上界。

最后,由于树形的事实,当nwkAddrAlloc值是0x00时,不能动态的平衡网络树,在一些实际的网络分配中,如按照线性方式分布的网络设备,可能在远远没有到达真正的网络容量时,其网络地址已经全部分配。

在随机地址分配中,没有网络树的建立因此nwkMaxDepth和网络跳数有关。在网络中用随机地址分配没有限定的值。


使用特权

评论回复
30
说书先生|  楼主 | 2016-9-11 16:27 | 只看该作者

3.7.1.8断开网络

本小节介绍两种断开网络流程,即设备自己从网络中离开和父设备请求子设备离开。这两种情况,断开网络的设备的子设备也断开网络。

3.7.1.8.1设备自己从网络中断开的方法

本小节描述设备在响应从高层接收到NLME-LEAVE.request原语如何从网络中断开,如图3.38


ZigBee协调器或者路由器的网络层接收到NLME-LEAVE.request原语之后,其DeviceAddress参数等于NULL(表明设备自己断开网络),设备将使用MCPS-DATA.request原语发送断开命令帧,其DstAddr参数设置0xffff表明是MAC广播。断开命令帧的命令选择域的请求子域设置为0。断开命令帧的命令选择域的断开子设备子域的值应反应NLMELEAVE.reques原语的RemoveChildren参数值,且断开命令的重连接子域的值反应NLMELEAVE.request原语的Rejoin参数值。在传送断开命令帧之后,它将发送一个NLME-LEAVE.confirm原语给上层,其DeviceAddress参数设置是NULL。如果断开命令帧传送成功,那么状态参数设置为SUCCESS。反之,NLME-LEAVE.confirm原语的状态参数值与the MCPS-DATA.confirm原语返回的状态参数值相同。

如果接收到NLME-LEAVE.request原语的设备是ZigBee终端设备,那么设备将使用MCPSDATA.request原语发送一个断开命令帧,其原语DstAddr参数设置为它父设备的16位网络地址,表明是MAC单播。断开命令帧的命令选择域的请求和断开子设备子域应设置为0。断开命令帧传送之后,它将发送NWK-LEAVE.confirm原语给高层,其DeviceAddress参数设置等于NULL。如果断开命令帧传送成功,那么状态参数设置SUCCESS。反之,NLME-LEAVE.confirm原语的状态参数与MCPS-DATA.confirm原语返回的状态参数相同。

3.7.1.8.2父设备将子设备断开网络的方法

本小节介绍父设备在从高层接收到NLME-LEAVE.reques原语后如何让其一个子设备同网络断开。如图3.39所示。


ZigBee协调器或者路由器的网络层在接收到NLME-LEAVE.request原语之后,其原语参数设置等于子设备的64位IEEE地址,设备将使用MCPS-DATA.reques原语发送一个网络断开命令帧,其原语DstAddr参数设置为子设备的16位网络地址。断开命令帧的命令选择域的请求子域设置为1,表明断开网络的请求。断开命令帧的命令选择域的断开子设备子域的值反应NLME-LEAVE.request原语的RemoveChildren参数值,且断开命令帧的Rejoin子域的值反应NLME-LEAVE.request的Rejoin参数值。

断开命令帧传送之后,如果断开命令帧传送成功,网络层将发送NLME-LEAVE.confirm原语,其DeviceAddress参数设置为正在断开网络的子设备的64位IEEE地址和SUCCESS状态。反之,NLME-LEAVE.confirm状态参数与MCPS-DATA.indication返回的状态参数一致。

在子设备已经断开之后,父设备的网络层将修改它的邻居表,和其他任何和子设备相关的数据结构,来表明设备不再网络中。设备已经断开之后对于高层寻址和传送帧是错误码。

ZigBee终端设备没有子设备来断开且不应该收到带有参数是non-NULL DeviceAddress的NLME-LEAVE.request原语。

3.7.1.8.3收到断开命令帧之后

网络层通过MCPSDATA.indication原语收到断开命令帧之后,设备将检查命令帧的命令选择域的请求子域的值。如图3.40所示。如果请求子域是0,那么网络层将发送NLME-LEAVE.indication原语给高,其原语设备地址参数等于断开命令帧的源IEEE地址子域的值。设备将修改它的邻居表和与正在离开网络设备相关的任何其他相关数据结构,来表明它不再在网络中中。设备离开网络之后对于高层寻址和传送帧给这个设备是错误码。


如果ZigBee协调器的网络一旦收到如上描述的断开命令帧,命令帧传送的MCPS-DATA.indication原语的SrcAdd参数是接收者的父设备的16位网路地址,且命令选择子域的请求子域的值为1或者命令选择域的断开子设备子域的值是1那么接收者将使用MCPS-DATA.request原语发送断开命令帧,其原语的DstAddr的参数设置为0xffff,表明MAC广播。断开命令帧的命令选择域的请求子域的值设置为0。

输出断开命令帧的命令选择域的断开子设备子域的值反应输入断开命令帧的相同域的值。传送断开命令帧之后它将发送一个NLME-LEAVE.indication原语给高层,其DeviceAddress参数设置为NULL。

如果请求子域的值是1,且离开命令帧的源是一个设备而不时接收者的父设备,帧被丢弃。

如果ZigBee终端设备接收一个如上所述的断开命令帧,且传送命令帧的MCPS-DATA.indication原语SrcAddr参数是接收者的父设备的16位网络地址,接收者将发送一个NLME-LEAVE.indication原语给高层,其DeviceAddress参数等于NULL。

网络层也许使用重发技术,如3.7.4描述,开加强断开网络过程的可靠性,但是除了这一点,这些机制是在协议范围外的。

3.7.1.9设备复位

设备的网路层将在如下3中情况下对设备进行复位,即(1)在上电后;(2)在企图连接网络前;(3)在企图同网络断开连接后。这个过程在其他任何时间都不执行。设备通过向上层网络管理实体发送NLME-RESET.request原语来执行设备复位,并且通过NLME-RESET.confirm原语返回执行复位的结果信息。复位流程将清楚设备的路由表。

一些设备在ROM存储单元中可能存储了网络层信息,在复位后将恢复这些存储信息。但设备在复位后,将丢弃它的网络地址。这些设备搜索网络连接网络并从它的父设备得到一个网络地址。新网络地址可能与旧的网络地址不同。在这种情况下,任何设备想同复位后的设备进行通信的时候,都必须使用上层协议来重新发现该设备。

3.7.1.10管理PANID冲突

由于PANID不是唯一的数字所以PANID有可能冲突。下一节介绍如何通过网络层Report和Update命令帧来更新一个网络的PANID。

3.7.1.10.1检测PANID冲突

网络中任何一个操作的设备接收到MLME-BEACONNOTIFY.indication原语,这里超帧的标识符与他们自己的PAN标识符,但是EPID的值不等于nwkExtendedPANID的值将考虑检测PAN标识符冲突。

检测到PAN标识符冲突的节点将构造一个PAN标识符冲突的网络Report命令帧。Report信息域将包含一个在本地邻居表中使用的所有16位PAN标识符的列表。在协议范围之外如何建立这个列表,然而从ACTIVE类型的MLME-SCAN.request原语结果构建时推荐使用。

3.7.1.10.2接收到网络Report命令帧之后

被16位网络地址标识的设备,这个地址包含有NIB的nwkManagerAddr参数,这个设备将是PAN标识符冲突的网络Report命令帧的接收者。

一旦接收到指定的网络管理将选择为这个网络选择一个新的16位网络标识符。这个新的网络标识符是随机选择的,但是需要检测确认这个选择的网络标识符在本地邻居表中没被使用,且不包含在网络Report命令帧的Report信息域中。

一旦选择了新的PAN标识符,指定的网络管理将构造一个PAN标识符更新的网络Update命令帧。Update信息域应设置为新的PAN标识符的值。

在它发送这个命令帧之后,指定的网络管将启动一个定时器,定时器的值等于nwkNetworkBroadcastDeliveryTime秒。当定时器终止,ZigBee协调器将改变它当前的PANID选择一个新的。

传送网络Update命令帧之后,指定的网络管理将建立NLME-ROUTE-ERROR.indication原语,其ShortAddr参数设置是0,且状态参数设置是PAN标识符更新。

3.7.1.10.3接收到网络Update命令帧之后

接收到PAN标识符更新的网络Update命令帧之后,设备启动一个定时器,定时器的值等于nwkNetworkBroadcastDeliveryTime秒。当定时器终止时,设备改变它当前的PAN标识符为包含在Update信息域的值。

在网络Update命令帧传送之后,设备将创建一个带有ShortAddr参数设置为0,和PAN标识符Update的状态参数的NLME-ROUTE-ERROR.indication原语。


使用特权

评论回复
31
说书先生|  楼主 | 2016-9-11 16:29 | 只看该作者

3.7.2发送和接收

3.7.2.1发送

仅仅只有已经与网络连接的设备可从网络层发送数据帧。如果未连接设备收到传输帧的请求命令,将丢弃该帧,并向其上层发送状态为INVALID_REQUEST的NLDE-DATA.confirm原语,通报其错误状态。

在网络层传送或生成的所有帧,都将根据图3.3的通用帧结构进行构造,并采用MAC层数据服务进行传送。

另外源地址域和目的地址域,所有网络层传输帧都包含一个半径域和序列号域。对于高层数据帧的初始化,使用NLDE-DATA.request原语的Radius参数值提供的半径域的值。如果没有该值,那么网络层头的半径域将设置成NIB中的nwkMaxDepth参数值的二倍。每个设备的网络层都保持一个序列好,这个序列号是随机值。每一次网络层构建一个新的网络层帧,和从高层传输一个新的网络帧的求情结果,或者是当它需要一个新的网络层命令帧时,序列号加1,增加完之后,序列号的值将插入到帧的头的序列号域。

当构造好网络协议数据单元后,如果对该帧需要进行安全处理,则将根据安全方案对它进行安全处理。如果NLDE-DATA.request的安全允许参数SecurityEnable等于FALSE,则不需要安全处理。如果网络层安全级别参数nwkSecurityLevel等于0,或者如果在高层帧经过初始化且nwkSecureAllFrames NIB属性设置为0x00,那么帧控制域的安全子域总是设置成0。

当安全处理成功后,将返回该帧,并由网络层进行传输。经处理的帧将附加一个校验帧头。如果帧的安全处理失败,并且此帧为数据帧,则将通过NLDEDATA.confirm原语的状态向上层进行通报。如果帧的安全处理失败,且此帧为网络命令帧帧,则将丢弃该帧,不进行进一步处理。

当构造好一个帧,并且已准备好传输该帧时,通过向MAC层发送MCPSDATA.request原语请求发送网络层协议数据单元,将该帧传送到MAC数据服务单元,其传送的结果将通过MCPS-DATA.confirm原语返回。

3.7.2.2接受和拒绝

为了接受数据,设备必须打开其接收机。上层使用NLME-SYNC.request原语初始化设备,打开其接收机。NLME-SYNC.reques原语将会引起网络层使用MLME-POLL.request原语对其父设备进行轮询。

ZigBee协调器或者路由器的网络层必须在最大程度上保证无论什么时候接收机总是处于接受状态。

一旦接收机处于接受状态,网络层将通过MAC数据服务来接受数据帧。每一帧在接收之后,网络层头的半径域减1.如果值减到0,任何情况下,该帧都不能转发。然而,它可能传输到高层或者作为协议的列出的其他地方的网络层处理。使用NLDE-DATA.indication原语把如下叙述的的数据帧帧传送到高层:

(1) 有广播地址的帧,此广播地址匹配一个广播组,设备是这个广播组的成员。

(2) 目的地址匹配网络地址的单播数据帧和源地址数据帧。

(3) 多播数据帧,它的组ID是在nwkGroupIDTable列出来的。

如果接收机是ZigBee协调器或者是正在操作的路由器,也就是,路由器已经调用NLME-START-ROUTER.request原语,它将按如下步骤处理数据帧:

(1) 根据3.7.4和3.7.5节列出的过程来转播广播和多播数据帧。

(2) 有目的地址的单播数据帧,目的地址和设备的网络地址不匹配,将根据3.7.3节列出的过程来转发该帧。(在任何其他情况下,单播数据帧应立刻丢弃)

(3) 有目的地址的源路由数据帧,目的地址和设备的网络地址不匹配,将根据3.7.3.3.2来转发该帧。

(4) 处理路由请求命令帧的过程是根据3.7.3.5.2节。

处理目的地址与设备网络地址匹配的路由转发命令帧是根据3.7.3.5.3节。

(5) 目的地址与设备网络地址不匹配的路由转发命令帧被丢弃。路由错误命令帧和数据帧的处理方法相同。

网络层将使用NLDE-DATA.indication原语向其高层表明所接收到的数据帧。

一旦接收到帧信息,网络层数据实体将会姜茶帧控制域中的安全子域的值。如果该值不为0,则网络层数据实体将把该帧传送到安全服务提供单元,并根据所指定的安全标准对其进行安全处理。如果安全子域设置为0,那么NIB中的nwkSecurityLevel属性不为0,且输入帧是网络层命令帧,则网络层数据实体丢弃该帧。如果安全子域设置为0,那么NIB中的nwkSecurityLevel属性不为0,且输入帧是网络层数据帧,网络层数据实体将检查nwkSecureAllFramesNIB属性值。如果属性值设置为0x01,网络层数据实体将只接收帧如果它是发给自己也就是说它不需要转发给其他设备。









3.7.3路由选择

ZigBee协调器和路由器应提供如下的功能:

(1)   为上层中继数据帧

(2)   为其他ZigBee路由器中继数据帧

(3)   参与路由发现,为后续数据帧建立路由

(4)   为终端设备参与路由选择

(5)   参与路由修复

(6)   在路由发现中,使用所规范的ZigBee路由成本进行度量

ZigBee协调器活路由器还可能提供如下功能:

(1)   为记录下最佳的有效路由,维护路由表

(2)   为上层初始化路由选择

(3)   为其他的ZigBee路由器,初始化路由选择

(4)   初始化路由修复

3.7.3.1路由成本

在路由选择和维护时,ZigBee的路由算法使用了路由成本的度量方法来比较路由的好坏。成本,即众所周知的链路成本,与路由中的每一条链路相关,组成路由的链路成本之和为路由成本。

假定一个长度为L的路由P,由一系列设备[D1,D2,…DL]组成,每一个链路为长度为2的子路由[Di,Di+1]组成,则路由P的成本为

C{P}=

其中:C{[ Di,Di+1]}为链路成本。链路成本{[l]}为链路l的函数,且其值为集合[0,…,7],函数的表达式为

C{l}=

其中,pl为链路l中发送数据包的概率。

因而,链路成本为常数7,或者与链路接受概率pl相关的值,即为接受概率pl的倒数,该数为每次使用该链路预期从该链路得到数据包的请求次数。设备利用网络层信息库的nwkReportConstantCost属性设置为TRUE的方法,强迫设备报告链路成本。

然而,主要问题是怎样测量或估计pl。pl可通过实际计算收到的信标和数据帧来进行估计,即通过观察帧的相应序列号来检测丢失的帧,这就通常被认为最准确地测量接受概率的方法。但是,对于所有的方法来说,最直接和最有效的方法就是基于IEEE 802.15.4的MAC层和PHY层所提供的每一帧的LQI通过平均所计算的值。既使使用其他的方法,最初的成本估计值也是基于平均的LQI值。常常使用驱动函数表来映射平均LQI值于C{l}值的关系。在实际应用中,应注意实际的硬件对驱动函数表的影响,不准确的成本对ZigBee的路由算法将造成影响。

3.7.3.2路由表

ZigBee路由器和协调器可对路由表进行维护。存储在路由表中的信息如表3.48所示。旧的和退休的路由表入口想要在命令操作中重新收回表空间入口的操作不在协议的规定范围内。


表3.49枚举了路由状态所对应的值。


这部分描述了路由算法。“路由表能力”常用来描述一个设备使用自身的路由表来建立一条到达指定目的地址设备的路由能力。如果设备满足以下条件,则设备具有路由表能力:

(1)   为ZigBee路由器或协调器

(2)   具有路由表维护能力

(3)   具有一个空闲的路由表入口,或者已经具有一个到目的地的路由表入口

如果ZigBee路由器或协调器维护一个路由表,则它同样应维护一个路由选择表,该表所包含的信息如表3.50所示。路由表入口是长期存在的和不变的,而路由选择表的入口仅仅是在路由选择的过程中存在,并且可重新生成。



如果设备满足以下两个条件,则设备具有路由选择表能力:

(1)   具有维护路由选择表能力

(2)   在它的路由选择表中,具有一个空闲的入口

如果一个设备既具有路由表能力又具有路由选择表能力,则称该设备具有“路由能力。如果一个设备有发起多对一路由请求的能力,那么它还应该拥有一个源路由表。



使用特权

评论回复
32
说书先生|  楼主 | 2016-9-11 16:30 | 只看该作者

3.7.3.3接收到数据帧

网络层接收到数据后,不管是从MAC层或者是从高层接收到的,将按下列的流程发送该数据帧。

如果接收设备为ZigBee协调器或者路由器,并且帧的目的地址为该设备的终端子设备,则发送MSDE-DATA.request原语,如3.7.2.1所述。将该数据帧直接发送到目的地址设备,并且将下一跳的目的地址设置为最终目的地址。否则,为了后续的讨论,如果他是一个路由器或协调器,则定义设备的路由地址为它的短地址,或者终端设备父节点的短地址。定义一个帧的路由地址为网络层定义的帧的路由地址。注意,ZigBee地址的分配是得设备可以从自己的地址中得好路由地址。详见3.7.1.5。

ZogBee路由器或协调器可以通过邻居表检测帧的路由目的地址的响应入口。如果有相对应的入口,设备就可以通过MCPS-DATA.request原语直接按照路由发送该帧,详见3.7.2.1小节。

具有路由能力的设备首先检查与目的地址相对应的路由表入口。如果存在该入口,并且如果该入口路由状态域的值为ACTIVE或VALIDATION_UNDERWAY,设备将使用MCPS_DATA.request原语转发该帧,如果路由状态域仍没有值则将其设为ACTIVE。

如果路由表入口的路由记录请求域设置为真,或者目的地没有被记录,或者被中继的帧是由本地生成的,或者是由终端子设备产生的,那么设备可以根据3.7.3.5.4小节的描述向目的地址初始化一个路由记录命令帧。

当转发一个数据帧时,MCPS-DATA.request原语的SrcAddrMode 和 DstAddrMode参数都要设置为0x02,表明使用16位地址。SrcPANId 和 DstPANId参数都应设置为转发设备的MAC PIB中的macPANId属性。参数SrcAddr设置为转发设备MAC PIB 的 macShortAddress ,并且DstAddr参数应设置为路由表入口中相对于路由目的地址的下一跳地址。TxOptions参数应设置为与0x01按位与为非零的值,表明确认传输。如果设备有一个与帧的路由目的地址相对应的路由表入口,但是入口的路由状态值为DISCOVERY_UNDERWAY,则应按照3.7.3.5.1小节所描述的,该帧应该按照路由发现进行初始化。那么,该帧应该放到路由未决缓冲器,如果NIB属性中的nwkUseTreeRouting参数为真,则按照树型分级路由。如果帧沿树型路由,那么网络层帧头控制域中的路由发现域应设置为0x00.

如果设备对应于路由目的地址有一个相对应的路由表入口,但是入口的路由状态域的值为DISCOVERY_FAILED 或 INACTIVE,如果NIB属性的nwkUseTreeRouting值为真,那么设备将沿着树使用等级路由,如果设备没有与路由目的地址相对应的值为ACTIVE的路由表入口,并且帧是从上层接收到的,它将与路由目的地址相对应的源路由表入口,如果存在这样的入口,设备将按照3.7.3.3.1小节所描述的使用源路由传送该帧。如果设备没有对应于路由目的地址的路由表入口,并且帧不是使用源路由产生,它将检测网络层帧头的控制域的路由发现子域,如果路由发现子域的值为0x01,设备将初始路由发现,详见3.7.3.5.1小节。如果路由发现子域的值为0,NIB属性的nwkUseTreeRouting值为真,那么设备沿树使用分级路由。如果路由发现子域的值为0,NIB属性的nwkUseTreeRouting值为假,没有与路由目的地址向对应的路由表入口,则帧将被丢弃,NLDE将发送状态为ROUTE_ERROR的NLDE-DATA.confirm原语。

没有路由能力的设备,如果它的NIB 属性中的 nwkUseTreeRouting为真,那么人它将沿树使用分级路由。

对应分级路由,如果目的地是该设备的子设备,设备直接将帧给适合的子设备。如果目的地是子设备,并且还是终端设备,那么可能由于子设备的macRxOnWhenIdle状态使得传送失败。如果子设备的macRxOnWhenIdle值为假,则使用IEEE 802.15.4-2003[B1]中多描述的方法间接传送。如果目的地址不是子节点,设备将按照父节点进行路由。

网络中的其他设备都是ZigBee协调器的子设备,在网络中不存在ZigBee终端设备的子设备。对于一个地址为A,深度为d的ZigBee路由器,如果下述表达式成立,则具有地址为D的目的地址设备为子设备。

A<D<A+Cskip(d-1)

其中Cskip的定义见3.7.1.5小节。

如果确定目的地址为接收设备的子设备,则下一跳设备的地址N为

N=D

对于ZigBee终端设备来说,D>A+Rm·Cskip(d),否则

N=A+1+·Cskip(d)

如果ZigBee路由器或ZigBee协调器的网络层发送单播或多播数据帧因为某种原因失败后,路由器或协调器要发送失败信息。可以以两种形式报告,如果转发失败是因为上层请求失败,则网络层向上层发送NLME-ROUTEERROR.indication原语。其中原语的16位短地址参数应为帧的目的地址。如果帧是利用另一个设备转发,那么转发设备应该发送NLME-ROUTE-ERROR.indication原语,并且发送路由错误帧给数据帧的源地址。路由错误命令帧的目的地址域应为发送失败数据帧的目的地址。

在任何一种情况下,失败的原因按照表3.40所列的情况。

3.7.3.3.1 产生源路由数据帧

从上一层接收到数据帧,在3.7.3.3小节中描述的情况下,设备将使用源路由机制发送数据帧。

可以通过源路由表得到源路由。

如果没有中间的转发节点,使用DstAddr 参数值标示路由目的地址的 MCPS-DATA.request 原语,不用源路由,直接发送到路由目的地址。

如果有至少一个转发节点,应该设置网络层头帧控制域的源路由标志,并且要有网络层源路由域。源路由中的转发计数器的值英语转发表中的值相等。转发序号的值应该等于转发数值减1。转发表应该至少包含从最低位开始的转发地址。最首先列出最靠近目的地址的地址。源地址列在最后。

设备使用MCPS-DATA.request原语转发数据帧。DstAddr参数应设置为转发表中的转发最终地址。

3.7.3.3.2 转发一个源路由数据帧

转发一个从MAC层接收到的源路由数据帧,详见3.7.3.3小节,设备寻找网络层头源路由中的转发表作为它的短地址。如果没找到短地址,或者如果转发表中的索引与转发索引值不一致,那么帧被丢弃,不再做任何处理。

如果转发索引值为0,设备将使用MCPS-DATA.request原语将数据帧直接转发给网络层头目的地址。

如果转发索引的值不是0,则将转发索引减1,并且立即将数据帧转发到在转发表中先于自己地址的地址。

3.7.3.4 链路状态信息

无线的连接可以是不对称的,也就是说,它们在一个方向可能工作良好,但向另一个方向却不然。因此,在路由请求中的链路发现返回应答时会发生错误。

对于多对一路由和双向的路由发现(nwkSymLink = TRUE),要求双向的路由发现都是可靠的。为达到这个目的,路由器要周期性的和它们的邻居进行单跳广播传输用来传输链路状态帧以交换计算的链路成本。然后在路由发现中用得到的链路成本来确保路由发现在双向中都使用高的链路质量。

3.7.3.4.1 初始化链路状态命令帧

当一个ZigBee路由器或协调器加入到网络中后,它将周期性的每隔wkLinkStatusPeriod秒发送一个单跳的广播帧,用来发送链路状态。如果要求的话可以更频繁的发送。可以加入随机抖动值来避免与其它节点同步。链路状态命令帧的格式见3.5.8小节。终端设备不发送链路状态命令帧。

3.7.3.4.2 接收到链路状态命令帧

ZigBee路由器或协调器接收到链路状态命令帧后,对应于传输设备的邻居表入口的age域将被置为0.帧所覆盖的地址范围由链路状态表中的首地址和末地址和命令选项域的首帧和末帧决定。如果接收设备的网络地址超出了帧覆盖的范围,那么该帧将被丢弃,该过程终止。如果接收设备的网络地址在帧覆盖的范围内,那么收索链路状态表。如果找到了接收设备的地址,邻居表中对应于发送设备的输出成本域设置为链路状态入口的输入成本值。如果没有找到接收设备的地址,输出成本域设为0.

终端设备不处理链路状态命令帧。

3.7.3.4.3 完善邻居表

邻居表中的age域每隔时间nwkLinkStatusPeriod增加一次。如果该值超出了参数值nwkRouterAgeLimit,邻居表入口的输出成本域置为0。也就是说,如果设备从邻居路由器连续接收nwkRouterAgeLimit链路状态消息失败,旧的输出链路成本将被丢弃。在这种情况下,邻居表入口将被认为时陈旧的,如果由新的邻居,则该入口将被重新使用。


使用特权

评论回复
33
说书先生|  楼主 | 2016-9-11 16:31 | 只看该作者

3.7.3.5路由发现

路由发现是在网络中的设备互相合作条件下选择,并建立路由的一个流程,该流程通常与特定的源地址和目的地址相对应。多点传送路由是执行关于一个特殊的源设备和多点传送组的路由。多对一路由发现是一个源设备与所有的ZigBee路由器和协调器在radius范围内与自身建立路由的过程。根据3.7.3.5小节的描述,目的地址可以是16位的广播地址,或是一个设备的16位网络地址,或作为多点传送组ID的16位多点传送地址。如果一个路由请求命令的目的地址是一个特殊设备的路由地址,它的路由请求选项域没有设置多点传送域,则请求为一个单播路由请求。一个路由请求命令,它的路由请求选项域有多点传送位,则设置为多点传送路由请求。多点传送路由请求的目的地址域应设置为多点传送组的ID。一个目的地址域为广播地址(见表)的路由请求命令的载荷应为多对一路由请求。多对一路由请求的路由请求选项的多点传送位应置为0.

3.7.3.5.1路由发现的初始化

在网络层收到其上层发送来的NLDE-ROUTEDISCOVERY.request原语,其中DstAddrMode参数值为0x00,在路由表中没有与目的地址DstAddr相对应的入口,或在MAC层接收到的帧控制域中的路由搜索子域值为0x01,或在网络层帧报头中的目的地址不是当前设备地址或者为广播地址,或没有与网络层帧报头中的目的地址相对应的路由选择表入口。在其他情况下,如果设备没有路由选择能力,并且NIB属性中nwkUseTreeRouting的值为真,则有问题的数据帧将按照分级的路由方法,沿树搜索路由。如果设备没有路由能力,并且NIB属性中nwkUseTreeRouting值为假,那么该帧将被丢弃,网络层按照3.7.3.7小节中描述的产生NLME-ROUTEERROR.indication原语或路由错误命令帧。

多点传送的路由发现过程可以通过网络层初始化,或者通过从高层接收到NLME-ROUTEDISCOVERY.request原语,其中DesAddrMode参数值为0x01,或者通过下面3.7.5.2.2小节所描述的过程完成。

如果设备具有路由选择能力,则建立一个路由选择表入口和路由搜索表入口,并且该入口的状态设置为DISCOVERY-UNDERWAY。如果已经存在一个与目的地址相对应的路由选择表入口,并且状态值为ACTIVE或VALIDATION_UNDERWAY,那么这个如果可以被使用,并且入口的状态域保存为当前值。如果存在路由表入口,但状态值不是ACTIVE,那么入口可以被使用,并且入口的状态值设置为DISCOVERY_UNDERWAY。如果不存在入口,那么设备将建立一个相对应的路由发现表入口。

每一个发送路由请求命令帧的设备维护一个生成路由请求标识符的计数器。当生成一个新的路由请求命令帧时,该计数器加1,并且将该值保存在设备路由搜索表的路由请求标识符中。路由选择表和路由搜索表中的其他域将根据3.7.3.2小节进行设置。

网络层了缓存所接收到的待处理路由搜索帧,或者,如果为单播帧并且NIB树型中的nwkUseTreeRouting值为真,将网络层帧报头中帧控制域的路由选择子域设置为0,然后沿树向前发送数据帧。

一旦设备创建了路由搜索表和路由选择表入口,则将按照图3.10所示的节后创建哟个载有有效载荷的路由请求命令帧,帧中的各子域的设置如下所述:

(1)   命令帧标识符域设置为路由请求帧,详见表3.39

(2)   路由请求标识符设置为路由选择表入口

(3)   多点传送标志位和目的地址域应该设置为与要被发现的目的地址向一致

(4)   路由成本域设为0

在构造完成所广播的路由搜索命令帧后,网络层使用MCPS-DATA.request原语将其传送到MAC层。

在路由搜索的开始阶段,广播一个路由命令请求帧时,网络层在开始广播后,将重播nwkclnitialRREQRetries次,因此,最大的广播次数为nwkclnitialRREQRetries+1次,每次重播的时间间隔为nwkcRREQRetryInterval毫秒。

ZigBee路由器或协调器的网络层管理实体在接收到上层发送的DstAddrMode 参数值为0x00的NLME-ROUTE-DISCOVERY.request原语后,初始化多对一路由发现。在这种情况下,设备不是必须建立路由表入口。如果路由请求命令帧的目的地址参数为0xfff9,那么就如该小节描述的建立并广播。

设备不是必须建立发现表或路由表入口。一个路由请求命令帧可以如3.7.3.5.1小节所示建立并广播。NLME-ROUTE-DISCOVERY.request原语的参数MemoryConstrained为真,那么路由请求命令载荷的目的地址域置为0xfff8.否则,置为0xfff9.

3.7.3.5.2接收到路由请求命令帧

在接收到路由请求命令帧后,如果设备是一个终端设备,那么丢弃该帧。否则,判断是否有路由能力。

如果设备没有路由能力,并且是多点传送路由请求或多对一路由请求,那么路由请求将被丢弃并且路由请求处理被终止。

如果设备没有路由选择能力,并且路由请求时单播路由请求,则将判断所接收的帧是否来自于有效的路由。所谓有效路由是指所接收的帧来自于设备的子设备,并且全设备为孩子设备的后裔设备;或者来自于设备的父设备,并且,源设备不是设备的子设备。如果路由请求命令帧不是来自于有效路由,则将丢弃该帧。否则,将检查设备是否为预期的目的设备。同样,通过路由请求命令帧有效载荷中的目的地址与它的每一个终端子设备地址比较,检查命令帧的目的地址时都为设备的一个终端子设备。如果路由请求命令帧的目的地址为设备本身或者为设备的一个子设备,则它将用一个路由请求应答命令帧进行应答。当设备用一个路由请求应答命令帧应答路由请求时,将构造一个类型域为0x01的帧。路由请求应答的源地址应设置为创建请求应答设备的16位网络地址,在考虑到路由请求的发起者为最终目的地址的情况下,将帧的目的地址域设置为所计算出来的下一跳的地址。计算下一跳设备到挡墙设备的链路成本,其计算方法详见3.7.3.1小节,并将该成本附着在路由应答帧的路由成本域中。通过发送MCPS-DATA.request原语,将路由应答命令帧单播到下一跳设备。

如果设备不是路由请求命令帧的目的地址,则计算从前一个设备到本设备传送该帧的链路成本,其方法如3.7.3.1节中所述。其成本数值将加到路由请求命令帧的路由成本值中,然后,使用MCPS-DATA.request服务原语,向目的地址单播该路由请求命令帧。同数据帧一样,采用有效载荷中的目的地址域标识来判断设备地址的方法,决定单播传输的下一跳地址。

如果设备没有路由能力,接收的请求是一个单播的路由请求,设备将路由请求命令帧载荷的目的地址与自身的地址比较来判断该设备是否时命令帧的目的地址。它还将路由请求命令帧载荷的目的地址与它的终端子设备地址进行比较。判断命令帧的目的地址是否是自己的终端子设备。如果该设备或设备的终端子节点是路由请求命令帧的目的节点,设备将决定在路由发现表(见表3.50)入口中是否存在相同的路由请求标识符和源地址。如果没有相对应的入口存在,将建立一个入口。

如果设备没有路由能力,并且接收到的路由请求帧的路由请求命令选项域标示为多点传送路由请求,设备将判断在nwkGroupIDTable中是否已经存在其GroupID域与目的地址相配的入口。如果相配的入口存在,设备将判断是否存在一个有相同路由请求标识符和源地址的路由发现表(见表3.50)入口。

对于多对一路由请求,和常规的路由请求,如果参数nwkSymLink的值为TRUE,接收到一个路由请求命令帧后,设备将在邻居表中寻找对应于传输设备的入口。如果没有对应的入口或该入口的输出成本域的值为0,则丢弃该帧,路由请求过程终止。邻居设备的最大输出和输入成本时是用来计算路径成本而不是输入成本。这包括增加重发前一个路由请求帧的路径成本。

当建立了路由发现表入口,则其值设置为与路由请求命令帧相对应的值。唯一例外的是前向成本域,该域是利用前面的发送者的命令帧计算的链路成本,详见3.7.3.1小节。将它加到路由请求命令帧的路径成本中。上述计算的结果保存在新建立的路由发现表入口的前向成本域。

如果nwkSymLink属性值为真,设备将建立一个路由表入口,其目的地址域为路由请求命令帧的源地址,下一跳设置为传输命令帧的前一个设备的地址。状态域置为ACTIVE。然后设备向路由请求命令帧的源地址发送路由应答命令帧。如果设备对于源地址和路由请求标识符对已经有一个路由发现表入口,设备判断在路由请求命令帧中的路径成本是否小于存储在路由发现表入口中的前向成本。该比较通过计算发送该帧的前向设备的链路成本,如3.7.3.1小节所述,加上路由请求命令帧的路径成本。如果该值比路由发现表入口的值大,将丢弃该帧,没有后续的处理。否则,路由发现表中的前向成本和发送地址域将被更新为路由请求命令帧的新的成本和前向设备地址。

如果属性nwkSymLink的值为TRUE,接收到的路由请求命令帧是一个单播路由请求,设备仍将建立一个路由表入口,其目的地址设置为路由请求命令帧的源地址,下一跳域设置为传输命令帧的前一个设备的地址。状态域设置为ACTIVE。然后设备将响应一个路由回复命令帧。在任何一种情况下,如果设备是代表它的一个终端子设备响应,那么路由回复命令帧载荷的响应地址应与终端子设备的地址一致,而不是响应设备的地址。

当一个具有路由选择能力的设备不是接收到的路由请求命令帧的目的设备时,则判断在路由选择表(见表3.50)中是否存在一个有相同的路由请求标识符和源地址域入口。如果入口不存在,则创建一个入口。路由请求定时器终止时间设置为nwkcRouteDiscoveryTime毫秒。如果相对应与目的地址的路由地址的路由表入口存在,并且其状态值不为ACTIVE,那么将其设置为DISCOVERY_UNDERWAY。如果不存在这样的入口,并且该帧为单播路由请求,将建立一个入口,其状态值为DISCOVERY_UNDERWAY。如果nwkSymLink属性为TRUE或者是多对一路由请求帧,则设备也将建立一个路由表入口,并且它的目的地址设置为路由请求命令帧的源地址,下一跳的地址设置为上一个传送该命令帧设备的网络地址。如果是多对一的路由请求帧,则多对一域和路由表入口应设置为真,如果目的地址域是0xfff8则MemoryConstrained标志位设为真否则设为假;如果下一跳域改变了,路由记录要求域则设为真。状态域设置为ACTIVE。当路由请求定时器终止时,设备将从路由选择表中删除该路由请求入口。在这种情况下,如果它的状态域的值为DISCOVERY_UNDERWAY并且为目的地址在路由发现表中没有其他的入口,则与路由表入口对应的目的路由地址也要被删除。如果在路由选择表中存在一个入口,则路由请求命令帧中的路由成本将与路由选择表入口的前向成本相比较,比较是通过计算先前设备的链路成本,详见3.7.3.1,加上路由请求帧中的路由成本。如果路由成本更大,则丢弃该路由强求命令帧,不对其进行处理;否则,路由选择表中的前向成本和发送者地址域将更新为路由请求命令帧中的新的成本和上一个发送该帧的设备地址。此外,路由请求命令帧中的路由成本域的值为新的计算结果。如果nwkSymLink属性为TRUE,则设备也将更新它的路由表入口,目的地址将更新为路由请求命令帧的源地址,下一跳的地址将更新为上一个传送该命令帧的设备网络地址。状态域设置为ACTIVE,然后,设备将使用MCPS_DATA.request原语,重新广播该路由请求命令帧。

当重新广播路由请求命令帧时,网络层将使用下面的公式,用一个随机不稳定值计算出重传的时延。

2·R[nwkcMinRREQJitter,nwkcMaxRREqJitter]

其中R[a,b]是在[a,b]参数区间的随机函数,不稳定值的单位为毫秒。设备可调整这个不稳定值,以使接收到的路由成本大的路由请求命令帧比路由成本小的延时更大。网络层将在初始中继后重试广播nwkcRREQRetries次,以至于每次中继为最大的nwkcRREQRetries+1次。当相当的源和路由请求标识符的帧比等候重传帧所花费路由成本小时,设备可能丢弃等待重传的路由选择命令帧。

设备根据有效载荷中的目的地址,将相对应的路由表入口的状态域设为DISCOVERY-UNDERWAY。如果不存在这样的入口,则重新建立一个入口。

当对一个路由请求帧进行应答时,具有与路由请求的源地址、路由请求标识符相对应的路由选择表的入口的设备将构建一个帧类型域为0x01的命令帧。网络头的源地址域设置为当前设备的16位网络地址,目的地址域设置为对应路由选择表入口中的发送者地址域。构造路由应答的设备将按照下述方法在组成载荷域。网络命令标识符设置为路由应答,路由请求标识符域的值设置为与路由请求命令帧的路由请求标识符域中的值相同,起始者域设置为路由请求命令帧中的网络头中的源地址。利用路由请求命令帧中的网络帧报头中的源地址与它相对应的路由选择表入口的起始者地址,并根据3.7.3.1小节中描述的来计算链路成本。该链路成本设置在路由成本域中,然后,利用MCPS-DATA.request原语,将路由请求应答帧单播到目的地址,从路由选择表中所得到的发送地址作为下一跳地址。




使用特权

评论回复
34
说书先生|  楼主 | 2016-9-11 16:34 | 只看该作者

3.7.3.7路由维护

每一个设备的网络层为每一个邻居设备维护一个失效计数器,该邻居设备具有一条输出链路,即要求发送一个数据帧。如果输出链路失效计数器的值超过了nwkcRepaitThreshold,则设备根据如下所述方法,开始路由维护。可选择一个简单的失效计数方案来生成这个失效计数器值,或者使用一个更加准确的时间窗口方案。需要注意的是,由于修复操作涉及在整个网络,可能导致其他通信中断,因此,不可能经常对路由进行修复。退休的链路和终止查找失败的程序超出了该协议的范围。

3.7.3.7.1路由修复

当设备正在处理一个路由表入口的many-to-one域为TRUE的单播数据帧时,如果链路失败,则生成一个错误码为Many-to-one route failure的路由错误信息。路由错误命令帧网络帧头的目的地址域应与导致错误的帧的网络层帧头的目的地址域一致。路由错误命令的目的地址域应与导致错误的帧的网络层帧头的源地址一致。利用MCPS-DATA.request原语向它的随机路由器邻居单播路由错误信息。因为时多对一路由,所有的邻居都被认为由对应于目的地址的路由表入口。接收到路偶错误帧后,如果没有对应于目的地址的路由表入口,或者向路由表入口的下一跳传输路由错误信息失败,那么将利用MCPS-DATA.request原语随机的向它的路由器邻居发送路由错误信息。网络层帧头的半径将限制路由错误转发的最大次数。目的地址接收到路由错误帧,它将利用NLME-ROUTE-ERROR.indication原语通知上层路由错误。网络层不能自动的重新发现多对一路由。


如果设备在使用正常的单播路由处理单播数据帧时遇到链路失败,设备将向源设备发送返回一个路由错误命令帧,其错误代码标示失败的原因(见表3.40),并向上层发送NLME-ROUTE-ERROR.indication原语。

如果指定终端目的地址的父节点接收到路由错误命令帧,其命令帧载荷的错误代码值为0x01或0x02,表明链路失败,如果存在命令帧载荷中的目的地址相对应的路由表入口,网络层将移除该入口。然后向终端设备转发该帧。

如果终端设备接收到路由错误命令帧,网络层将向上层发送NLME-ROUT-EERROR.indication原语。

如果是终端设备并且简化功能设备与父节点发生链路失败,终端设备将向上层发送NLME-ROUT-EERROR.indication原语,其状态参数值为0x09,表明父节点连接失败(见表3.40).同样,如果没有路由能力的ZigBee路由器与其父节点链路失败,其nwkUseTreeRouting值为TRUE,它将向上层发送状态参数为0x09的NLME-ROUT-EERROR.indication原语,表明父节点链路失败。

3.7.4广播通信

本节将介绍在一个ZigBee网络中如何实现广播传输。这种机制用来广播网络层所有的数据帧。网络中的任何设备都可以向同属该网络的其他设备进行广播。本地的应用层实体通过NLDE-DATA.request原语来进行广播传输,其中原语的DstAddr参数设置为广播地址,如表3.51所示。

表3.51 广播地址

广播地址
目的地组
0xffff
个域网的所有设备
0xfffe
保留
0xfffd
macRxOnWhenIdle=TRUE
0xfffc
所有的路由器和协调器
0xfff-0xfffb
保留

为发送一个广播MSDU,ZIgBee路由器或协调器的网络层发送一个MCPS-DATA.request原语,其中DstAddrMode参数设置为0x02(16位网络地址),DstAddr参数设置为广播网络地址0xffff。作为ZigBee的终端设备,一个广播帧的MAC目的地址应该与终端设备的父节点的16位网络地址一致。其PANId参数应该设置为该ZigBee网络的PANID。这个协议不支持多个网络广播。广播传输不采用MAC层确认方式,使用被动的确认方式。被动确认机制是指每一个ZIgBee路由器和协调器跟踪它的邻居设备以确认是否成功之间广播传输。将TxOption参数的确认传输标志设置为FALSE,则禁止MAC层的确认机制。其他所有TxOption参数的标志应该按照网络结构来设置。

ZigBee协调器、每一个路由器和终端设备,都要保存任何新的广播事务记录,不管该广播事务是从本地开始,还是从邻居设备接收来。该记录称为广播事务处理记录(BTR),它至少应该包含广播序号和广播数据帧的源地址。该广播事务处理记录存储在广播事务处理表(BTT)中。

当一个设备从邻居设备收到一个广播数据帧时,将数据帧中的广播序号和源地址与该设备的BTT表中的记录相比较。如果目的地址与如表3.52所示的接收者设备类型不一致,则丢弃该帧。如果目的地址与接收者的设备类型相同,设备将广播帧中的序列号和源地址与BTT中的记录相比较。如果该设备存在一个BTR域这个广播数据帧相匹配,他就更新该BTR,标示邻居设备中继该广播数据帧。然后,抛弃该数据帧。如果不存在这样的记录,则在BTR中创建一个新的BTR记录,标示邻居设备中继该广播数据帧,网络层将向上层表明接收到一个新的广播数据帧,并将网络帧报头中的radius域减1,如果该值大于0,或者设备不是终端设备,则该设备将中继该数据帧,否则抛弃该数据帧。在转发之前,该设备将随机等候一段时间,该随机时间成为广播抖动,由nwkcMaxBroadcastJitter属性值限定。如果ZigBee终端设备的macRxOnWhenIdle值为假时,那么该设备将不转发广播帧,并且不需要维护为广播帧产生的广播事务处理表。

如果接收到一个广播帧,而网络层发现它的广播事务处理表已经满了,并且没有终止的入口,那么这个帧将被忽略。在这种情况下,该帧既不会被转发,也不会被传到上一层。

在转发了nwkMaxBroadcastRetries次后,ZigBee协调器或路由器将重发先前的广播帧。如果设备不支持被动确认机制,那么要转发该帧nwkMaxBroadcastRetries次。如果设备支持被动确认机制,在nwkPassiveAckTimeout 秒内,没有任何邻居设备中继广播数据帧,一个设备最多转发一个数据包nwkPassiveAckTimeout次。

当一个广播事务处理记录已经存在了nwkNetworkBroadcastDeliveryTime秒后,设备就可以更改这个广播事务处理记录入口的状态,如果接收到新的广播帧,那么这个入口将被更改。

当在MAC的PIB中的macRXOnWhenIdle属性设置为FALSE的ZigBee路由器接收到一个广播数据帧时,将使用与上述不相同的流程进行处理。它将使用MAC层单播法师,毫不延迟地向它的每一个邻居设备转发。利用MAC层的单播,将MCPS-DATA.request原语中的DstAddr参数设置为接收设备的地址,而不是广播地址。同样,一个拥有一个或者多个macRxOnWhenIdle MAC PIB 属性设置为FALSE的邻居路由器,而它自身的macRxOnWhenIdle MAC PIB 属性设置为TRUE时,如果它的目的地址为0xffff,那么人它除了按照上段所描述的长队程序外,还将利用MAC层单播一次向各个邻居转发该广播数据帧。为了确保这些单播到达它们的目的设备,可采用802.15.4-2003[B1]所介绍的间接传输的方式。

为有利于广播转发,每个ZigBee路由器必须具有在网络层中缓冲至少一个数据帧的能力。

图3.41描述了一个设备与它的两个邻居设备间的广播传输。








3.7.5多播通信

本小节描述在ZigBee网络中如何完成多播通信。多播提供多对多路由。多播使用16位多播组代码寻址。多播消息发送给一个特定的目的组且被注册为这个组的成员的所有设备接收。仅仅数据帧是多播;没有多播命令帧。多播帧有一个模式标志,表示它们是成员模式还是非成员模式。成员模式在目的组的成员减传输多播帧。只要它们是广播成员模式多播就在BTT里被记录。使用非成员模式传送多播帧从不是多播组成员的设备到是多播组成员的设备。在目的多播组中的成员之间进行的多播传送都是成员模式。如果它们先前已经被一个组成员传送那么在非成员之间进行的多播传送是成员模式,否则是非成员模式。多播消息被终端设备初始化但没有被参数RxOnWhenIdle等于FALSE的设备发送。

3.7.5.1GROUP ID表

设备的网络层也许维持一个组代码表,nwkGroupIDTable,NIB中的一个属性,参见表3.4.2。如果nwkGroupIDTable的NIB属性存在,那么设备将包含一个16位组代码的设置,这个组是设备所在的组。

注意可选的nwkGroupIDTable的NIB属性与托管的APS组表有一个功能的交叠,参见表2.18。如果设备包含两个表,且因此期望使用网络层多播作为一种接收组地址帧的方法,它必须确保每一个16位组代码出现在APS组表中和网络层组表中。

还要注意,从执行的方面讲,在每一层间复制该表是很浪费的,且假设执行将发现合并应用支持子层和网络层组表的一个方法来避免浪费。

3.7.5.2从高层接收到多播帧之后

如果网络层从高层接收到的数据帧,且多播控制域是0x01,那么网络层将确定该帧的组代码域和目的组代码域匹配的the nwkGroupIDTable的入口是否存在。如果匹配入口存在,网络层将根据3.7.5.2.1节的流程多播该帧。如果匹配入口不存在,该帧将作为一个非成员模式多播使用3.7.5.2.2节的流程来初始化。

3.7.5.2.1初始化一个成员模式多播

网络层将设置多播控制域的多播模式子域的值是0x01(成员模式)。如果BTT表是满的且包含没有终止的入口,消息将不发送,且网络层数据实体将发送NLDEDATA.confirm原语,其状态参数值是BT_TABLE_FULL。如果BTT没满或者包含一个终止的BTR,一个新的BTR被建立,这个新的BTR带有作为源的本地节点和多播帧的序列号。消息将格局3.7.5.3节描述的流程来传送。

3.7.5.2.2初始化一个非成员模式多播

网络层将设置多播控制域的多播模式子域的值是0x00(非成员模式)。那么网络层将为该帧相应的组代码目的地的入口检测它的路由表。如果有这样一个入口,网络层将检查入口状态域。如果状态值是ACTIVE,那么设备将(重)传送该帧。如果状态值是VALIDATION_UNDERWAY,那么状态将改变成ACTIVE,,设备将根据3.7.5.4节描述的流程传送该帧,且网络层数据实体将发送NLDEDATA.confirm原语,其状态参数值为MCPSDATA.confirm原语返回的值。如果没有相应该帧组代码目的的路由表入口,且DiscoverRoute参数值是0x00(抑制路由发现),该帧丢弃,且网络层数据实体将发送NLDE-DATA.confirm,其状态参数值是ROUTE_DISCOVERY_FAILED。如果DiscoverRoute参数值是0x01(使能路由发现),且有相应该帧组代码目的的路由表入口,那么设备将立即初始化路由发现如3.7.3.5.1节描述。该帧将随意的缓冲未决路由发现。如果没有缓存,该帧丢弃,且网络层数据实体将发送NLDEDATA.confirm原语,其状态参数值为FRAME_NOT_BUFFERED。

3.7.5.3在接收到成员模式多播帧之后

当设备从邻居设备接收到一个成员模式多播帧时,将数据帧中的序列号值和源地址与该设备的BTT表中的记录相比较。如果该设备存在在BTT中的这个多播帧的一个BTR,设备丢弃该帧。如果没有记录且BTT是满的和没有包含终止入口,那么设备丢弃该帧。如果没有记录且BTT不是满的或者包含终止BTR,设备建立一个新的BTR,且按照下一节的流程处理消息。当从邻居设备接收到一个成员模式多播帧且加到BTT中,网络层将确定是否在nwkGroupIDTable中存在入口,表的组代码域与该帧的目的组代码域想匹配。如果匹配入口存在,消息将传送到高层,多播控制域将设置成0x01(成员模式),NonmemberRadius域的值设置为maximum NonmemberRadius域的值,且消息将按下一节流程传送。如果匹配入口不存在,网络层将检测帧的多播NonmemberRadius域。如果多播NonmemberRadius域的值是0,丢弃消息,连同新增加的BTR。否则,如果值小于0x07,NonmemberRadius将消耗,且帧按照下一节流程传送。每一个成员模式多播消息能传送nwkMaxBroadcastRetries次。成员模式多播帧不在本地设备开始,最开始的传送将延迟一个随机时间,这个随机时间由nwkcMaxBroadcastJitter属性值限定。设备在两个特殊成员模式帧转发之间将延迟一个周期nwkPassiveAckTimeout秒。不像广播,对于多点传送没有被动确认。ZigBee终端设备将不参与多播帧的转发。为了传送一个成员模式多播协议数据单元(MSDU),网络层发送MCPS-DATA.request原语到MAC层,其DstAddrMode参数设置为0x02(16位网络地址),和DstAddr参数设置为0xffff——广播网络地址。PANId参数将设置为ZigBee网络的PANId。成员模式多播传送不使用MAC层确认或者广播使用的被动确认。MAC层确认通过设置TxOptions参数的确认传送标志为FALSE来不使能。TxOptions参数的所有其他标志以网络配置为基础。

3.7.5.4在接收到非成员模式多播帧之后

当设备从邻居设备接收到一个非成员模式多播帧时,网络层将确定是否在nwkGroupIDTable中存在入口,表的组代码域与该帧的目的组代码域想匹配。如果匹配入口存在,多播控制域将设置成0x01(成员模式),且多播帧就按接收到的是成员模式多播处理。如果没有匹配的nwkGroupIDTable入口存在,设备将为该帧相应的组代码目的地的入口检测它的路由表。如果没有这样一个路由表入口,将丢弃消息。如果没有这样一个入口,网络层将检查入口状态域。如果状态值是ACTIVE,那么设备将(重)传送该帧。如果状态值是VALIDATION_UNDERWAY,那么状态将改变成ACTIVE,,且设备将(重)传送该帧。为了传送一个非成员模式多播协议数据单元(MSDU),网络层发送MCPS-DATA.request原语到MAC层,其DstAddrMode参数设置为0x02(16位网络地址),和DstAddr参数设置为从匹配路由表中确定的下一跳。PANId参数将设置为ZigBee网络的PANId。MAC层确认通过设置TxOptions参数的确认传送标志为TRUE来使能。TxOptions参数的所有其他标志以网络配置为基础。


使用特权

评论回复
35
说书先生|  楼主 | 2016-9-11 16:36 | 只看该作者

3.7.6MAC层信标中网络层的信息

本小节介绍了网络层怎样利用MAC层信标帧中的信标载荷将它的信息传送到邻居设备。

当设备的信标帧中的超帧规范域中的链接允许子域,如IEEE 802.15.4-2003[B1]所定义,设置为1时,标示设备允许连接。次年表在和所包含的信息如表3.52所示。这样,使网络层向新设备提供附加的信息来执行网络搜索任务,使这些新设备更有效地选择网络和特定的邻居设备,有关于网络搜索流程的详细信息,参见3.7.1.3.1.1.当设备信标的超帧域中的连接允许子域设置为0时,即禁止连接时,在信标载荷中不再需要这些信息。


ZigBee协调器的网络层在网络形成后,将立即更新信标载荷。其他的所有ZigBee设备在连接完成时,或者网络配置(表3.11中的参数)发生任何编号时立即更新信标载荷。利用NLME-SET.request原语将信标载荷写入到MAC层个域网信息数据库中,其中MacBeaconPayloadLength属性设置为信标载荷的长度,代表信标载荷的字节序列写入到macBeaconPayload属性中。信标载荷的字节序列如图3.38所示。


3.7.6.1 稳定数据

设备的操作可以通过手动或者编程人员通过程序进行重新设置。或者可以通过局部或网络范围内的能量短缺,或者在正常工作中的的电池更换,或者碰撞等原因进行更改。至少以下信息在重新设置的过程中为了网络操作需要进行保留:

(1)   设备的PANId和扩展的PANId

(2)   设备的16位网络地址

(3)   每一个连接的终端子设备的64位IEEE地址和16位的网络地址,如果nwkAddrAlloc的值为0,则还包含每一个连接的路由器子设备。

(4)   对于终端设备,还要记录它的父设备的16位网络地址

(5)   被使用的堆栈结构

(6)   设备深度

这些数据被保存的方法不再本协议的范围。


3.7.7地址冲突

当同一个网络的两个设备有相同的nwkShortAddress值时地址冲突发生。预防所有这样的冲突,例如使用树形地址分配和禁止已经分配的地址重复使用,是不实际的。本小节描述如何检测和修改地址冲突。如果NIB属性nwkUniqueAddr的值是FALSE地址冲突检测激活。

注意在路由消息中使用的网络地址在路由发现处理中是被校验。在发现的时候校验仅仅应用在设备、链路和目前信息。校验能在其他时间到达,如发送直接单播给邻居设备以前,是通过发送带有verify addresses错误码的路由错误命令。

3.7..7.1获得地址信息

网络层从输入消息获得地址信息,输入信息包括网络层命令和ZDO数据消息。从ZDO数据消息处获得的地址信息通过加到NIB中的地址表通过网络层。

检测地址冲突的能力是通过增加一个或两个消息的网络层帧的目的IEEE地址和源IEEE地址域来加强的。当nwkUniqueAddr是FALSE是,所有的网络层命令消息将包含源IEEE地址和目的IEEE地址,如果它被源设备直到。其他设备不必包含任一IEEE地址域。

nwkUniqueAddr是FALSE,路由请求命令将包含发送者的源地址域在发送IEEE地址域。这确保设备知道它们的邻居设备的IEEE地址。

3.7.7.2检测地址冲突

网络层将把输入地址信息和本地设备本身的IEEE和网络地址、NIB中的地址和邻居表做比较,输入信息由特定的设备IEEE地址和网络地址组成的。

如果输入网络地址与nwkShortAddress匹配,但输入IEEE地址不等于aExtendedAddress,网络层已经检测到一个带有nwkShortAddress的冲突。

如果输入网络地址与邻居表或者地址表的入口的网络地址相匹配,输入IEEE地址域表入口的IEEE地址不匹配,且表入口的IEEE不是空IEEE地址(0x00…00),那么设备已经检测到一个在网络其他地方的冲突。

如果输入网络地址与邻居表入口的网络地址匹配,且表入口的IEEE地址是空IEEE地址(0x00…00),输入IEEEE地址将代替表入口IEEE地址。没有冲突被检测到。

3.7.7.3解决地址冲突

如果设备确定有一个或者多个设备使用它自己的网络地址,或者如果设备接收到带有address conflict错误代码和在目的域它自己的地址的路由错误命令,那么设备将获得一个新的地址。如果使用树形连接,请求一个新地址的设备将断开或重新连接网络。如果使用随机地址分配,请求一个新地址的设备将随机的选取一个新的地址,这个新的随机地址避免已经在NIB入口出现的所有地址。选择一个新的地址的终端设备将断开网络且那么使用新地址重新连接。

如果一个设备确定有多个设备使用一个地址,这个地址不是它自己的,它将使用带有address conflict错误码和在目的地址域厌恶的地址的广播路由错误命令通知网络。

如果一个父设备检测或被带有RxOnWhenIdle=FALSE子设备地址的冲突通知,父设备将为子设备选取一个新地址,且发送一个主动重新连接响应命令帧来通知这个有新地址的子设备。


使用特权

评论回复
36
Bjorn| | 2016-9-11 21:06 | 只看该作者
资料好详细,收藏先

使用特权

评论回复
37
罗菜鸟| | 2016-9-11 23:22 | 只看该作者
楼主辛苦了

使用特权

评论回复
38
烟花绽放| | 2016-9-12 09:10 | 只看该作者
赞赞赞,,谢楼主分享,不过为什么不做个PDF文档传上来呢

使用特权

评论回复
39
wsnsyy| | 2016-9-12 09:10 | 只看该作者
mark

使用特权

评论回复
40
Jim_lion| | 2016-9-12 15:00 | 只看该作者
mark

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则