[an error occurred while processing this directive] 中国互联网络信息中心 [an error occurred while processing this directive]

[an error occurred while processing this directive]

[an error occurred while processing this directive]

IPv6简介



中科大信息网络实验室 王辉 洪佩琳 李津生

(通信地址:230027 合肥4号信箱 中科大西区 6-406室)


1. 技术背景

    随着Internet用户的迅速增加网络地址不足的危机日益严重,按目前入网主机的增长速度预计到2005年左右IP地址将被耗尽。Internet面临的另一个问题是路由表规模的急剧膨胀。到90年代末将达到极限,如不采取措施可能在IP地址枯竭之前就会导致网络瘫痪。正是在这一背景下提出了新一代的Internet协议-IPv6[1]。 
    IPv4是非常出色的设计,如果它存在着重大缺陷,Internet就不会发展成今日的规模。IPv6继承了IPv4的优点,并根据20年来对IPv4运用的经验进行了大幅度的功能扩充。

1.1. IPv4潜伏的三大危机

    1969年美国国防部为适应核战争的通信需要建立了ARPANET实验网,1973年开发出基于TCP/IP协议的IPv4原型,其后经三次修订,于1981年9月IETF公布了IPv4标准规范RFC791文件[2]。IPv4取得了巨大的成功,但早在1990年TCP/IP专家们就已察觉出它潜伏着下列三大危机。
(1) 地址枯竭
    在IP头标中能够处理的地址数由IP地址域的长度决定。IPv4的地址域为32比特,可提供232(约40亿)个IP地址。但因将IP地址按网络规模划分成A、B、C三类后,用户可用地址总数显著减少。根据预测,到2003年~2005年IPv4地址将被用尽。
(2) 网络号码匮乏
    在IPv4中,A类网络只有126个,每个能容纳1亿多个主机;B类网络也仅有16,382个,每个能容纳6万多个主机;C类网络虽多达209万余个,但每个只能容纳254个主机。随着ISP的激增,这三类地址很快被占满,新出现的网络难以加入Internet。
(3) 路由表急剧膨胀
    随着ISP数目的增长,已经出现路由表占满路由器内存,导致网络异常的恶性故障。如不采取措施,Internet可能在地址枯竭之前就会瘫痪。

1.2. IPv6的解决方案

    IPv6就是为了解决这三个根本缺陷而设计的, IETF于1992年开始开发IPv6协议,1995年12月以RFC1883文件公布了建议标准(proposal standard),1996年7月和1997年11月先后发布了版本2和2.1的草案标准(draft standard),1998年12月发布了草案标准(draft standard)RFC2460。IPv6继承了IPv4的优点,并根据IPv4 10年来运用的经验进行了大幅度的修改和功能扩充。IP协议的变化对TCP/IP协议栈的许多协议发生影响。事实上,在现行的TCP/IP标准中至少有58个标准为适应IPv6而必须修订。IPv6比IPv4处理性能更加强大、高效。

(1) IPv6提供巨大的地址空间[3]
    IPv6的IP地址域为128比特,拥有2128巨大的地址空间。理论上这一规模能够对地球表面的每一平方米提供6.65′1023个网络地址。和IPv4相同,因地址分层运用,实际可用的总数要小得多。但保守的估计每平方米也有1600 个IP地址。IPv6的目标是:通过1012网络连接1015计算机。
    IETF认为采用内部地址和CIDR缓解IPv4地址空间的不足是暂时的,到2008年左右地址将被分光用尽,估计到2018年IPv4将停止使用。在人口众多的中国和印度等Internet尚不普及的国家中,这一日程还会提前。
    采用IPv6地址后,不仅每个人拥有一个IP地址,就连未来的电话、冰箱等每一台信息家电设备都能分到一个IP地址。一个人拥有100台计算机也并非梦想。
(2) IPv6具有与网络适配的层次地址
    和IPv4一样,IPv6的IP地址分成表示特定网络的网络前缀和表示主机或服务器的主机地址二部分。如图1所示,在128位中高64比特表示网络前缀,低64比特表示主机。


图1 IPv6按网络结构层次化地分配地址


    为将网络前缀分成多个层次的网络,又将其分成13比特的TLA(Top-Level Aggregation)ID,24比特的NLA(Next-Level Aggregation)ID和16比特的SLA(Site-Level Aggregation)ID。首先,由管理IPv6的组织将某一确定的TLA值分配给某个骨干网的ISP。它拥有104比特这样巨大的地址块。骨干网的ISP再将地址块细分,分配给各个地区/中小ISP。用户从地区/中小ISP分到地址块。不过目前地址具体的划分方案正在讨论和研究之中。

(3) IPv6寻路效率比CIDR高
    层次化分配IP地址可减小路由器中路由表的规模,从而减少了存储器的容量和CPU的开销,提高了查表和转发IP分组的速度。

1.3. IPv6优越性能
    下面通过比较IPv4和IPv6头标的结构可以看出IPv6的优越性能(参阅图2)。虽然IPv6头标占40字节,是24字节IPv4头标的1.6倍,但因其长度固定(IPv4头标是变长的),故不需要消耗过多的内存容量。又因其要处理的域由IPv4的14个减少到8个,从而大大减少了路由器上的软件处理内容。
    据Cisco systems资料表明,IPv6版的路由器软件内核(kernel)实际上比IPv4还小。在Cisco 2500系列中配置的IPv4内核为2.17MB,如计及存放路由表的工作区(work area)则升至3.2MB,而配置IPv6的内核时,其内核仅为1.69MB,计及工作区也不过2.7MB。
    如图3所示,在IPv6报头中删除了一些不必要的IPv4功能,加强了其一些功能,并且还增加了许多新功能。这些新增的功能是:

(1) anycast功能
anycast是指向提供同一服务的所有服务器都能识别的通用地址(anycast地址)发送IP分组,路由控制系统将该分组送至最近的服务器。例如,利用anycast可以访问离用户最近的DNS服务器和文件服务器等。


图2 IPv4与IPv6的比较

(2) plug & play功能
    它是指计算机接入Internet时可自动获取、登录必要的参数的自动配置功能、地址检索等功能。
(3) 安全功能
    IPv6规定了"认证头标(AH:authentication header)"和"封装安全净荷(ESP:Encapsulation Security Payload)"来保证信息在传输中的安全。
(4) QoS功能
    利用IPv6头标中的8比特优先级域和20比特的流标记域可以确保带宽,实现可靠的实时通信。
其中第(1)、(2)项只需利用IPv6头标中的目的IP地址;第(3)项要利用IPv6基本头标和扩展头标实现。扩展头标是为了简化基本头标而导入的规范。它被用来实现IPv4中的Option功能、IPv6中新增的功能以及高层协议。第(4)项只利用基本头标即可实现。

2. IPv6协议与IPv4协议异同比较

    IPv6在协议设计上充分考虑到了IPv4网络实践过程中的经验,并尽可能的使其适合未来网络的发展需要。新的IP协议设计的一个基本的理念是:如果IPv4协议有非常重大的错误设计的话,现行的因特网不可能取得现在这么大的成功。IPv4是一个非常好的设计,IPv6当然要继承和发展其优秀的特性。事实上,我们仅仅可以只是简单的将地址空间扩大就可以了,然而,20多年的运行给我们来丰富的经验,我们完全可以在IPv4的基础上,将在这运行经验转化到新的因特网协议中去。所以,IPv6不是简单的IPv4的继承,而是一个有力的改进。
    IPv6和IPv4设计的主要差异表现在头标的差异上,我们研究IPv4向IPv6的演进技术,首先必须对IPv6和IPv4协议的异同点有个完整的了解。
    下面我们来介绍IPv4和IPv6头标格式的异同点。

2.1. IPv6基本头标格式[1]

2.1.1. 版本和优先级

1.版本
    IPv6数据报中的第1个域是4比特的版本号。在所有IPv6数据报中将该域置成6。
2.业务类型域
     紧接版本域之后的8比特指示业务类型。某个数据报相对于进入同一网络的其他数据报的重要程度由该域的值定义。利用业务类型域,首先区分二大业务量(traffic),即受拥塞控制的(congestion-controlled)业务量和不受拥塞控制的(noncongestion-controlled)业务量,然后再进一步确定各类内的优先级。系统发送受拥塞控制的业务量时,它将不断地监测网络的拥塞状况,信源一旦检测出拥塞,就放慢操作,减少送入网络的业务量。系统通过放慢操作来缓解拥塞状态。

2.1.2. 流标记

    在IPv6规范中对流作如下定义:"流是指从某个源点向(单目或组播的)信宿发送的分组群中,源点要求中间路由器作特殊处理的那些分组"。换句话说,流是指源点、信宿和流标记三者分别相同的分组的集合。
    导入流标记域对TCP/IP的发展具有重要意义。将流标记和信源地址组合,即可分辨网络中特定的业务量流。图2.3示出了简单网络中2个业务量流。第一个流从Mac流向小型机;第2个流从PC流向工作站。特定流的业务量在网络中应受到相同的处理。一个流的所有分组拥有相同的信源地址和其他信息(如计费信息、身份认证信息等),它们对通道上的路由器具有相同的选项(option),这种选项由中继点选项HOP by HOP和寻路头标组成。


    还可以利用流标记来支持高级的TCP/IP应用。图4的视频传送就是这种应用的一个实例。为了传送数字视频信息,要求网络提供相应的带宽、缓存空间、处理能力等资源。为保证视频信息的成功传送,应用可事先预留这些资源。预留后,在传送视频信息时可在应用的数据报中利用流标记指示许可使用预留的资源[4]。


    并非所有的分组都属于流。实际上从IPv4向IPv6的过渡期间大部分的分组不属于特定的流。例如,SMTP、FTP以及WWW浏览器等传统的应用均可生成分组。这些程序原本是为了IPv4而设计的,在过渡期为使IPv4地址和IPv6地址都能处理而进行了改进,但不能处理在IPv4中不存在的流。在这分组中应置入由20比特0组成的空流标记。

2.1.3. 净荷长度

    净荷长度域指示IP基本头标以后的IP数据报剩余部分的长度,单位是字节。此域占16比特,因而IP数据报通常应在65535字节以内。但如果使用Hop By Hop 选项扩展头标的特大净荷选项,就能传送更大的数据报;利用此选项时净荷长度置0。

2.1.4. 中继点限制

    中继点限制决定了能够将分组传送到多远。主机在生成数据报时,在中继点限制域中设置某一初值,然后将数据报送到网上的路由器。各路由器从该值起逐次减1。如数据报到达信宿之前其中继点限制变为0,该数据报就被抛弃掉。

2.1.5. 下一个头标

    下一个头标用来标识数据报中的基本IP头标的下一个头标。在此头标中,指示选项的IP头标和上层协议。表3.1列出了主要的下一个头标值。其中一些值用来标识扩展头标。
    以下各节将对这些值作进一步的说明。当需要新的选项,或开发出新的协议时,就为其分配新的下一个头标值。


表3.1 IP下一个头标值

中继点选项头标
IP
TCP
17  UDP
43  寻路头标
44  报片头标
45  IDRP
46  RSVP
50  封装化安全净荷
51  认证头标
58  ICMP
59  无下一个头标
60  信宿选项头标


2.1.6. 源地址和信宿地址

    基本IP头标中最后2个域是信源地址和信宿地址。它们各占128比特。在此域中置入数据报最初的信源和最后的信宿。

2.2. 从"选项"到"扩展头标"

    IPv4头标中存在可变长度的选项,利用它可以处理具有指定路径控制、路径记录、时戳(time stamp)和安全等选项的特殊分组。但因这种分组会影响网络的性能,故选项逐渐被废弃。
    路由器的设计者非常清楚减少命令数,优化分组转发程序,以快速通道(fast path)处理那些最频繁出现的分组,能够显著地提高路由器的性能。带有选项的分组往往被送入低优先级队列,因此只能以非优化的软件处理这类分组。利用选项总是以降低性能为代价的,因而设计者倾向于只采用不带选项的分组。
    然而需要作特殊处理的分组是不可缺少的。例利用指定路径控制使分组通过特定路径或指定由接收方进行特殊的操作时就需进行特殊的处理。根据IPv4的运用经验,IPv6中规定了使用扩展头标(extension header)的特殊处理。

2.2.1. IP扩展头标

    所有的IP分组都应从基本头标开始。在许多情况下此头标能够完成将分组正确送达到信宿的功能。除此之外,IP还能提供一些简单的功能附加在此功能之中。IP 为将附加的信息送到通道上的信宿系统及中间系统,使用了扩展头标。
    扩展头标加在IP分组的基本头标之后。IPv6(extension header)规范中定义了若干种不同的扩展头标。它们由下一个头标域的值来标识。表3.2列出了扩展头标的初值。除59外,各扩展头标具有各自的头标域。利用这种结构,IP可以像菊花链那样一个接一个地罗列多个扩展头标。最后的扩展头标域中利用了下一个头标域来指示上层协议。

表3.2 IP扩展头标

0 中继点选项头标(hop-by-hop option header)
43 寻路头标(routing header)
44 报片头标(fragment header)
51 认证头标(authentication header)
59 无下一头标(null)
60 信宿选项头标(destination options header)

    图5示出了具有扩展头标的IP分组。应当注意,到认证为止的各个头标指示着下一个头标。认证头标的下一个头标构成高层协议,这里是TCP。
    表3.2和图5示出了推荐的头标顺序。此顺序对中间系统高效处理分组是十分重要的。在许多情况下,路由器只注意Hop-By-Hop选项和寻路头标。按推荐的顺序排列头标的好处是路由器发现除此之外的头标时就没有必要在查看在其之上的数据报。
    头标顺序的唯一例外是信宿选项头标。在许多情况下,信宿选项只是为了最后的信宿设置的。此选项必须在数据报的扩展头标之后出现。或者说,它应恰好出现在上层协议头标之前。
    头标类型不得重复使用协议代码,可分配0~255间未被使用过的值(参阅表3.3)。IPv4与IPv6的类型有些差别但大体相同。

图5 IPv6数据报的扩展头标


2.2.2. 寻路头标

   信源将分组发往信宿时,在某些情况下还希望控制该分组经由的路径。例如为使该分组通过最佳路由对网络进行提示,也可能为避开不合适的路由器需要控制路径。信源利用寻路头标与IP基本头标的信宿地址的组合来定义分组通过网络的路由。

2.2.3. 报片头标

    与IPv4不同,IPv6路由器不对过大的分组进行分段,如果分组比到下一个中继点的最大传输单元(MTU:Maximum Transmission Unit)大时,就抛弃该分组并回送ICMP消息。IPv6主机可以在向网络发送分组前,将该分组分成若干较小的报片(fragment)。各报片可以独立地控制路由,并由信宿主机再将其回复成原分组。

2.2.4. 信宿选项头标

    在IPv6中为"信宿选项"头标定义的头标类型为60(参阅图2.14)。此头标具有很高的自由度,含有1个以上的选项参数。各选项参数由选项号码标识。
    目前只定义了二个填充选项作为信宿选项。

    填充1选项
    最简单的选项是填充1(pad 1),它由1字节的全"0"比特构成。该选项无长度域,因此长度为1。可以利用此选项将头标内的其他选项的位置错开,最常用的情况是满足配置限制来设置其他选项。
    填充N选项

2.2.5. 中继点选项

    信宿选项头标是分组到达信宿时才被处理的扩展头标。各中继点对此头标不做任何处理,这与IPv6的设计思想是一致的。但对管理和调试功能来说,存在着IP分组路径上所有的路由器都要处理的IP选项,这就是头标类型为0的中继点(Hop By Hop)选项。换句话说,当IPv6头标中的下一个头标代码为0时,就表明存在着中继点选项。此选项与信宿选项不同,即使信宿地址不是自己的地址也要对其进行处理。

2.3. ICMP的改进[5]

    IP层协议最重要的任务是将数据从信源传送到信宿,但除此之外还应为系统间的调整提供必要的调整功能。所谓系统间的调整是指邻机系统发现、地址分配的控制和组成员管理等功能。IP层协议也提供差错报告和诊断的功能。TCP/IP将这些功能综合成一个协议,即Internet控制报文协议(ICMP:Internet Control Message Protocol)。

2.4. IPv6地址结构

    IPv6与IPv4比较最显著个一个改动就是使用128比特上的地址来代替了32比特长的IPv4地址。128比特的地址具有极大的可分配性,地址的分配方案直接和网络的路由的效率有关,因此地址结构是在演进过程中值得深入研究的课题。
所有IPv6的地址都被分配到接口,而非节点。一个IPv6单播地址与一个单个的接口相关联。由于每个接口都属于一个单个节点,所以该节点的任意接口的单播地址都可以用作该节点的一个标识符。

2.4.1. 单播地址

    IPv6单播地址在使用连续的比特掩码后是可聚集的,这一点类似于无类型域间寻经(CIDR:Classless Inter-Domain Routing)下的IPv4地址[ RFC 1519]。
    在IPv6中,定义了若干形式的单播地址,包括:全局的可聚集全局单播地址、NSAP地址、IPX层次地址、场所局部地址、链路局部地址、以及IPv4兼容主机地址。将来还可以定义其它的地址类型。

2.4.2. 任播地址(Anycast Addresses)

    IPv6任播地址是分配给多于一个接口(通常属于不同的节点)的地址,其特点是:发往一个任播地址的分组将被寻经到"最近"的一个具有该地址的接口。这里的"最近"指的是寻经协议中的最近。
    任播地址从单播地址空间中进行分配,使用单播地址的任何格式。因而,从语法上,任播地址与单播地址没有区别。当一个单播地址被分配给多于一个的接口时,就将其转化为任播地址。被分配具有任播地址的接点必须得到明确的配置,从而知道它是一个任播地址。
    对任意的任播地址,都有最长的地址前缀P,它限定了一个拓扑区域,所有属于该任播地址的接口都处在这个区域中。在P所限定的这个区域中,属于该任播地址集合的每一个成员都必须作为寻经系统中的单独入口而被广告;在该区域之外,该任播地址也许会聚集到对该前缀P的寻经广告中。

2.4.3. 组播地址(Multicast Addresses)

    IPv6组播地址是对一组节点的一个标识符。一个节点可以属于任意数量的组播组(group)。组播地址有如下格式:


    Group ID:用于确定组播组,在给定的区域范围内,可以是永久的,也可以是暂时的。
对于永久分配的组播地址,其"意义"独立于其区域值。例如:假设"NTP服务器组"被分配了一个group ID为101(十六进制)的永久组播地址,则:
    FF01:0:0:0:0:0:0:101 是指与发送者在同一节点的所有NTP服务器;
    FF02:0:0:0:0:0:0:101 是指与发送者在同一链路的所有NTP服务器;
    FF05:0:0:0:0:0:0:101 是指与发送者在同一场所的所有NTP服务器;
    FF0E:0:0:0:0:0:0:101 是指internet中的所有NTP服务器。
    对于非永久分配的组播地址,只有在给定的区域范围内才有意义。例如:一个场所的非永久场所局部组播地址为FF15:0:0:0:0:0:0:101,则该组与不同场所的相同地址的组无关,与不同区域中有相同group ID的非永久组无关,与使用相同group ID的永久组无关。
    组播地址绝不可以用作IPv6的信源地址,或用作任何寻经头标。

2.5. IPv6和IPv4主要异同点小结

    由以上的讨论,我们可以将IPv6头标和IPv4头标的基本异同点总结如下:
    新的IPv6头标的结构比IPv4简单得多。IPv4(图2)中有10个固定长度的域、2个地址空间和若干个选项,IPv6中只有6个域和2个地址空间。
    在IPv6中起始4比特的版本号和IPv4的意义相同,其位置保持不变。这是由于考虑到同时利用IPv4和IPv6进行通信的情况。也就是说,原本设想生成数据链路帧时进行相同的封装,使IPv4和IPv6能够共用数据链路层的驱动程序。
    网络层利用此版本域来决定对分组的处理。当版本值为4(0100)时,就认为是IPv4的分组,版本值为6(0110)时,就看作IPv6的分组。然而实际上舍弃了这种想法只作有限的使用。这是由于在底层可以将IPv4和IPv6分离的缘故。例如,在Ethenet上传送IPv6分组时,Ethenet的帧类型(frame type )是16进制数的86DD,而不是IPv4的8000(16进制数)。
    IPv4中的头标长度(header length)、服务类型(TOS: type of service)、标识符(identification)、标志(flag)、报片偏移(fragment offset)和头标校验和(header checksum)这6个域被删除。分组全长(total length)、协议类型(protocol type)和生存时间(TTL: time to live)3个域的名称或部分功能被改变,其选项(options)功能完全被改变,新增加了2个域,即优先级和流标记。

参考文献
[1] S. Deering, R. Hinden.: Internet Protocol,Version 6 (IPv6) Specification.(RFC2460)December 1998.
[2] J. Postel. RFC0791 Internet Protocol. Sep-01-1981. 
[3] IAB, IESG. RFC1881 IPv6 Address Allocation Management. December 1995.
[4] R. Braden, Ed., L. Zhang, S. Berson, S. Herzog, S.Jamin. : RFC2205 Resource ReSerVation Protocol (RSVP) -- Version 1 Functional Specification. September 1997.
[5] A. Conta, S. Deering. RFC2463 Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification. December 1998.
[6] Gilligan & E. Nordmark. RFC1933 Transition Mechanisms for IPv6 Hosts and Routers. R. April 1996.
[7] A. Conta, S. Deering. RFC2473: Generic Packet Tunneling in IPv6 Specification. December 1998.
[8] H. Kitamura. draft-ietf-ngtrans-socks-gateway-04.txt A SOCKS-based IPv6/IPv4 Gateway Mechanism. 6 April 2000
[9] K. Egevang, P. Francis. RFC1631 The IP Network Address Translator (NAT). May 1994.
[10] E.Nordmark: RFC2765 Stateless IP/ICMP Translation Algorithm(SIIT), February 2000
[11] G.Tsirtsis RFC 2766 Netword Address Translation-Protocol Translation(NAT-PT). February 2000.
[12] Jun-ichiro itojun Hagino, Kazu Yamamoto draft-ietf-ngtrans-tcpudp-relay-00.txt: An IPv6-to-IPv4 transport relay translator. July 16, 2000
[13] R. Hinden, S. Deering. RFC2373 IP Version 6 Addressing Architecture. July 1998.
[14] R. Hinden, M. O'Dell, S. Deering. RFC2374 An IPv6 Aggregatable Global Unicast Address Format. July 1998.
[15] R. Hinden. RFC2450 Proposed TLA and NLA Assignment Rule. December 1998.
[16] 新因特网协议IPv6 Christian Huitema著1999年5月第1版
[17] S. Berson : draft-berson-rsvp-ipv6-fl-00: RSVP and Integrated Services with IPv6 Flow Labels 
[18] B. Carpenter, C. Jung. RFC2529 Transmission of IPv6 over IPv4 Domains without Explicit Tunnels. March 1999.
[19] B. Carpenter K. Moore draft-ietf-ngtrans-6to4-04.txt Connection of IPv6 Domains via IPv4 Clouds without Explicit Tunnels March 2000
[20] R. E. Gilligan, E.Nordmark draft-ietf-ngtrans-mech-06.txt Transition Mechanisms for IPv6 Hosts and Routers, April 14, 2000

 





[an error occurred while processing this directive]