网际协议第6版(英语:Internet Protocol version 6,缩写:IPv6)是网际协议的最新版本,用作互联网的协议。用它来取代IPv4主要是为了解决IPv4地址枯竭问题,同时它也在其他方面对于IPv4有许多改进。
IPv6的设计目的是取代IPv4,然而长期以来IPv4在互联网流量中仍占据主要地位,IPv6的使用增长缓慢。在2022年4月,通过IPv6使用Google服务的用户百分率首次超过40%[1]。
背景与目标
现今的互联网络发展蓬勃,截至2018年1月,全球上网人数已达40.21亿,IPv4仅能提供约42.9亿个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部署的公众网与IPv4相比还非常的少[2][3],技术上仍以双架构并存居多。预计在2025年以前IPv4仍会被支持,以便给新协议的修正留下足够的时间。
与IPv4比较
在Internet上,数据以分组的形式传输。IPv6定义了一种新的分组格式,目的是为了最小化路由器处理的讯息标头[4][5]。由于IPv4讯息和IPv6讯息标头有很大不同,因此这两种协议无法互操作。但是在大多数情况下,IPv6仅仅是对IPv4的一种保守扩展。除了嵌入了互联网地址的那些应用协议(如FTP和NTPv3,新地址格式可能会与当前协议的语法冲突)以外,大多数传输层和应用层协议几乎不怎么需要修改就可以在IPv6上运行。
当连接到IPv6网络上时,IPv6主机可以使用邻居发现协议对自身进行自动配置。当第一次连接到网络上时,主机发送一个链路本地路由器请求(solicitation)多播请求来获取配置参数。路由器使用包含Internet层配置参数的路由器宣告(advertisement)报文进行回应[6]。
在不适合使用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个,因为每4位地址(128位分为32段,每段4位)可以取24=16个不同的值。
网络地址转换是目前减缓IPv4地址耗尽最有效的方式,而IPv6的地址消除了对它的依赖,被认为足够在可以预测的未来使用。就以地球人口70亿人计算,每人平均可分得约4.86×1028(486117667×1020)个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:86a3:08d3:1319:8a2e:0370:7344
是一个合法的IPv6位址。类似于IPv4的点分十进制,同样也存在点分十六进制的写法,将8组16位十六进制地址的冒号去除后,每位以点号“.”分组,例如:2001:0db8:85a3:08d3:1319:8a2e:0370:7344
则记为2.0.0.1.0.d.b.8.8.5.a.3.0.8.d.3.1.3.1.9.8.a.2.e.0.3.7.0.7.3.4.4
,其倒序写法用于ip6.arpa子域名记录IPv6地址与域名的映射。
同时IPv6在某些条件下可以省略:
- 每项数字前导的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
- 可以用双冒号“::”表示一组0或多组连续的0,但只能出现一次:
- 如果四组数字都是零,可以被省略。遵照以上省略规则,下面这两组IPv6都是相等的。
- 2001:db8:2de:0:0:0:0:e13
- 2001:db8:2de::e13
- 2001:0db8:0000:0000:0000:0000:1428:57ab
- 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::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
- 如果这个位址实际上是IPv4的位址,后32位元可以用IPv4的点分十进制方式表示;因此::ffff:192.168.89.9 相等于::ffff:c0a8:5909。这种地址格式叫做IPv4映射位址。
- 如果四组数字都是零,可以被省略。遵照以上省略规则,下面这两组IPv6都是相等的。
由于同一非全局地址可能在同一范围的多个区域中使用(例如,在两条独立的物理链路中使用链路本地地址 fe80::1),而且一个节点可能连接到同一范围的不同区域的接口(例如,一个路由器通常有多个接口连接到不同的链路)。IPv6新增了区域ID(Zone ID)加以区分,或称作用域ID(Scope ID)。作用域ID仅用于本地链接,使用百分号追加在地址后面。其内容特定于操作系统,例如Windows使用数字 fe80::2%3 ,Linux使用网卡名字 fe80::2%eth0 。[7] 在URI中使用时,百分号需要进行编码,例如 fe80::a%en1 应显示为 http://[fe80::a%25en1] 。[8]
IPv6位址可分为三种:[9]
- 单播(unicast)位址
- 单播位址标示一个网路介面。协议会把送往位址的封包送往给其介面。IPv6的单播位址可以有一个代表特殊位址名字的范畴,如链路本地位址(link local address)和唯一区域位址(ULA,unique local address)。单播地址包括可聚类的全球单播地址、链路本地地址等。
- 任播(anycast)位址
- 任播像是Unicast(单点传播)与Broadcast(多点广播)的综合。单点广播在来源和目的地间直接进行通讯;多点广播存在于单一来源和多个目的地进行通讯。
- 而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位址空间列表[10]。全域的单播位址的分配可在各个区域互联网注册管理机构或 GRH DFP 页面找到[11]。
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)只可用于本地通讯,类似于IPv4的专用网络位址10.0.0.0/8、172.16.0.0/12和192.168.0.0/16。这定义在RFC 4193中,是用来取代站点本地位域。这位址包含一个40位元的伪随机数,以减少当网站合并或封包误传到网路时碰撞的风险。这些位址除了只能用于区域外,还具备全域性的范畴,这点违反了唯一区域位域所取代的站点本地位址的定义。
- 多播位址
- ff00::/8-这个前置表明定义在"IP Version 6 Addressing Architecture"(RFC 4291)中的多播位址[12]。其中,有些位址已用于指定特殊协议,如ff0X::101对应所有区域的NTP伺服器(RFC 2375)。
- 请求节点多播位址(Solicited-node multicast address)
- ff02::1:FFXX:XXXX-XX:XXXX为相对应的单播或任播位址中的三个最低的位元组。
- IPv4转译位址
- 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封包由两个主要部分组成:头部和负载。
包头是包的前320比特,并且包含有源和目的地址,协议版本,通信类别(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也要求实现“MTU路径发现”来避免数据包需要被中间设备分片,所以IPv4头涉及分片的字段从IPv6基本头移出至专用的分片扩展报头中。
在IPv6中,可选项都被从标准头部中移出并在协议字段中指定,类似于IPv4的协议字段功能。
IPv6和域名系统
IPv6地址在域名系统中为执行正向解析表示为AAAA记录(所谓4A记录,类似地,IPv4表示为A记录(A record));反向解析在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。[13]
缺点:
- 需要在整个网际网路和它所连接到的设备上建立对IPv6的支持
- 从IPv4访问时的转换过程中,在网关路由器(IPv6<-->IPv4)还是需要一个IPv4地址和一些NAT(=共享的IP地址),增加了它的复杂性,还意味着IPv6许诺的巨大的空间地址不能够立刻被有效的使用。
- 遗留的结构问题,例如在对IPv6 multihoming支持上一致性的匮乏。
工作:
- 6bone
- ICMPv6
- IPv6 multihoming
部署进度:
- 截至2011年,全球通过IPv6第二阶段认证的产品共644项,美国位居首共264种产品通过阶段认证,次为日本计143项,台湾居第三,共115项完成阶段认证,中国大陆居四,共68件产品通过阶段认证[14]。
网际网络安全协议(Internet Protocol Security,即IPsec)原本为IPv6开发,但是在IPv4中已经大量部署。IPsec最初是IPv6协议的强制要求[15],但后来改为可选项。[16]
转换机制
在IPv6完全取代IPv4前,需要一些转换机制[17]使得只支援IPv6的主机可以连络IPv4服务,并且允许孤立的IPv6主机及网路可以借由IPv4设施连络IPv6网际网路。
在IPv6主机和路由器与IPv4系统共存的时期时,RFC2893(页面存档备份,存于互联网档案馆)和RFC2185(页面存档备份,存于互联网档案馆)定义了转换机制。这些技术,有时一起称作简单网际网路转换(SIT,Simple Internet Transition)。[18]包含:
- 运作于主机和路由器之间的双堆叠IP实作
- 将IPv4嵌入IPv6位址
- IPv6立于IPv4之上的隧道机制
- IPv4/IPv6报头转换
许多转换机制使用隧道来把IPv6交通包封在IPv4网络中。这个解决方案并不完美,可能会增加延时以及引起路径最大传输单元发现(Path MTU Discovery)的问题,[19]它并不总能运行,因为过时的网络设备可能不支持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协议来封装。[20] 隧道端点是由远端知名的IPv4任播位址所决定,并在本地端嵌入IPv4位址资讯到IPv6中。现今6to4是广泛布署的。
Teredo是使用UDP封装的隧道技术,据称可跨越多个NAT设备。[21]Teredo并非广泛用于布署的,但一个实验性版本的Teredo已安装于Windows XP SP2 IPv6堆叠中。IPv6,包含6to4隧道和Teredo隧道,在Windows Vista中预设是启动的。[22]许多Unix系统只支援原生的6to4,但Teredo可由如Miredoo的第三方软体来提供。
ISATAP[23]借由将IPv4位址对应到IPv6的链路本地位址,从而将IPv4网路视为一种虚拟的IPv6区域连线。不像6to4和Teredo是站点间的隧道机制,ISATAP是一种站点内机制,意味著它是用来设计提供在一个组织内节点之间的IPv6连接性。
在组态隧道中,如6in4隧道隧,隧道端点是要明确组态过的,可以是借由管理员手动或作业系统的组态机制,或者借由如tunnel broker等的自动服务。[24]组态隧道通常比自动隧道更容易去除错,故建议用于大型且良好管理的网路。
组态隧道在IPv4隧道上,使用网际协议中号码的41号。
在区域互联网注册管理机构耗尽所有可使用的IPv4位址后,非常有可能使新加入网际网路的主机只具有IPv6连接能力。对这些须要向后相容以能存取IPv4资源的客户端,须要布署合适的转换机制。
一种转换技术是使用双堆叠的应用层代理,如网页代理伺服器。
一些对于应用程式无法得知但在其低层使用类NAT转换技术也曾被提出。但因为一般应用层协议所要求的能力其应用太广,其中大部分都被认定在实际上太不可靠,并且被认为应删除。
主要的IPv6公告
- 在2003年,日本经济新闻(在2003年被CNET亚洲机构引用)报告中说日本、中国和韩国声称已经决定要在网络技术中寻求领先,将部分参与IPv6的开发并在2005年开始全面采用IPv6[来源请求]。
- ICANN在2004年7月20日发表声明,称DNS根服务器已经建立对应日本(.jp)和韩国(.kr)的顶级域名服务器的AAAA记录,序列号为2004072000。对应法国的(.fr)IPv6记录会再晚一点时间加入。
- 2011年互联网协会将6月8日定为世界IPv6日。包括Google、Facebook和雅虎在内的参与者将在当天对他们的主要服务启用IPv6,以推进互联网工业加速部署全面IPv6支持[25]。
- 2017年11月26日,中共中央办公厅、国务院办公厅印发《推进互联网协议第六版(IPv6)规模部署行动计划》,要求各地各部门贯彻落实。其中主要目标包括:到2018年末,IPv6活跃用户数达2亿,互联网用户中占比不低于20%;到2020年末,IPv6活跃用户数超过5亿,互联网用户中占比超过50%,新增网络地址不再使用私有IPv4地址;到2025年末,中国IPv6网络规模、用户规模、流量规模位居世界第一,网络、应用、终端全面支持IPv6。[26]
- 根据科技资讯网站cnBeta.com,截至2021年4月8日,中国总共获得IPv6地址块数量为59,039个/32(即是每段32位元的IPv6地址数目),目前排名第二的美国拥有57,785个/32。[27]
参见
相关的IETF工作组
参考资料
外部链接
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.