Zigbee学习系列文章
Zigbee学习(一)架构及入网
Zigbee学习(二)认识Profile和Cluster
Zigbee学习(三)Z-Stack代码框架解析
文章目录
- Zigbee学习系列文章
- 前言
- 一、概述
- 二、入网报文解析
- 1.Management Permit Joining Request
- 2.Beacon Request
- 3.Beacon
- 4.Association Request
- 5.Data Request
- 6.Association Response
- 7.Transport Key
- 8.Device Announce
- 9.Route Request和Route Reply(针对Router设备)
- 10.Node Descriptor Request和Node Descriptor Response
- 11.Link Status
- 12.Leave
- 总结
前言
提示:此博文专注Zigbee的入网流程和抓包数据分析,抓包工具(Ubiqua)的使用方法在此就不赘述啦。
无线自组网离不开搜网、认证、入网和离网。让我们一起抓包看看。还有其他Zigbee学习系列有关的文章请上拉到开头的列表噢。
一、概述
一张分层图可以便可以将Zigbee的架构展示清楚,在看报文之前,需要大概知道Zigbee的分层,抓包工具也会帮助我们标识是那一层的相关报文(位于每张抓包图的右侧上方,报文解析的头上)。
在此我们讨论的是Zigbee3.0的设备,首先看一下Ubiqua抓取的入网过程大体的样子,根据不同的入网设备类型(Router,Endpoint),报文会有一些差异,但是流程大体不变。其中博主会抹掉一些敏感信息,不妨碍学习。
二、入网报文解析
1.Management Permit Joining Request
这是协调器的广播命令,允许设备入网。报文中包含APS和ZDP层的信息,其中的参数Permit Duration为允许入网超时时间,单位是秒。
APS Counter和ZDP Transaction Sequence Number用于管理APS和ZDP部分的序列号, 每一个新传输会加一,防止重放攻击。
2.Beacon Request
要请求入网的设备会发出Beacon Request广播指令,在信道上扫网(ZigBee信道为11~26)寻找是否存在合适的网络。MAC Header中的Sequence Number用于管理MAC层序列号, 每一个新传输会加一,防止重放攻击。
3.Beacon
同一个频道下,允许入网的协调器或路由会用Beacon响应Beacon Request报文。包含设备是否为协调器,是否开放关联,可否接入Router设备,可否接入End Device设备。
- Association Permit为Yes表示允许关联(注意这里并不是入网完成,而是协调器根据自身资源允许有子设备加网)。
- RouterCapacity为0x01说明允许路由入网。
- End Device Capacity为0x01说明允许子设备入网。
提示:在设备间数据交互的报文中时而会看到Beacon报文,Beacon都是由协调器发出。若是在信标网络中,协调器向网络中所有设备发Beacon,保证设备和协调器同步(工作/休眠)。若不在信标网络中,只有协调器收到Beacon Request才会回复Beacon。不过这些不在入网流程中,咱们日后再说 。
4.Association Request
设备要加入个人区域网络(PAN),会给协调器发送一个关联请求。此消息是不加密的,协调器收到后,会根据当前自身的资源情况决定是否允许其加入网络。
5.Data Request
Endpoint发送一个Data request请求Coordinator给其分配16位网络地址。在获得网络短地址之前,设备和协调器是通过64位的长地址进行交互的。
6.Association Response
协调器若允许子设备加入,则分配短地址,并返回Association Response
7.Transport Key
协调器需要将网络密钥(Network Key,简称NWK Key)128位发送给设备,用来保证网络层的加密传输。此时协调器会使用Link Key(预先配置的或install code生成)来加密NWK Key,NWK Key用于网络层通信的加密。如果需入网设备没有收到NWK Key,则需要重新入网(Rejoin)。
当入网成功后,ZigBee 3.0以上要求,子设备向协调器请求新的Trust Center Link Key来替换之前默认的Trust Center Link Key
默认Trust Center link key是公开的,为:
5A:69:67:42:65:65:41:6C:6C:69:61:6E:63:65:30:39
这也是入网过程的一部分,因为若没有发Transport Key,虽然有了Association Response,设备最后仍会发Leave离网。
8.Device Announce
入网成功后,子设备在全网广播自身信息,包括地址、设备类型、加密情况等。设备广播两次,网关广播两次。
9.Route Request和Route Reply(针对Router设备)
对于Router设备来说,网关会发路由请求Route Request,这是一个广播消息,但是带了一个目标短地址,目的是建立从源节点到目标节点的路由路径。
目的节点收到消息后,回应Route Reply,参与转发这条消息的路由中间节点就会建立起路由表,路由路径由此而生。
10.Node Descriptor Request和Node Descriptor Response
子设备向协调器请求设备属性、特征等描述。协调器收到后先回一个Acknowledgement,再回复一个Node Descriptor Response具体信息。然后子设备收到Node Descriptor Response,又会给协调器回一个Acknowledgement。
11.Link Status
Link Status报文的发出源可能是入网设备也可能是协调器设备。只能传输一跳,不会被转发和重传,是一则广播消息。所以这是一则评估邻居设备的消息。默认15s发一次。
那么Link Status是如何评估邻居的表现呢?
输入损耗和输出损耗,这两个值都是通过LQI计算的,1代表最好,7代表最差,0代表未收到。
- 输入损耗(Incoming Cost)是从邻居最新发送的link status获得。
- 输出损耗(Outgoing Cost)是发给对应邻居信息的链路质量。
邻居表是用来做什么的?
- 在网络发现或重连时存储可能的父节点的信息,从而建立最有效质量最好的路由路径。
- 入网后,每次收到link status就更新网络中相邻设备的关系和链路状态。
12.Leave
已入网设备或者协调器都可以请求已入网设备离开网络。
设备主动离网:设备广播发送Leave
协调器请求设备离网:协调器先发Management Leave Request,设备会回复Management Leave Response(包含成功/失败信息),然后设备再广播发送Leave报文。Rejoin为0即不再发生Rejoin动作,清除相关表和变量。
总结
了解入网的流程也有助于工作中分析入网相关的问题。如果大家有关心的参数我没有提到,欢迎留言。