ZigBee3.0 节点入网流程分析
未入网节点的简要入网流程为:先扫描各信道中存在的网络,尝试加入合适的网络。成功加入后,节点将通过身份验证并接收网络密钥。最后,如果此网络存在信任中心,则节点将其预配置的链接密钥交换为信任中心生成的链接密钥。
下面详细分析节点入网的每个步骤。
Step1 节点入网前首先设置 CommissioningStatus
为 IN_PROGRESS, DoPrimaryScan
为 TRUE,ScanChannels
为 PrimaryChannelSet。如果 PrimaryChannelSet
为 0x00000000, 则跳转到 Step12。
Step2 节点通过信道扫描,寻找是否存在合适的网络。为此,节点广播发送 Beacon Request。
Step3~5 协调器或者路由节点收到 Beacon Request 后,回复 Beacon。
Beacon 部分参数说明:
Source PAN ID:设备所处网络的 PAN ID
Short source Address:设备所处网络的短地址
Pan Coordinator:设备是否为协调器
Permit Association:关联许可是否开发
Router Capacity:可否接入 Route Device
End Device Capacity:可否接入 End Device
如果节点收到 Beacon,表示信道扫描成功;否则,信道扫描失败,跳转到 Step12。
节点可能同时收到多个 Beacon 回复,它会分析 Beacon 的 Link Quality 和关键参数来决定下一步动作。
1)首先判断 Permit Association
是否为 True。
2)然后根据自身的设备类型,判断 Router Capacity
或 End Device Capacity
是否符合要求
3)如果存在多个 Beacon 符合要求,选择 Link Quality 最佳的网络入网;如果没有 Beacon 符合要求,跳转到 Step12。
Step6 节点使用 MAC association 命令尝试加入网络。
Association Request 部分参数说明
Device Type: FFD(协调器或者路由设备),RFD(终端设备)
Power Source:Mains(常供电设备),Battery(电池供电设备)
节点发出 Association Request 命令并收到协调器的 MAC ACK 后,向协调器发送 Data Request 命令,请求分配网络短地址。
当协调器接收到 Data request 命令后,为入网节点分配一个唯一的网络短地址,并回复 Association Response 命令。
Step7 如果节点收到 Association Response 命令并解析获得了网络短地址,表明入网成功;否则入网失败,跳转到 Step6,继续尝试加入下一个合适的网络。节点可以尝试再一次加入相同的网络,但是连续尝试次数不能超过 MaxSameNetworkRetryAttempts
。如果找不到合适的网络,跳转到 Step12。
Step8 节点入网成功,需要在 apsSecurityTimeOutPeriod
时间内被协调器认证并接收 Network Key。
协调器使用创建网络时生成的 KEY-Transport KEY 秘钥加密 Transport KEY 命令的 APS 层信息,节点收到命令后,使用 ZigBeeAlliance2009 秘钥解密,获得 Network Key 用于后续通信数据的网络层信息的加解密。
Step9 如果节点在 apsSecurityTimeOutPeriod
时间内没有收到 network key,或者解密、认证失败,节点应该重置自身的网络参数并跳转到 Step6,重新尝试加入网络。如果找不到合适的网络,跳转到 Step12。
Step10 节点设置 bdbNodeIsOnANetwork
为 TRUE,然后广播 Device_annce ZDO 命令,通知当前网络的其它节点,有新节点入网成功。此命令网络层的信息正是用上一步收到的 network key 加密。
如果 apsTrustCenterAddress
为 0xffffffffffffffff,则表明加入的是分布式安全网络,跳转到 Step13。
Step11 为了更新通信数据 APS 层的加解密秘钥,节点执行检索新的 Trust Center link key 过程。如果成功,跳转到 Step13;如果失败,节点退出当前网络并重置网络参数。
1)节点向协调器发送 request key,请求获取新的 Trust Center link key。
2)协调器发送 Transport Key(Link), APS 层携带新的 Trust Center link key 信息,并使用 Key-Load Key 秘钥加密。
3)节点获取到新的 Trust Center link key 后,使用 HMAC 哈希算法得到 Initiator Verify-Key Hash Value,将此数值添加到 Verify Key Request 命令并发出,让协调器确认是否正确。
4)协调器验证节点的 Initiator Verify-Key Hash Value,并回复 Verify Key Request 命令,如果此命令的 apsStatus 参数为 Success,则表示 Trust Center link key 更新成功。
Step12 如果节点的 DoPrimaryScan
为 FALSE 或者 SecondaryChannelSet
参数为 0x00000000, 跳转到 Step16。如果 SecondaryChannelSet
参数不等于 0x00000000, 节点应该设置 DoPrimaryScan
参数为 FALSE, 将 ScanChannels
参数设置为 SecondaryChannelSet 并跳转到 Step2。
Step13 节点广播 Mgmt_Permit_Joining_req ZDO 命令,permit joining flag 参数为 true 的其它路由节点收到此命令后,会同步 permit Duration 时间。
Step14 如果入网节点为路由节点,应该激活它的 permit joining flag,用以接收其它节点的入网请求。
Step15 节点设置 CommissioningStatus
为 SUCCESS。如果节点支持 touchlink 功能,设置 aplFreeNwkAddrRangeBegin
, aplFreeNwkAddrRangeEnd
, aplFreeGroupID-RangeBegin
,aplFreeGroupIDRangeEnd
参数为 0x0000。
Step16 节点可以使用制造商定制的程序重新申请入网,也可以设置 CommissioningStatus
为 NO_NETWORK 并停止入网。
版权声明: 本文为 InfoQ 作者【taox】的原创文章。
原文链接:【http://xie.infoq.cn/article/1c52a85f0d559cd887db36589】。文章转载请联系作者。
评论