本发明属于无线自组网组网技术领域,特别涉及一种节点地址分配及管理技术。
背景技术:
无线自组网是由多个无线节点组成的不依赖任何基础通信设施的多跳无线网络。在无线节点进行通信前必须先配置一个具有唯一性的地址,因此,无线自组网首先要解决的是节点的地址配置问题。在传统网络中,地址配置方案分为有状态地址配置和无状态地址配置两种形式。有状态地址配置方案采用服务器/客户端的通信方式分配地址,即节点向服务器提出申请地址的请求,然后由服务器统一为网络内的节点分配地址。由于无线自组网没有任何基础设施,因此,有状态地址配置方案无法使用在无线自组网中,在无状态地址配置方案中,每个被分配的地址都需要在整个网络中进行重复地址检测以确保它的唯一性,导致了大量的控制包开销,消耗了大量的网络资源,因而也不适合。
因此针对无线自组网需要建立一种低开销的地址自配置。
技术实现要素:
为解决上述技术问题,本发明提出一种固定根节点的地址自配置方法,选择固定根的分布式地址分配方式,可以使得消耗的网络资源较少,且耗时较短。
本发明采用的技术方案为:一种固定根节点的地址自配置方法,选择一个节点作为根节点,采用改进的cskip函数来配置地址池和地址,所述改进的cskip函数表达式为:
其中,d表示节点所处的深度,cskip(d)表示不同深度下父节点拥有的地址数,cm表示父节点可以有的最大子节点数,lm表示网络最大深度。
新入网节点地址分配过程包括以下步骤:
s1、新入网节点在一跳范围内广播地址发现报文,源地址为0.0.0.0,目的地址为255.255.255.255,目的mac为ff:ff:ff:ff:ff:ff,并生成一个序号来标识该地址发现报文;
s2、当邻居节点收到地址发现报文时,如果邻居节点有地址可以分配,则回复消息,所述回复消息附带有配置信息:该邻居本身所处的树深度、要分配的ip地址、地址池深度、地址池的起始地址、参数cm和lm、地址发现报文的序号;如果邻居没有地址可以分配则发送没有地址报文给该新节点;
s3、如果新入网节点收到回复消息,则根据应用层的mac地址字段来标识这个回复消息发送给谁,在计时器超时时选择深度最小的邻居节点作为父节点,再发送地址请求报文,同时将回复消息中的信息进行广播;
如果新入网节点在计时器超时时只收到了没有地址报文,则选择最先收到的没有地址报文来发送单播请求借地址;如果没有收到任何包,等待超时后,再次重置时间继续等待;
s4、如果邻居节点收到地址请求报文,则根据地址请求报文中的ip字段来判断是否是自己该识别的报文,确认配置信息,并再次把s2中发送的配置信息附带在地址确认报文中;且将配置信息自己保存;
如果邻居节点收到借地址消息,直接转发给该邻居节点的父节点和子节点;若该邻居节点的父节点和子节点没有地址可以分配,则该邻居节点的父节点和子节点将这个借地址消息继续进行转发,直到某个节点的地址池中还有地址可以进行分配,那么有地址可以分配的这个节点根据收到借地址消息中的源ip返回一个单播进行回复,每个收到这个回复报文的节点记录路由;新入网节点收到这个回复报文后发送借地址请求报文,被借地址的节点收到后发送确认借地址报文;
回复报文包括该节点本身所处的树深度、要分配的ip地址、地址池深度、地址池的起始地址、参数cm和lm、地址发现报文的序号;
s5、新入网节点根据改进的cskip函数配置地址池和地址。
当该新入网节点分配好地址后,还包括地址回收过程:
a1、父子节点具有邻居关系时,周期性检查邻居表,如果存在父节点或子节点,更新持续时间;如果没有找到父节点或者子节点,则执行步骤a3;
a2、如果父子节点无邻居关系,子节点需要周期性发送确认父子关系的单播更新报文,父节点回复更新确认报文;如果没有找到父节点或者子节点,则执行步骤a3;
a3、没有找到父节点或者子节点分为两种情况:第一种情况:子节点找不到父节点,则先向自己的子节点发送拓扑变化报文,然后该节点将自己重新标记成新节点,并执行新入网节点地址分配过程(即步骤s1-s5);收到拓扑变化报文的节点也将自己重新标记成新节点,并执行新入网节点地址分配过程(即步骤s1-s5);
第二种情况:父节点找不到子节点,则将其地址和地址池收回。
本发明的有益效果:本发明的方法中每个节点在获取地址的同时也会获取一个地址池,此时该节点也具有分配地址的能力,具体通过改进cskip函数,根据该函数进行地址和地址池分配,同时在这种分配机制的基础上,加入了借地址机制来对其可能存在无法正常分配地址的情况进行补充和完善,进而设计了一套交互流程,包括新节点如何入网,以及在拿到地址后如何维护地址和地址池;本发明的方法具备以下优点:
1、在新节点获取地址的问题上,本方案选择固定根的分布式地址分配方式,这样消耗的网络资源较少,且耗时较短,因为是从邻居获取的;
2、为了避免地址冲突,配置为所有节点分用地址池,且地址唯一,不需要进行地址冲突检测,减少了冲突检测时的网络资源;
3、因为有固定节点这个特点,并且想采用分布式的地址分配方式,故采用一种低开销方式。这和zigbee的地址分配方式的特点很相似,参考其中cskip函数,该函数是在zigbee网络中使用的一种分配地址的方式,但是在该方法中我们设计的只是树状地址分配网络,而不需要对路由进行限制,对其中的一些参数进行简化,简化后按照改进的cskip函数进行地址分配,可以使每个节点都拥有地址池,满足了分布式的地址分配方式;
4、针对孤节点问题,在原有新节点入网交互流程的基础上,添加了借地址机制,保证每个新入网的节点都可以获取地址;
5、针对节点可能发生各种突发情况造成宕机,设计了一套地址回收的交互流程,防止所有节点地址池被宕机节点占满。
附图说明
图1为本发明实施例提供的新节点入网获取地址的步骤;
图2为本发明实施例提供的新节点入网获取地址流程图;
图3为本发明实施例提供的节点地址回收机制的步骤;
图4为本发明实施例提供的节点地址回收机制的流程图。
具体实施方式
如图1所示,本发明提供了一种固定根节点的地址自配置方法,下面结合附图对本发明的实现步骤作具体介绍。
首先给出改进的cskip函数的公式推导过程。
原始的cskip函数为:
通过该函数可以确定每个节点在不同深度下拥有的地址数。其中d表示节点所处的深度,cskip(d)表示不同深度下父节点拥有的地址数,cm表示父节点可以有的最大子节点数,lm表示网络最大深度,rm表示父节点可以有的最大子路由节点数。
本发明中令rm=cm,即每个子节点都可以进行路由,则可以把cskip函数修改为:
因此在选择根节点的时候,需要给出lm和cm这两个参数,具体如何选择lm和cm,需要根据网络规模来确定,一般地,总共的地址数量最好是节点数量的2倍,这样不容易出现孤节点问题,即使出现孤节点问题,使用借地址产生的额外负载也不会很大。
下面阐述一个新节点地址分配的过程,包括借地址的流程,具体实现包括以下步骤:
a1、在一跳范围内广播地址发现报文,源地址为0.0.0.0,目的地址为255.255.255.255,目的mac为ff:ff:ff:ff:ff:ff,自己生成一个序号来标识这个地址请求过程。
a2、当邻居收到地址发现报文时,如果邻居有地址可以分配,则回复报文,需要附带的消息有:当前节点本身的ip和所处的树深度,要分配的ip地址,地址池深度,地址池的起始地址,及cskip函数的参数cm和lm,地址发现报文的序号。如果没有地址可以分配则发送没有地址报文给新节点。
a3、如果新入网节点收到邻居节点回复报文根据应用层的mac地址字段来标识这个回复报文发送给谁,在计时器超时时选择深度最小的邻居节点作为父节点,再发送地址请求报文,同时需要将回复报文中的消息(ip、树深度、要分配的ip地址、地址池深度、地址池的起始地址、及cskip函数的参数cm和lm)进行广播;
如果新节点在计时器超时时只收到了没有地址报文,选择最先收到的没有地址报文来发送单播请求借地址;如果没有收到任何包,等待超时后,再次重置时间继续等待。
a4、邻居节点收到地址请求报文后,根据地址请求报文中的ip字段来判断是否是自己该识别的报文,确认配置信息,并再次把这些消息附带在地址确认报文中;且将分配信息自己保存。
如果邻居节点收到借地址消息,直接转发给该邻居节点的父节点和子节点;父子节点也没有地址继续进行转发,总有一个节点的地址池中还有地址可以进行分配,那么该节点根据收到报文的源ip返回一个单播进行回复,回复内容和a2一样;每个收到这个回复报文的节点记录路由;新入网节点收到这个回复报文后发送借地址请求报文,被借地址的节点收到后发送确认借地址报文。
a5、当节点分配好地址后,还包括地址回收过程,所述地址回收分两种情况:
1)父子节点具有邻居关系时,周期性检查邻居表,如果存在父节点或子节点,更新持续时间;如果没有找到父节点或者子节点,则执行3);
2)父子节点无邻居关系,子节点需要周期性发送确认父子关系的单播更新报文,父节点回复更新确认报文。当出现没有找到父节点或者子节点的情况,则执行3);
3)如果是节点找不到父节点,先向自己的子节点发送拓扑变化报文,然后该节点将自己重新标记成新节点,重复新节点获取地址的操作;收到拓扑变化报文的节点也将自己重新标记成新节点,重复新节点获取地址的操作;如果是父节点找不到子节点,认为其进行移动或者出现其他情况,则将其地址和地址池收回。
本领域的普通技术人员将会意识到,这里所述的实施例是为了帮助读者理解本发明的原理,应被理解为本发明的保护范围并不局限于这样的特别陈述和实施例。对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。
1.一种固定根节点的地址自配置方法,其特征在于,选择一个节点作为根节点,采用改进的cskip函数来配置地址池和地址,所述改进的cskip函数表达式为:
其中,d表示节点所处的深度,cskip(d)表示不同深度下父节点拥有的地址数,cm表示父节点可以有的最大子节点数,lm表示网络最大深度。
2.根据权利要求1所述的一种固定根节点的地址自配置方法,其特征在于,所有节点分用地址池,源地址为0.0.0.0,目的地址为255.255.255.255,目的mac为ff:ff:ff:ff:ff:ff。
3.根据权利要求2所述的一种固定根节点的地址自配置方法,其特征在于,新入网节点在一跳范围内广播地址发现报文,并根据有地址可分配的邻居节点返回的回复消息,采用改进的cskip函数来配置地址池和地址;所述回复消息至少包括:该邻居本身所处的树深度、要分配的ip地址、地址池深度、地址池的起始地址、参数cm和lm。
4.根据权利要求3所述的一种固定根节点的地址自配置方法,其特征在于,新入网节点在计时器超时时,在所有返回回复消息的邻居节点中,选择深度最小的邻居节点作为父节点。
5.根据权利要求3所述的一种固定根节点的地址自配置方法,其特征在于,若邻居节点没有地址可分配,则返回没有地址报文,若新入网节点在计时器超时时只收到了没有地址报文,则选择最先收到的没有地址报文来发送单播请求借地址。
6.根据权利要求5所述的一种固定根节点的地址自配置方法,其特征在于,如果邻居节点收到借地址消息,直接转发给该邻居节点的父节点和子节点;若该邻居节点的父节点和子节点没有地址可以分配,则该邻居节点的父节点和子节点将这个借地址消息继续进行转发,直到某个节点的地址池中还有地址可以进行分配。
7.根据权利要求4或6所述的一种固定根节点的地址自配置方法,其特征在于,当该新入网节点分配好地址后,还包括地址回收过程:
a1、父子节点具有邻居关系时,周期性检查邻居表,如果存在父节点或子节点,更新持续时间;如果没有找到父节点或者子节点,则执行步骤a3;
a2、如果父子节点无邻居关系,子节点需要周期性发送确认父子关系的单播更新报文,父节点回复更新确认报文;如果没有找到父节点或者子节点,则执行步骤a3;
a3、没有找到父节点或者子节点分为两种情况:第一种情况:子节点找不到父节点,则先向自己的子节点发送拓扑变化报文,然后该节点将自己重新标记成新节点;收到拓扑变化报文的节点也将自己重新标记成新节点;
所述新节点在一跳范围内广播地址发现报文,并根据有地址可分配的节点返回的回复消息,采用改进的cskip函数来配置地址池和地址;所述回复消息至少包括:该有地址可分配的节点本身所处的树深度、要分配的ip地址、地址池深度、地址池的起始地址、参数cm和lm;
第二种情况:父节点找不到子节点,则将其地址和地址池收回。
技术总结