基于多令牌的大规模无线传感网地址自动配置方法
技术领域
本发明属于计算机网络领域,涉及一种多跳无线网络的IPv6地址配置方法,尤其是一种适用于大规模无线传感网IPv6地址自动配置方法。
背景技术
无线传感器网络(Wireless Sensor Networks,WSN)可用于获取并传输自然界或人工信息到人类世界,对采集到的数据进行必要加工处理,并通过决策机制和管理机制进一步控制物理实体行为。目前无线传感器网络广泛应用于医疗、交通、电网、旅游、环保、农业、物流、家居等行业。随着传感器网络应用的不断普及,越来越多的组织、团体和个人需要获得传感器网络的服务,如传感节点资源共享、传感数据共享、事件查询、传感器网络管理、物理实体控制等。传感器网络提供透明开放服务是大势所趋。因此,实现无线传感器网络与IPv6网络的互联互通是必然趋势。IPv6地址的自动分配问题是面临的首要问题。
传统的互联网设备IP地址分配是基于动态主机配置协议(Dynamic HostConfiguration Protocol,DHCP)的集中式地址分配机制,需要固定的地址分配主机的支持,并且会带来大量的控制报文开销。无线传感器网络是典型的资源敏感型网络,包括能量、计算、通信和缓存等能力受限,传统地址分配方法明显不适用于无线传感器网络。目前,已有一些针对移动自组网的分布式地址自动分配方案。SOAMAN(Self-Organizing Node Address Management in Ad-hoc Networks)是一种基于分簇的地址管理协议,能有效降低协议开销和分配时延,但单领导节点使得整个地址配置结构不够健壮。伙伴系统是一种基于状态维护的地址自动分配机制,其优势是不需要进行DAD(Duplicate Address Detection)检测,但需要在所有节点间周期性地广播IP地址池以防止地址泄漏。另一些地址配置方法需要通过在全网内进行DAD检测,能耗较高。
目前在无线传感器网络研究领域并没有相对成熟的地址分配方案,尤其在大规模无线传感器网络中的地址分配仍有待进一步研究。因此,有必要针对大规模无线传感器网络设计一种能量有效的IPv6地址自动分配方法。
发明内容
发明目的:本发明所要解决的技术问题是针对现有技术的不足,提供一种基于多令牌的大规模无线传感器网络IPv6地址自动配置的实现方法。
技术方案:本发明公开了一种适用于大规模无线传感器网络的IPv6地址自动配置方法。在所述方法中,无线传感器网络中的每个传感器节点可获取全球唯一的IPv6地址,节点通过IPv6地址实现彼此的通信以及与IPv6互联网的通信。
本发明涉及的节点为三种:IPv6接入点,令牌传感器节点,普通传感器节点。接入节点是位置固定的特殊令牌节点,提供网关功能,在本发明中同时还具有令牌分发和为普通节点分配地址的功能,初始时,网络中只存在IPv6接入点,并具有全部IPv6地址。IPv6接入点和所有通过该接入点接入IPv6互联网的传感器节点集合构成接入点区;令牌节点是拥有令牌的节点,获得令牌的节点可以为其它普通节点分配地址,如果某个拥有2个或以上的令牌的节点收到其它节点的地址分配请求,则通过二分法将一半的令牌分给该节点;网络中所有不拥有令牌的节点均是普通节点,普通节点不负责为其它节点分配地址,但可以成为其它节点申请地址的代理节点。
由于无线传感器网络内部通信通常是采用更加节约资源的16位短地址,因此本发明所述IPv6地址分配方法以传感器节点与IPv6互联网实现点到点通信为目的,对不能连接到接入点的传感器节点不负责分配IPv6地址。
某令牌节点和由该令牌节点分配地址的所有普通节点构成一个令牌组,令牌组内的普通节点称为该临牌组的成员节点。每个令牌组对应一个接入点区内唯一的令牌组ID,令牌组ID由接入点分配。每个组成员都对应一个组内唯一的组内ID,组内ID由该令牌组中的令牌节点分配。每个组成员均保存所在组的令牌节点地址。
节点在发送加入申请前,先构造一个临时地址,临时地址是在正式分配IPv6地址前用于地址申请的临时身份标识。由于临时地址需要保证在接入点范围内唯一,因此本发明将所述节点的临时地址分为三个部分。第一部分为64比特的全局路由前缀,第二部分为48比特的硬件地址,第三部分为16比特的随机数。临时地址的总长度为128比特。所有传感器节点的全局路由前缀均相同,为FEC0:0:0:FFFE::/64。例如,某普通节点的硬件地址为ABCD:EFAB:CDEF,随机数为ABCD,则该节点的临时地址为FEC0:0:0:FFFE:ABCD:EFAB:CDEF:ABCD。
本发明将所述节点的IPv6地址分为三个部分。第一部分为64比特的全局路由前缀,所有传感器节点的全局路由前缀均相同,为FEC0:0:0:FFFE::/64;第二部分为n比特的令牌组ID,第三部分为(64-n)比特的组内ID。令牌组内令牌节点的组内ID为全0。如令牌组ID为ABCD共16比特,则该组内令牌节点的IPv6地址为FEC0:0:0:FFFE:ABCD:0:0:0。
一开始接入点拥有全部IPv6地址空间,并根据网络规模确定令牌数量L,将地址空间分为L个部分,为每个部分分配一个接入点区唯一的令牌组ID,等待节点地址申请消息的到来。
本发明所述基于多令牌的大规模无线传感器网络IPv6地址自动分配方法提供地址分配、节点离开和地址块迁移功能。这些功能由节点IPv6地址获取、令牌节点离开、普通节点离开地址回收、IPv6地址块迁移等四个子方法构成。
节点获取IPv6地址的流程如下:
步骤401,节点N使用临时地址在一跳范围内广播加入消息;
步骤402,邻居节点X收到加入消息后,发送一个回复消息给节点N,该回复消息包含节点X的类型(令牌节点、普通节点);
步骤403,节点N等待一段时间后,检查所有收到的回复消息中的节点类型,若存在来自令牌节点的回复,则进行步骤404,否则进行步骤410;
步骤404,若有多个来自令牌节点的回复,则选择令牌数量多的令牌节点,若令牌数量相同,则选择第一个回复的令牌节点,节点N向最后选定的令牌节点T发送一个确认消息;
步骤405,令牌节点T收到来自节点N的确认消息,并检查自身的令牌数量L,若L大于等于2,进行步骤406,否则进行步骤408;
步骤406,令牌节点T将
个令牌,以及未使用过的一组IPv6地址块发送给节点N;
步骤407,节点N收到地址块后,将该地址块的第一个IPv6地址(组内ID为全0的IPv6地址)作为自身IPv6地址,剩余的IPv6地址列表保存在本地。发送确认消息给令牌节点T,进行步骤415;
步骤408,令牌节点T在自身使用的IPv6地址池中选择一个未被使用的地址,将该地址和更新版本号后的IPv6地址池发送给节点N;
步骤409,节点N收到IPv6地址和地址池后,将该地址作为自身IPv6地址,将地址池存储在本地,并记录节点T为其令牌节点,发送确认消息给令牌节点T,进行步骤415;
步骤410,若有多个来自普通节点的回复,则选择第一个发送回复的普通节点U,节点N向普通节点U发送一个确认消息;
步骤411,普通节点U发送一个请求消息到自身所记录的令牌节点V;
步骤412,令牌节点V检查自身的IPv6地址表,选择一个自身使用的IPv6地址池中未被使用过的IPv6地址,将该IPv6地址和更新版本号后的IPv6地址分配表发送给普通节点U;
步骤413,普通节点U将收到的令牌节点V发来的IPv6地址和最新版本的IPv6地址分配表发送给节点N,并更新自身的IPv6地址分配表版本号;
步骤414,节点N收到IPv6地址和地址池后,将该地址作为自身IPv6地址,将地址池存储在本地,并记录节点V为其令牌节点,发送确认消息给普通节点U;
步骤415,地址分配过程结束。
本发明所述上述步骤408令牌节点T,步骤412令牌节点V,在没有有效地址可供分配时,需要执行IPv6地址块迁移过程,为方便起见,本发明将上述令牌节点T,令牌节点V统一表示为令牌节点X。IPv6地址块迁移的流程如下:
步骤501,令牌节点X广播地址块请求消息,广播跳数为t跳;
步骤502,若收到地址块请求消息的节点为令牌节点,且存在2个或2个以上令牌组地址块,则进行步骤503,否则进行步骤504;
步骤503,令牌节点Y随机选择其中一个地址块,将地址块信息发送给令牌节点X;
步骤504,若令牌节点X在规定时间内收到地址块,进行步骤507,否则,进行步骤505;
步骤505,若令牌节点X的广播次数到达最大值n,则进行步骤508,否则进行步骤506;
步骤506,令牌节点X将广播跳数t加1,进行步骤501;
步骤507,令牌节点X发送确认消息到令牌节点Y;
步骤508,地址迁移过程结束。
普通节点离开地址回收流程如下:
步骤601,普通节点N根据离开的紧迫程度设置一个最长回收时间定时器t;
步骤602,普通节点N发送一个离开请求到自身的令牌节点T;
步骤603,令牌节点T收到离开请求,将该请求中的源端IPv6地址回收,并发送地址回收确认消息到普通节点N;
步骤604,如果t小于等于零,则进行步骤606,否则进行步骤605;
步骤605,如果普通节点N收到确认消息,进行步骤606,否则进行步骤602;
步骤606,地址回收过程结束。
令牌节点离开流程如下:
步骤701,令牌节点T根据离开的紧迫程度设置一个最长回收时间定时器t;
步骤702,令牌节点T广播一个n跳的离开请求消息;
步骤703,令牌组内节点N收到该离开请求,发送一个确认消息到令牌节点T;
步骤704,令牌节点T将自己的令牌组IPv6地址池和已分配地址表发送给第一个发送确认消息的节点N;
步骤705,节点N将收到的令牌组IPv6地址池和已分配地址表保存在本地,并将自身地址设为未分配;
步骤706,节点N在令牌组内广播一个令牌声明消息;
步骤707,令牌组成员节点收到令牌声明消息后,更新到达节点N的路由表项,并将到达节点T的路由表项删除,向节点N发送确认消息;
步骤708,若节点N收到所有来自未分配地址表中节点的确认消息,则进行步骤709,否则进行步骤706;
步骤709,节点N向节点T发送离开确认消息,并将自身IPv6地址改变为令牌节点T的地址;
步骤710,如果t小于等于零,则进行步骤713,否则进行步骤711;
步骤711,如果节点T收到离开确认消息,进行步骤713,否则进行步骤712;
步骤712,节点T将广播跳数n加1,进行步骤702;
步骤713,令牌节点离开过程结束。
有益效果:本发明提供了一种基于多令牌的用于大规模无线传感器网络的IPv6地址自动配置的实现方法。通过运用本方法,可以为传感网中每个节点分配一个全球唯一的IPv6地址,实现传感网与外部IPv6网络的点到点通信,可广泛应用于医疗、交通、电网、旅游、环保、农业、物流、家居等大规模无线传感器网络部署中,尤其在传感数据共享和传感器网络控制与管理方面具有广阔应用前景。
与技术背景中所提方法比较,本方法采用多个令牌节点共同负责地址分配,使得地址分配体系更具鲁棒性,同时也分散了令牌节点的通信负载,因而适用于大规模无线传感器网络。
附图说明
下面结合附图和具体实施方式对本发明做更进一步的具体说明。
图1是本发明所述的无线传感网IPv6地址自动配置拓扑结构示意图。
图2是本发明所述的节点临时地址结构示意图。
图3是本发明所述的IPv6地址结构示意图。
图4是本发明所述的节点获得IPv6地址流程示意图。
图5是本发明所述的IPv6地址块迁移流程示意图。
图6是本发明所述的普通节点离开时IPv6地址回收流程示意图。
图7是本发明所述的令牌节点离开流程示意图。
具体实施方式
本发明提供了一种大规模无线传感网IPv6地址自动配置方法,在所述方法中,无线传感器网络中的每个传感器节点可获取全球唯一的IPv6地址,节点通过IPv6地址实现彼此的通信以及与IPv6互联网的通信。
图1所示的是大规模无线传感网IPv6地址自动配置拓扑结构示意图。本发明涉及的节点为三种:IPv6接入点1,令牌传感器节点2,普通传感器节点3。接入节点1是位置固定的特殊令牌节点,提供传感器网络与IPv6互联网的网关功能,负责通信协议转换,在本发明中同时还具有为令牌节点2分发令牌和为普通节点3分配地址的功能,初始时,网络中只存在IPv6接入点2,并具有全部IPv6地址。IPv6接入点和所有通过该接入点接入IPv6互联网的传感器节点集合构成接入点区;令牌节点2是拥有令牌的节点,获得令牌的节点可以为其它普通节点3分配地址,如果某个拥有2个或以上的令牌的节点收到其它节点的地址分配请求,则通过二分法将一半的令牌分给该节点;网络中所有不拥有令牌的节点均是普通节点3,普通节点3不负责为其它节点分配地址,但可以成为其它节点申请地址的代理节点。令牌节点2和普通节点3是位置固定的,用于收集数据。
由于无线传感器网络内部通信通常是采用16位短地址,因此本发明所述IPv6地址分配方法以传感器节点与IPv6互联网实现点到点通信为目的,对不能连接到接入点的传感器节点不负责分配IPv6地址。
某令牌节点2和由该令牌节点分配地址的所有普通节点3构成一个令牌组,令牌组内的普通节点3称为该临牌组的成员节点。每个令牌组对应一个接入点区内唯一的令牌组ID,令牌组ID由接入点1分配。每个组成员都对应一个组内唯一的组内ID,组内ID由该令牌组中的令牌节点2分配。每个组成员均保存所在组的令牌节点2的地址。
一开始接入点1拥有全部IPv6地址空间,并根据网络规模确定令牌数量L,将地址空间分为L个部分,为每个部分分配一个接入点区唯一的令牌组ID,等待节点地址申请消息的到来。
本发明所述基于多令牌的大规模无线传感器网络IPv6地址自动分配方法提供地址分配、节点离开和地址块迁移功能。这些功能由节点IPv6地址获取、令牌节点离开、普通节点离开地址回收、IPv6地址块迁移等四个子方法构成。
图2所示为本发明所述的节点临时地址结构示意图。节点在发送加入申请前,先构造一个临时地址,临时地址是在正式分配IPv6地址前用于地址申请的临时身份标识。由于临时地址需要保证在接入点范围内唯一,因此本发明将所述节点的临时地址分为三个部分。第一部分为64比特的全局路由前缀,第二部分为48比特的硬件地址,第三部分为16比特的随机数。临时地址的总长度为128比特。所有传感器节点的全局路由前缀均相同,为FEC0:0:0:FFFE::/64。例如,某普通节点的硬件地址为ABCD:EFAB:CDEF,随机数为ABCD,则该节点的临时地址为FEC0:0:0:FFFE:ABCD:EFAB:CDEF:ABCD。
图3为本发明所述的节点IPv6地址结构示意图。所述节点的IPv6地址分为三个部分。第一部分为64比特的全局路由前缀,所有传感器节点的全局路由前缀均相同,为FEC0:0:0:FFFE::/64;第二部分为n比特的令牌组ID,第三部分为(64-n)比特的组内ID。令牌组内令牌节点的组内ID为全0。如令牌组ID为ABCD共16比特,则该组内令牌节点的IPv6地址为FEC0:0:0:FFFE:ABCD:0:0:0。
图4为节点获得IPv6地址流程示意图,节点获取IPv6地址的流程如下:
步骤401,节点N使用临时地址在一跳范围内广播加入消息;
步骤402,邻居节点X收到加入消息后,发送一个回复消息给节点N,该回复消息包含节点X的类型(令牌节点和普通节点);
步骤403,节点N等待一段时间后,检查所有收到的回复消息中的节点类型,若存在来自令牌节点的回复,则进行步骤404,否则进行步骤410;
步骤404,若有多个来自令牌节点的回复,则选择令牌数量多的令牌节点,若令牌数量相同,则选择第一个回复的令牌节点,节点N向最后选择的令牌节点T发送一个确认消息;
步骤405,令牌节点T收到来自节点N的确认消息,并检查自身的令牌数量L,若L大于等于2,进行步骤406,否则进行步骤408;
步骤406,令牌节点T将
个令牌,以及未使用过的一组IPv6地址块发送给节点N;
步骤407,节点N收到地址块后,将该地址块的第一个IPv6地址(组内ID为全0的IPv6地址)作为自身IPv6地址,剩余的IPv6地址列表保存在本地。发送确认消息给令牌节点T,进行步骤415;
步骤408,令牌节点T在自身使用的IPv6地址池中选择一个未被使用的地址,将该地址和更新版本号后的IPv6地址池发送给节点N;
步骤409,节点N收到IPv6地址和地址池后,将该地址作为自身IPv6地址,将地址池存储在本地,并记录节点T为其令牌节点,发送确认消息给令牌节点T,进行步骤415;
步骤410,若有多个来自普通节点的回复,则选择第一个发送回复的普通节点U,节点N向普通节点U发送一个确认消息;
步骤411,普通节点U发送一个请求消息到自身所记录的令牌节点V;
步骤412,令牌节点V检查自身的IPv6地址表,选择一个自身使用的IPv6地址池中未被使用过的IPv6地址,将该IPv6地址和更新版本号后的IPv6地址分配表发送给普通节点U;
步骤413,普通节点U将收到的令牌节点V发来的IPv6地址和最新版本的IPv6地址分配表发送给节点N,并更新自身的IPv6地址分配表版本号;
步骤414,节点N收到IPv6地址和地址池后,将该地址作为自身IPv6地址,将地址池存储在本地,并记录节点V为其令牌节点,发送确认消息给普通节点U;
步骤415,地址分配过程结束。
本发明所述上述步骤408令牌节点T,步骤412令牌节点V,在没有有效地址可供分配时,需要执行IPv6地址块迁移过程,为方便起见,本发明将上述令牌节点T,令牌节点V统一表示为令牌节点X。图5为IPv6地址块迁移流程示意图,IPv6地址块迁移的流程如下:
步骤501,令牌节点X广播地址块请求消息,广播跳数为t跳(本实施例中t初始化为1,以后由步骤506确定);
步骤502,若收到地址块请求消息的节点为令牌节点,且存在2个或2个以上令牌组地址块,则进行步骤503,否则进行步骤504;
步骤503,令牌节点Y随机选择其中一个地址块,将地址块信息发送给令牌节点X;
步骤504,若令牌节点X在规定时间内收到地址块,进行步骤507,否则,进行步骤505;
步骤505,若令牌节点X的广播次数到达最大值n(本实施例中设置为5),则进行步骤508,否则进行步骤506;
步骤506,令牌节点X将广播跳数t加1,进行步骤501;
步骤507,令牌节点X发送确认消息到令牌节点Y;
步骤508,地址迁移过程结束。
图6为普通节点离开地址回收流程示意图,普通节点离开地址回收流程如下:
步骤601,普通节点N根据离开的紧迫程度设置一个最长回收时间定时器t,本实施例中设为1秒;
步骤602,普通节点N发送一个离开请求到自身的令牌节点T;
步骤603,令牌节点T收到离开请求,将该请求中的源端IPv6地址回收,并发送地址回收确认消息到普通节点N;
步骤604,如果t小于等于零,则进行步骤606,否则进行步骤605;
步骤605,如果普通节点N收到确认消息,进行步骤606,否则进行步骤602;
步骤606,地址回收过程结束。
图7为令牌节点离开流程示意图,令牌节点离开流程如下:
步骤701,令牌节点T根据离开的紧迫程度设置一个最长回收时间定时器t,本实施例中设为1秒;
步骤702,令牌节点T广播一个n跳的离开请求消息(n初始化为1,以后由步骤712确定);
步骤703,令牌组内节点N收到该离开请求,发送一个确认消息到令牌节点T;
步骤704,令牌节点T将自己的令牌组IPv6地址池和已分配地址表发送给第一个发送确认消息的节点N;
步骤705,节点N将收到的令牌组IPv6地址池和已分配地址表保存在本地,并将自身地址设为未分配;
步骤706,节点N在令牌组内广播一个令牌声明消息;
步骤707,令牌组成员节点收到令牌声明消息后,更新到达节点N的路由表项,并将到达节点T的路由表项删除,向节点N发送确认消息;
步骤708,若节点N收到所有来自未分配地址表中节点的确认消息,则进行步骤709,否则进行步骤706;
步骤709,节点N向节点T发送离开确认消息,并将自身IPv6地址改变为令牌节点T的地址;
步骤710,如果t小于等于零,则进行步骤713,否则进行步骤711;
步骤711,如果节点T收到离开确认消息,进行步骤713,否则进行步骤712;
步骤712,节点T将广播跳数n加1,进行步骤702;
步骤713,令牌节点离开过程结束。