一种6to4隧道的压缩方法及装置 【技术领域】
本发明涉及通信技术领域,尤其涉及一种6to4隧道的压缩方法及装置。
背景技术
IPv6(Internet Protocol version 6,国际互联网协议版本6)to IPv4(InternetProtocol version 4,国际互联网协议版本4)隧道是在IPv6数据报文前封装上IPv4的报文头,通过隧道(Tunnel)使IPv6报文穿越IPv4网络,实现隔离的IPv6网络的互通方法。
隧道类型又分为手工隧道和自动隧道两大类,手动隧道需要手工指定隧道目的端IPv4地址;自动隧道则可以根据目的IPv6地址自动获取隧道目的端的IPv4地址。自动隧道又分为IPv4兼容IPv6自动隧道、6to4隧道、ISATAP(Intra-Site Automatic Tunnel Addressing Protocol,站点内部自动隧道寻址协议)隧道。
其中,6to4隧道实现如图1所示,两个6to4网络(6to4组1和6to4组2)通过网络边缘6to4路由器(路由器A和路由器B)与IPv4网络相连,为了实现6to4网络中的主机Host A和Host B之间的互通,需要配置6to4隧道。
其中,6to4隧道采用特殊的6to4地址,其格式为:2002:abcd:efgh:子网号::接口ID/64。其中,2002表示固定的IPv6地址前缀,abcd:efgh表示该6to4隧道对应的32位全球唯一的IPv4源地址,用16进制表示(如1.1.1.1可以表示为0101:0101)。2002:abcd:efgh之后的部分唯一标识了一个主机在6to4组内的位置。通过这个嵌入的IPv4地址可以自动确定隧道的终点,使隧道的建立非常方便。
例如,路由器A上接口Ethernet1/2的IPv4地址为2.1.1.1/24,转换成IPv6地址后使用6to4前缀2002:0201:0101::/48。对此前缀进行子网划分,Tunnel0使用2002:0201:0101::/64子网,Ethernet1/1使用2002:0201:0101:1::/64子网。路由器B上接口Ethernet1/2的IPv4地址为5.1.1.1/24,转换成IPv6地址后使用6to4前缀2002:0501:0101::/48。对此前缀进行子网划分,Tunnel0使用2002:0501:0101::/64子网,Ethernet1/1使用2002:0501:0101:1::/64子网。
在配置了上述6to4隧道后,路由器接收到主机通过6to4组发送的IPv6报文后,将IPv6报文进行6to4封装,并将封装后的6to4报文通过6to4隧道发送到对端设备。其中6to4封装过程如图2所示:
在该IPv6包前添加IPv4头生成6to4包,在该6to4包前添加帧头,在该6to4包后添加帧尾形成传输帧。由于6to4隧道的封装过程中,在原来的IPv6包基础上增加了IPv4的头部,使得6to4包长度比IPv6包增加20个字节(IPv4头部的长度),会导致对于IPv6实际的MTU(Maximum Transmission Unit,最大传输单元)值减少20个字节(IPv4头部的长度),即有效带宽内传输的有用字节数减少,从而降低传输效率。
【发明内容】
本发明提供了一种6to4隧道的压缩方法及装置,在IPv6报文通过隧道传输时,通过压缩头部长度,从而给IPv6提供更大的MTU。
本发明提供了一种6to4隧道的压缩方法,应用于隔离的IPv6网络通过IPv4网络互通的系统中,所述系统包括源端设备和目的端设备,所述方法包括以下步骤:
所述源端设备将IPv6报文封装为IPv4报文,并将IPv4头部和IPv6头部通过裁减或共用部分字段进行压缩,并添加压缩标志位,通过隧道发送到目的端设备;
所述目的端设备接收来自所述源端设备的报文,通过压缩标志位判断为压缩报文,则根据与源端设备的压缩方法对应的解压缩方法从所述压缩报文中还原出原始的IPv6报文。
所述将IPv4头部和IPv6头部通过裁减部分字段进行压缩,具体通过以下方式中的一种或几种实现:
裁减掉源IPv6地址和目的IPv6地址中表示固定的IPv6地址前缀及表示该6to4隧道对应32位全球唯一IPv4源地址的部分;
裁减掉IPv6头部的Version字段;
裁减掉IPv6头部的有效负载长度字段。
所述将IPv4头部和IPv6头部通过共用部分字段进行压缩,具体通过以下方式中的一种或几种实现:
将IPv6头部的Next Header和HopLimit字段共16bits整体放入IPv4头部的Identification字段中;
将IPv6头部的Traffic Class字段与Flow Label字段的高4位作为整体共计12位,放到IPv4头部的Fragment Offset字段的低12位;
将Flow Label字段的低16位与IPv6源地址和目的地址剩余的20字节放在IPv4头部后面。
所述添加压缩标志位具体为:
将IPv4的Flag字段的最高位置为1或0,以表示压缩报文。
根据与源端设备的压缩方法对应的解压缩方法从所述压缩报文中还原出原始的IPv6报文,具体包括以下一种或几种:
根据固定地IPv6地址前缀,固定端口与32位全球唯一IPv4源地址的对应关系,恢复源IPv6地址和目的IPv6地址中表示固定的IPv6地址前缀及表示该6to4隧道对应32位全球唯一IPv4源地址;
根据压缩报文中IPv4头部的协议字段获取IPv6头部的Version字段;
IPv4头部中的Total Length字段-压缩后报文长度获得IPv6头部的有效负载长度字段;
从IPv4头部的Identification字段中获取IPv6头部的Next Header和HopLimit字段;
从IPv4头部的Fragment Offset字段的低12位中获取IPv6头部的TrafficClass字段与Flow Label字段的高4位;
从IPv4头部后面获取Flow Label字段的低16位与IPv6源地址和目的地址剩余的20字节。
本发明还提供了一种6to4隧道的压缩装置,应用于隔离的IPv6网络通过IPv4网络互通的系统中,所述系统包括源端设备和目的端设备,所述装置为源端设备时,包括:
封装模块,用于将IPv6报文封装为IPv4报文,并将IPv4头部和IPv6头部通过裁减或共用部分字段进行压缩,并添加压缩标志位;
发送模块,与所述封装模块连接,用于通过隧道将所述压缩后的报文发送到目的端设备;
所述装置为目的端设备时,包括:
接收模块,用于接收来自所述隧道起点的报文;
判断模块,与所述接收模块连接,用于通过压缩标志位判断为压缩报文;
解压缩模块,与所述判断模块连接,用于对压缩报文,根据与源端设备的压缩方法对应的解压缩方法从所述压缩报文中还原出原始的IPv6报文。
所述封装模块,具体用于通过以下方式中的一种或几种实现裁减:
裁减掉源IPv6地址和目的IPv6地址中表示固定的IPv6地址前缀及表示该6to4隧道对应32位全球唯一IPv4源地址的部分;
裁减掉IPv6头部的Version字段;
裁减掉IPv6头部的有效负载长度字段。
所述封装模块,具体用于通过以下方式中的一种或几种实现共用:
将IPv6头部的Next Header和HopLimit字段共16bits整体放入IPv4头部的Identification字段中;
将IPv6头部的Traffic Class字段与Flow Label字段的高4位作为整体共计12位,放到IPv4头部的Fragment Offset字段的低12位;
将Flow Label字段的低16位与IPv6源地址和目的地址剩余的20字节放在IPv4头部后面。
所述封装模块将IPv4的Flag字段的最高位置为1或0,以表示压缩报文。
所述解压缩模块,具体用于根据固定的IPv6地址前缀,固定端口与32位全球唯一IPv4源地址的对应关系,恢复源IPv6地址和目的IPv6地址中表示固定的IPv6地址前缀及表示该6to4隧道对应32位全球唯一IPv4源地址;根据压缩报文中IPv4头部的协议字段获取IPv6头部的Version字段;
IPv4头部中的Total Length字段-压缩后报文长度获得IPv6头部的有效负载长度字段;
从IPv4头部的Identification字段中获取IPv6头部的Next Header和HopLimit字段;
从IPv4头部的Fragment Offset字段的低12位中获取IPv6头部的TrafficClass字段与Flow Label字段的高4位;
从IPv4头部后面获取Flow Label字段的低16位与IPv6源地址和目的地址剩余的20字节。
与现有技术相比,本发明具有以下优点:
本发明中,IPv6报文在隧道中传输中,大大减少传输的头部长度,能获取与非隧道封装大致相当的MTU值,提高传输效率;而且由于是针对固定字段和裁减和合并,有利于采用硬件加速器的方式提高压缩和解压的速度。
【附图说明】
图1是现有技术中IPv6报文通过6to4隧道穿越IPv4网络过程示意图;
图2是现有技术中数据进入6to4隧道的封装过程示意图;
图3是本发明中一种6to4隧道的压缩方法流程图;
图4是本发明中IPv6的头部结构示意图;
图5是本发明中IPv6报文通过6to4隧道穿越IPv4网络时压缩过程示意图;
图6是本发明中经6to4隧道压缩后的报文封装格式示意图;
图7是本发明中6to4隧道的压缩装置结构图。
【具体实施方式】
本发明的核心思想是:在6to4隧道源端设备对加了IPv4头的IPv6报文进行压缩,将20个字节的IPv4头部和40个字节的IPv6头部通过裁减或共用部分字段,从而压缩到42个字节;将压缩后的报文通过6to4隧道传输到6to4隧道目的端设备;该6to4目的端设备采用与6to4源端设备压缩方法相反的解压缩方法对接收的压缩报文进行解压缩,获得压缩前的报文。因此,本发明可以大大减少传输的头部长度,能获取与非隧道封装大致相当的MTU值,提高传输效率。
本发明提供了一种6to4隧道的压缩方法,应用于隔离的IPv6网络通过IPv4网络互通的系统中,所述系统包括源端设备和目的端设备,所述方法如图3所示,包括以下步骤:
步骤301,所述源端设备将IPv6报文封装为IPv4报文,并将IPv4头部和IPv6头部通过裁减或共用部分字段进行压缩,并添加压缩标志位,通过6to4隧道发送到目的端设备。
所述将IPv4头部和IPv6头部通过裁减部分字段进行压缩,具体通过以下方式中的一种或几种实现:
裁减掉源IPv6地址和目的IPv6地址中表示固定的IPv6地址前缀及表示该6to4隧道对应32位全球唯一IPv4源地址的部分,即2002:abcd:efgh,共计12字节;由于2002表示固定的IPv6地址前缀,因此该字段可以裁减,恢复时可以直接添加;32位全球唯一IPv4源地址部分与固定端口对应,目的设备已知,因此该字段可以裁减。
裁减掉IPv6头部的Version字段,共计4bits,因为IPv4头部中的协议字段(值为41)能表明该隧道封装的是IPv6报文。
裁减掉IPv6头部的有效负载长度字段,因为可以从IPv4头部中的TotalLength字段来推算IPv6头部的有效负载长度字段。
所述将IPv4头部和IPv6头部通过共用部分字段进行压缩,具体通过以下方式中的一种或几种实现:
将IPv6头部的Next Header(下一包头)和HopLimit(跳段数限制)字段共16bits整体放入IPv4头部的Identification(标识)字段中;因为在6to4隧道中,IPv4看作为IPv6的链路层,所以无需考虑IPv4分片的情况,而是由IPv6自行分片,IPv4的Identification字段未被使用,可以用于放置NextHeader和Hop Limit字段。
将IPv6头部的Traffic Class(流量类型)字段与Flow Label(流标记)字段的高4位作为整体共计12位,放到IPv4头部的Fragment Offset(标记位移)字段的低12位;由于IPv4头部的Fragment Offset字段的低12位保留为保留字段,因此,可以放置上述内容。
将Flow Label字段的低16位与IPv6源地址和目的地址剩余的20字节放在IPv4头部后面,由于IPv4头部后面为填充字段,因此可以存放上述内容。
将IPv4的Flag字段的最高位置为1或0,以表示压缩报文。
步骤302,所述目的端设备接收来自所述源端设备的报文,通过压缩标志位判断为压缩报文,则根据与源端设备的压缩方法对应的解压缩方法从所述压缩报文中还原出原始的IPv6报文。
根据与源端设备的压缩方法对应的解压缩方法从所述压缩报文中还原出原始的IPv6报文,具体包括以下一种或几种:
根据固定的IPv6地址前缀,固定端口与32位全球唯一IPv4源地址的对应关系,恢复源IPv6地址和目的IPv6地址中表示固定的IPv6地址前缀及表示该6to4隧道对应32位全球唯一IPv4源地址;
根据压缩报文中IPv4头部的协议字段获取IPv6头部的Version字段;
IPv4头部中的Total Length(数据包长度)字段-压缩后报文长度获得IPv6头部的有效负载长度字段;
从IPv4头部的Identification字段中获取IPv6头部的Next Header和HopLimit字段共16bits;
从IPv4头部的Fragment Offset字段的低12位中获取IPv6头部的TrafficClass字段与Flow Label字段的高4位;
从IPv4头部后面获取Flow Label字段的低16位与IPv6源地址和目的地址剩余的20字节。
根据上述原理可以实现对报文头的裁减和共用,以下以最佳效果为例进行说明,即将其中两个IPv6地址(源地址和目的地址)中的2002:abcd:efgh部分共计12字节裁掉,只保留剩下的共计20个字节的地址部分;而IPv6头部除流标签外的其它字段,则裁减或合并到IPv4的头部,最终得到42个字节的头部。实际应用中也可以采用其中部分裁减或共用方法,虽然没有实现最佳效果,但也可以实现压缩报文目的。
IPv6报文头压缩前格式如图4所示,通过6to4隧道穿越IPv4网络时压缩过程如下图5所示,压缩过程具体描述如下:
1,源IPv6地址(Source Address)和目的IPv6地址(DestinationAddress)各占16个字节,共占用了32个字节,根据6to4地址的结构,把其中表示固定的IPv6地址前缀及表示该6to4隧道对应32位全球唯一IPv4源地址的部分,即2002:abcd:efgh,共计12字节裁减掉。
2,IPv6头部的Version字段(4bits)裁减掉;由于所有隧道封装在IPv4报头内的IPv6隧道通讯都将报头中的IPv4协议字段设置为41,其中,IPv6隧道通讯包括使用IPv4兼容地址、6over4地址、ISATAP地址和6to4地址的通讯。因此,IPv4头部中的协议字段(值为41)能表明该隧道封装的是IPv6报文。
3,IPv6头部的有效负载长度字段(Payload Length)裁减掉,因为可以从IPv4头部中的Total Length字段来推算(推算方法为Payload Length=TotalLength-42);
4,IPv6头部的Next Header(8bits)和HopLimit(8bits)字段共16bits整体放入IPv4头部的Identification字段(16bits)中。因为在6to4隧道中,IPv4看作为IPv6的链路层,所以无需考虑IPv4分片的情况,而是由IPv6自行分片,IPv4的Identification字段未被使用,可以用于放置Next Header和Hop Limit字段。
5,IPv6头部的Traffic Class(8bits)字段与Flow Label(20bits)字段的高4位作为整体共计12位,放到IPv4头部的Fragment Offset(13bits)字段的低12位;
6,Flow Label字段的低16位(2个字节)与IPv6源地址和目的地址剩余的20字节放在IPv4头部后面。
7,把IPv4的Flag字段(3bits)的最高位,即保留位,置为1,以表示这是一个压缩报文,接受者根据此标志可判断此报文经过压缩,需要做相应的解压缩处理。
经过上述压缩后,IPv6头部只剩下22个字节,再加上IPv4的20个字节,共计42个字节,即当IPv6报文通过6to4隧道传输时,6to4的头部长度被压缩成42个字节长度,相对于非隧道封装的IPv6报文,仅仅增加了2个字节的头部长度,提高了传输的效率。
隧道压缩后的报文封装格式如下图6所示:
隧道终点收到压缩报文后,根据Flag字段中的保留标志位判断出该报文为压缩报文,则会把TC(Traffic Class)、FL(Flow Label)、Next Header、HopLimit字段从报文中还原出来,以及推算出Payload Length值,并且根据IPv4的源地址和目的地址重新组成IPv6的源地址和目的地址,从而完整的还原出原始的IPv6报文。
通过对IPv6头部固定字段进行裁减和合并的方法使得6to4隧道的头部长度由原来的60个字节压缩为42个字节,能获得与非隧道传输大致相当的MTU值,从而相对提高了传输效率,并且能完整的还原原始报文。
本发明还提供了一种6to4隧道的压缩装置,如图7所示,应用于隔离的IPv6网络通过IPv4网络互通的系统中,所述系统包括源端设备和目的端设备,所述装置为源端设备时,包括:
封装模块710,用于将IPv6报文封装为IPv4报文,并将IPv4头部和IPv6头部通过裁减或共用部分字段进行压缩,并添加压缩标志位;
封装模块710,具体用于通过以下方式中的一种或几种实现裁减:
裁减掉源IPv6地址和目的IPv6地址中表示固定的IPv6地址前缀及表示该6to4隧道对应32位全球唯一IPv4源地址的部分,即2002:abcd:efgh,共计12字节;
裁减掉IPv6头部的Version字段,共计4bits;
裁减掉IPv6头部的有效负载长度字段。
封装模块710,具体用于通过以下方式中的一种或几种实现共用:
将IPv6头部的Next Header和HopLimit字段共16bits整体放入IPv4头部的Identification字段中;
将IPv6头部的Traffic Class字段与Flow Label字段的高4位作为整体共计12位,放到IPv4头部的Fragment Offset字段的低12位;
将Flow Label字段的低16位与IPv6源地址和目的地址剩余的20字节放在IPv4头部后面。
封装模块710将IPv4的Flag字段的最高位置为1或0,以表示压缩报文。
发送模块720,与封装模块710连接,用于通过隧道将所述压缩后的报文发送到目的端设备;
所述装置为目的端设备时,包括:
接收模块730,用于接收来自所述源端设备的报文;
判断模块740,与接收模块730连接,用于通过压缩标志位判断为压缩报文;例如,根据Flag字段中的保留标志位判断出该报文为压缩报文。
解压缩模块750,与判断模块740连接,用于对压缩报文,根据与源端设备的压缩方法对应的解压缩方法从所述压缩报文中还原出原始的IPv6报文。具体用于根据固定的IPv6地址前缀,固定端口与32位全球唯一IPv4源地址的对应关系,恢复源IPv6地址和目的IPv6地址中表示固定的IPv6地址前缀及表示该6to4隧道对应32位全球唯一IPv4源地址;
根据压缩报文中IPv4头部的协议字段获取IPv6头部的Version字段;
IPv4头部中的Total Length字段-压缩后报文长度获得IPv6头部的有效负载长度字段;
从IPv4头部的Identification字段中获取IPv6头部的Next Header和HopLimit字段共16bits;
从IPv4头部的Fragment Offset字段的低12位中获取IPv6头部的TrafficClass字段与Flow Label字段的高4位;
从IPv4头部后面获取Flow Label字段的低16位与IPv6源地址和目的地址剩余的20字节。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到本发明可以通过硬件实现,也可以借助软件加必要的通用硬件平台的方式来实现。基于这样的理解,本发明的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
本领域技术人员可以理解附图只是一个优选实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。
本领域技术人员可以理解实施例中的装置中的模块可以按照实施例描述进行分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。
上述本发明序号仅仅为了描述,不代表实施例的优劣。
以上公开的仅为本发明的几个具体实施例,但是,本发明并非局限于此,任何本领域的技术人员能思之的变化都应落入本发明的保护范围。