董友俊
关键词:ZigBee;随机地址分配;地址冲突;NS2
1引言
ZigBee技术是在IEEE802.15.4无线通信协议标准上建立的近距离无线组网通信技术,具有近距离、自组织、低功耗、低复杂度等特点[1],主要用于近距离低速率电子设备之间的数据传输以及典型的有周期性数据、间歇性数据传输需求的场景,包括汽车工业、家庭自动化、遥控遥测、定位系统等领域。
ZigBee技术的地址分配有两种机制,分别是分布式地址分配机制(Distributed Address AssignmentMechanism,简称DAAM)和随机地址分配机制(Stochastic Address Assignment Mechanism,简称SAAM)。DAAM强调“地址——位置”的对应关系,更确切地说是“子节点地址——父节点地址”的对应关系,该对应关系是树状路由的基础。而SAAM采用逻辑上更简单的随机方式分配地址,该机制对应的是网状路由[2]。
现有的随机地址分配算法(简称SAAM算法)虽能完成节点的入网地址分配工作,但时间消耗和通信开销较大,对于采用电池供电的ZigBee设备而言,显然是技术弊端。因此,本文在深入研究SSAM算法的基础上,提出了新型的基于邻居确认的随机地址分配算法(Stochastic Address Assignment Mechanism basedon the Confirm of the Neighbors,简称SAAMCN),以减少时间和通信开销,同时对重复地址进行有效清理。
本文的主要工作包括如下四个方面:(1)研究ZigBee现有的随机地址分配算法SAAM并分析其优缺点;(2)针对SAAM的缺陷提出新型扫描算法SAAMCN;(3)将SAAM和SAAMCN在NS2网络仿真平台上实现;(4)对SAAM和SAAMCN进行多指标多场景的测试,验证SAAMCN算法的有效性。
2SAAM算法分析
SAAM算法的逻辑是:从协调器开始,每个父节点都随机从65533个地址中为子节点分配地址,而不考虑子节点的类型。因为短地址总共65536个,其中有3个(分别是Ox0000,OxFFFE,OxFFFF)不参与地址分配,故地址池大小为65533。父节点每随机出一个地址,都要去自己的子地址列表中查询,以确认该地址是否已经分配过。若是,则重新随机,否则将该网络地址通过入网应答命令传递给子节点。子节点在收到入网应答命令之后,需要向全网广播“设备声明”(Device Announce),其中包含刚获得的网络地址和64位长地址。其他设备收到该声明之后,首先判断自己的网络地址与该声明中的网络地址是否一致,若是,则以广播方式发送“地址冲突”(Address Conflict),并且自行重新随机选择网络地址,同样需要发送“设备声明”,否则继续转广播“设备声明”。节点收到“地址冲突”的通告之后,自行重新随机选择网络地址,继续重复上述流程。节点在收到设备声明之后,首先要判断此前是否接收过,若已接收,则直接忽略。还需要注意若节点发现网络地址冲突,即既要发送地址冲突通告,还要通过自行随机的方式重新给自己分配网络地址,最后还需广播设备声明将新获得的网络地址通知全网。
地址冲突通告中包含网络地址、64位长地址、广播序列号。这些信息在最初节点发送设备声明时设置,此后的转发节点只会读取其中的信息并记录在本地的声明发送列表(或冲突发送列表),不会修改其中的值。只有最初发送设备声明的节点收到地址冲突通告,才会在重新选择网络地址之后将广播序列号加一,重复此前广播。广播序列号的作用除了避免无穷广播之外,还可以便于节点识别这是来自某个节点的第几个广播包。
通过以上分析可知SAAM算法具有以下优点:(1)降低了欲入网节点选择潜在父节点的逻辑复杂度,因此减轻了扫描阶段的压力。而且,潜在父节点采用随机方式获得网络地址,操作方便;(2)由于不存在地址池枯竭的问题,节点的入网也就没有静态和动态之分,所以也就不用考虑借地址等问题,欲入网节点都能分到地址;(3)潜在父节点得出网络地址不需要计算,因此不需要R。等参数。这就意味着在DAAM机制中,与这些参数对应的限制在SAAM机制中都不存在。在一些不能提供等参数值的场合下,SAAM算法非常合适。
SAAM算法把压力集中到了获得网络地址之后,因为子节点要進行全网广播来避免地址冲突,并对冲突的地址进行处理。从上述对设备声明和地址冲突通告的处理逻辑上,我们不难发现,SAAM算法以下明显的缺点:(1)子节点获得网络地址后都需要进行全网广播设备声明,即已入网节点都要为刚入网节点转发一次设备声明,除非该节点的网络地址与刚入网的节点冲突,但冲突的情况更糟糕,因为冲突就需要广播地址冲突通告,节点重新选择网络地址之后还需要广播,又加重了整个网络的负担。而且,这种广播是每个节点刚入网是都会促发的,显然通信开销很大,耗时很长;(2)在出现地址冲突时,SAAM算法要求重复的地址都要重新选择,但并未考虑原网络地址在网络中存在过,在部分节点的路由表、邻居表等属性表中都有记录,SAAM算法并未对这些记录进行有效的处理。
3SAAMCN算法
针对SAAM算法存在的问题,本文提出基于邻居确认的随机地址分配算法-SAAMCN,可以看作是对SAAM算法的优化或者补充。
首先,对于广播成本高的问题,SAAMCN算法采用将广播限制在两跳范围内的方法来解决。这就从根本上解决了成本问题,能够明显减少广播的通信开销,节省时间。但必须指出的是,该算法在网络规模很大的情况下效果不太理想,因为随着网络规模的扩大,两跳广播覆盖的范围占全网的比率比较小,虽然通信开销和时间消耗控制在低位,但是避免地址冲突的功能就受限制,因此该算法的适用范围是中等及以下规模的网络[3]。
SAAMCN算法在节点接到设备声明之后,不仅要跟本节点的网络地址比较,还要跟本地的路由表、邻居表等属性表中记录的节点网络地址比较,只要查到有设备声明中网络地址的记录,就可确定该网络地址是重复的,直接发送地址冲突通告即可,因为该通告并非一定要网络地址重复的节点才能发送。
在出现地址冲突后,拥有该网络地址的节点都将会修改地址,则网络中其他节点关于该网络地址的记录就无效了,因此SAAMCN算法在节点收到地址冲突通告之后,如果本节点的短地址跟正在进行设备声明的短地址不相同(此类节点称为第三方节点),则查询本地的各种属性表,若发现通告中的短地址记录,则删除相应的信息,以解决地址变更时节点信息未清理的问题。
通过对SAAM算法的一系列改进,不难发现SAAMCN算法的已具有如下优势:(1)同样具有逻辑复杂度低、地址池不枯竭、不受参数限制等优势,即SAAMCN算法完全保留了SAAM算法的优势;(2)采用两跳广播代替SAAM算法的全网广播,有效地控制了通信开销和时间消耗;(3)查询属性表确认地址冲突的策略扩大了设备通告的实际范围,因此弥补了两跳广播造成搜索范围有限的劣势;(4)特有的冲突地址信息清理机制保证了已失效的地址信息不会继续存在于网络中,保障了网络的正常运行。
4模拟仿真及数据分析
为了验证SAAMCN算法的有效性,本文将其在NS2上进行仿真实现并做相应的测试。本文模拟仿真所采用的NS2是开源免费的仿真软件,其具有较高的执行效率、丰富的构件库、灵活的配置,良好的可扩展性和开放性等优点[4]。同时,将SAAM算法也在NS2上模拟实现并测试,将两组算法的测试数据进行对比,以增强说服力。
本文设置了7套模拟仿真场景,具体如表1所列。在200个节点以下的场景中,SAAMCN能保证0.050-/0以下的重复率,特别是150个及以下节点的场景,重复的情况基本上统计不到,所以SAAMCN算法的非常适用于200个节点以下的场景。在现实生活中,小规模ZigBee网络大约是十几个节点,中等规模网络节点数约几十或者上百个,因此SAAMCN算法在中小规模网络中表现优异。
图2和图3显示,SAAMCN算法时间消耗和通信开销都远低于SAAM算法。
综合比较三组数据,发现在网络规模低于200个节点时,SAAMCN的重復率和SAAM很接近,但通信开销和时间消耗远远低于SAAM,因此SAAMCN算法具有明显优势。在网络规模大于200个节点时,SAAMCN的时间消耗和通信开销远低于SAAM.重复率高于SAAM。因此,得出结论:在网络规模不是很大时,SAAMCN算法在总体指标上优于SAAMCN算法。
5结束语
本文在对ZigBee网络随机地址分配机制进行深入研究的基础上,分析出现有随机地址分配算法SAAM会造成较大的通信开销和时间消耗,且未能有效清理重复地址信息的问题,并提出了新型随机地址分配算法SAAMCN。该算法对广播的跳数做出限制,并充分利用属性表来清理重复地址信息,以解决上述问题。最后,通过在NS2仿真平台上的模拟测试,证明SAAMCN在其适用范围内的优越性。