IPv4/v6互通技术
本文首先介绍互通技术出现的背景及现状,随后对IPv4向IPv6过渡的三种基本技术作了简单的介绍,接下来分别介绍了IPv6小岛之间的通信方式,以及IPv6小岛与IPv4海洋之间的通信方式,最后就如何选择合适的过渡机制谈了些看法。
1.互通技术出现的背景及现状
IPv6已被认为是下一代互联网络协议核心标准之一。但是,一种新的协议从诞生到广泛应用需要一个过程,尤其是对于IPv4仍然很好的支撑着的Internet而言。在IPv6的网络流行于全球之前,总是有一些网络首先使用IPv6协议栈并希望能够与当前的Internet正常通信。为达到这一目的,研究者们必须开发出IPv4 / IPv6互通技术以保证IPv4能够平稳过渡到IPv6,除此之外,互通技术应该对普通用户做到“无缝”,对信息传递做到高效。
为了开展对于IPv4/IPv6过渡问题和高效无缝互连问题的研究,国际上,IETF组建了专门的working group即NGTRANS工作组来处理这个问题。同时,IETF在全球范围内成立试验床6-Bone,专门对IPv6的特性进行研究。目前已经出现了多种过渡技术和互连方案,这些技术各有特点,用于解决不同过渡时期、不同环境的通信问题。
在过渡的初期,Internet将由运行IPv4的\"海洋\"和运行IPv6的\"小岛\"组成。随着时间的推移,IPv4的海洋将会逐渐变小,而IPv6的小岛将会越来越多,最终完全取代IPv4。在过渡的初期,要解决的问题可以分成两大类:第一类就是解决这些IPv6的小岛之间互相通信的问题;第二类就是解决IPv6的小岛与IPv4的海洋之间通信的问题。
针对这两类问题已经提出了很多方案,有一些已经相当成熟并形成了RFC,有一些还只是作为Internet draft,有待进一步完善。
2.IPv4向IPv6过渡的三种基本技术
目前解决过渡问题基本技术主要有三种:双协议栈(RFC 2893 obsolete RFC1933)、隧道技术(RFC 2893)、NAT-PT(RFC 2766)。
(1)双协议栈 ( Dual Stack)
采用该技术的节点上同时运行IPv4和IPv6两套协议栈。这是使IPv6节点保持与纯IPv4节点兼容最直接的方式,针对的对象是通信端节点(包括主机、路由器)。这种方式对IPv4和IPv6提供了完全的兼容,但是对于IP地址耗尽的问题却没有任何帮助。由于需要双路由基础设施,这种方式反而增加了网络的复杂度。
(2)隧道技术 ( Tunnel)
隧道技术提供了一种以现有IPv4路由体系来传递IPv6数据的方法:将IPv6的分组作为无结构意义的数据,封装在IPv4数据报中,被IPv4网络传输。根据建立方式的不同,隧道可以分成两类:(手工)配置的隧道和自动配置的隧道。隧道技术巧妙地利用了现有的IPv4网络,它的意义在于提供了一种使IPv6的节点之间能够在过渡期间通信的方法,但它并不能解决IPv6节点与IPv4节点之间相互通信的问题。
(3)NAT-PT
转换网关除了要进行IPv4地址和IPv6地址转换,还要包括协议并翻译。转换网关作为通信的中间设备,可在IPv4和IPv6网络之间转换IP报头的地址,同时根据协议不同对分组做相应的语义翻译,从而使纯IPv4和纯IPv6站点之间能够透明通信。
3.IPv6小岛之间的通信方式
(1)手工配置隧道 ( Configured Tunnel, RFC2893 )
这种隧道的建立是手工配置的,需要隧道两个端点所在网络的治理员协作完成。隧道的端点地址由配置来决定,不需要为站点分配非凡的IPv6地址,适用于经常通信的IPv6站点之间。每一个隧道的封装节点必须保存隧道终点的地址,当一个IPv6包在隧道上传输时终点地址会作为IPv4包的目的地址进行封装。通常封装节点要根据路由信息决定一个包是否要通过隧道转发。
采用手工配置隧道进行通信的站点之间必须有可用的IPv4 连接,并且至少要具有一个全球唯一的IPv4地址。站点中每个主机都至少需要支持IPv6,路由器需要支持双栈。在隧道要经过NAT设施的情况下这种机制不可用。
手工配置隧道的主要缺点是网络治理员的负担很重,因为他要为每一条隧道做具体的配置。
(2)自动配置的隧道 ( Auto-configured Tunnel, RFC2893 )
这种隧道的建立和拆除是动态的,它的端点根据分组的目的地址确定,适用于单独的主机之间或不经常通信的站点之间。自动配置的隧道需要站点采用IPv4兼容的IPv6地址( IPv4 Compatible IPv6 Address,0::IPv4ADDR/96 ),这些站点之间必须有可用的IPv4连接,每个采用这种机制的主机都需要有一个全球唯一的IPv4地址。
采用这种机制不能解决IPv4地址空间耗尽的问题(采用手工配置隧道的站点就不需要IPv4地址)。两外还有一种危险就是假如把Internet 上全部IPv4路由表包括到IPv6网络中,那么会加剧路由表膨胀的问题。这种隧道的两个端点都必须支持双协议栈(手工配置就不需要)。在隧道要经过NAT设施的情况下这种机制不可用。
(3)Tunnel Broker ( RFC3053- IPv6 Tunnel Broker )
Tunnel Broker不是一种隧道机制,而是一种方便构造隧道的机制。可以简化隧道的配置过程,适用于单个主机获取IPv6连接的情况。Tunnel Broker也可用于站点之间,但这时可能会在IPv6的路由表中引入很多条目,导致IPv6的路由表过于庞大,违反了IPv6设计的初衷。用户可以通过Tunnel Broker从支持IPv6的ISP处获得持久的IPv6地址和域名。 Tunnel Broker要求隧道的双方都支持双栈并有可用的IPv4连接,在隧道要经过NAT设施的情况下这种机制不可用。采用TB方法,可以使IPv6 的ISP可以很轻易对用户执行接入控制,按照策略对网络资源进行分配。
TB转换机制包括Tunnel Server(TS)和Tunnel Broker(TB)。server和boker位于不同的计算机上,对于隧道的控制通常是web形式的。
(4)6 over 4 ( RFC2529 ),IPv4多播隧道
6 over 4 也是一种自动建立隧道的机制,这种隧道端点的IPv4地址采用邻居发现的方法确定。与手工配置隧道不同的是,它不需要任何地址配置;与自动隧道不同的是它不要求使用V4兼容的V6地址。但是采用这种机制的前提就是IPv4网络基础设施支持IPv4多播。这里的IPv4多播域可以是采用全球唯一的IPv4地址的网络,或是一个私有的IPv4网络的一部分。这种机制适用于IPv6路由器没有直接连接的物理链路上的孤立的IPv6主机,使得它们能够将IPv4广播域作为它们的虚拟链路,成为功能完全的IPv6站点。
采用这种方法连接的IPv6站点的不需要采用IPv4兼容地址,也不需要手工配置的隧道。当采用6 over 4的站点通过一台支持6 over 4的路由器与外界相连时,站点内的主机可以和外部IPv6站点通信。但是6 over 4还是没有解决一个孤立的用户连接到全球性的IPv6 Internet上。
(5)6 to 4 ( RFC3056)
6to4也是一种自动构造隧道的机制,这种机制要求站点采用非凡的IPv6地址(2002:IPv4ADDR::/48 ),这种地址是自动从站点的IPv4地址派生出来的。所以每个采用6to4机制的节点至少必须具有一个全球唯一的IPv4地址,(这种地址分配方法,可以使得其它域的边界路由器自动地区分隧道接收端点是否在本域内)。由于这种机制下隧道端点的IPv4地址可以从IPv6地址中提取,所以隧道的建立是自动的。6to4不会在IPv4的路由表中引入新的条目,在IPv6的路由表中只增加一条表项。采用6to4机制的IPv6 ISP只需要做很少的治理工作,这种机制很适用于运行IPv6的站点之间的通信。6to4要求隧道中至少有两台路由器支持双栈和6to4,主机要求至少支持IPv6协议栈。
6to4机制答应在采用6to4的IPv6站点和纯IPv6站点之间通过中继路由器 ( 6to4 Relay Router ) 进行通信,这时不要求通信的两个端点之间具有可用的IPv4连接,中继路由器建议运行BGP4+。
这种机制把广域的IPv4网络作为一个单播的点到点链路层。这种机制适合作为V4/V6共存的初始阶段的转换工具,它可以与防火墙、NAT共存,但是NAT box必须具有全球唯一的IPv4地址,并且应有6to4机制和完备的路由功能。
在隧道终点,任何从正常IPv4链路传来的6to4数据流都可以被接受和解封装。为了防止IPv6欺骗,可采用附加的基于源地址的包过滤技术。一种方法就是检查用于封装的IPv4地址是否与被封装的IPv6包头地址一致。这种检查要在中继路由器(relay router)中设置。在任何情况下,6to4数据流中的源和目的地址嵌入的V4地址必须是以全球唯一单播地址格式,否则这些数据包将会在不被警告的情况被丢弃。
4.IPv6小岛与IPv4海洋之间的通信方式
(1)Dual Stack Model ( RFC2893 )
在这种模型下,任意节点都是完全双栈的。这时不存在IPv4与IPv6之间的相互通信问题,但是这种机制要给每一个IPv6的站点分配一个IPv4地址。这种方法不能解决IPv4地址资源不足的问题,而且随着IPv6站点的增加会很难得到满足,因此这种方法只能用在早期的变迁过程。
(2)Limited Dual Stack Model ( RFC2893 )
在这种模型下,服务器和路由器仍然是双栈的,而非服务器的主机只需要支持IPv6。这种机制可以节省大量的IPv4地址,但是在纯IPv6和纯IPv4节点之间的通信将会出现问题,为了解决这种问题,必须与其它技术结合使用。
(3)SIIT ( Stateless IP/ ICMP Translation, RFC2765 )
SIIT定义了在IPv4和IPv6的分组报头之间进行翻译的方法,这种翻译是无状态的,因此对于每一个分组都要进行翻译。这种机制可以和其它的机制(如NAT-PT)结合,用于纯IPv6站点同纯 IPv4站点之间的通信,但是在采用网络层加密和数据完整性保护的环境下这种技术不可用。纯IPv6节点和纯IPv4节点通过一个SIIT转换器通信,IPv6节点看到的对方一个IPv4mapped地址的主机,同时它自己则使用