IPv6 地址格式与压缩规则
IPv4 地址(32 位)已经无法满足互联网的爆炸式增长,IPv6(128 位)从根本上解决了地址枯竭问题。本文聚焦 IPv6 地址的表示方法和压缩规则,这是阅读、配置、排错 IPv6 网络的第一步。
📐 IPv6 地址长度与结构
| 对比项 | IPv4 | IPv6 |
|---|---|---|
| 总位数 | 32 bit | 128 bit |
| 分段数 | 4 段 | 8 段 |
| 每段位数 | 8 bit | 16 bit |
| 分隔符 | .(点分十进制) | :(冒号分十六进制) |
| 地址空间 | 2³² ≈ 43 亿 | 2¹²⁸ ≈ 3.4×10³⁸(为地球上每一粒沙子分配地址) |
IPv6 地址的完整格式:
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 地址:
2001:0001:0000:0000:0000:1000:0000:0001/128每段都是 4 位十六进制,不足的前导零也补齐。但这种写法冗长且容易出错,因此 IPv6 定义了两条压缩规则。
📉 压缩规则一:省略前导零
每段中前导的 0 可以省略,但每段至少保留 1 个字符。
完整: 2001:0001:0000:0000:0000:1000:0000:0001
省略后:2001: 1: 0: 0: 0:1000: 0: 1
即: 2001:1:0:0:0:1000:0:1⚠️ 前导零省略的边界
- 可以省略:
0001→1、0abc→abc - 不能省略(至少保留 1 字符):
0000→0(不能写成空) - 不能省略中间的零:
1000不能省略为1,只能省略前导零
📉 压缩规则二:连续零段用 :: 代替
一段或连续多段全为 0 的段,可以用 :: 压缩代替。
压缩前:2001:0001:0000:0000:0000:1000:0000:0001
压缩后:2001:1::1000:0:1
└─────┘
连续 3 个全零段被 :: 代替🚨 关键限制::: 全地址只能出现一次
为什么?因为 :: 代表的零段数量不固定。如果出现两次,就无法判断每处各代表多少个零段。
反例(歧义):
2001:1::1000::1展开后可能之一:
2001:1:0000:0000:1000:0000:0000:0001
2001:1:0000:0000:0000:1000:0000:0001两种展开含义完全不同,因此 :: 全地址最多只能用一次。
🧮 还原压缩地址:补零计算
给定压缩地址,如何还原成完整 8 段?关键公式:
被省略的零段数 = 8 - (实际写出的段数)示例:2001:1::1000:0:1
- 写出的段:
2001、1、1000、0、1→ 共 5 段 - 被省略的零段:
8 - 5 = 3段 - 还原:
2001:0001:0000:0000:0000:1000:0000:0001
💡 快速验证
还原后再用前导零省略规则写回去,应当与原压缩地址一致。如果压缩地址用了 ::,还原后重新压缩一定也只能在那一个位置出现 ::。
🌐 前缀长度(/n)
IPv6 用 /n 表示前缀(网络)部分长度,类似 IPv4 的 CIDR。常见边界:
| 前缀长度 | 含义 |
|---|---|
/128 | 单个主机地址 |
/64 | 典型子网前缀(网络和主机各 64 bit) |
/48 | 站点级别前缀(企业可再划分子网) |
/3 | 全球单播地址范围起点(2000::/3) |
2001:0db8:abcd:0012::1/64
└────── 网络 (64 bit) ──────┘└─ 主机 ─┘📝 IPv6 的网络/主机划分
对比 IPv4 灵活多变的掩码,IPv6 实践中强烈推荐用 /64 作为子网边界:前 64 bit 是网络前缀,后 64 bit 是接口标识符(Interface ID)。这种规整划分简化了路由计算和地址自动配置。
⚖️ 与 IPv4 表示的对照
| 场景 | IPv4 | IPv6 |
|---|---|---|
| 点分进制/十六进制 | 192.168.1.1 | 2001:db8::1 |
| 回环地址 | 127.0.0.1/8 | ::1/128 |
| 未指定地址 | 0.0.0.0 | :: |
| 前缀表示 | 192.168.1.0/24 | 2001:db8:1::/64 |
| 全网广播 | 255.255.255.255 | 不存在(IPv6 无广播) |
⚠️ IPv6 取消了广播
IPv4 有全网广播、子网广播(x.x.x.255)等多种广播地址,容易引发广播风暴。IPv6 彻底取消广播,用组播取代:只发给订阅了对应组播组的设备。这是 IPv6 在二层安全性上的重要改进。
🧪 配置与验证
在接口上启用 IPv6 并配置一个全球单播地址:
# 全局使能 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 地址(注意压缩显示):
[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💡 控制台会自动压缩
设备显示的地址默认按压缩规则展示(前导零省略 + 一处 ::)。在排错时,掌握展开压缩地址的能力至关重要——因为配置文件、抓包报文、日志中可能混用完整或压缩形式。
📝 小结
- IPv6 地址 128 位,8 段 16 bit,冒号十六进制。
- 压缩规则一:每段前导零可省略,每段至少保留 1 字符。
- 压缩规则二:连续零段用
::代替,全地址最多一次。 - 还原公式:被省略零段数 =
8 - 实际写出段数。 - IPv6 无广播,用组播替代。
- 实践中网络前缀统一用
/64。
🤖 AI伴学
IPv6 地址的 128 位表示习惯与 IPv4 截然不同,初学者容易在压缩/展开时出错。建议用 AI 当陪练:
"我正在学 IPv6 地址压缩规则。请给我 10 个压缩形态的 IPv6 地址,让我还原成完整的 8 段格式,并逐个核对。难度从单段连续零到多段分散零逐步递增。"
想了解如何用 AI 帮你批改地址还原练习,请参考 实践任务:网络基础的 AI 辅助。
