ZigBee协议层次分析总结ZigBee协议层次及结构图1 ZigBee帧结构ZigBee物理层ZigBee物理层协议数据单元(PPDU)又称物理层数据包,其格式如图所示。
4字节1字节1字节可变前同步码帧定界符帧长度(7位)保留位(1位)PSDU同步包头物理层包头物理层载荷表1 物理层帧结构1、前同步码接收设备根据接收的前同步码获得同步信息,识别每一位,从而进一步区分出“字符”。
IEEE802.15.4规定前同步码由32个0组成。
2、帧定界符帧定界符(SFD)用来指示前同步码结束和数据包的开始,由1字节组成,其值用二进制表示为111001013、物理层帧首部物理层帧首部由1字节组成,其中的7位用来表示帧的长度,即有效载4、PSDU域PSDU是物理层携带的有效载荷,也就是欲通过物理层发送出去的数据。
PSDU 的长度为0~127字节。
当长度值等于5字节或大于7字节时,PSDU是MAC 层的有效帧。
ZigBee MAC层一个完整的MAC层帧由帧首部、帧载荷(即数据)和帧尾3部分构成。
其中帧首部又有若干个域按一定顺序排列,但并不是所有的帧中都包含有全部的域。
MAC层的帧结构如下图所示。
由图可知,帧首部有帧控制域、序列号、地址域等,其中地址域又包含目的PAN(个人区域网)标识符、目的地址、源PAN标识表3 MAC层帧结构1、帧控制域帧控制域的长度为16位,其结构如下表所示。
(1表5 帧类型子域描述(2)安全允许控制(Security Enabled)子域的长度为1位,如果该位置1,则对该帧按预定的方案进行加密处理后再传送到物理层;为0时,不进行加密处理。
(3)未处理数据标记(Frame Pending)子域的长度为1位,如果该位置1,则表示除该帧的数据外,本设备中还有应发送给对方的数据。
因此,接收该帧的设备应向发送方再次发送请求数据命令,直到所有的数据都传送完。
若发送设备中已没有要发送给接收方的数据,则该位为0.(4)请求确认(Ack Request)子域的长度为1位,置1时,接收方接收到有效帧后应向发送方发送确认帧;为0时接收方不需要发送确认帧。
(5)PAN内部标记(Intra PAN)子域的长度为1位,置1时,表示该MAC 帧在本身所属的PAN内传输,这时帧的地址域中不包含源PAN标识符;为0时,表示该帧是传输到另外一个PAN,帧中必须包含源和目的的PAN标识符。
(6)目的地址模式(Dest Addressing Mode)子域的长度和源地址模式(Source Addressing Mode)子域的长度均为2位,表示的意义如表所示。
表6 地址模式2、序列号子域帧序列号子域的长度为8位,它是帧的唯一序列标识符。
在协议栈初始化时,软件将它们置为随机的值,在通信过程中,每生成一个帧,其相应的序列号加1,并将其值插入到帧的序列号子域。
如果需要确认,则接收方将接收到的数据帧或者命令帧中的序列号作为确认帧的序列号。
如果发送方在规定的时间里没有接收到对方的确认,则发送方使用原来的序列号重新发送该帧。
可见,接收方可以根据帧中的序列号来判断接收的帧是否是新的。
3、目的PAN标识符子域目的PAN标识符子域的长度为16位,它是接收该帧的设备所在PAN的唯一标识符。
当标识符的值为0xFFFF时,代表该帧为广播方式,即在同一信道上的所有设备都可以接收该帧。
仅在帧控制子域的目的地址模式为非00时,本子域才存在。
4、目的地址子域该地址是接收帧设备的地址。
根据帧地址控制子域不同的情况,目的地址为16位或64位。
地址0xFFFF是广播地址。
同样,仅在帧控制子域的目的地址模式为非00时,本子域才存在。
5、源PAN标识符子域源PAN标识符子域的长度为16位,它是发送该帧的设备所在PAN的唯一标识符。
仅在帧控制子域的源地址模式为非00和内部PAN标记位为0时,本子域才存在。
PAN标识符在PAN建立时有PAN协调器确定,若与其他的PAN标识符冲突,协调器应能自行解决。
6、源地址子域该地址是帧发送设备的地址。
与目的地址子域相同,根据帧地址控制子域不同的情况,源地址为16位或64位。
同样,仅在帧控制子域的源地址模式为非00时,本子域才存在。
7、帧有效载荷帧有效载荷即帧传送的数据,其长度视具体帧而定,最长为最长物理帧长度减去MAC帧头长度。
8、帧校验子域帧校验子域包含一16位的CRC校验码。
校验码包含对帧头和载荷部分的校验。
ZigBee网络层网络帧通用结构与一般的帧结构类似,由帧首部和有效载荷部分组成,如表表7 网络层帧通用结构1、帧控制域帧控制域长度为16位,其中包含了帧的类型、地址、序列号及其他一些信息。
其结构如表8所示。
表8 帧控制域结构(1)帧类型子域帧类型子域长2位,取值为0x00代表数据帧,取值为0x01则代表命令帧,其他值目前保留不用。
(2)协议版本子域协议版本子域长4位,其值代表了所实现的ZigBee协议的版本。
通常该值保存在网络层常量nwkcProtocolVersion中,目标ZigBee协议的版本为0x01。
(3)发现路由子域表9 发现路由子域(4)安全子域安全子域长1位,当需要对网络层帧进行安全处理时,应将该子域置1。
2、目的地址域目的地址域长度为2字节,其值为16位的目的设备网络地址,它就是目的设备MAC层的IEEE802.15.4的网络地址,或者是广播地址0xFFFF。
3、源地址域源地址域是发送帧的设备的地址,与目的地址域相似。
4、广播半径域广播半径域总是存在,长度为1字节。
其值规定了广播帧的传输范围。
在传输时,每个设备接收一次广播帧,并将该域的值减1。
5、广播序列号域序列号域在每一个帧中都存在,其长度为1字节。
设备每发送一个新的帧,该值会加1.通常帧的序列号与它的源地址域一起用来唯一识别一个帧,以避免1字节长序列号会产生的混淆。
6、帧载荷域帧载荷的长度可变,是帧传送的数据。
数据帧的结构与通用帧结构完全相同。
其帧控制域的类型子域应为0x00,以表明这是一个数据帧。
载荷部分是网络层需要传输的数据,地址域根据具体要求而定。
命令帧的结构与一般结构相同。
帧控制域的帧类型子域应为0x01,以表明这是一个命令帧。
而有效载荷部分的第一个字节是网络层命令标识符,其余部分为网表10 网络层命令帧结构表11 网络层命令帧1、路由请求命令路由请求命令用来请求网络中无线通信范围内的其他设备,以便发现一条能够有效地将帧传送到某一目的设备的路由。
路由请求命令帧载荷部分的(1)网络帧首部为了发送路由请求帧,网络层帧首部的源地址必须设置为初始发送该帧设备的地址,目的地址设置为广播地址。
(2)命令帧载荷载荷中的命令选项长度为1字节,其中低7为目前保留不用,最高位称为路由修复位,它仅在网状网络拓扑结构的情况下,产生路由请求命令时被设置为1.路由请求标识符是一个8位的序列号,每当网络层针对某设备提出路由请求时,其值被加1.目的地址的长度为2字节,它是路由请求希望到达设备的地址。
路由成本的长度为1字节,用来累积路由请求帧在网络中传输成本的信息。
2、路由应答命令当设备接收到路由请求命令后,就用路由应答命令向初始发送路由请求命令的设备发出通知,它已经接收到路由请求命令。
借助这些信息,ZigBee 路由能够建立一条有效的、使帧从源设备到达目的设备的路径。
路由应答命(1)网络帧首部为了使路由应答帧正确到达初始发送路由请求命令的设备,并使发现路由的过程正确无误,帧控制域的帧类型子域应设置为命令帧。
目的地址必须设置为初始发送路由请求帧的设备地址,源地址设置为传送此应答帧设备的地址。
(2)命令帧载荷载荷中的命令选项长度为1字节,其中低7位目前保留不用,最高位称为路由修复位,它仅在网格网络拓扑结构的情况下,产生路由请求命令时被置为1.路由请求标识符根据路由请求命令设置为相应与路由请求命令帧的标识符。
目的地址的长度为2字节,它是路由请求希望到达设备的地址。
路由成本的长度为1字节,用来累积路由请求帧在网络中传输成本的信息。
3、路由错误命令当设备无法继续向前传送数据时,便使用路由错误命令通知发送数据帧(1)网络帧首部为了使路由应答帧正确到达初始发送路由请求命令的设备,并使发现路由的过程正确无误,帧控制域的帧类型子域应设置为命令帧。
目的地址必须设置为初始发送路由请求帧的设备地址,源地址设置为传送此应答帧设备的地址。
(2)错误代码(3)目的地址目的地址的长度为2字节,它是发送出现传送错误数据帧的设备的地址。
4、离开命令网络层管理实体使用离开命令通知其父设备和子设备,它准备离开网络,表16 离开命令帧载荷结构(1)网络帧首部为了发送离开命令帧,网络层首部目的地址域应设置为接收本帧的邻居设备的地址;源地址发送该帧的设备地址;半径域设备为1.(2)命令选项表17 命令选项结构如果命令选项中的“请求/指示”位置为1,则表示该命令帧要求其他设备离开网络;否则表示发送该帧的设备欲离开网络。
如果“移除子设备”位置1,则表示与离开网络的设备连接的子设备也一起离开。
ZigBee应用层应用支持子层帧(APDU)结构有以下两部分组成:(1)APS首部,包含帧控制及地址信息;(2)APS帧载荷,即帧传输的有效数据,其长度可变。
1、帧的一般结构表18 APS帧结构(1)帧控制域表19 帧控制域结构所示。
表20 帧类型子域值表21 交付模式子域值注意,在生成APS帧时,上述子域不应出现保留值。
在交付模式子域置为0x01,即间接寻址时,帧地址域的结构取决于间接寻址子域。
间接寻址模式子域长1位,如表被置为1,则帧地址域的目的端点子域不存在(因为这是一个利用间接方式发送给协调器的帧);如果该子域为0,则地址域中的源端点子域不存在(因为该帧是协调器发送的)。
最后,如果帧的交付模式不是间接寻址,则忽略间接选址模式子域。
应答/请求子域长度为1位,当置为1时,表示该帧需要确认。
在这种情况下,当一个设备接收到该帧并经检查有效时,应向发送该帧的设备发送一个确认帧。
当该子域为0时,表示不需要确认。
(2)帧地址域目的端点子域长度为8位,是最终接收该帧的目的端点的地址。
当该地址为0x00时,表示该帧是发送给ZDO的;地址0x01~0xF0时,表示该帧是发送给应用端点的;地址为0xFF时,表示该帧将被所有活动的端点接收;地址0xF1~0xFE保留。
簇标识符长度为8位,它是在绑定操作中需要用到的。
仅数据帧需要帧标识符,而命令帧则不需要。
帧控制域的帧类型子域决定了该帧中是否需要簇标识符。
模板标识符长度为16位,它是在每一个设备中对接收到的帧进行过滤处理时需要用到的,仅在数据帧或应答帧中需要这个标识符,而在命令帧中不需要。
源端点子域长度为8位,它是发送帧的端点的标识符。
如果标识符的值在0x01~0xFF之间,则该帧是一个应用端点发送的。