IPv6

网际协议第6版（Internet Protocol version 6，缩写：IPv6）是网际协议的最新版本，用作互联网的协议。用它来取代IPv4主要是为了解决IPv4地址枯竭问题，同时它也在其他方面对于IPv4有许多改进。

IPv6于1998推出，设计目的是取代IPv4，然而长期以来IPv4在互联网流量中仍占据主要地位，IPv6的使用增长缓慢。

2026年3月28日，通过IPv6使用Google服务的用户百分率首次达到50%。同期，Cloudflare的统计数字显示，互联网的整体用量有40%来自IPv6。

## 背景与目标

现今的互联网络发展蓬勃，截至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，在2017年7月被RFC 8200替代）的方式正式公布。

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

## 与IPv4比较

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

### 无状态地址自动配置（SLAAC）

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

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

## IPv6编码

IPv6具有比IPv4大得多的编码地址空间。IPv6采用128位元的地址，而IPv4使用的是32位元。理论上，新增的地址空间支持2128（约3.4×1038）个位址。不过，可分配的公共地址数目远少于理论值，因为互联网服务提供者最多只能指定IPv6地址中的64位网络前缀，而非像IPv4一样分配完整长度的IP地址。

根据RFC 4291，IPv6地址按最高有效位（字首）分为以下类别：

地址类别｜二进制字首｜IPv6表示法

未指定｜0...0｜::/128

回环｜0...01｜::1/128

多播｜11111111｜FF00::/8

链路本地｜1111111010｜FE80::/10

全域单播｜(其余所有)｜(其余所有)

任播地址与单播地址共用相同的地址空间。若同一IP地址分配到多台主机，则变成任播地址。

全域单播地址（Global Unicast Address）相当于IPv4的公共地址。由于IPv6的全球单播地址采用固定的64位网络前缀及64位主机地址，所以每个子网可连接的设备数量为264（43亿×43亿）个，在实际应用中相当于无限大。主机地址通常根据48位的MAC地址自动生成，称为64位扩展唯一标识（Extended Unique Identifier-64），简称EUI-64。

长度｜3｜45 (长度可变)｜16 (长度可变)｜64

字段｜首码 (固定为001)｜全球路由前缀｜子网ID｜界面ID / 主机地址

截止2026年，互联网工程任务组只分配了`001`作为全球单播地址的首码，占IPv6地址空间8。IANA保留了约85%地址供未来使用。

以十六进制表达示时，IP地址的最高有效位必定为2或3。

- 2000:: (0010...)
- 3000:: (0011...)

2001年9月，互联网工程任务组网络架构委员会建议在一般情况下为家庭用户及企业用户提供`/48`网络，预留16位元供企业内部建立子网。每间企业最多可建立65536个子网。扣除3位首码后，可分发的全球路由前缀有45位元长度，约为35万亿个。不过，统一为所有用户预留16位子网ID的建议一直备受争议，家庭用户及中小企业显然不需要6万多个子网。

2011年3月，互联网工程任务组发布新指引，建议互联网服务提供者为家庭用户预留的子网ID可减少到8位元长度，以节省8位IP地址空间。部分ISP只为用户预留4位子网ID，甚至不预留子网段。若ISP指派64位元全球路由前缀，用户可使用NAT66分割子网。

## 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映射位址。

由于同一非全局地址可能在同一范围的多个区域中使用（例如，在两条独立的物理链路中使用链路本地地址 fe80::1），而且一个节点可能连接到同一范围的不同区域的接口（例如，一个路由器通常有多个接口连接到不同的链路）。IPv6新增了区域ID（Zone ID）加以区分，或称作用域ID（Scope ID）。作用域ID仅用于本地链接，使用百分号追加在地址后面。其内容特定于操作系统，例如Windows使用数字 fe80::2%3，Linux使用网卡名字 fe80::2%eth0。在URI中使用时，百分号需要进行编码，例如 fe80::a%en1 应显示为 http://fe80::a%25en1。

### IPv6位址的分类

IPv6位址可分为三种：

单播（unicast）位址：单播位址标示一个网络界面。协议会把送往位址的封包送往给其界面。IPv6的单播位址可以有一个代表特殊位址名字的范畴，如链路本地位址（link local address）和唯一区域位址（ULA，unique local address）。单播地址包括可聚类的全球单播地址(地址范围为16进制：2000~3fff 开头)、链路本地地址(地址为fe80开头)等。

任播（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位址空间列表。全域的单播位址的分配可在各个区域互联网注册管理机构或 GRH DFP 页面找到。

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）中的多播位址。其中，有些位址已用于指定特殊协议，如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隧道。
- 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封包

<image>

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。

缺点：

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

工作：

- 6bone
- ICMPv6
- IPv6 multihoming

部署进度：

- 截至2011年，全球通过IPv6第二阶段认证的产品共644项，美国位居首共264种产品通过阶段认证，次为日本计143项，台湾居第三，共115项完成阶段认证，中国大陆居四，共68件产品通过阶段认证。

### 网络层安全

网际网络安全协议（Internet Protocol Security，即IPsec）原本为IPv6开发，但是在IPv4中已经大量部署。IPsec最初是IPv6协议的强制要求，但后来改为可选项。

## 转换机制

在IPv6完全取代IPv4前，需要一些转换机制使得只支援IPv6的主机可以连络IPv4服务，并且允许孤立的IPv6主机及网络可以借由IPv4设施连络IPv6互联网。

在IPv6主机和路由器与IPv4系统共存的时期时， RFC2893和 RFC2185定义了转换机制。这些技术，有时一起称作简单互联网转换（SIT，Simple Internet Transition）。包含：

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

许多转换机制使用隧道来把IPv6交通包封在IPv4网络中。这个解决方案并不完美，可能会增加延时以及引起路径最大传输单元发现（Path MTU Discovery）的问题，它并不总能运行，因为过时的网络设备可能不支持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协议来封装。隧道端点是由远端知名的IPv4任播位址所决定，并在本地端嵌入IPv4位址资讯到IPv6中。现今6to4是广泛布署的。

Teredo是使用UDP封装的隧道技术，据称可跨越多个NAT设备。Teredo并非广泛用于布署的，但一个实验性版本的Teredo已安装于Windows XP SP2 IPv6堆叠中。IPv6，包含6to4隧道和Teredo隧道，在Windows Vista中预设是启动的。许多Unix系统只支援原生的6to4，但Teredo可由如Miredoo的第三方软件来提供。

ISATAP借由将IPv4位址对应到IPv6的链路本地位址，从而将IPv4网络视为一种虚拟的IPv6区域连线。不像6to4和Teredo是站点间的隧道机制，ISATAP是一种站点内机制，意味着它是用来设计提供在一个组织内节点之间的IPv6连接性。

#### 组态隧道（6in4）

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

组态隧道在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记录会再晚一点时间加入。
- 2011年互联网协会将6月8日定为世界IPv6日。包括Google、Facebook和雅虎在内的参与者将在当天对他们的主要服务启用IPv6，以推进互联网工业加速部署全面IPv6支持。
- 2017年11月26日，中共中央办公厅、国务院办公厅印发《推进互联网协议第六版（IPv6）规模部署行动计划》，要求各地各部门贯彻落实。其中主要目标包括：到2018年末，IPv6活跃用户数达2亿，互联网用户中占比不低于20%；到2020年末，IPv6活跃用户数超过5亿，互联网用户中占比超过50%，新增网络地址不再使用私有IPv4地址；到2025年末，中国IPv6网络规模、用户规模、流量规模位居世界第一，网络、应用、终端全面支持IPv6。
- 根据科技资讯网站cnBeta.com，截至2021年4月8日，中国总共获得IPv6地址块数量为59,039个/32（即是每段32位元的IPv6地址数目），目前排名第二的美国拥有57,785个/32。

## 相关的IETF工作组

- 6bone：IPv6 Backbone
- ipng：IP Next Generation (concluded)
- ipv6：IP Version 6
- ipv6mib：IPv6 MIB (concluded)
- multi6：Site Multihoming in IPv6
- v6ops：IPv6 Operations

## 参考资料

- RFC 2460 - Internet Protocol, Version 6 - 现在版本
- RFC 1883 - Internet Protocol, Version 6 - 旧版本
- RFC 5214: Intra-Site Automatic Tunnel Addressing Protocol (ISATAP) - 现在版本取代RFC 4214