专利名称:扩展边界网关协议的4 over 6隧道封装及解封装方法
技术领域:
使用BGP-MP扩展的4 over 6隧道中的封装及解封装方法属于互联网技术领域,尤其涉及IPv4与IPv6网络互联的隧道技术。
背景技术:
由于IPv4地址空间严重不足,基于IPv6的下一代互联网将得到迅速发展。然而,由于IPv4互联网已具有相当规模和广泛的应用程序,因此IPv4网络必然在今后长期存在,形成与下一代IPv6网络逐步融合的过程。随着IPv6骨干网络建立,需要引入一种新技术将IPv4终端用户通过快速高效的IPv6骨干网络连接起来以提高网络的服务质量。此外,随着IPv4网络的逐步废弃,将产生IPv4网络不连通的过渡阶段,在此阶段中IPv6网络作为连通多个IPv4网络的桥梁,需要基于此实现不同IPv4网络之间的通信。
IPv6和IPv4网络的地址结构截然不同,IPv6和IPv4网络的互联技术成为互联网发展的一个重要难题。虽然目前已出现了不少IPv6和IPv4网络的互联技术,如RFC2893、RFC2529、RFC3056、RFC3053和一些IETF draft,然而这些技术集中在IPv6over IPv4技术上。也就是说,孤立的IPv6网络之间如何通过IPv4主干网互相连接。上述技术定义了在这种网络拓扑结构下,如何通过建立在IPv6上的隧道实现IPv4网络之间的交互。
随着IPv6网络的发展以及今后IPv4网络的逐步废弃,IPv6将成为网络互联的核心,因而有可能出现IPv4网络之间通过IPv4协议不再连通的情况。此外,对于IPv6网络提供了高速高质量分组传输的情况来说,IPv4网络之间采用基于IPv6骨干网络的传输通信也是一种可能的高质量传输方式。因此,有必要考虑如何通过建立IPv4 over IPv6的隧道实现IPv4网络之间的交互。虽然目前有IPv4over IPv6的相关技术(比如6to4),但是这些技术使用了特殊的IPv6地址,无法对网络的变化做出自动的配置,因此应用范围受到了限制。
本发明提出了一种在IPv6网络上实现IPv4网络互联的自动隧道建立方法,简称4over6。通过在4over6双栈路由器之间建立I-BGP的peer关系,并且路由器之间使用BGP-MP协议互相传递各自连接的IPv4孤立网络的路由可达信息,完成隧道的自动配置。其中数据平面的处理包括对IPv4分组的封装操作和对IPv6分组的解封装操作。由于使用了自动建立隧道的机制,路由器需要保存IPv4网络地址与IPv6地址的对应关系,该对应关系存放在封装表结构中,并通过BGP-MP协议来更新。
发明内容
本发明的目的在于设计使用BGP-MP扩展的4 over 6隧道中的双栈路由器在封装报文时所需要查询的封装表,包括封装表的数据结构以及查询、维护的算法。
本发明所提出的方法的特征在于对IPv4分组进行封装操作,对IPv6分组进行解封装操作;封装时使用的IPv6目的地址通过查询封装表得到;封装表储存了IPv4网络地址(包括前缀长度)与IPv6地址对应关系;封装表提供了更新记录的接口,可用于对记录的删除、添加和更新操作;封装表提供了查询记录的接口,可根据某个给定的IPv4主机地址查询与之匹配的IPv4网络地址,从而返回对应的IPv6地址用作封装操作,在查询的时候使用了按照网络前缀从大到小的顺序进行匹配;封装表使用了便于快速、有效搜索网络地址的数据结构。
该方法依次含有以下步骤步骤(1)在各个4over6双栈路由器中通过一个扩展的边界网关协议BGP-MP模块确定基于边界网关协议的点对点关系,每个路由器都通过扩展的边界网关协议BGP-MP把路由信息发送给其余的路由器,其中包括发送方路由器的IPv4网络地址及自身虚接口IPv6地址,接收方路由器在收到该BGP-MP消息后在本地路由表中加入IPv4地址对应的项,并且在封装表中加入BGP-MP消息中IPv4网络地址和IPv6虚接口地址的对应关系;在所述封装表中还应该具有以下接口更新记录接口,用于对接收方4over6封装表的记录的更新和删除操作;查询记录接口,用于根据收到的IPv4主机地址查询封装表中对应的IPv4网络地址,并把相应的IPv6地址返回给本地虚接口以便该虚接口使用此IPv6地址对IPv4分组进行封装;步骤(2)当4over6双栈路由器在收到IPv4分组的时候,依次完成以下步骤步骤(2.1)根据该IPv4分组的目的地址查询本地转发表,将分组交给本地虚接口处理;步骤(2.2)该虚接口根据IPv4目的地址调用封装表的查询接口;步骤(2.3)封装表接收到查询请求后,按照前缀从大倒小的顺序查找封装表,直到找到匹配的IPv4网络地址,然后将对应的IPv6地址返回给虚接口;步骤(2.4)虚接口使用查询到的IPv6地址对IPv4分组进行封装,形成IPv6隧道包;步骤(2.5)双栈路由器将封装好的IPv6分组通过查询本地IPv6转发表后发送出去;步骤(3)当4over6双栈路由器接收到IPv6分组后依次执行以下步骤步骤(3.1)判断该IPv6分组的”下一协议号”域是否是IPv4类型,如果是的话则执行下面的步骤步骤(3.2)将该IPv6分组的IPv6头去掉,还原载荷中的相应IPv4分组;步骤(3.3)路由器通过查找本地IPv4转发表将还原出来的IPv4分组发送出去;步骤(4)当4over6双栈路由器接收到BGP-MP消息,需要更新4over6路由信息时,依次执行以下步骤步骤(4.1)调用封装表的更新接口,传入待更新的IPv4网络地址和IPv6地址;
步骤(4.2)在封装表中顺序查找与传入的IPv4网络地址相同的项,如果找到则用传入的IPv6地址更新该项中的IPv6地址;步骤(4.3)如果没有找到,则在封装表中插入一项,其IPv4网络地址和IPv6地址就使用传入的地址;步骤(5)当4over6路由器收到路由不可达的BGP-MP消息时,需要删除路由器中的路由信息以及调用封装表模块执行以下步骤步骤(5.1)调用封装表的删除接口,传入待删除的IPv4网络地址;步骤(5.2)在封装表中顺序查找IPv4网络地址与传入的地址相同的项,如果找到,则将该项删除。
本发明目前已运用在清华大学所研制的4over6服务器中,在全国各地已部署了8个节点,实现了IPv6网络上的IPv4网络互通。
图1.封装表数据结构示意图;图2.4over6系统拓扑示意图;图3.4over6系统封装解封装流程图。
具体实施例方式
在4over6系统中,最基本的组成是两个孤立IPv4网络和一个IPv6主干网,其中主干网与两个IPv4网络之间分别用一台4over6路由器连接起来。这种连接方式可以用图2来表示。
以图2所示的拓扑为例,从分组转发的角度来看,当网络A中的IPv4分组想要到达网络B的时候,必然需要经过4over6路由器A的封装和4over6路由器B的解封装过程。由于封装表中存放着IPv4网络地址与IPv6地址的对应关系,A在对IPv4分组进行封装的时候通过查找封装表可以得知其目的IPv4地址(网络B)所对应的PE路由器IPv6地址(4over6路由器B的IPv6地址),然后用此地址进行封装即可。
从路由控制的角度来看,4over6路由器之间建立了BGP的peer关系,每个路由器都通过MP-BGP扩展的消息将路由信息发送给其余的路由器。在图2的拓扑中,路由器B将网络B的网络地址以及路由器B自身的虚接口IPv6地址通过MP-BGP消息发送给路由器A,A收到消息后在本地的路由表中加入相应的项,同时在封装表中加入网络B的网络地址与路由器B的虚接口IPv6地址的对应关系;同时路由器A也向B通过MP-BGP发送网络A的地址信息,当双方的路由表和封装表都建立完毕之后,就可以进行正常的4over6通信(即封装—解封装)过程了。
图1描述了封装表数据结构的设计。如图所示,整个封装表使用一个Zones数组(大小为33)记录指向不同前缀长度的IPv4网络地址的Hash表的指针,每一个hash表中所记录的所有项的IPv4目的地址都具有相同的前缀长度。在hash表的每一项中,记录了IPv4网络地址和对应的下一跳双栈4over6路由器IPv6虚接口地址。
对封装表所提供的三个操作(更新、删除和查询)接口的执行流程则描述如下更新记录的接口如下void ect_update(struct in_addr dst_addr,unsigned int dst_mask,struct in6_addr vif_addr);参数dst_addr 要更新的目的IPv4网络地址dst_mask 该网络地址的前缀长度vif_addr 该目的网络地址对应的双栈4over6路由器的IPv6虚接口地址返回值无封装表更新操作的具体步骤为1.计算dst_addr的hash值2.对mask对应的hash表的相应位置a)锁定该位置b)若找到和dst_addr相同的表项i.更新该项的地址域值(即改写该表项的IPv6地址为vif_addr)c)若没有找到相同的表项i.将dst_addr和vif_addr加入hash表的对应位置d)对该位置解除锁定删除记录的接口如下void ect_delete(struct in_addr dst_addr,unsigned int dst_mask);参数dst_addr要删除的目的IPv4网络或主机地址dst_mask该网络地址的掩码长度(二进制位“1”的个数)返回值无执行流程(封装表维护模块接收到消息后的操作)1.计算dst_addr的hash值2.对mask对应的hash表的相应位置a)锁定该位置b)若找到和dst_addr相同的表项i.将表项从hash表中删除c)对该位置解除锁定int ect_query(struct in_addr dst_addr,struct in6_addr*vif_addr);参数dst_addr要查询的目的IPv4地址vif_addr查询结果通过此参数(指针)返回返回值如果函数查询成功(即找到了对应的IPv6地址),返回0,否则返回-1。
执行流程1.对目的地址dst_addr计算hash值2.对于zones中的每一个hash表,作如下操作(按照掩码长度从大到小的顺序)a)锁定hash表中该dst_addr的hash值对应的位置b)在此位置的链表中查找目的地址为dst_addr的表项c)解除对该位置的锁定d)若找到,返回结果e)若未找到,继续搜索下一个hash表
权利要求
1.扩展边界网关协议的4over6隧道封装及解封装方法,其特征在于,该方法一次含有以下步骤步骤(1)在各个4over6双栈路由器中通过一个扩展的边界网关协议BGP-MP模块确定基于边界网关协议的点对点关系,每个路由器都通过扩展的边界网关协议BGP-MP把路由信息发送给其余的路由器,其中包括发送方路由器的IPv4网络地址及自身虚接口IPv6地址,接收方路由器在收到该BGP-MP消息后在本地路由表中加入IPv4地址对应的项,并且在封装表中加入BGP-MP消息中IPv4网络地址和IPv6虚接口地址的对应关系;在所述封装表中还应该具有以下接口更新记录接口,用于对接收方4over6封装表的记录的更新和删除操作;查询记录接口,用于根据收到的IPv4主机地址查询封装表中对应的IPv4网络地址,并把相应的IPv6地址返回给本地虚接口以便该虚接口使用此IPv6地址对IPv4分组进行封装;步骤(2)当4over6双栈路由器在收到IPv4分组的时候,依次完成以下步骤步骤(2.1)根据该IPv4分组的目的地址查询本地转发表,将分组交给本地虚接口处理;步骤(2.2)该虚接口根据IPv4目的地址调用封装表的查询接口;步骤(2.3)封装表接收到查询请求后,按照前缀从大倒小的顺序查找封装表,直到找到匹配的IPv4网络地址,然后将对应的IPv6地址返回给虚接口;步骤(2.4)虚接口使用查询到的IPv6地址对IPv4分组进行封装,形成IPv6隧道包;步骤(2.5)双栈路由器将封装好的IPv6分组通过查询本地IPv6转发表后发送出去;步骤(3)当4over6双栈路由器接收到IPv6分组后依次执行以下步骤步骤(3.1)判断该IPv6分组的”下一协议号”域是否是IPv4类型,如果是的话则执行下面的步骤步骤(3.2)将该IPv6分组的IPv6头去掉,还原载荷中的相应IPv4分组;步骤(3.3)路由器通过查找本地IPv4转发表将还原出来的IPv4分组发送出去;步骤(4)当4over6双栈路由器接收到BGP-MP消息,需要更新4over6路由信息时,依次执行以下步骤步骤(4.1)调用封装表的更新接口,传入待更新的IPv4网络地址和IPv6地址;步骤(4.2)在封装表中顺序查找与传入的IPv4网络地址相同的项,如果找到则用传入的IPv6地址更新该项中的IPv6地址;步骤(4.3)如果没有找到,则在封装表中插入一项,其IPv4网络地址和IPv6地址就使用传入的地址;步骤(5)当4over6路由器收到路由不可达的BGP-MP消息时,需要删除路由器中的路由信息以及调用封装表模块执行以下步骤步骤(5.1)调用封装表的删除接口,传入待删除的IPv4网络地址;步骤(5.2)在封装表中顺序查找IPv4网络地址与传入的地址相同的项,如果找到,则将该项删除。
全文摘要
本发明属于IPv4与IPv6网络互联方法,其特征在于通过在4 over 6双栈路由器之间建立I-BGP的peer关系,并且路由器之间使用BGP-MP协议互相传递各自连接的IPv4孤立网络的路由可达信息,完成隧道的自动配置;其中数据平面的处理包括对IPv4分组的封装操作和对IPv6分组的解封装操作。由于使用了自动建立隧道的机制,路由器需要保存IPv4网络地址与IPv6地址的对应关系,该对应关系存放在封装表结构中,并通过BGP-MP协议来更新,从而实现自动的IPv4 over IPv6配置。它配置简单、适用性广,能够运用在复杂拓扑结构下的IPv4和IPv6网络互联。
文档编号H04L12/46GK1949776SQ20061011442
公开日2007年4月18日 申请日期2006年11月10日 优先权日2006年11月10日
发明者崔勇, 吴建平, 周云涛 申请人:清华大学