IPv6(Internet Protocol version 6,互联网通信协议第6版)是被指定为IPv4继任者的下一代互联网协议版本,互联网中最先出现的应用到现在依然占有优势。这是个用于分组交换互联网络的网络层协议。驱使重新设计互联网协议的主要原因是,90年代初有人担心10年内IPv4位址空间就会不敷用。IPv6在1998年12月被互联网工程任务小组(Internet Engineering Task Force,简称IETF)通过公布互联网标准规范(RFC 2460)的方式定义出台。
IPv6具有比IPv4大得多的地址空间。这是因为IPv6使用了128位的地址,而IPv4只用32位。因此新增的地址空间支持2128(约3.4 ×1038)个地址。这一扩展提供了灵活的地址分配以及路由转发,并消除了对网络地址转换(NAT)的依赖。NAT是获得了广泛部署的减缓IPv4地址耗尽的最有效的方式。就以地球人口70亿人计算,每人平均可分得约4.86 x 1028(4 穰8611秭7667 垓)个IPv6地址。
背景与目标
促使IPv6形成的主要原因是网络空间的匮乏。从1990年开始,互联网工程任务小组(Internet Engineering Task Force,简称IETF)开始规划IPv4的下一代协议,除要解决即将遇到的IP地址短缺问题外,还要发展更多的扩展,为此IETF小组创建IPng,以让后续工作顺利进行。1994年,各IPng领域的代表们于多伦多举办的IETF会议中正式提议IPv6发展计划,该提议直到同年的11月17日才被认可,并于1998年8月10日成为IETF的草案标准。
IPv6的计划是创建未来互联网扩充的基础,其目标是取代IPv4,预计在2025年以前IPv4仍会被支持,以便给新协议的修正留下足够的时间。
虽然IPv6在1994年就已被IETF指定作为IPv4的下一代标准,然而在世界范围内使用IPv6部署的公众网[2] 与IPv4相比还非常的少[3] 。
IPv6能解决的核心问题与互联网目前所面临的关键问题之间出现了明显的偏差,难以给互联网的发展带来革命性的影响。与IPv4的各种地址复用解决方案相比,IPv6能够降低复杂性和成本,然而目前却只有制造商较能够感受到这个优势,用户和运营商无法直接感受到,导致产业链缺乏推动IPv6的动力。 [4]
IPv6编址
从IPv4到IPv6最显著的变化就是网络地址的长度。RFC 2373和RFC 2374定义的IPv6地址,就像下面章节所描述的,有128位长;IPv6地址的表达形式一般采用32个十六进制数。
IPv6中可能的地址有2128 ≈ 3.4×1038个。也可以想像为1632个因为32位地址每位可以取16个不同的值(参考组合数学)。
在很多场合,IPv6地址由两个逻辑部分组成:一个64位的网络前缀和一个64位的主机地址,主机地址通常根据物理地址自动生成,叫做EUI-64(或者64-位扩展唯一标识)
IPv6格式
IPv6二进位制下为128位长度,以16位为一组,每组以冒号":"隔开,可以分为8组,每组以十六进制方式表示。例如:
2001:0db8:85a3:08d3:1319:8a2e:0370:7344
是一个合法的IPv6地址。
同时IPv6在某些条件下可以省略,以下是省略规则
规则1:每项数字前导的0可以省略,省略后前导数字仍是0则继续,例如下组IPv6是等价的。
2001:0DB8:02de:0000:0000:0000:0000:0e132001:DB8:2de:0000:0000:0000:0000:e132001:DB8:2de:000:000:000:000:e132001:DB8:2de:00:00:00:00:e132001:DB8:2de:0:0:0:0:e13
规则2:若有连贯的0000的情形出现,可以用双冒号"::"代替,例如
如果四个数字都是零,可以被省略。例如下组IPv6是等价的。
2001:DB8:2de:0:0:0:0:e132001:DB8:2de::e13
再举一个例子,遵照以上省略规则,下面这组IPv6都是等价的
2001:0DB8:0000:0000:0000:0000:1428:57ab2001:0DB8:0000:0000:0000::1428:57ab2001:0DB8:0:0:0:0:1428:57ab2001:0DB8:0::0:1428:57ab2001:0DB8::1428:57ab
不过请注意有的情形下省略是非法的,例如这个IPv6是非法的。
2001::25de::cade
因为它有可能是下种情形之一,造成无法推断。
2001:0000:0000:0000:0000:25de:0000:cade2001:0000:0000:0000:25de:0000:0000:cade2001:0000:0000:25de:0000:0000:0000:cade2001:0000:25de:0000:0000:0000:0000:cade
如果这个地址实际上是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:0000:874B:2B34或者::874B:2B34。同时,还可以使用混合符号(IPv4-compatible address),则地址可以为::135.75.43.52。
IPv6地址的分类
IPv6地址可分为三种:[1]
单播(unicast)地址
单播地址标示一个网络接口。协议会把送往地址的分组投送给其接口。IPv6的单播地址可以有一个代表特殊地址名字的范畴,如link-local地址和唯一区域地址(ULA,unique local address)。
任播(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维护官方的[5]。全局的单播地址的指定可在RIR's或 中找到(英文)GRH DFP pages。
IPv6中有些地址是有特殊含义的:
未指定地址
::/128- 所有位皆为零的地址称作未指定地址。这个地址不可指定给某个网络接口,并且只有在主机尚未知道其来源IP时,才会用于软件中。路由器不可转送包含未指定地址的分组。
Link local地址
::1/128- 是一种单播绕回地址。如果一个应用程序将分组送到此地址,IPv6堆栈会转送这些分组绕回到同样的虚拟接口(相当于IPv4中的127.0.0.1)。
fe80::/10- 这些link-local地址指明,这些地址只在区域连接中是合法的,这有点类似于IPv4中的169.254.0.0/16。
唯一区域位域
fc00::/7-唯一区域地址(ULA,unique local address)只可在一群网站中绕送。这定义在RFC 4193中,是用来取代site-local位域。这地址包含一个40位的伪随机数,以减少当网站合并或分组误传到网络时碰撞的风险。这些地址除了只能用于区域外,还具备全局性的范畴,这点违反了唯一区域位域所取代的site-local地址的定义。
多播地址
ff00::/8-这个前置表明定义在"IP Version 6 Addressing Architecture"(RFC 4291)中的多播地址[2]。其中,有些地址已用于指定特殊协议,如ff0X::101将到达所有区域的NTP服务器(RFC 2375)。
Solicited-node多播地址
ff02::1:FFXX:XXXX-XX:XXXX为相对应的单播或任播地址中的三个最低的字节。
IPv4转译地址
::ffff:x.x.x.x/96- 用于IPv4映射地址。(参见以下的Transition mechanisms)。
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- 这个site-local前置指明这地址只在组织内合法。它已在2004年九月的RFC3879中拾,并且新系统不应该支持这类型的地址。
IPv6分组
IPv6分组的架构说明。
IPv6分组由两个主要部分组成:头部和负载。
包头是包的前40字节并且包含有源和目的地址,协议版本,通信类别(8位,包优先级),流标记(20位,QoS服务质量控制),负载长度(16位),下一个头部(用于向后兼容性),和跳段数限制(8位,生存时间,相当于IPv4中的TTL)。后面是负载,至少1280字节长,或者在可变MTU(最大传输单元)大小环境中这个值为1500字节。负载在标准模式下最大可为65535字节,或者在扩展包头的"jumbo payload"选项进行设置。
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[6] 。
缺点:
需要在整个互联网和它所连接到的设备上创建对IPv6的支持
从IPv4访问时的转换过程中,在网关路由器(IPv6<-->IPv4)还是需要一个IPv4地址和一些NAT(=共享的IP地址),增加了它的复杂性,还意味着IPv6许诺的巨大的空间地址不能够立刻被有效的使用。
遗留的结构问题,例如在对IPv6 multihoming支持上一致性的匮乏。
工作:
6bone
ICMPv6
IPv6 multihoming
转换机制
在IPv6完全取代IPv4前,需要一些转换机制[3]使得只支持IPv6的主机可以连络IPv4服务,并且允许孤立的IPv6主机及网络可以借由IPv4设施连络IPv6互联网。
在IPv6主机和路由器与IPv4系统共存的时期时,RFC2893和RFC2185定义了转换机制。这些技术,有时一起称作简单互联网转换(SIT,Simple Internet Transition)。[4] 包含:
运作于主机和路由器之间的双堆栈IP实现
将IPv4嵌入IPv6地址
IPv6立于IPv4之上的隧道机制
IPv4/IPv6报头转换
双堆栈
将IPv6视为一种IPv4的延伸,以共享代码的方式去实现网络堆栈,其可以同时支持IPv4和IPv6,如此是相对较为容易的。如此的实现称为双堆栈,并且,一个实现双堆栈的主机称为双堆栈主机。这步骤描述于RFC 4213。
目前大部分IPv6的实现使用双堆栈。一些早期实验性实现使用独立的IPv4和IPv6堆栈。
穿隧
为了连通IPv6互联网,一个孤立主机或网络需要使用现存IPv4的基础设施来携带IPv6分组。这可由将IPv6分组装入IPv4分组的穿隧协议来完成,实际上就是将IPv4当成IPv6的连结层。
IP协议号码的41号用来标示将IPv6数据讯框直接装入IPv4分组。IPv6亦能将入UDP分组,如为了跨过一些会阻挡协议41交通的路由器或NAT设备。其它流行的封装机制则有AYIYA和GRE。
自动穿隧
自动穿隧指路由设施自动决定隧道端点的技术。RFC 3056建议使用6to4穿隧技术来自动穿隧,其会使用41协议来封装。[5] 隧道端点是由远程知名的IPv4任播地址所决定,并在本地端嵌入IPv4位址信息到IPv6中。现今6to4是广泛布署的。
Teredo是使用UDP封装的穿隧技术,据称可跨越多个NAT设备。 [6] Teredo并非广泛用于布署的,但一个实验性版本的Teredo已安装于Windows XP SP2 IPv6堆栈中。IPv6,包含6to4穿隧和Teredo穿隧,在Windows Vista中默认是启动的。[7]许多Unix系统只支持本地的6to4,但Teredo可由如Miredoo的第三方软件来提供。
ISATAP[8]借由将IPv4位址对应到IPv6的link-local地址,从而将IPv4网络视为一种虚拟的IPv6区域连接。不像6to4和Teredo是站点间的穿隧机制,ISATAP是一种站点内机制,意味着它是用来设计提供在一个组织内节点之间的IPv6连接性。
组态穿隧 (6in4)
在组态穿隧中,如6in4穿隧,隧道端点是要明确组态过的,可以是借由管理员手动或操作系统的组态机制,或者借由如tunnel broker等的自动服务。[9]组态穿隧通常比自动穿隧更容易去除错,故建议用于大型且良好管理的网络。
组态穿隧在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支持[10]。