IPv6 地址的书写与压缩:128 位怎么读
IPv4 地址是 32 位,写成 4 组十进制数;IPv6 地址是 128 位,写成 8 组十六进制数。这篇只解决一个问题:看到一个 IPv6 地址,怎么把它读对、写对。
一、基本结构
一个完整的 IPv6 地址由 8 个「组」构成,每组 16 位,用 4 个十六进制字符表示,组间用英文冒号分隔:
2001:0db8:85a3:0000:0000:8a2e:0370:7334
└─组1─┘└─组2─┘└─组3─┘└─组4─┘└─组5─┘└─组6─┘└─组7─┘└─组8─┘
16位 16位 16位 16位 16位 16位 16位 16位 = 128 位
- 十六进制字符
0-9、a-f,不区分大小写(RFC 5952 建议统一用小写)。 - 每一组刚好 16 位,等价于 4 个二进制位对,所以 4 个十六进制字符 = 16 位。
- 与 IPv4 不同,这里没有"十进制"这个概念,不要试图把它当数字读。
二、两条压缩规则
128 位写成 32 个十六进制字符太长,因此有两个缩写规则(RFC 4291 定义,RFC 5952 给出规范形式):
规则 1:省略前导零。 每组开头的 0 可以去掉,但组内至少保留 1 个字符。
2001:0db8:0000:0000:0000:ff00:0042:8329
→ 2001:db8 :0 :0 :0 :ff00:42 :8329
→ 2001:db8:0:0:0:ff00:42:8329
规则 2:用 :: 压缩连续的全零组。 一段连续的「全零组」可以整体写成 ::。
2001:db8:0:0:0:ff00:42:8329
→ 2001:db8::ff00:42:8329
::在一个地址里只能出现一次。 因为它代表"若干组零",出现两次就无法确定各自代表几组,地址将不可还原。
- 合法:
2001:db8::1- 非法:
2001:db8::1::2
压缩哪一段? 当有多段连续零组时,压缩最长的那一段;长度相同时压缩最靠前的那一段。这条规则来自 RFC 5952,目的是让同一个地址只有一种规范写法。
三、几个必须记牢的特例
| 地址 | 含义 | 说明 |
|---|---|---|
::1 |
回环地址 | 等价于 IPv4 的 127.0.0.1,只能在本机内部使用 |
:: |
未指定地址 | 全零。不能作为目的地址,只用于源地址(如 DAD 检测期间) |
2001:db8::1 |
普通单播 | 前 64 位是网络前缀,后 64 位是接口标识 |
fe80::1 |
链路本地 | 每块网卡自动生成,只在同一链路内有效,不能跨路由器 |
::ffff:192.168.1.1 |
IPv4 映射 | 末尾用点分十进制书写,表示"这个 IPv4 地址的 v6 形式" |
细心的人会注意到 2001:db8:: 这种写法:结尾的 :: 只代表一组零。这是规则 2 的必然结果,允许保留,不必写成 2001:db8:0:0:0:0:0:0。
四、前缀长度:斜杠后面的数字
和 IPv4 一样用 CIDR 表示法,斜杠后是网络前缀的位数:
2001:db8:85a3:8d3:1319:8a2e:370:7348/64
└────────── 网络前缀 64 位 ──────────┘└─ 接口标识 64 位 ─┘
常见取值与用途:
| 前缀 | 典型场景 |
|---|---|
/128 |
单个主机(等价于一条具体地址) |
/64 |
一个局域网的标准大小,不可再切 |
/56 |
小规模用户站点,可切出 256 个 /64 |
/48 |
一个站点/企业,可切出 65536 个 /64 |
/32 |
RIR 分给 ISP 的典型块 |
为什么
/64是"标准局域网"? 因为 SLAAC(无状态地址自动配置)用 128 位中的后 64 位作为接口标识(RFC 4291)。把局域网切得比/64更小(例如/80、/120)会直接破坏 SLAAC,除非改用 DHCPv6 手工管理地址。这不是"建议",而是协议约束。
五、手算小技巧
- 一个十六进制字符 = 4 位。 看到
/48 → /64差 16 位,就是"整整一组"。 - 一组 = 4 个十六进制字符。 想切
/56,就是第 4 组的前半部分(前 2 个字符)固定。 - 地址前 64 位通常是"位置",后 64 位是"设备"。规划时只需关心前 4 组。
例子:2001:db8:abcd::/48 里想要编号为 0102 的子网:
2001:db8:abcd:0102::/64
→ 压缩后 2001:db8:abcd:102::/64
六、用工具避免手算出错
本站首页的地址解析工具完全在浏览器本地运行,可以:
- 把压缩地址展开成完整 8 组,核对是否写漏;
- 把完整地址压缩成规范形式(按 RFC 5952 规则);
- 显示地址类型(全球单播 / 链路本地 / ULA 等)与前缀归属。
输入不会被上传,可以放心粘贴内网地址做核对。
小结
- 128 位 = 8 组 × 16 位,每组 4 个十六进制字符。
- 可以省略前导零,可以用
::压缩一次连续全零组。 ::1是回环,::是未指定且不能做目的地址。- 局域网用
/64,这不是习惯而是 SLAAC 的硬约束。
下一篇:《IPv6 地址类型地图》,把 GUA、ULA、链路本地、组播、任播一次理清。