一种异构无线传感网地址自动配置方法
技术领域
本发明属于计算机网络领域,涉及一种多跳无线网络的IPv6地址配置方法,尤其是一种异构无线传感网IPv6地址自动配置方法。
背景技术
随着无线传感器网络(Wireless Sensor Networks, WSN)相关理论和技术的不断成熟,无线传感器网络的应用模式逐步从用于科学研究和特定领域的闭环模式走向提供众多开放性服务的开环模式。信息和资源共享以及高效的网络管理等客观要求已被提出。因此,实现无线传感器网络与IPv6网络的互联互通是必然趋势。IP地址的自动分配是所要解决的首要问题。
无线传感器网络是典型的资源敏感型网络,包括能量、计算和通信等能力受限。而传统的基于动态主机配置协议(Dynamic Host Configuration Protocol, DHCP)的集中式地址分配机制需要固定的地址分配主机的支持,并且会带来大量的控制报文开销,明显不适用于无线传感器网络。目前已有一些针对移动自组网的分布式地址自动分配方案。SOAMAN(Self-Organizing Node Address Management in Ad-hoc Networks) 是一种基于分簇的地址管理协议,能有效降低协议开销和分配时延,但尚存在以下不足:(1)单领导节点使得整个地址配置结构不够健壮;(2)簇维护需要领导周期性广播,维护开销大;(3)节点之间需要周期性广播以防止地址泄漏。伙伴系统是一种基于状态维护的地址自动分配机制,其优势是不需要进行DAD(Duplicate Address Detection)检测,但同样需要在节点间周期性地广播IP地址池以防止地址泄漏。另一些地址配置方法需要通过在全网内进行DAD检测,能耗较高。
另一方面,随着应用场景越来越复杂,由不同硬件能力的传感器节点(包括能源异构、链路异构、计算异构等)构成的异构传感器网络将会普遍出现。目前的地址自动分配方法均没有考虑网络中存在异构节点的情况。因此,需要针对资源敏感的异构无线传感器网络建立一种能量有效的IPv6地址自动分配。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种异构无线传感器网络IPv6地址自动配置的实现方法。
技术方案:本发明公开了一种适用于异构无线传感器网络的IPv6地址自动配置方法,在所述方法中,异构无线传感器网络中的每个传感器节点可获取全球唯一的IPv6地址,节点通过IPv6地址实现彼此的通信以及与IPv6互联网的通信。
本发明涉及的网络设备实体为四种:IPv6接入点,骨干传感器节点,普通传感器节点和孤立传感器节点。接入节点是位置固定的特殊骨干节点,提供传感器网络与IPv6互联网的网关功能,负责通信协议转换,在本发明中同时还具有地址分配功能,初始时,网络中只存在IPv6接入点,并具有全部IPv6地址;骨干节点相对于普通节点具有更高的链路能力、能源能力和计算能力,在本发明中具备地址分配能力;普通节点是一类链路、能源和计算性能较低的节点,在本发明中仅作为地址分配代理,不负责地址分配;孤立节点是未分配IPv6地址的节点。
由于无线传感器网络内部通信通常是采用更加节约资源的16位短地址,因此本发明所述IPv6地址分配方法以传感器节点与IPv6互联网实现点到点通信为目的,对不能连接到接入点的传感器节点不负责分配IPv6地址。若孤立节点发起地址申请时能够连接到接入点,网络将为其分配IPv6地址,根据其设备类型,孤立节点转变为骨干节点或普通节点。当骨干节点或者普通节点离开网络时,将转变为孤立节点,直到该孤立节点再次发起地址申请时能够连接到原接入点或其它接入点。IPv6接入点和骨干节点均具有为其它节点分配IPv6地址的能力。每个普通节点均有一个与其对应的领导节点,该领导节点可以是IPv6接入点或骨干节点。
本发明是基于多领导结构的地址配置方法,领导节点全部由骨干节点或者接入点构成。本发明所述方法将与传统的邻居代理方法和伙伴系统结合起来。一开始接入点拥有全部合法IPv6地址,等待节点加入消息的到来,如果是骨干节点请求加入,则将地址池的一半分给该骨干节点;如果是普通节点加入网络,则接入点负责对其分配一个合法IPv6地址。如果接入点并不在加入节点的一跳范围内,就通过邻居代理方式进行分配地址池或者地址。
当申请地址的节点为骨干节点时,采用邻居代理+伙伴系统的方式获得IPv6地址。节点通过邻居代理方式获得IPv6地址池,因而骨干节点之间可能是多跳的。当申请地址的节点为普通节点时,采用邻居代理方式分配其IPv6地址,普通节点的地址在接入点或者骨干节点中的地址池中选取。
节点在发送加入申请前,先构造一个临时地址,临时地址是在正式分配IPv6地址前用于地址申请的临时身份标识。由于临时地址需要保证在接入点范围内唯一,因此本发明将所述节点的临时地址分为三个部分。第一部分为64比特的全局路由前缀,第二部分为48比特的硬件地址,第三部分为16比特的节点类型标识。临时地址的总长度为128比特。所有传感器节点的全局路由前缀均相同,为FEC0:0:0:FFFE::/64。普通节点的节点类型标识置为全0,骨干节点的节点类型标识置为全1。例如,某普通节点的硬件地址为ABCD:EFAB:CDEF,则该节点的临时地址为FEC0:0:0:FFFE: ABCD:EFAB:CDEF:0000。
考虑传感器节点的移动性可能将改变网络拓扑结构,为避免IPv6地址变更带来的开销,本发明所述合法IPv6地址均预先定义,并不定义特定IPv6地址格式,即IPv6地址中不包含关于节点位置或者网络结构信息。
针对传感器网络的资源敏感性,本发明提供了一系列节能措施:本发明利用节点异构的天然特性自动形成领导节点和普通节点,避免了复杂的领导选举算法;本发明涉及到的地址分配方法为基于邻居代理和伙伴系统的有状态地址分配技术,通过地址池和IPv6地址分配表自动配置地址,因而无需DAD检测;本发明所述的地址回收方法为按需回收方法,无需周期性地节点间洪泛,无需普通节点保存地址分配表。
本发明所述异构无线传感器网络IPv6地址自动分配方法提供地址分配、节点离开、地址回收功能。这些功能由骨干节点IPv6地址获取、普通节点IPv6地址获取、骨干节点离开地址回收、普通节点离开地址回收、IPv6地址块迁移、IPv6地址按需全局回收等六个子方法构成。
骨干节点获取IPv6地址的流程如下:
步骤301,骨干节点B设置广播剩余次数r;
步骤302,骨干节点B使用临时地址在一跳范围内广播加入消息,设置定时器BJoin_Timer,设为t 3 秒;
步骤303,邻居节点X收到加入消息后,发送一个回复消息给骨干节点B,回复消息使用骨干节点B的临时地址作为目的地址,并包含节点类型信息(接入点的节点类型与骨干节点相同);
步骤304,骨干节点B等待来自邻居的回复消息若,BJoin_Timer到时,进行步骤305,否则进行步骤307;
步骤305,骨干节点B将广播次数减1;
步骤306,如广播次数小于等于0,进行步骤321,否则,进行步骤302;
步骤307,骨干节点B收到回复消息,暂存所有收到的回复包,直到BJoin_Timer超时;
步骤308,骨干节点B检查所有BJoin_Timer内收到的回复包中的节点类型信息,如果存在来自骨干节点的回复,则进行步骤309,否则进行步骤310;
步骤309,骨干节点B向邻居骨干节点X1发送确认消息。如果有两个以上的骨干节点回复,则选择第一个回复的骨干节点,进行步骤311;
步骤310,骨干节点B向邻居普通节点X2发送确认消息,如果有两个以上的普通节点回复,则选择第一个回复的普通节点,进行步骤315;
步骤311,骨干节点X1收到确认消息,X1检查自身的IPv6地址表,如果有多个IPv6地址块,则进行步骤312,否则进行步骤313;
步骤312,骨干节点X1随机选择其中一个地址块,将地址块信息和自己最新版本的IPv6地址表发送给骨干节点B,进行步骤314;
步骤313,骨干节点X1将自身IPv6地址池一分为二,选取其中一个子集,将地址块信息和自己最新版本的IPv6地址分配表发送给骨干节点B;
步骤314,骨干节点B收到地址块后,将该地址块的第一个IPv6地址作为自身IPv6地址,剩余的IPv6地址列表保存在本地。骨干节点B将收到的最新IPv6地址分配表保存在本地,发送确认消息给骨干节点X1,进行步骤321;
步骤315,普通节点X2收到骨干节点B的确认消息,将节点B的临时地址存储在本地;
步骤316,普通节点X2发送一个请求消息到普通节点X2的领导节点L;
步骤317,领导节点L检查自身的IPv6地址表,如果有多个IPv6地址块,则进行步骤318,否则进行步骤319;
步骤318,领导节点L随机选择其中一个地址块,将地址块信息和自己最新版本的IPv6地址表发送给普通节点X2,进行步骤320;
步骤319,领导节点L将自身IPv6地址池一分为二,选取其中一个子集,将地址块信息和自己最新版本的IPv6地址分配表发送给普通节点X2;
步骤320,普通节点X2收到领导节点L发来的IPv6地址块和最新版本的IPv6地址分配表发送给骨干节点B。骨干节点B收到地址块后,将该地址块的第一个IPv6地址作为自身IPv6地址,剩余的IPv6地址列表保存在本地。骨干节点B将收到的最新IPv6地址分配表保存在本地,发送确认消息给普通节点X2。
步骤321,地址分配过程结束。
普通节点获取IPv6地址的流程如下:
步骤401,普通节点N设置广播剩余次数m;
步骤402,普通节点N使用临时地址广播加入消息,设置定时器NJoin_Timer,设为t 4 秒;
步骤403,邻居节点X收到加入消息后,发送一个回复消息给普通节点N,回复消息使用普通节点N的临时地址作为目的地址,并包含节点类型信息(接入点的节点类型与骨干节点相同);
步骤404,普通节点N等待来自邻居的回复消息,若NJoin_Timer超时,进行步骤405,否则进行步骤407;
步骤405,普通节点N将广播次数减1;
步骤406,若广播次数小于等于0,进行步骤417;否则,进行步骤402;
步骤407,普通节点N收到回复消息,暂存所有收到的回复包,直到NJoin_Timer超时;
步骤408,普通节点N检查所有NJoin_Timer内收到的回复包中的节点类型信息,如果存在来自骨干节点的回复,则进行步骤409,否则进行步骤412;
步骤409,普通节点N向邻居骨干节点X1发送确认消息。如果有两个以上的骨干节点回复,则选择第一个回复的骨干节点;
步骤410,骨干节点X1收到来自普通节点N的确认消息,骨干节点X1选择一个目前没有被使用的IPv6地址发送给普通节点N,骨干节点X1更新自身IPv6地址分配表;
步骤411,普通节点N收到骨干节点X1为其分配的IPv6地址,将该地址作为自身IPv6地址,标记骨干节点X1为其领导节点,并向骨干节点发送确认消息,进行步骤417;
步骤412,普通节点N向邻居普通节点X2发送确认消息,如果有两个以上的普通节点回复,则选择第一个回复的普通节点;
步骤413,普通节点X2收到来自普通节点N的确认消息,将节点N的临时地址存储在本地,普通节点X2发送一个请求消息到普通节点X2的领导节点L;
步骤414,领导节点L选择一个目前没有被使用的IPv6地址发送给普通节点X2,领导节点L更新自身IPv6地址分配表;
步骤415,普通节点X2收到来自领导节点L的IPv6地址,将该地址发送给普通节点N;
步骤416,普通节点N收到领导节点L为其分配的IPv6地址,将该地址作为自身IPv6地址,标记领导节点L为其领导节点,并向普通节点X2发送确认消息,进行步骤417;
步骤417,地址分配过程结束。
本发明所述上述步骤313骨干节点X1,步骤319领导节点L,步骤410骨干节点X1,步骤414领导节点L,在没有有效地址可供分配时,需要执行IPv6地址块迁移过程,为方便起见,本发明将上述骨干节点X1或领导节点L统一表示为骨干节点X。IPv6地址块迁移的流程如下:
步骤501,骨干节点X设置地址块请求广播当前剩余次数n;
步骤502,骨干节点X广播地址块请求消息到其邻居节点,广播跳数为(6-n)跳,广播当前剩余次数减1,启动定时器Block_Timer,定时时间设为t 5 毫秒;
步骤503,收到地址块请求消息的邻居节点如果是骨干节点Y,则进行步骤505,否则进行步504;
步骤504,节点丢弃该请求消息;
步骤505,如果骨干节点Y如果有多个IPv6地址块,则进行步骤506,否则进行步骤507;
步骤506,骨干节点Y随机选择其中一个地址块,将地址块信息发送给骨干节点X,进行步骤508;
步骤507,骨干节点Y将自身IPv6地址池一分为二,选取其中一个地址块,将该地址块信息回复给骨干节点X;
步骤508,骨干节点X等待回复消息,若Block_Timer未超时,进行步骤511,否则,进行步骤509;
步骤509,如当前剩余广播次数大于0,进行步骤502,否则,进行步骤510;
步骤510,骨干节点X停止广播,发送地址分配失败消息到加入节点(或通过加入节点的邻居普通节点发送到加入节点);
步骤511,地址迁移过程结束;
普通节点离开地址回收流程如下:
步骤601,普通节点N根据离开的紧迫程度设置一个最长回收时间定时器Depart_Timer,设为t 6_1 秒;
步骤602,普通节点N设置回收周期定时器Retrieve_Timer,设置为t 6_2 毫秒,发送一个离开请求到其领导节点L;
步骤603,领导节点L收到离开请求,将该请求中的源端IPv6地址回收,合入IPv6地址池中;
步骤604,领导节点L发送地址回收确认消息到普通节点N;
步骤605,普通节点N等待地址回收确认消息,如果Depart_Timer超时,进行步骤607,否则进行步骤606;
步骤606,如果普通节点N在Retrieve_Timer超时前收到领导节点L确认消息,进行步骤607,否则进行步骤602。
步骤607,地址回收过程结束;
骨干节点离开时的IPv6地址回收流程如下:
步骤701,骨干节点B根据离开的紧迫程度设置一个最长回收时间定时器Depart_Timer,设为t 7_1 秒,骨干节点B通过路由表查找距离自己最近的骨干节点,如果跳数相同,选择IPv6地址小的骨干节点,设该骨干节点为X;
步骤702,骨干节点B设置回收周期定时器Retrieve_Timer,设置为t 7_2 毫秒,骨干节点B向骨干节点X发送一个离开请求消息;
步骤703,骨干节点X收到骨干节点B的离开请求消息后发送一个回复消息到骨干节点B;
步骤704,骨干节点B收到回复消息后,将自己的IPv6地址池和IPv6地址分配表信息发送给骨干节点X;
步骤705,骨干节点X将骨干节点B的IPv6地址池并入自身IPv6地址池,骨干节点X将骨干节点B的IPv6地址分配表存储在本地,骨干节点X发送地址回收确认消息到骨干节点B,骨干节点X向以骨干节点B的IPv6地址分配表中的地址为目的地址的普通节点集{N1,N2…Nn}发送领导节点变更消息;
步骤706,收到领导节点变更消息的普通节点集合{N1,N2…Nn}将自身的领导节点变更为骨干节点X,并发送领导节点变更确认消息到骨干节点X;
步骤707,骨干节点X收到领导节点变更确认消息,将骨干节点B的IPv6地址分配表中相应表项更新到自身IPv6地址分配表中;
步骤708,骨干节点B等待来自骨干节点X的地址回收确认消息,如果Depart_Timer超时,进行步骤710,否则进行步骤709;
步骤709,如果骨干节点B在Retrieve_Timer超时前收到来自骨干节点X的地址回收确认消息,则进行步骤710,否则进行步骤702;
步骤710,地址回收过程结束;
在本发明所述步骤510中收到地址分配失败消息的加入节点发起IPv6地址按需全局回收过程。IPv6地址按需全局回收流程如下:
步骤801,节点X发送一个接入点范围内的地址全局回收广播消息;
步骤802,普通节点N收到地址全局回收广播后,发送一个声明消息到其领导节点L,启动定时器Normal_Ack_Timer,设置为t 8_1 秒;
步骤803,骨干节点B收到地址回收广播后,启动定时器Leader_Retrieve_Timer,设置为t 8_2 秒;
步骤804,骨干节点B接收普通节点集{N1,N2…Nn}发送来的声明消息,更新自身的IPv6地址分配表,骨干节点B将IPv6地址分配表中未被更新的地址并入可分配IPv6地址池;
步骤805,如果Leader_Retrieve_Timer未超时,进行步骤804,否则进行步骤806;
步骤806,骨干节点B向普通节点集{N1,N2…Nn}发送地址回收确认消息;
步骤807,普通节点N等待地址回收确认消息,如果Normal_Ack_Timer超时,则进行步骤808,否则进行步骤812;
步骤808,普通节点N通过查找路由表,寻找除领导节点外的最近的骨干节点,如果跳数相同,则选择IPv6地址小的并未被选择过的骨干节点,设该骨干节点为X,普通节点N启动定时器Leader_Query_Timer,向骨干节点X发送声明消息;
步骤809,骨干节点X收到来自普通节点N的声明消息后,将普通节点N的IPv6地址并入自身IPv6地址池,更新自身IPv6地址分配表,骨干节点X发送回复消息到普通节点N;
步骤810,普通节点N收到回复消息后,将骨干节点X设置为领导节点;
步骤811,普通节点N等待来自骨干节点X的回复消息,如果Leader_Query_Timer超时,则进行步骤808,否则进行步骤812;
步骤812,地址按需全局回收过程结束。
有益效果: 本发明提供了一种用于异构无线传感器网络的IPv6地址自动配置的实现方法。通过运用本方法,可以为传感网中每个节点分配一个全球唯一的IPv6地址,实现传感网与外部IPv6网络的点到点通信,尤其在传感数据共享和传感器网络控制与管理方面具有广阔应用前景。
与技术背景所提方法比较,本方法具有以下优点:
(1)用多领导结构取代单领导结构,使得地址分配体系更具鲁棒性;
(2)充分利用异构节点的天然性能差异,无需领导选举算法;
(3)充分利用异构节点不同的设备资源;
(4)地址按需回收,避免了周期性广播产生的大量开销。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明。
图1是本发明所述异构无线传感网IPv6地址自动配置拓扑结构示意图。
图2是本发明所述的节点临时地址结构示意图。
图3是本发明所述的骨干节点获得IPv6地址的流程示意图。
图4是本发明所述的普通节点获得IPv6地址的流程示意图。
图5是本发明所述的IPv6地址块迁移的流程示意图。
图6是本发明所述的普通节点离开时的IPv6地址回收流程示意图。
图7是本发明所述的骨干节点离开时的IPv6地址回收流程示意图。
图8是本发明所述的IPv6地址按需全局回收流程示意图。
具体实施方式
本发明提供了一种异构无线传感网IPv6地址自动配置方法,在所述方法中,异构无线传感器网络中的每个传感器节点可获取全球唯一的IPv6地址,节点通过IPv6地址实现彼此的通信以及与IPv6互联网的通信。
图1所示的是异构无线传感网IPv6地址自动配置拓扑结构示意图。本发明涉及的网络设备实体为四种:IPv6接入点1,骨干传感器节点2,普通传感器节点3,孤立传感器节点4。接入节点1是位置固定的特殊骨干节点,提供传感器网络与IPv6互联网的网关功能,负责通信协议转换,在本发明中同时还具有地址分配功能,初始时,网络中只存在IPv6接入点1,并具有全部IPv6地址;骨干节点2相对于普通节点3具有更高的链路能力、能源能力和计算能力,在本发明中具备地址分配能力;普通节点3是一类链路、能源和计算性能较低的节点,在本发明中仅作为地址分配代理,不负责地址分配;孤立节点4是未分配IPv6地址的节点。由于无线传感器网络内部通信通常是采用更加节约资源的16为短地址,因此本发明所述IPv6地址分配方法以传感器节点与IPv6互联网实现点到点通信为目的,对不能连接到接入点1的传感器节点不负责分配IPv6地址。当孤立节点4发起地址申请时能够连接到接入点1时,网络将为其分配IPv6地址,根据其设备类型,孤立节点4转变为骨干节点2或普通节点3。当骨干节点2或者普通节点3离开网络时,将转变为孤立节点4,直到该孤立节点4再次发起地址申请时能够连接到原接入点1或其它接入点。IPv6接入点1和骨干节点2均具有为其它节点分配IPv6地址的能力,称IPv6接入点1和骨干节点2为其它节点的领导节点。
当申请地址的节点为骨干节点2时,采用邻居代理+伙伴系统的方式获得IPv6地址。节点通过邻居代理方式获得IPv6地址池,因而骨干节点2之间可能是多跳的。当申请地址的节点为普通节点3时,采用邻居代理方式分配其IPv6地址,普通节点的地址由接入点1或者骨干节点中的地址池中选取。由骨干节点2(或接入点1)以及所有从该骨干节点2(或接入点1)分配地址的普通节点3构成一个分配组,每个分配组存在一个在该接入点内唯一的组ID。
为适应传感器网络,本发明提供了一系列节能措施:本发明利用节点异构的特性自动形成领导节点,无需领导选举协议支持;本发明涉及到的地址分配方法为邻居代理和伙伴系统的有状态地址分配技术,因而无需DAD检测;本发明所述的地址回收方法为按需回收方法,无需周期性地节点间洪泛,无需普通节点保存地址分配表。
图2所示为本发明所述的节点临时地址结构示意图。临时地址是在正式分配IPv6底之前用于地址申请的临时身份标识。由于临时地址需要保证在接入点范围内唯一,因此节点的临时地址由三个部分组成。第一部分为64比特的全局路由前缀,第二部分为48比特的硬件地址,第三部分为16比特的节点类型标识。临时地址的总长度为128比特。所有传感器节点的全局路由前缀均相同,为FEC0:0:0:FFFE::/64。普通节点的节点类型标识置为全0,骨干节点的节点类型标识置为全1。例如,某普通节点的硬件地址为ABCD:EFAB:CDEF,则该节点的临时地址为FEC0:0:0:FFFE: ABCD:EFAB:CDEF:0000。
图3所示为本发明所述的骨干节点获得IPv6地址的流程示意图,骨干节点获取IPv6地址的流程如下:
步骤301,骨干节点B设置广播剩余次数,本实施例中设置为5;
步骤302,骨干节点B使用临时地址在一跳范围内广播加入消息,设置定时器BJoin_Timer,本实施例中设为1秒;
步骤303,邻居节点X收到加入消息后,发送一个回复消息给骨干节点B,回复消息使用骨干节点B的临时地址作为目的地址,并包含节点类型信息(接入点的节点类型与骨干节点相同);
步骤304,骨干节点B等待来自邻居的回复消息若,BJoin_Timer到时,进行步骤305,否则进行步骤307;
步骤305,骨干节点B将广播次数减1;
步骤306,如广播次数小于等于0,进行步骤321,否则,进行步骤302;
步骤307,骨干节点B收到回复消息,暂存所有收到的回复包,直到BJoin_Timer超时;
步骤308,骨干节点B检查所有BJoin_Timer内收到的回复包中的节点类型信息,如果存在来自骨干节点的回复,则进行步骤309,否则进行步骤310;
步骤309,骨干节点B向邻居骨干节点X1发送确认消息。如果有两个以上的骨干节点回复,则选择第一个回复的骨干节点,进行步骤311;
步骤310,骨干节点B向邻居普通节点X2发送确认消息,如果有两个以上的普通节点回复,则选择第一个回复的普通节点,进行步骤315;
步骤311,骨干节点X1收到确认消息,X1检查自身的IPv6地址表,如果有多个IPv6地址块,则进行步骤312,否则进行步骤313;
步骤312,骨干节点X1随机选择其中一个地址块,将地址块信息和自己最新版本的IPv6地址表发送给骨干节点B,进行步骤314;
步骤313,骨干节点X1将自身IPv6地址池一分为二,选取其中一个子集,将地址块信息和自己最新版本的IPv6地址分配表发送给骨干节点B;
步骤314,骨干节点B收到地址块后,将该地址块的第一个IPv6地址作为自身IPv6地址,剩余的IPv6地址列表保存在本地。骨干节点B将收到的最新IPv6地址分配表保存在本地,发送确认消息给骨干节点X1,进行步骤321;
步骤315,普通节点X2收到骨干节点B的确认消息,将节点B的临时地址存储在本地;
步骤316,普通节点X2发送一个请求消息到普通节点X2的领导节点L;
步骤317,领导节点L检查自身的IPv6地址表,如果有多个IPv6地址块,则进行步骤318,否则进行步骤319;
步骤318,领导节点L随机选择其中一个地址块,将地址块信息和自己最新版本的IPv6地址表发送给普通节点X2,进行步骤320;
步骤319,领导节点L将自身IPv6地址池一分为二,选取其中一个子集,将地址块信息和自己最新版本的IPv6地址分配表发送给普通节点X2;
步骤320,普通节点X2收到领导节点L发来的IPv6地址块和最新版本的IPv6地址分配表发送给骨干节点B。骨干节点B收到地址块后,将该地址块的第一个IPv6地址作为自身IPv6地址,剩余的IPv6地址列表保存在本地。骨干节点B将收到的最新IPv6地址分配表保存在本地,发送确认消息给普通节点X2。
步骤321,地址分配过程结束。
图4所示为本发明所述的普通节点获得IPv6地址的流程示意图,普通节点获取IPv6地址的流程如下:
步骤401,普通节点N设置广播剩余次数,本实施例中设置为5;
步骤402,普通节点N使用临时地址广播加入消息,设置定时器NJoin_Timer,本实施例中设为1秒;
步骤403,邻居节点X收到加入消息后,发送一个回复消息给普通节点N,回复消息使用普通节点N的临时地址作为目的地址,并包含节点类型信息(接入点的节点类型与骨干节点相同);
步骤404,普通节点N等待来自邻居的回复消息,若NJoin_Timer超时,进行步骤405,否则进行步骤407;
步骤405,普通节点N将广播次数减1;
步骤406,若广播次数小于等于0,进行步骤417;否则,进行步骤402;
步骤407,普通节点N收到回复消息,暂存所有收到的回复包,直到NJoin_Timer超时;
步骤408,普通节点N检查所有NJoin_Timer内收到的回复包中的节点类型信息,如果存在来自骨干节点的回复,则进行步骤409,否则进行步骤412;
步骤409,普通节点N向邻居骨干节点X1发送确认消息。如果有两个以上的骨干节点回复,则选择第一个回复的骨干节点;
步骤410,骨干节点X1收到来自普通节点N的确认消息,骨干节点X1选择一个目前没有被使用的IPv6地址发送给普通节点N,骨干节点X1更新自身IPv6地址分配表;
步骤411,普通节点N收到骨干节点X1为其分配的IPv6地址,将该地址作为自身IPv6地址,标记骨干节点X1为其领导节点,并向骨干节点发送确认消息,进行步骤417;
步骤412,普通节点N向邻居普通节点X2发送确认消息,如果有两个以上的普通节点回复,则选择第一个回复的普通节点;
步骤413,普通节点X2收到来自普通节点N的确认消息,将节点N的临时地址存储在本地,普通节点X2发送一个请求消息到普通节点X2的领导节点L;
步骤414,领导节点L选择一个目前没有被使用的IPv6地址发送给普通节点X2,领导节点L更新自身IPv6地址分配表;
步骤415,普通节点X2收到来自领导节点L的IPv6地址,将该地址发送给普通节点N;
步骤416,普通节点N收到领导节点L为其分配的IPv6地址,将该地址作为自身IPv6地址,标记领导节点L为其领导节点,并向普通节点X2发送确认消息,进行步骤417;
步骤417,地址分配过程结束。
本发明所述上述步骤313骨干节点X1,步骤319领导节点L,步骤410骨干节点X1,步骤414领导节点L,在没有有效地址可供分配时,需要执行IPv6地址块迁移过程,图5所示为本发明所述的IPv6地址块迁移的流程示意图,图5中将本发明所述骨干节点X1或领导节点L统一表示为骨干节点X。IPv6地址块迁移的流程如下:
步骤501,骨干节点X设置地址块请求广播当前剩余次数n,本实施例中初始时设为5次;
步骤502,骨干节点X广播地址块请求消息到其邻居节点,广播跳数为(6-n)跳,广播当前剩余次数减1,启动定时器Block_Timer,本实施例中定时时间设为(6-n)*200毫秒;
步骤503,收到地址块请求消息的邻居节点如果是骨干节点Y,则进行步骤505,否则进行步504;
步骤504,节点丢弃该请求消息;
步骤505,如果骨干节点Y如果有多个IPv6地址块,则进行步骤506,否则进行步骤507;
步骤506,骨干节点Y随机选择其中一个地址块,将地址块信息发送给骨干节点X,进行步骤508;
步骤507,骨干节点Y将自身IPv6地址池一分为二,选取其中一个地址块,将该地址块信息回复给骨干节点X;
步骤508,骨干节点X等待回复消息,若Block_Timer未超时,进行步骤511,否则,进行步骤509;
步骤509,如当前剩余广播次数大于0,进行步骤502,否则,进行步骤510;
步骤510,骨干节点X停止广播,发送地址分配失败消息到加入节点(或通过加入节点的邻居普通节点发送到加入节点);
步骤511,地址迁移过程结束;
图6所示是本发明所述的普通节点离开时的IPv6地址回收流程示意图,普通节点离开地址回收流程如下:
步骤601,普通节点N根据离开的紧迫程度设置一个最长回收时间定时器Depart_Timer,本实施例中设为1秒;
步骤602,普通节点N设置回收周期定时器Retrieve_Timer,本实施例中设置为200毫秒,发送一个离开请求到其领导节点L;
步骤603,领导节点L收到离开请求,将该请求中的源端IPv6地址回收,合入IPv6地址池中;
步骤604,领导节点L发送地址回收确认消息到普通节点N;
步骤605,普通节点N等待地址回收确认消息,如果Depart_Timer超时,进行步骤607,否则进行步骤606;
步骤606,如果普通节点N在Retrieve_Timer超时前收到领导节点L确认消息,进行步骤607,否则进行步骤602。
步骤607,地址回收过程结束;
图7所示是本发明所述的骨干节点离开时的IPv6地址回收流程示意图,骨干节点离开时的IPv6地址回收流程如下:
步骤701,骨干节点B根据离开的紧迫程度设置一个最长回收时间定时器Depart_Timer,本实施例中设为1秒,骨干节点B通过路由表查找距离自己最近的骨干节点,如果跳数相同,选择IPv6地址小的骨干节点,设该骨干节点为X;
步骤702,骨干节点B设置回收周期定时器Retrieve_Timer,本实施例中设置为200毫秒,骨干节点B向骨干节点X发送一个离开请求消息;
步骤703,骨干节点X收到骨干节点B的离开请求消息后发送一个回复消息到骨干节点B;
步骤704,骨干节点B收到回复消息后,将自己的IPv6地址池和IPv6地址分配表信息发送给骨干节点X;
步骤705,骨干节点X将骨干节点B的IPv6地址池并入自身IPv6地址池,骨干节点X将骨干节点B的IPv6地址分配表存储在本地,骨干节点X发送地址回收确认消息到骨干节点B,骨干节点X向以骨干节点B的IPv6地址分配表中的地址为目的地址的普通节点集{N1,N2…Nn}发送领导节点变更消息;
步骤706,收到领导节点变更消息的普通节点集合{N1,N2…Nn}将自身的领导节点变更为骨干节点X,并发送领导节点变更确认消息到骨干节点X;
步骤707,骨干节点X收到领导节点变更确认消息,将骨干节点B的IPv6地址分配表中相应表项更新到自身IPv6地址分配表中;
步骤708,骨干节点B等待来自骨干节点X的地址回收确认消息,如果Depart_Timer超时,进行步骤710,否则进行步骤709;
步骤709,如果骨干节点B在Retrieve_Timer超时前收到来自骨干节点X的地址回收确认消息,则进行步骤710,否则进行步骤702;
步骤710,地址回收过程结束;
在本发明所述步骤508中收到地址分配失败消息的加入节点发起IPv6地址按需全局回收过程。图8所示是本发明所述的IPv6地址按需全局回收流程示意图,IPv6地址按需全局回收流程如下:
步骤801,节点X发送一个接入点范围内的地址全局回收广播消息;
步骤802,普通节点N收到地址全局回收广播后,发送一个声明消息到其领导节点L,启动定时器Normal_Ack_Timer,本实施例中设置为1秒;
步骤803,骨干节点B收到地址回收广播后,启动定时器Leader_Retrieve_Timer,本实施例中设置为2秒;
步骤804,骨干节点B接收普通节点集{N1,N2…Nn}发送来的声明消息,更新自身的IPv6地址分配表,骨干节点B将IPv6地址分配表中未被更新的地址并入可分配IPv6地址池;
步骤805,如果Leader_Retrieve_Timer未超时,进行步骤804,否则进行步骤806;
步骤806,骨干节点B向普通节点集{N1,N2…Nn}发送地址回收确认消息;
步骤807,普通节点N等待地址回收确认消息,如果Normal_Ack_Timer超时,则进行步骤808,否则进行步骤812;
步骤808,普通节点N通过查找路由表,寻找除领导节点外的最近的骨干节点,如果跳数相同,则选择IPv6地址小的并未被选择过的骨干节点,设该骨干节点为X,普通节点N启动定时器Leader_Query_Timer,向骨干节点X发送声明消息;
步骤809,骨干节点X收到来自普通节点N的声明消息后,将普通节点N的IPv6地址并入自身IPv6地址池,更新自身IPv6地址分配表,骨干节点X发送回复消息到普通节点N;
步骤810,普通节点N收到回复消息后,将骨干节点X设置为领导节点;
步骤811,普通节点N等待来自骨干节点X的回复消息,如果Leader_Query_Timer超时,则进行步骤808,否则进行步骤812;
步骤812,地址按需全局回收过程结束。