ZigBee地址分配算法

  ZigBee有两种地址分配方式:分布式分配机制和随机分配机制。

随机分配机制

  随机分配机制是指当NIBnwkAddrAlloc值为0x02时,地址随机选择。在这种情况下,nwkMaxRouter就无意义了。随机地址分配应符合NIST测试中的描述。当一个设备加入网络使用的是MAC地址,其父设备应选择一个尚未分配过的随机地址。一旦设备已分配一个地址,它没有理由放弃该地址,并应予以保留,除非它收到声明,其地址与另一个设备冲突。此外,设备可能自我指派随机地址,比如利用加入命令帧加入一个网络。

分布式分配机制

  每个ZigBee设备应该拥有一个唯一的MAC地址。协调器coordinator在建立网络以后,使用0x0000做为自己的短地址。在路由器router和终端enddevice加入网络以后,使用父设备给它分配的16位的短地址来通讯。那么这些短地址是如何分配的呢?16位的地址意味着可以分配给65536个节点之多,地址的分配取决于整个网络的架构,整个网络的架构由这3个值决定:

  1. 网络的最大深度Lm,对应于ZigBee协议栈的MAX_DEPTH参数。
  2. 每个父亲设备拥有的孩子数Cm,对应于ZigBee协议栈的MAX_CHILDREN参数。
  3. 每个父亲设备拥有的孩子节点中路由器的最大数目Rm,对应于ZigBee协议栈的MAX_ROUTERS参数。

  有了这3个值就可以根据下面的公式来算出某父设备的路由器子设备之间的地址间隔 C s k i p ( d ) Cskip(d) Cskip(d)

C k i p ( d ) = { 1 + C m ( L m − d − 1 ) ,    i f R m = 1 1 + C m − R m − C m ∗ R m L m − d − 1 1 − R m ,    o t h e r w i s e Ckip(d) = \left\{\begin{matrix} 1 + Cm(Lm-d-1), \; if Rm = 1 \\ \cfrac{1 + Cm - Rm -Cm*Rm^{Lm -d -1}}{1 - Rm}, \; otherwise \end{matrix}\right. Ckip(d)=1+Cm(Lmd1),ifRm=11Rm1+CmRmCmRmLmd1,otherwise

  上面这个公式是用来计算位于深度d的父亲设备的,它所分配的子路由器之间的短地址间隔。该父亲设备分配的第1个路由器地址等于父亲设备地址 + 1,分配的第2个路由器地址等于父亲设备地址 + 1 + Cskip(d),第3个路由器地址等于父亲设备地址 + 1 + 2 * Cskip(d),依次类推。计算终端地址的公式如下:

A n = A p a r e n t + C s k i p ( d ) ∗ R m + n A_n = A_{parent} + Cskip(d) * Rm + n An=Aparent+Cskip(d)Rm+n

  这个公式是来计算Aparent这个父亲设备分配的第n个终端设备的地址An。来举个简单的例子,假设有一个ZigBee网络,最大深度为3,每个父亲的最大孩子数是5,在孩子当中路由器数量是3
在这里插入图片描述
  由图可知,协调器的 C s k i p ( d ) = 1 + 5 − 3 − 5 ∗ 3 3 − 0 − 1 1 − 3 = 21 Cskip(d) = \cfrac{1 + 5 - 3 - 5 \ast 3^{3 - 0 - 1}}{1 - 3} = 21 Cskip(d)=131+5353301=21,所以协调器的第一个路由器是1,第二个就是22,换算成十六进制就是0x0016。协调器的第1个终端地址等于 0 x 0000 + 21 ∗ 3 + 1 = 64 = 0 x 0040 0x0000 + 21 \ast 3 + 1 = 64 = 0x0040 0x0000+213+1=64=0x0040,第2个就是0x0041。由此可见所有同一父亲的终端设备的短地址都是连续的。不难看出一旦LmCmRm3个值确定了,整个网络设备的地址也就确定下来。所以知道了某个设备的短地址,就可以计算出它的设备类型和它的父设备地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值