Skip to content

地址分配:身份证与门牌号 ​

学习提示

这一页接着《设备管理》往下讲:设备入网后,靠什么在网里被找到?答案就是地址。

一句话理解 ​

每台设备有两张"身份牌":出厂固化的 IEEE 地址当"身份证",入网时随机分配的短地址当"网络门牌号"。 ZigBee 3.0 相比老协议最大的变化,就是短地址从"树状计算分配"改成了"随机分配 + 冲突检测"。

一. 两种地址的分工 ​

IEEE 地址(64 位)短地址(16 位)
谁给的芯片出厂固化(读 Flash 校准区)入网时父节点分配
是否唯一全球唯一,永不改变网络内唯一,可能变化
干什么用认身份(查人、安全、绑定)寻址(每帧收发的目的地)

为什么要有两套? 64 位地址太长,每帧都带太浪费无线带宽;16 位短地址够小、够快,但只在当前网络有效。所以协议栈用短地址"跑路",用 IEEE 地址"认人"。

二. 分配机制的版本差异(教学重点) ​

  • 老协议(ZigBee 2007 / Pro):Cskip 分布式树状分配——父节点按公式 Cskip = (1 - Cm^(d+1)) / (1 - Cm) × Rm 计算,把地址"按树的深度切块"发给孩子。地址跟拓扑位置绑定(哪个深度、第几个孩子),好处是不冲突,坏处是网络结构被地址"锁死"、扩容僵硬。
  • ZigBee 3.0(现在):随机短地址分配——入网时从 16 位地址空间里随机挑一个,靠"宣告 + 冲突检测"保证唯一。网络结构自由了,代价是多一步撞号检查。

💡 通俗比喻:老协议像"按户口本编号发门牌号"(几栋几单元固定);ZigBee 3.0 像"入住时随机抓号,抓到重号就重抓"。

三. 随机分配流程(四步) ​

  1. 发入网请求:新设备带自己的 IEEE 地址,申请加入网络;
  2. 父节点随机分配:从"未占用"地址池里随机挑一个 16 位短地址(老协议这里用 Cskip 公式算);
  3. 入网确认:关联响应里带回短地址,设备收下,成为自己的"门牌号";
  4. 宣告 + 冲突检测:发 Device_annce 广播(IEEE+短地址);发现撞号 → 重选重发,直到唯一。

📌 约定:协调器的短地址固定是 0x0000(协议写死)。所以看到 ShortAddr=0x0000 就知道是协调器;路由器 Parent=0x0000 就知道它挂在协调器下——这就是地址分配"约定"的直接体现。

四. 地址在协议栈里"体现在哪" ​

位置内容对应代码 / 命令
NWK 层自己的短地址、协调器地址_NIB.nwkDevAddress / _NIB.nwkCoordAddress
API取本机地址NLME_GetShortAddr() / NLME_GetExtAddr()
ZDO地址互查IEEE_addr_req(短→IEEE)/ NWK_addr_req(IEEE→短)
三张表父子地址、邻居地址、路由下一跳关联表 / 邻居表 / 路由表
无线帧头每帧都带源/目的短地址"门牌号"在路上的体现

五. 值得记住的一个"坑" ​

短地址是"临时门牌号",不是"永久身份":设备断电重加入、孤儿恢复、网络重组后,短地址可能换号。所以应用层要绑定就认 IEEE 地址,短地址只当"当前会话"用。

小结

一句话记住本节:IEEE 地址负责"你是谁",短地址负责"你在哪";ZigBee 3.0 的短地址是随机抓号 + 撞号重抓。

aioteer · 物联网专业课程群

💬AI 伴学配置