Skip to content

IPv6 地址格式与压缩规则

IPv4 地址(32 位)已经无法满足互联网的爆炸式增长,IPv6(128 位)从根本上解决了地址枯竭问题。本文聚焦 IPv6 地址的表示方法压缩规则,这是阅读、配置、排错 IPv6 网络的第一步。


📐 IPv6 地址长度与结构

对比项IPv4IPv6
总位数32 bit128 bit
分段数4 段8 段
每段位数8 bit16 bit
分隔符.(点分十进制):(冒号分十六进制)
地址空间2³² ≈ 43 亿2¹²⁸ ≈ 3.4×10³⁸(为地球上每一粒沙子分配地址)

IPv6 地址的完整格式:

text
xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx
 16    16    16    16    16    16    16    16   (bit 数)

每段 16 bit,用 4 位十六进制字符表示,完整地址共 32 个十六进制字符。

📝 为什么是十六进制?

IPv6 的 128 位如果用二进制写就是 128 个 0/1,用十进制则是 39 位数字,都极难阅读。十六进制让每 4 bit 对应一个字符,每段 16 bit 正好用 4 个字符表示,既紧凑又与字节边界对齐。


✍️ 完整地址示例

一个完整、未压缩的 IPv6 地址:

text
2001:0001:0000:0000:0000:1000:0000:0001/128

每段都是 4 位十六进制,不足的前导零也补齐。但这种写法冗长且容易出错,因此 IPv6 定义了两条压缩规则


📉 压缩规则一:省略前导零

每段中前导的 0 可以省略,但每段至少保留 1 个字符。

text
完整:  2001:0001:0000:0000:0000:1000:0000:0001
省略后:2001:   1:   0:   0:   0:1000:   0:   1
即:    2001:1:0:0:0:1000:0:1

⚠️ 前导零省略的边界

  • 可以省略:000110abcabc
  • 不能省略(至少保留 1 字符):00000(不能写成空)
  • 不能省略中间的零:1000 不能省略为 1,只能省略前导

📉 压缩规则二:连续零段用 :: 代替

一段或连续多段全为 0 的段,可以用 :: 压缩代替。

text
压缩前:2001:0001:0000:0000:0000:1000:0000:0001
压缩后:2001:1::1000:0:1
       └─────┘
       连续 3 个全零段被 :: 代替

🚨 关键限制::: 全地址只能出现一次

为什么?因为 :: 代表的零段数量不固定。如果出现两次,就无法判断每处各代表多少个零段。

反例(歧义):

text
2001:1::1000::1

展开后可能之一:

text
2001:1:0000:0000:1000:0000:0000:0001
2001:1:0000:0000:0000:1000:0000:0001

两种展开含义完全不同,因此 :: 全地址最多只能用一次


🧮 还原压缩地址:补零计算

给定压缩地址,如何还原成完整 8 段?关键公式:

text
被省略的零段数 = 8 - (实际写出的段数)

示例2001:1::1000:0:1

  1. 写出的段:20011100001 → 共 5 段
  2. 被省略的零段:8 - 5 = 3
  3. 还原:2001:0001:0000:0000:0000:1000:0000:0001

💡 快速验证

还原后再用前导零省略规则写回去,应当与原压缩地址一致。如果压缩地址用了 ::,还原后重新压缩一定也只能在那一个位置出现 ::


🌐 前缀长度(/n)

IPv6 用 /n 表示前缀(网络)部分长度,类似 IPv4 的 CIDR。常见边界:

前缀长度含义
/128单个主机地址
/64典型子网前缀(网络和主机各 64 bit)
/48站点级别前缀(企业可再划分子网)
/3全球单播地址范围起点(2000::/3
text
2001:0db8:abcd:0012::1/64
└────── 网络 (64 bit) ──────┘└─ 主机 ─┘

📝 IPv6 的网络/主机划分

对比 IPv4 灵活多变的掩码,IPv6 实践中强烈推荐/64 作为子网边界:前 64 bit 是网络前缀,后 64 bit 是接口标识符(Interface ID)。这种规整划分简化了路由计算和地址自动配置。


⚖️ 与 IPv4 表示的对照

场景IPv4IPv6
点分进制/十六进制192.168.1.12001:db8::1
回环地址127.0.0.1/8::1/128
未指定地址0.0.0.0::
前缀表示192.168.1.0/242001:db8:1::/64
全网广播255.255.255.255不存在(IPv6 无广播)

⚠️ IPv6 取消了广播

IPv4 有全网广播、子网广播(x.x.x.255)等多种广播地址,容易引发广播风暴。IPv6 彻底取消广播,用组播取代:只发给订阅了对应组播组的设备。这是 IPv6 在二层安全性上的重要改进。


🧪 配置与验证

在接口上启用 IPv6 并配置一个全球单播地址:

Router Console
# 全局使能 IPv6
[Router] ipv6

# 接口使能 IPv6 并配置地址 [Router] interface GigabitEthernet 0/0/0 [Router-GigabitEthernet0/0/0] ipv6 enable [Router-GigabitEthernet0/0/0] ipv6 address 2001:db8:1::1/64

查看接口 IPv6 地址(注意压缩显示):

text
[Router] display ipv6 interface GigabitEthernet 0/0/0
GigabitEthernet0/0/0 current state : UP
IPv6 protocol current state : UP
IPv6 is enabled, link-local address is FE80::1
  Global unicast address(es):
    2001:DB8:1::1, subnet is 2001:DB8:1::/64

💡 控制台会自动压缩

设备显示的地址默认按压缩规则展示(前导零省略 + 一处 ::)。在排错时,掌握展开压缩地址的能力至关重要——因为配置文件、抓包报文、日志中可能混用完整或压缩形式。


📝 小结

  1. IPv6 地址 128 位,8 段 16 bit,冒号十六进制。
  2. 压缩规则一:每段前导零可省略,每段至少保留 1 字符。
  3. 压缩规则二:连续零段用 :: 代替,全地址最多一次
  4. 还原公式:被省略零段数 = 8 - 实际写出段数
  5. IPv6 无广播,用组播替代。
  6. 实践中网络前缀统一用 /64

🤖 AI伴学

IPv6 地址的 128 位表示习惯与 IPv4 截然不同,初学者容易在压缩/展开时出错。建议用 AI 当陪练:

"我正在学 IPv6 地址压缩规则。请给我 10 个压缩形态的 IPv6 地址,让我还原成完整的 8 段格式,并逐个核对。难度从单段连续零到多段分散零逐步递增。"

想了解如何用 AI 帮你批改地址还原练习,请参考 实践任务:网络基础的 AI 辅助

真人撰写written by human