跳转到内容

🌌 深入理解 IPv6:下一代互联网寻址架构

🌱 创建: 2026/04/01 ⏱️ 更新: 2026/05/22

**IPv6(Internet Protocol version 6,互联网协议第六版)**是 IETF(互联网工程任务组)为解决 IPv4 地址耗尽问题而设计的下一代网络层协议。其核心规范定义于 RFC 8200 中。

IPv6 不仅仅是简单地扩大了地址池,它在报文头结构、路由转发效率、自动配置能力以及组播管理上都进行了彻底的重构,旨在恢复互联网最初的“端到端(End-to-End)”通信模型。


IPv6 彻底摒弃了 IPv4 的 32 位限制,将地址长度扩展至 128 位(16 字节)

128 位的长度意味着 IPv6 可以提供 $2^128$ 个唯一的理论地址(约 $3.4 \times 10^38$ 个)。这种海量的寻址能力不仅解决了地址枯竭危机,还允许网络实施更具层次化、更低开销的路由聚合。

1.2 冒号十六进制表示法(Hexadecimal Notation)

Section titled “1.2 冒号十六进制表示法(Hexadecimal Notation)”

由于 128 位的二进制过于庞大,IPv6 采用十六进制进行表示,并定义了严格的书写规范(RFC 5952):

  1. 128 位被划分为 8 组(也称为段 / Hextet)
  2. 每组包含 16 位,转换为 4 个十六进制字符(0-9, a-f)。
  3. 组与组之间使用英文冒号(:)分隔。

完整地址示例2001:0db8:0000:0000:0008:0800:200c:417a

为了简化人工配置和日志阅读,IPv6 引入了标准化的压缩机制:

  • 规则一:省略前导零。每组开头的 0 可以省略(例如 0db8 简写为 db80800 简写为 800)。但如果一组全为零,至少保留一个 0
  • 规则二:双冒号压缩(::。如果地址中包含一组或连续多组由全零构成的 16 位块,可以使用双冒号 :: 替代。
    • 核心禁忌:一个 IPv6 地址中绝对不允许出现两次或以上的双冒号,否则协议栈在还原地址时将无法计算出两处分别省略了多少个零。

应用上述压缩规则后,上面的示例地址被规范化为: 2001:db8::8:800:200c:417a


2. 逻辑拆分:前缀与接口标识符

Section titled “2. 逻辑拆分:前缀与接口标识符”

与 IPv4 的“网络位+主机位”类似,IPv6 的 128 位地址在单播场景下,通常被等分为两部分(/64 是目前最标准的子网掩码长度):

  • 网络前缀(Network Prefix,前 64 位):由全球路由前缀(Global Routing Prefix)和子网 ID(Subnet ID)组成,用于标识链路和路由路径。
  • 接口标识符(Interface ID / IID,后 64 位):用于在单个链路上唯一标识设备的网卡接口。通常通过 EUI-64 格式(基于 MAC 地址计算)或隐私扩展算法(RFC 4941,生成随机 IID)产生。

3. IPv6 地址类型与保留网段 (RFC 4291)

Section titled “3. IPv6 地址类型与保留网段 (RFC 4291)”

IPv6 彻底废除了广播(Broadcast),采用更高效的组播来替代广播功能。IPv6 地址主要分为三大类:单播、组播和任播。

标识网络中的单个接口。发往单播地址的数据包仅交付给该接口。

  • 全球单播地址 (Global Unicast Address, GUA):前缀 2000::/3。等同于 IPv4 的公网 IP,可在全球公共互联网上路由和访问。
  • 唯一本地地址 (Unique Local Address, ULA):前缀 fc00::/7(实际分配通常从 fd00::/8 开始)。等同于 IPv4 的私有地址(如 192.168.x.x)。ULA 仅在私有站点或局域网内可路由,不会被转发到公共互联网。
  • 链路本地地址 (Link-Local Address, LLA):前缀 fe80::/10这是 IPv6 特有的强制性机制。每个启动了 IPv6 协议栈的接口,即使没有 DHCP 或外网连接,也会自动生成一个 fe80 开头的地址。该地址仅在当前二层物理链路(同一个交换机下)内有效,主要用于路由器发现、邻居发现协议(NDP)等底层信令交互。

前缀 ff00::/8。标识一组接口。发往组播地址的数据包会被网络复制,并交付给加入了该组播组的所有接口。IPv6 使用组播替代了 ARP(地址解析协议)和所有广播行为,大幅降低了无关设备的 CPU 中断开销。

地址空间与单播地址共享。任播地址被分配给多台不同的设备(通常提供相同的服务,如 DNS 根节点)。当数据包发往任播地址时,路由基础设施会根据路由协议的度量值,将数据包投递给网络拓扑上“距离最近”的那个节点。

  • ::1/128:环回地址(Loopback),等同于 IPv4 的 127.0.0.1
  • ::/128:未指定地址(Unspecified)。表示设备尚无 IP 地址,通常只出现在 DHCPv6 请求或重复地址检测(DAD)数据包的源地址字段中。

除了海量的地址空间,IPv6 在协议底层实现了两项极其重要的工程优化。

4.1 无状态地址自动配置 (SLAAC - RFC 4862)

Section titled “4.1 无状态地址自动配置 (SLAAC - RFC 4862)”

在 IPv4 中,设备获取 IP 严重依赖 DHCP 服务器。而在 IPv6 中,引入了 SLAAC(Stateless Address Autoconfiguration)机制。 利用 NDP(邻居发现协议,基于 ICMPv6),主机只需向网络中发送路由器请求(Router Solicitation, RS),网关路由器就会回复路由器通告(Router Advertisement, RA),告知主机当前网络的前缀(通常为 /64)。主机接收到前缀后,自行拼接上 64 位的接口标识符,即可完成全球单播地址的配置,全程无需中心化的 DHCPv6 服务器干预。

IPv4 报头长度可变(通常 20 字节),且包含校验和(Checksum),导致路由器每转发一跳都必须重新计算校验和,消耗硬件资源。

IPv6 对报头进行了彻底“瘦身”:

  1. 固定长度:基础报头固定为 40 字节,大幅提升了硬件芯片的处理与转发效率。
  2. 移除校验和:鉴于现代二层链路(如以太网 FCS)和四层协议(TCP/UDP)都已具备强大的纠错能力,IPv6 直接移除了网络层的校验和。
  3. 扩展报头(Extension Headers):IPv6 将所有非核心选项(如分片、IPsec 安全载荷、路由选项)剥离到基础报头之外,作为“扩展报头”挂载在基础报头之后。只有需要处理这些特殊选项的节点才会去解析它们。
  4. 废除中间路由器分片:在 IPv6 中,数据包如果超过了路径的最大传输单元(MTU),路由器不再负责分片,而是直接丢弃数据包并返回 ICMPv6 错误信息(Packet Too Big)。分片工作被强制推给了发送端主机(通过 PMTUD 机制),彻底释放了路由器的计算压力。

  • RFC 8200: Internet Protocol, Version 6 (IPv6) Specification (核心规范协议)
  • RFC 4291: IP Version 6 Addressing Architecture (寻址架构)
  • RFC 5952: A Recommendation for IPv6 Address Text Representation (文本表示建议)
  • RFC 4861: Neighbor Discovery for IP version 6 (IPv6 邻居发现协议)
  • RFC 4862: IPv6 Stateless Address Autoconfiguration (无状态地址自动配置)

最近更新: