互联网通信协议第6版(​​英文​​:Internet Protocol version 6,​​缩写​​​:IPv6)是互联网协议的最新版本,用于分组交换互联网络的网络层协议,旨在解决​​IPv4地址枯竭问题​​。

IPv6意图替换​​IPv4​​,而IPv4在2014年5月仍然在网络交通上占有96%。​[1]​​[2]​​[3]​在2014年10月,通过IPv6使用Google服务的用户百分率首次超过5%。​[4]​


背景与目标[​​编辑​​]

今日互联网络的蓬勃发展截至2013年12月,全球上网人数已达22.7亿,​​IPv4​​​仅能提供约2.5亿个IP位置。虽然目前的​​网络地址转换​​​及​​无类别域间路由​​​等技术可延缓网络位置匮乏之现象,但为求解决根本问题,从1990年开始,​​互联网工程任务小组​​​开始规划​​IPv4​​​的下一代协议,除要解决即将遇到的IP地址短缺问题外,还要发展更多的扩展,为此IETF小组创建IPng,以让后续工作顺利进行。1994年,各IPng领域的代表们于​​多伦多​​举办的IETF会议中,正式提议IPv6发展计划,该提议直到同年的11月17日才被认可,并于1996年8月10日成为IETF的草案标准,最终IPv6在1998年12月被​​互联网工程研究团队​​​通过公布互联网标准规范(​​RFC 2460​​)的方式定义出台。

IPv6的计划是创建未来互联网扩充的基础,其目标是替换IPv4,虽然IPv6在1994年就已被IETF指定作为IPv4的下一代标准,由于早期的路由器、防火墙、企业的​​企业资源计划​​​系统及相关应用程序皆须改写,所以在世界范围内使用IPv6部署的公众网​​[2]​​​ 与IPv4相比还非常的少​​[3]​​,技术上仍以双架构并存居多。预计在2025年以前IPv4仍会被支持,以便给新协议的修正留下足够的时间。

IPv6能解决的核心问题与互联网目前所面临的关键问题之间出现了明显的偏差,难以给互联网的发展带来革命性的影响。与IPv4的各种地址复用解决方案相比,IPv6能够降低复杂性和成本,然而目前却只有制造商较能够感受到这个优势,用户和运营商​​无法直接感受到,导致产业链缺乏推动IPv6的动力。​​[4]​

与IPv4比较[​​编辑​​]

在Internet上,数据以​​分组​​​的形式传输。IPv6定义了一种新的​​分组格式​​,目的是为了最小化路由器处理的报文首部​[5]​​[6]​。由于IPv4报文和IPv6报文首部有很大不同,因此这两种协议无法互操作。但是在大多数情况下,IPv6仅仅是对IPv4的一种保守扩展。除了嵌入了互联网地址的那些应用协议(如​​FTP​​​和​​NTPv3​​,新地址格式可能会与当前协议的语法冲突)以外,大多数传输层和应用层协议几乎不怎么需要修改就可以工作在IPv6上。

无状态地址自动配置(SLAAC)[​​编辑​​]

当连接到IPv6网络上时,IPv6主机可以使用​​邻居发现协议​​​对自身进行自动配置。当第一次连接到网络上时,主机发送一个​​链路本地​​路由器请求(solicitation)多播请求来获取配置参数。路由器使用包含Internet层配置参数的路由器宣告(advertisement)报文进行回应​[7]​

在不适合使用IPv6无状态地址自动配置的场景下,网络可以使用有状态配置,如​​DHCPv6​​,或者使用静态方法手动配置。

IPv6编址[​​编辑​​]

IPv6具有比IPv4大得多的编码地址空间。这是因为IPv6采用了128位的地址,而IPv4使用的是32位。因此新增的地址空间支持2128(约3.4 ×1038)个地址,具体数量为340,282,366,920,938,463,463,374,607,431,768,211,456 个,也可以说成1632个,因为32位地址每位可以取16个不同的值(参考​​组合数学​​)。

​网络地址转换​​是目前减缓IPv4地址耗尽最有效的方式,而IPv6的地址消除了对他的依赖,被认为足够在可以预测的未来使用。就以地球人口70亿人计算,每人平均可分得约4.86×1028(486117667*1020)个IPv6地址。

IPv6从IPv4到IPv6最显著的变化就是网络地址的长度。RFC 2373和RFC 2374定义的IPv6地址有128位长;IPv6地址的表达形式一般采用32个十六进制数。

在很多场合,IPv6地址由两个逻辑部分组成:一个64位的网络前缀和一个64位的主机地址,主机地址通常根据物理地址自动生成,叫做EUI-64(或者64-位扩展唯一标识)

IPv6格式[​​编辑​​]

IPv6二进位制下为128位长度,以16位为一组,每组以冒号“:”隔开,可以分为8组,每组以4位​​十六进制​​方式表示。例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344 是一个合法的IPv6地址

同时IPv6在某些条件下可以省略:


  1. 每项数字前导的0可以省略,省略后前导数字仍是0则继续,例如下组IPv6是相等的。 2001: 0DB8: 02de: 0000: 0000: 0000: 0000: 0e13 2001:DB8:2de: 0000: 0000: 0000: 0000:e13 2001:DB8:2de: 000: 000: 000: 000:e13 2001:DB8:2de: 00: 00: 00: 00:e13 2001:DB8:2de: 0: 0: 0: 0:e13
  2. 可以用双冒号“::”表示一组0或多组连续的0,但只能出现一次:

  1. 如果四组数字都是零,可以被省略。遵照以上省略规则,下面这两组IPv6都是相等的。
  2. 2001:0DB8 0000:0000:0000:0000:1428:57ab::e13
  3. 2001:0DB8:0000:0000:0000::1428:57ab 2001:0DB8:0:0:0:0:1428:57ab 2001:0DB8:0::0:1428:57ab 2001:0DB8::1428:57ab 2001:0DB8:0000:0000:0000:0000:1428:57ab
  4. 2001::25de::cade 是非法的,因为双冒号出现了两次。它有可能是下种情形之一,造成无法推断。

  • 2001:0000:0000:0000:0000:25de:0000:cade
  • 2001:0000:0000:0000:25de:0000:0000:cade
  • 2001:0000:0000:25de:0000:0000:0000:cade
  • 2001:0000:25de:0000:0000:0000:0000:cade

  1. 如果这个地址实际上是IPv4的地址,后32位可以用10进制数表示;因此::ffff:192.168.89.9 相等于::ffff:c0a8:5909,但不等于::192.168.89.9 和::c0a8:5909。


另外,::ffff:1.2.3.4 格式叫做IPv4映射地址。而::1.2.3.4 格式叫做IPv4一致地址,目前已被取消。

IPv4位址可以很容易的转化为IPv6格式。举例来说,如果IPv4的一个地址为135.75.43.52(十六进制为0x874B2B34),它可以被转化为0000:0000:0000:0000:0000:ffff:874B:2B34 或者::ffff:874B:2B34。同时,还可以使用混合符号(IPv4-compatible address),则地址可以为::ffff:135.75.43.52。

IPv6地址的分类[​​编辑​​]

IPv6地址可分为三种:​[8]​


单播(unicast)地址 单播地址标示一个网络接口。协议会把送往地址的数据包投送给其接口。IPv6的单播地址可以有一个代表特殊地址名字的范畴,如link-local地址和唯一区域地址(ULA,unique local address)。单播地址包括可聚类的全球单播地址、链路本地地址等。 任播(anycast)地址 Anycast是IPv6特有的数据发送方式,它像是IPv4的Unicast(单点传播)与Broadcast(多点广播)的综合。IPv4支持单点传播和多点广播,单点广播在来源和目的地间直接进行通信;多点广播存在于单一来源和多个目的地进行通信。 而Anycast则在以上两者之间,它像多点广播(Broadcast)一样,会有一组接收节点的地址栏表,但指定为Anycast的数据包,只会发送给距离最近或发送成本最低(根据路由表来判断)的其中一个接收地址,当该接收地址收到数据包并进行回应,且加入后续的传输。该接收列表的其他节点,会知道某个节点地址已经回应了,它们就不再加入后续的传输作业。 以目前的应用为例,Anycast地址只能分配给路由器,不能分配给电脑使用,而且不能作为发送端的地址。 多播(multicast)地址 多播地址也称组播地址。多播地址也被指定到一群不同的接口,送到多播地址的数据包会被发送到所有的地址。多播地址由皆为一的字节起始,亦即:它们的前置为FF00::/8。其第二个字节的最后四个比特用以标明"范畴"。 一般有node-local(0x1)、link-local(0x2)、site-local(0x5)、organization-local(0x8)和global(0xE)。多播地址中的最低112位会组成多播组群识别码,不过因为传统方法是从 ​​MAC地址​​产生,故只有组群识别码中的最低32位有使用。定义过的组群识别码有用于所有节点的多播地址0x1和用于所有路由器的0x2。

另一个多播组群的地址为"solicited-node多播地址",是由前置FF02::1:FF00:0/104和剩余的组群识别码(最低24位)所组成。这些地址允许经由 ​​邻居发现协议​​(NDP,Neighbor Discovery Protocol)来解译链接层地址,因而不用干扰到在区网内的所有节点。

特殊地址[​​编辑​​]

IANA维护官方的IPv6地址空间列表​[9]​。全域的单播地址的分配可在各个​​区域互联网注册管理机构​​​或​​(英文)GRH DFP pages​​找到。

IPv6中有些地址是有特殊含义的:

未指定地址

::/128-所有比特皆为零的地址称作未指定地址。这个地址不可指定给某个网络接口,并且只有在主机尚未知道其来源IP时,才会用于软件中。路由器不可转送包含未指定地址的数据包。

链路本地地址


::1/128-是一种单播​​绕回​​​地址。如果一个应用程序将数据包送到此地址,IPv6堆栈会转送这些数据包绕回到同样的虚拟接口(相当于IPv4中的​​127.0.0.1/8​​)。

fe80::/10-这些链路本地地址指明,这些地址只在区域连接中是合法的,这有点类似于IPv4中的169.254.0.0/16。

唯一区域位域

fc00::/7-​​唯一区域地址​​(ULA,unique local address)只可在一群网站中遶送。这定义在RFC 4193中,是用来替换站点本地位域。这地址包含一个40比特的​​伪随机数​​,以减少当网站合并或数据包误传到网络时碰撞的风险。这些地址除了只能用于区域外,还具备全域性的范畴,这点违反了唯一区域位域所替换的站点本地地址的定义。

多播地址

ff00::/8-这个前置表明定义在"IP Version 6 Addressing Architecture"(​​RFC 4291​​​)中的​​多播地址​[10]​。其中,有些地址已用于指定特殊协议,如ff0X::101对应所有区域的NTP服务器(​​RFC 2375​​)。

请求节点多播地址(Solicited-node multicast address)

ff02::1:FFXX:XXXX-XX:XXXX为相对应的单播或任播地址中的三个最低的字节。

IPv4转译地址

::ffff:x.x.x.x/96-用于​​IPv4映射地址​​。(参见以下的​​转换机制​​)。

2001::/32-用于​​Teredo tunneling​​。

2002::/16-用于​​6to4​​。

ORCHID

2001:10::/28-ORCHID (Overlay Routable Cryptographic Hash Identifiers)(​​RFC 4843​​)。这些是不可遶送的IPv6地址,用于加密散列识别。

文件

2001:db8::/32-这前置用于文件(​​RFC 3849​​)。这些地址应用于IPV6地址的示例中,或描述网络架构。

遭舍弃或删除的用法


::/96-这个前置曾用于​​IPv4兼容地址​,现已删除。

fec0::/10-这个站点本地前置指明这地址只在组织内合法。它已在2004年9月的RFC3879中舍弃,并且新系统不应该支持这类型的地址。

IPv6数据包[​​编辑​​]



IPv6数据包的架构说明。

IPv6数据包由两个主要部分组成:头部和负载。

包头是包的前64比特并且包含有源和目的地址,协议版本,通信类别(8位,包优先级),流标记(20比特,​​QoS​​服务质量控制),分组长度(16位),下一个头部(用于入栈解码,类似IPv4中的协议号),和跳段数限制(8位,生存时间,相当于IPv4中的TTL)。后面是负载。MTU至少1280字节长,在常见的以太网环境中为1500字节。负载在标准模式下最大可为65535字节,如果扩展报头设置了"jumbo payload"选项,则长度值被置为0。

IPv6曾有两个有着细微差别的版本;在RFC 1883中定义的原始版本(现在废弃)和RFC 2460中描述的现在提议的标准版本。两者主要在通信类别这个选项上有所不同,它的位数由4位变为了8位。其他的区别都是微不足道的。

分段(Fragmentation)只在IPv6的主机中被处理。在IPv6中,可选项都被从标准头部中移出并在协议字段中指定,类似于IPv4的协议字段功能。

IPv6和域名系统[​​编辑​​]

IPv6地址在域名系统中为执行正向解析表示为AAAA记录(所谓4A记录,类似的IPv4表示为A记录A records);反向解析在ip6.arpa(原先ip6.int)下进行,在这里地址空间为半字节16进制数字格式。这种模式在RFC 3596给与了定义。

AAAA模式是IPv6结构设计时的两种提议之一。另外一种正向解析为A6记录并且有一些其他的创新像二进制串标签和DNAME记录等。RFC 2874和它的一些引用中定义了这种模式。

AAAA模式只是IPv6域名系统的简单概括,A6模式使域名系统中检查更全面,也因此更复杂:


  • A6记录允许一个IPv6地址在分散于多个记录中,或许在不同的区域;举例来说,这就在原则上允许网络的快速重编号。
  • 使用域名系统记录委派地址被DNAME记录(类似于现有的CNAME,不过是重命名整棵树)所替换。
  • 一种新的叫做比特标签的类型被引入,主要用于反向解析。

2002年8月的RFC 3363中对AAAA模式给与了有效的标准化(在RFC 3364有着对于两种模式优缺点的更深入的讨论)。

IPv6部署与应用[​​编辑​​]

2004年7月的​​ICANN​​​声称互联网的​​根域名服务器​​已经经过改进同时支持IPv6和IPv4。​[11]​

缺点:


  • 需要在整个互联网和它所连接到的设备上创建对IPv6的支持
  • 从IPv4访问时的转换过程中,在网关路由器(IPv6<-->IPv4)还是需要一个IPv4地址和一些​​NAT​​(=共享的IP地址),增加了它的复杂性,还意味着IPv6许诺的巨大的空间地址不能够立刻被有效的使用。
  • 遗留的结构问题,例如在对IPv6 ​​multihoming​​支持上一致性的匮乏。

工作:

部署进度:

  • 目前全球通过IPv6第二阶段认证的产品共644项,以国别论,美国位居首共264种产品通过阶段认证,次为日本计143项,台湾居第三,共115项完成阶段认证,中国大陆居四,共68件产品通过阶段认证​[12]​

网络层安全[​​编辑​​]

​Internet Protocol Security​​(IPsec)原本是为IPv6开发,但是在IPv4中已被大量部署。最初,IPsec是IPv6协议组中不可少的一部分,​[13]​但现在已经是可选的一部分。​[14]​

转换机制[​​编辑​​]


主条目: ​​IPv6转换机制​

在IPv6完全替换IPv4前,需要一些转换机制​[15]​使得只支持IPv6的主机可以联系IPv4服务,并且允许孤立的IPv6主机及网络可以借由IPv4设施联系IPv6互联网。

在IPv6主机和路由器与IPv4系统共存的时期时,​​RFC2893​​​和​​RFC2185​​定义了转换机制。这些技术,有时一起称作简单互联网转换(SIT,Simple Internet Transition)。​[16]​包含:


  • 运作于主机和路由器之间的双堆栈IP实现
  • 将IPv4嵌入IPv6地址
  • IPv6立于IPv4之上的隧道机制
  • IPv4/IPv6报头转换

许多转换机制使用隧道来把IPv6交通包封在IPv4网络中。这个解决方案并不完美,可能会增加延时以及引起路径最大传输单元发现(Path MTU Discovery)的问题,​[17]​它并不总能运行,因为过时的网络设备可能不支持IPv6。有线电视基础上的Internet访问就是一个例子。在现代的有线电视网络中,光纤同轴混合网(HFC)的核心(比如大型核心路由器)是有可能支持IPv6的。然而,其他网络设备(比如一个​​线缆调制解调器终端系统​​​(CMTS))以及用户设备(如​​线缆调制解调器​​)会需要软件更新或硬件更新来支持IPv6。这意味着线缆网络运营商必须调整适应隧道直至主干设备支持内部双堆栈。

双堆栈[​​编辑​​]

双堆栈(Dual IP stack implementation)是将IPv6视为一种IPv4的延伸,以共享代码的方式去实现网络堆栈,其可以同时支持IPv4和IPv6,如此是相对较为容易的。如此的实现称为双堆栈,并且,一个实现双堆栈的主机称为双堆栈主机。这步骤描述于RFC 4213。

目前大部分IPv6的实现使用双堆栈。一些早期实验性实现使用独立的IPv4和IPv6堆栈。

通道[​​编辑​​]

通道(Tunneling)是另一个用来链接IPv4与IPv6的机制。为了连通IPv6互联网,一个孤立主机或网络需要使用现存IPv4的基础设施来携带IPv6数据包。这可由将IPv6数据包装入IPv4数据包的​通道协议​来完成,实际上就是将IPv4当成IPv6的链接层。

IP协议号码的41号用来标示将IPv6数据讯框直接装入IPv4数据包。IPv6亦能加入UDP数据包,如为了跨过一些会阻挡协议41交通的路由器或NAT设备。其它流行的封装机制则有​​AYIYA​​​和​​GRE​​。

自动通道[​​编辑​​]

自动通道(Automatic tunneling)指路由设施自动决定通道端点的技术。RFC 3056建议使用​​6to4​​隧道技术来自动通道,其会使用41协议来封装。​[18]​ 通道端点是由远程知名的IPv4任播地址所决定,并在本地端嵌入IPv4位址信息到IPv6中。现今6to4是广泛布署的。

Teredo是使用UDP封装的通道技术,据称可跨越多个NAT设备。 ​[19]​ Teredo并非广泛用于布署的,但一个实验性版本的Teredo已安装于Windows XP SP2 IPv6堆栈中。IPv6,包含6to4通道和Teredo通道,在​​Windows Vista​​中默认是引导的。​[20]​许多Unix系统只支持本地的6to4,但Teredo可由如Miredoo的第三方软件来提供。

ISATAP​[21]​借由将IPv4位址对应到IPv6的link-local地址,从而将IPv4网络视为一种虚拟的IPv6区域连接。不像6to4和Teredo是站点间的通道机制,ISATAP是一种站点内机制,意味着它是用来设计提供在一个组织内节点之间的IPv6连接性。

配置通道(6in4)[​​编辑​​]

配置通道中,如​​6in4​​通道隧,通道端点是要明确配置过的,可以是借由管理员手动或操作系统的配置机制,或者借由如tunnel broker等的自动服务。​[22]​配置通道通常比自动通道更容易去除错,故建议用于大型且良好管理的网络。

配置通道在IPv4隧道上,使用​​网际协议​​中号码的41号。

用于只支持IPv6主机的代理和转译[​​编辑​​]

在​​局域网际网络注册管理机构​​耗尽所有可使用的IPv4位址后,非常有可能新加入互联网的主机只具有IPv6连接能力。对这些须要向后兼容以能访问IPv4资源的客户端,须要布署合适的转换机制。

一种转换技术是使用双堆栈的​​应用层代理​​,如网页代理服务器。

一些对于应用程序无法得知但在其低层使用类NAT转换技术也曾被提出。但因为一般应用层协议所要求的能力其应用太广,其中大部分都被认定在实际上太不可靠,并且被认为应删除。

主要的IPv6公告[​​编辑​​]


  • 在2003年,​​日本经济新闻​​(在2003年被CNET亚洲机构引用)报告中说日本、中国和韩国声称已经决定要在网络技术中寻求领先,将部分参与IPv6的开发并在2005年开始全面采用IPv6。
  • ​ICANN​​​在2004年7月20日发表声明,称​​DNS​​​根服务器已经创建了对应日本(​​.jp​​​)和韩国(​​.kr​​​)的顶级域名服务器的AAAA记录,序列号为2004072000。对应法国的(​​.fr​​)IPv6记录会再晚一点时间加入。这就开放了IPv6的运作。
  • 2011年​​互联网协会​​​将6月8日定为​​世界IPv6日​​。包括Google、Facebook和雅虎在内的参与者将在当天对他们的主要服务启用IPv6,以推进互联网工业加速部署全面IPv6支持​[23]​