IPv4向IPv6演进方案
发布时间:2006-10-14 8:03:49   收集提供:gaoqian
张惠卿 钱辉兵 何勇琳 沈金龙

本文作者张惠卿女士,南京邮电学院计算机科学与技术系计算机应用专业研究生;

钱辉兵先生,江苏移动盐城分公司工程维护部助理工程师;何勇琳女士,

南京欣网视讯科技股份有限公司软件开发工程师;沈金龙先生,

南京邮电学院计算机科学与技术系教授。


  关键词:IPv6 隧道技术 双栈技术

一 前言

  网络发展的日新月异,使人类的生活发生了重大变革。在全世界范围内,Internet的发展正以几何速度增长着。新的协议、新的应用及新的服务不断地出现,网络给人们提供了无尽的资源与机会。目前的IP协议版本是IPv4。但是随着网络的飞速发展,IPv4已经暴露出其当初设计不足的地方。尤其是地址空间的局限性使得升级IP协议成为必然。从20世纪90年代初以来,国际上已经开始讨论下一代的IP协议,IETF最终确定IPng协议为版本6,称为IPv6。

二 IPv4向IPv6演进方案

  目前Internet上成千上万的主机、路由器等网络设备都运行着IPv4协议。这就决定了IPv4的网络向IPv6演进将是一个浩大而且烦杂的工程,IPv4和IPv6网络将在很长时间内共存,如何从IPv4平滑地过渡到IPv6是一个非常复杂的问题。到目前为止,基本的方式有隧道、双协议栈及NAT/PT等。

1. 隧道技术

  隧道技术在过渡阶段中是IPv6单独子网间通信的基本手段。这种机制在IPv4网络“海洋”之上连接孤立的IPv6节点“孤岛”。隧道技术将IPv6的分组封装到IPv4的分组中,封装后的IPv4分组将通过IPv4的路由体系传输,分组报头的“协议”域设置为41,表示这个分组的负载是一个IPv6的分组,以便在适当的地方恢复出被封装的IPv6分组并传送给目的站点。隧道技术如图1所示。



  这样就可以实现两个IPv6“孤岛”之间的连接。同时在IPv6变为主导后,可以反过来作为IPv4“孤岛"的连接方式。

2. 双协议栈

  双栈方式是过渡阶段的一种主要的方式。双栈方式是指主机同时运行IPv4和IPv6两套协议栈,同时支持两个版本的网络层IP协议标准。主机和路由器都可以通过双栈方式来获得和IPv4及IPv6结点的通信能力。

  双栈工作方式可以描述如下:

  a. 如果应用程序使用的目的地址是IPv4地址,则使用IPv4协议栈。

  b. 如果应用程序使用的目的地址是嵌入IPv4地址的IPv6地址,则IPv6就封装到IPv4中。

  c. 如果目的地址是IPv6地址,则使用IPv6地址,或者封装在默认配置的隧道中。

  双栈协议层次模型如图2所示。



3. 地址翻译与报头转换技术(NAT/PT)

  隧道技术一般用于IPv6节点间的通信,而对于v4和v6节点间的通信,采用直接对IPv4和IPv6报文进行语法和语义翻译的NAT/PT技术。基本工作原理如图3所示:当IPv6子网中有IPv6分组发给网关时,网关将其转化成IPv4分组发向IPv4子网;反过来当IPv4子网中有数据分组要发送时,网关就将其转化成IPv6分组发向IPv6子网。转化网关要维护一个IPv4和IPv6地址的映像表。



  NAT/PT技术是在SIIT(Stateless IP/ ICMP Translator)技术上发展起来的。SIIT是一种网络层的翻译技术。NAT/PT技术主要是按照协议规范规定的报头格式对IPv4和IPv6的协议进行转化,从而连接IPv4和IPv6两个部分。转化分为两个部分,一个是IPv4和IPv6地址的转化,另外一个是IPv4和IPv6报头的转化。

  a. 地址转换

  IPv4的地址是32位,而IPv6的地址为128位,两个地址格式不同的地址之间需要建立映像关系。有以下几种建立方式。封装IPv4地址为ADDR4类型,封装IPv6地址为ADDR6类型,封装IPv4兼容IPv6地址为ADDR64型。

  (1)DNS解析地址

  为了扩展DNS支持IPv6,IETF先后定义了两种新的资源记录类型:AAAA和A6。为了实现v4和v6的转化可以扩充DNS服务器,为IPv4或IPv6的网络提供DNS服务器作“IP转换欺骗”。IPv4主机(ADDR4)向DNS请求查询的时候,如果DNS服务器发现目的主机只有IPv6地址(ADDR6),将会返回给该IPv4主机一个IPv4的地址(ADDR64)作为查询结果。DNS服务器要和NAT-PT转换网关实时的通信,保持ADDR4、ADDR6和ADDR64这3个地址之间对应关系的更新。这样NAT-PT网关就可以根据这些信息进行地址/协议转换。同样适用于当IPv6主机查询DNS获得IPv4地址的时候。

  (2)IPv4和IPv6地址映像表

  地址映像表将IPv4地址和IPv6地址分别看作内部地址和全局地址,或者正好相反。内部的IPv4主机和外部的IPv6主机通信时,将IPv4地址(相当于内部地址)变换成IPv6地址(相当于全局地址),服务器维护一个IPv4与IPv6地址的映像表。反之,当内部IPv6主机和外部IPv4主机进行通信时,IPv6转为IPv4地址。执行NAT/PT的主机上配置了一个地址映像表。这个映像表形如:

  10.10.9.200 beef:feed::1234:5678

  3ffe:1cff::bead:ed:cafe:dffd 100. 10.9.188

  (3)利用IPv4兼容IPv6地址

  类似于::10.10.9.188这样的IPv6地址称为IPv4兼容的IPv6地址。在v6结点要访问v4结点的时候,可以使用这种地址作为v6结点去访问v4结点时的目的地址。NAT/PT网关处理时只要把低32位取出来作为v4包的目的地址即可。对于IPv6地址来说,也可以使用这种v4兼容的v6地址,但这就要求每个IPv6结点有对应的一个v4地址。

  b. 报头转换

  IPv4报头和IPv6报头之间有一些字段可以直接转化,而一些字段是对方特有的,需要特殊处理。

  (1)IPv4 To IPv6

  在IPv4没有分段的情况下,也就是IPv4.Df=0,这个时候偏移量也为0。IPv6的报头转换如下:

  IPv6.Version=6:将版本变为6

  IPv6. Traffic Class=IPv4.TOS:直接拷贝,或者按照语义予以翻译

  IPv6. Flow Label=0:可以全部置为0

  IPv6.Payload Length=IPv4.length-length(IPv4-header):新的IPv6中的负载长度定义为净荷的长度,也就是总长度减去IPv4报头和选项的长度。

  IPv6.Next header=IPv4.Protocol:协议字段直接拷贝过来

  IPv6. Hop Limit=IPv4.TTL-1:逐跳限制和IPv4的生存时间含义相似,如果是跳数为0就要发出ICMP报文给源目的地。

  IPv6. Source Address=ADDR64(IPv4. Source Address):IPv4地址转换得到的ADDR64地址

  IPv6. Destination Address=ADDR64 (IPv4. Destination Address):准备发送的目的地址。

  (2)IPv6 To IPv4

  在IPv6没有分段扩展报头情况下,IPv6转化到IPv4报头的算法如下:

  IPv4.Version=4:将版本变为4

  IPv4.length=5:没有选项扩展报头的情况下

  IPv4.TOS=IPv6. TrafficClass:直接拷贝,或者按照语义予以翻译

  IPv4.Total Length=IPv6.Payload length+IPv4.length:总长度设置

  IPv4. Identification=zero

  IPv4. Flags=0

  IPv4. Fragment Offset=0

  IPv4.Next header=IPv6.Protocol:协议字段直接拷贝过来

  IPv4.TTL=IPv6. Hop Limit-1: IPv4的生存时间和IPv6逐跳限制和含义相似,如果是0就要发出ICMP报文给源目的地。

  IPv4.Header Checksum=sum():需要对IPv4头做一个校验和

  IPv4.Protocol=IPv6.Next header:协议字段直接拷贝过来。

  IPv4. Source Address=ADDR64(IPv6. Source Address):IPv6地址转换得到的ADDR64地址

  IPv4. Destination Address=ADDR64 (IPv6. Destination Address):准备发送的目的地址。

三 结论

  IPv6的最终实现还需要很长时间。但是由于各种推动因素的加剧,IPv6网络的大规模实施已经为期不远。网络过渡时期中IPv4和IPv6技术将保持长时间共存,并最终过渡到IPv6。虽然通过CIDR和NAT等技术,可以缓解IPv4向IPv6演进的步伐,但IP网络的高速发展已成为不可阻挡的趋势,从长远发展的眼光来看,IPv6技术势在必行。总之,下一代的IP网络将是一个以IPv6协议族为基础,保持高度简洁的网络核心同时结合区分服务及其他技术提供服务质量,可以承载复杂多样的业务,可以运行在各种网络底层平台之上的统一IP网络。这个网络将作为计算机网络,通信网络的统一平台。 (全文完)


----《世界电信网络》
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50