一种支持IPv6无线传感器网络的混合式路由
技术领域
本发明涉及一种IPv6无线传感器网络的混合式路由,具体来说,是一种支持大规模异构组网、适用于低功耗、有损环境的IPv6无线传感器网的混合式路由,属于计算机网络技术领域。
背景技术
目前,随着IPv6无线传感器网络技术的不断发展和应用领域的逐渐扩大化,实际的网络部署规模和节点的数量级也发生着巨大的改变,呈现出大规模、异构、有损等网络特性。这些特点均为IPv6无线传感器网络的路由协议设计带来了严峻挑战。
现有的IPv6无线传感器网络中主要有两种路由转发方式,一种是mesh-under路由,另外一种是route-over路由。
所述mesh-under路由是指,路由转发过程发生在数据链路层之上的适配层的路由方式,如图1所示,数据包的路由和转发过程都是基于链路层地址。mesh-under为IP协议提供一个虚拟的广播链接,网络层可以假设所有一个子网内的节点都可以直接到达,IP层的数据在网络中传播的过程中不需要改变,因此分片的数据不需要在每一跳都要完成重组,同时mesh-under支持分片数据的多路径传输,只需在目的节点完成整个数据包的重组,这样可以大大简化数据包在网络中的传输过程。
然而,数据包在mesh转发的过程中链路层的源地址和目的地址随着数据包的转发而改变,只能记录两个节点一跳通信范围的源、目的地址,因此,mesh路由必须使用适配层中的mesh头,实现数据包的多跳转发。同时,mesh-under路由使得网络的配置管理和网络故障诊断变得更加困难,现有的一些网络诊断工具(例如trace route、基于SNMP的网络诊断工具)并不能应用在mesh-under网络中,IP层视mesh-under网络中的所有节点均为一跳。考虑mesh-under的以上特性,在IEEE802.15.4网络中可以采用mesh-under路由体系。
所述route-over路由是指,路由的选路及决策在网络层中完成的路由,如图2所示。中间节点对接收到得数据包会进行IPv6报头处理,因此可以充分利用IPv6优势保证数据包的安全性和服务质量,并且路由过程中使用IPv6地址,因为上文中提到的IPv6编址方式具有很好的逻辑性,因此路由协议的可扩展性很好,并且可以引入现有互联网中路由表项的存放和查询机制,当网络规模很大的情况下,节省路由表的存储空间和查询时间,同时,route-over路由使现有的网络诊断工具在低功耗有损网络中应用成为可能,提高网络的可靠性和可管性。
考虑到低功耗有损网络设备的硬件和网络环境特性,设计的route-over路由协议必须要考虑底层协议对上层数据包长度的支持,路由协议所需的处理资源以及存储资源因素,尽可能设计一种高效、快速、低成本route-over路由协议。然而,相比mesh-under路由协议,route-over路由协议对节点的资源要求更高,处理过程更复杂一些。
考虑到IPv6无线传感器网络的子网内部和外部的通信需求差异和传感器节点设备的功能特点,在大规模组网条件下,若单一的采用以低功耗为主的mesh-under路由转发或以服务为主的route-over路由转发,路由协议的可扩展性必然受到影响。
因此,在大规模、异构的IPv6无线传感器网络条件下,能够同时满足低功耗有损需求的路由方法,成为IPv6无线传感器网络路由需要解决的关键问题。
发明内容
本发明的目的在于提供一种IPv6无线传感器网络的混合式路由,其能够在大规模异构组网条件下满足低功耗有损网络路由需求。
为此,本发明提供了一种支持IPv6无线传感器网络的混合式路由,其特征在于,混合式路由协议工作在链路层或网络层,网络中的节点是异构的,相同性质的节点归入同一个社区,形成一个子网;不同性质的节点属于不同的社区,从而网络被划分为不同的子网;节点依据各自所要求的信息相似度值选择不同的子网加入,每一个子网由微型传感路由器和微型传感器节点共同组成,微型传感路由器为子网的中心节点,微型传感器节点为子网成员节点,每一个中心节点都拥有一个从sink节点处获得的独立地址分配池,负责该子网成员节点的IPv6地址配置,在一个子网内部,节点mac层采用802.15.4协议,路由模式利用mesh-under的方式,报文直接封装在适配层之后;在子网外部,微型传感路由器之间,在mac层采用802.11协议,路由模式采用route-over的路由方式,报文直接封装在IPv6报头之后,并使用专门的IPv6地址编址规则进行路由。
优选地,对报文格式中的IPv6地址进行有效压缩,压缩格式是:
全局路由前缀:在整个IPv6无线传感器网络范围内唯一,由网关设备分配,子网内、子网间路由的报文格式中均可以压缩;
子网ID:在每个IPv6微型传感路由器所管辖的子网内均相同,当微型传感路由器加入网络后由网关设备指定,子网内建立多跳路由时可将该字段压缩;
节点ID:由64位接口ID通过哈希映射得到,在每个子网内唯一,在微型传感路由器之间建立子网间多跳路由。
优选地,在进行IPv6报头封装之前,RREQ和RREP路由报文通过对比源地址与目的地址的子网ID号,而RERR报文和入口表通过判断产生该报文的设备类型,各自识别路由报文的路由方式是子网内mesh-under或子网间route-over,若子网ID号相同或生成报文的设备类型为IPv6微型传感器节点,判断该报文用于子网间路由;反之,若子网ID号相同或生成报文的设备类型为IPv6微型传感路由器,判断该报文用于子网间路由,子网间路由报文情况下,IPv6地址的全球路由前缀字段和子网ID字段均压缩掉,只需携带8比特的节点ID号;反之,对于子网间路由,IPv6地址的全球路由前缀和节点ID压缩掉,128位IPv6地址直接用子网ID来取代。
优选地,进一步包括路由表项中IPv6地址的压缩以及路由表项的汇聚;路由表项中IPv6地址的压缩存储同路由报文的地址压缩方案,使用节点ID取代IPv6微型传感器节点上路由表中的IPv6地址,使用子网ID取代IPv6微型路由器上路由表中的IPv6地址;仅对IPv6微型传感路由器的路由表项中的子网ID进行地址聚合。
优选地,混合式路由协议采用按需驱动方式,仅当节点有数据需要发送时,建立路由。
优选地,混合式路由协议根据ACK数据帧来判断邻居节点可靠性,如果向邻居节点发送数据在一定的时间内并没有收到邻居节点确认的ACK帧,重传该数据后若仍然没有收到该邻居节点确认的ACK帧,表明该邻居节点已经失效,则缓存当前的数据,重新进行路由请求;同时,查找路由表以该邻居节点为下一跳的路由表项,取出前驱节点地址,封装RERR报文,向这些前驱节点单播RERR报文,然后删除路由表中以该邻居节点为下一跳和最终地址的路由表项;前驱节点接收到RERR报文,同样在路由表中处理该不可达地址,同时继续查找前驱节点发送RERR报文,直到这条路由中所有的前驱节点都被通知该节点地址已经失效。
优选地,实施步骤包括:
1)子网成员节点发送RREQ;
2)子网中间节点接收到RREQ;
3)子网中心节点接收RREQ和发送RREP;
4)目的地址子网中心节点接收RREQ和发送RREP;
5)目的节点接收RREQ和发送RREP;
6)子网中心节点接收RREP。
优选地,在第1)步骤,当一个成员节点发送数据或者转发到其它目的节点的数据时,首先查找本地路由表,如果发现到目的地址的路由不存在,则缓存当前数据包进行路由建立过程,并在所属子网内部广播路由请求报文;
优选地,在第2)步骤,中间节点接收RREQ报文后,首先判断RREQ报文目的地址是否是自己,如果不是,那么查询是否已经接收到该RREQ源地址发送的相同ID号的RREQ报文,该节点抛弃该RREQ报文;如果没有存在该入口项,则进行查询路由表中到RREQ源地址的路由,如果已经存在该路由,那么比较这两条路由,选择最好的路由进行存储,同时修改RREQ报文信息,如果不存在该路由,则建立一条到RREQ源地址的逆向路由;然后查询路由表中到RREQ报文中目的地址的路由,如果已经存在该路由,那么向该路由单播RREQ消息,否则继续广播RREQ报文。
优选地,在第3)步骤,中心节点查询RREQ报文的目的地址是否在子网内部,若是,则启动mesh-under路由协议,建立最优路径,并发送RREP;若不是,则缓存RREQ报文,在子网间启动route-over路由协议,广播RREQ报文给邻居子网中心节点;通过路由表项汇聚,查询是否存在路径可到达RREQ报文的目的地址所属的子网,从而形成一条以子网的中心节点构成的骨干路径;
优选地,在第4)步骤,目的地址子网中心节点接收RREQ报文后,如果判断RREQ报文目的地址是自己或子网成员,那么该节点在子网内部广播该RREQ;同时进入发送RREP报文过程:首先节点缓存RREQ报文消息,等待合理时间T,综合比较骨干路径LQI和跳数值,进行多路由的优劣评判,保证链路的可靠性,然后,基于目的中心节点选择一条最优路由进行单播RREP报文响应。
优选地,在第5)步骤,目的节点收到子网中心节点或其它成员节点的RREQ报文,立即发送RREP给中心节点,并在子网间启动mesh-under路由协议,以稳定性和可靠性为基础,建立子网内部最优传输路径;
优选地,在第6)步骤,如果是目的子网的中心节点收到目的节点的单播子网路由回复,先查询本地地址池列表,采用mesh-under方式建立子网内部路由;如果是子网的中心节点收到源节点的子网路由回复,同样采用mesh-under方式建立子网内部反向路由;同时,当子网中心节点收到目的子网中心节点的子网间骨干路由回复,对路由报文进行压缩和汇聚,采用route-over方式建立反向骨干路径;而各个子网中的其他中间节点收到子网的路由回复时,首先判断RREP目的地址是自己或者在子网成员,如果是则建立到RREP源地址的子网内路由表项,发送缓存队列中的缓存数据,否则建立或者更新到RREP源地址的路由表项,查找到RREP目的地址路由,并把下一跳地址写入路由表前驱节点地址选项,然后继续单播RREP报文。
根据本发明,其技术效果至少包括,能够在大规模异构组网条件下满足低功耗有损网络路由需求。
附图说明
图1是根据现有技术的子网内mesh-under路由体系示意图。
图2是根据现有技术的子网间route-over路由体系示意图。
图3是根据本发明的混合式路由体系架构示意图。
图4是根据本发明的可聚集全球单播地址压缩格式示意图。
图5是根据本发明的RREQ、RREP路由报文压缩处理流程示意图。
图6是根据本发明的混合式路由建立过程示意图。
图7是根据本发明的混合式路由报文广播示意图。
图8是根据本发明的接收RREQ路由报文流程示意图。
图9是根据本发明的接收RREP路由报文流程示意图。
具体实施方式
本发明提供了一种支持IPv6无线传感器网络的混合式路由,其路由协议体系架构见附图3。
混合式路由协议工作在链路层或网络层,由于在一个子网内部由于通信量较少,本发明的节点mac层采用802.15.4协议,路由模式利用mesh-under的方式,报文直接封装在适配层之后;而在子网外部,微型传感路由器之间由于数据量较大,对服务质量以及路由协议的要求更高,在mac层本发明采用802.11协议,路由模式本发明采用route-over的路由方式,报文直接封装在IPv6报头之后,并使用专门的IPv6地址编址规则进行路由。
本发明定义了中心节点、成员节点及子网的概念。在大规模IPv6无线传感器网络的实际应用中,网络中的节点是异构的,相同性质的节点可归入同一个社区,我们称社区为一个子网;不同性质的节点属于不同的社区,从而网络被划分为不同的子网。具体地,节点可依据各自感兴趣的信息相似度值选择不同的子网加入,每一个子网由微型传感路由器和微型传感器节点共同组成,这里,我们定义微型传感路由器设备为子网的中心节点,微型传感器节点为子网成员节点。特别地,每一个中心节点都拥有一个从sink节点处获得的独立地址分配池,负责该子网成员节点的IPv6地址配置。
由于IPv6地址需占用大量的存储空间,从低功耗的角度考虑,本发明中,混合式路由协议专门提供了相应的压缩机制,用于支持路由报文和路由表项中的IPv6地址压缩。此外,对路由表项还可进行汇聚,进一步降低路由协议的存储开销,节省有限的能量资源,最终达到低功耗的性能指标。具体如下:
1.路由报文的低功耗设计
路由报文的低功耗设计的关键点在于对报文格式中的IPv6地址进行有效压缩。考虑到IPv6无线传感器网络中设备的通信地址均使用可聚集全球单播地址,包括全局路由前缀、子网ID和节点ID。根据它们各自的特点,我们提出的地址压缩格式如附图4所示。
a)全局路由前缀:在整个IPv6无线传感器网络范围内唯一,由网关设备分配,子网内、子网间路由的报文格式中均可以压缩;
b)子网ID:在每个IPv6微型传感路由器所管辖的子网内均相同,当微型传感路由器加入网络后由网关设备指定,子网内建立多跳路由时可将该字段压缩;
c)节点ID:由64位接口ID通过哈希映射得到,在每个子网内唯一,在微型传感路由器之间建立子网间多跳路由的情况下,无需考虑节点ID可以将其压缩。
根据上述规则,在进行IPv6报头封装之前,RREQ和RREP路由报文通过对比源地址与目的地址的子网ID号,而RERR报文和入口表通过判断产生该报文的设备类型,各自识别路由报文的路由方式(子网内mesh-under/子网间route-over)。若子网ID号相同或生成报文的设备类型为IPv6微型传感器节点,判断该报文用于子网间路由;反之,若子网ID号相同或生成报文的设备类型为IPv6微型传感路由器,判断该报文用于子网间路由。具体地,子网间路由报文情况下,IPv6地址的全球路由前缀字段和子网ID字段均可以压缩掉,只需携带8比特的节点ID号;反之,对于子网间路由,IPv6地址的全球路由前缀和节点ID可以压缩掉,128位IPv6地址直接用子网ID来取代,大大提高了路由报文的压缩效率。路由报文的压缩处理流程如附图5所示。
2.路由表项低功耗设计
路由表项的低功耗设计主要是通过对路由表项中IPv6地址的压缩以及路由表项的汇聚两方面来实现的。
其中,路由表项中IPv6地址的压缩存储同路由报文的地址压缩方案。使用节点ID取代IPv6微型传感器节点上路由表中的IPv6地址,使用子网ID取代IPv6微型路由器上路由表中的IPv6地址。
由于不同的节点ID之间没有任何的关联性,而且仅为1字节,占用的空间很少,按需驱动式路由方式下,生存时间满后路由表项将无效,因此,IPv6微型传感器节点的路由表项不需要进行地址汇聚。
但是,不同的子网ID会有一定的关联性,而且IPv6微型传感路由器的路由表项期望能够存放整个网络的全部路由器信息,因此,通过借鉴传统IP网络中CIDR(Classless Inter-Domain Routing)的思想对IPv6微型传感路由器的路由表项中的子网ID进行地址聚合。具体实例见附表1和附表2。表1是本发明中某IPv6微型传感路由器中路由表条目的实例图;而表2是本发明中引入CIDR思想进行路由表汇聚后的路由表条目。
表1
表2
此外,由于实际的大规模IPv6无线传感器网络环境是有损的,链路具有不稳定性,为了克服该缺点,本发明中,混合式路由协议在选路策略方面,综合考虑了邻居节点周围的各种环境信息素,如:丢包率、跳数、链路质量(LQI,Link Quality Indication)、及链路延时等,从而保证数据传输的可靠性。具体如下:
1.路由选路与决策:提出的混合式路由协议属于按需驱动方式,开销小,符合IPv6无线传感器网络设备的节能要求。当节点有数据需要发送时,按照附图6所示方式建立路由。
2.路由维护与容错处理:混合式路由协议根据ACK数据帧来判断邻居节点可靠性,如果向邻居节点发送数据在一定的时间内并没有收到邻居节点确认的ACK帧,重传该数据后若仍然没有收到该邻居节点确认的ACK帧,表明该邻居节点已经失效,则缓存当前的数据,重新进行路由请求。同时,查找路由表以该邻居节点为下一跳的路由表项,取出前驱节点地址,封装RERR报文,向这些前驱节点单播RERR报文,然后删除路由表中以该邻居节点为下一跳和最终地址的路由表项。前驱节点接收到RERR报文,同样在路由表中处理该不可达地址,同时继续查找前驱节点发送RERR报文,直到这条路由中所有的前驱节点都被通知该节点地址已经失效。
有关本发明的技术内容及详细说明,配合附图7-9说明如下:
第一步:子网成员节点发送RREQ:在IPv6无线传感器网络中,当一个成员节点发送数据或者转发到其它目的节点的数据时,首先查找本地路由表,如果发现到目的地址的路由不存在,则缓存当前数据包进行路由建立过程,并在所属子网内部广播路由请求报文(Route Request,RREQ)。如附图7所示。
第二步:子网中间节点接收到RREQ:中间节点接收RREQ报文后,首先判断RREQ报文目的地址是否是自己,如果不是,那么查询是否已经接收到该RREQ源地址发送的相同ID号的RREQ报文,为了减少IPv6无线传感器网络能量损耗以及广播包的泛洪阻塞,该节点抛弃该RREQ报文;如果没有存在该入口项,则进行查询路由表中到RREQ源地址的路由,如果已经存在该路由,那么比较这两条路由,选择最好的路由进行存储,同时修改RREQ报文信息,如果不存在该路由,则建立一条到RREQ源地址的逆向路由;然后查询路由表中到RREQ报文中目的地址的路由,如果已经存在该路由,那么向该路由单播RREQ消息,否则继续广播RREQ报文。如附图8所示。
第三步:子网中心节点接收RREQ和发送RREP:中心节点查询RREQ报文的目的地址是否在子网内部,若是,则启动mesh-under路由协议,建立最优路径,并发送RREP;若不是,则缓存RREQ报文,在子网间启动route-over路由协议,广播RREQ报文给邻居子网中心节点;通过路由表项汇聚,查询是否存在路径可到达RREQ报文的目的地址所属的子网,从而形成一条以子网的中心节点构成的骨干路径。如附图8所示。
第四步:目的地址子网中心节点接收RREQ和发送RREP:目的地址子网中心节点接收RREQ报文后,如果判断RREQ报文目的地址是自己或子网成员,那么该节点在子网内部广播该RREQ;同时进入发送RREP报文过程:首先节点缓存RREQ报文消息,等待合理时间T,综合比较骨干路径LQI和跳数值,进行多路由的优劣评判,保证链路的可靠性。然后,基于目的中心节点选择一条最优路由进行单播RREP报文响应。该方法比由中间节点以及RREQ源节点进行判断最优路由,更加减少网络中的数据流量和能量消耗。如附图8所示。
第五步:目的节点接收RREQ和发送RREP:目的节点收到子网中心节点或其它成员节点的RREQ报文,立即发送RREP给中心节点,并在子网间启动mesh-under路由协议,从稳定性和可靠性方面考虑,建立子网内部最优传输路径。如附图8所示。
第六步:子网中心节点接收RREP:如附图9所示,如果是目的子网的中心节点收到目的节点的单播子网路由回复,先查询本地地址池列表,采用mesh-under方式建立子网内部路由。如果是子网的中心节点收到源节点的子网路由回复,同样采用mesh-under方式建立子网内部反向路由;同时,当子网中心节点收到目的子网中心节点的子网间骨干路由回复,对路由报文进行压缩和汇聚,采用route-over方式建立反向骨干路径。而各个子网中的其他中间节点收到子网的路由回复时,首先判断RREP目的地址是自己或者在子网成员,如果是则建立到RREP源地址的子网内路由表项,发送缓存队列中的缓存数据,否则建立或者更新到RREP源地址的路由表项,查找到RREP目的地址路由,并把下一跳地址写入路由表前驱节点地址选项。然后继续单播RREP报文。