IPv6 编址体系
为什么需要 IPv6
IPv4 有 43 亿个地址,听起来不少,但:
- 全球 80 亿人口,平均 5 个人分 1 个 IP(还没算手机、冰箱、摄像头)
- NAT 缓解了枯竭,但破坏了端到端通信(P2P、物联网受限)
- 路由表爆炸:CIDR 缓解了,但 IPv4 头部设计限制了扩展
IPv6 的地址空间是 128 位,数量是 2^128 ≈ 3.4 × 10³⁸。夸张地说,地球上每粒沙子都能分到几亿个 IPv6 地址。
IPv6 地址表示法
128 位写成二进制太长了,IPv6 采用冒号十六进制:
完整形式:
2001:0DB8:0000:0000:0000:FF00:0042:8329
压缩规则
规则 1:前导零可以省略
2001:0DB8:0000:0000:0000:FF00:0042: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 是非法的,无法确定中间有几个零。
实战例子
| 完整形式 | 压缩形式 |
|---|---|
0000:0000:0000:0000:0000:0000:0000:0001 | ::1(环回地址) |
0000:0000:0000:0000:0000:0000:0000:0000 | ::(未指定地址) |
FE80:0000:0000:0000:0202:B3FF:FE1E:8329 | FE80::202:B3FF:FE1E:8329 |
IPv6 地址类型
IPv6 取消了广播(Broadcast),改为三种基本类型:
1. 单播(Unicast):一对一
| 类型 | 前缀 | 用途 | 类比 |
|---|---|---|---|
| Global Unicast | 2000::/3 | 全球唯一,可路由 | 公网 IP |
| Link-Local | FE80::/10 | 链路本地,不出网卡 | 小区内部对讲机 |
| Unique-Local | FC00::/7 | 组织内部私有地址 | 公司内部电话 |
| Loopback | ::1/128 | 本机环回 | 对着镜子说话 |
| Unspecified | ::/128 | 未指定(DHCP 前临时用) | "我还没地址" |
Link-Local 详解:
FE80::/10 是 IPv6 的"小区内部号",只在同一条网线/同一个 Wi-Fi 内有效。即使两台电脑没有路由器、没有公网地址,只要网线直连,就能用 Link-Local 地址互相 ping 通。
每台启用 IPv6 的设备都会自动生成一个 FE80:: 开头的地址,基于 MAC 地址通过 EUI-64 算法生成。
2. 组播(Multicast):一对多
前缀 FF00::/8,就像微信群发:
FF02::1:链路本地所有节点(All Nodes)FF02::2:链路本地所有路由器(All Routers)FF02::1:FFxx:xxxx:请求节点组播(Solicited-Node),用于 NDP 邻居发现
3. 任播(Anycast):一对最近
任播地址和单播地址格式完全相同,区别在于路由层面:多个服务器宣告相同的前缀,路由器把包发给"最近"(度量最小)的那个。DNS 根服务器 2001:500:: 就是任播部署的。
生活例子:你在北京点麦当劳外卖,系统会自动分配给最近的一家门店,而不是全国随机一家。这就是任播。
EUI-64 接口标识符
IPv6 地址的后 64 位通常是接口标识符(Interface ID)。EUI-64 算法把 48 位 MAC 地址扩展成 64 位:
MAC 地址:00:1A:2B:3C:4D:5E
步骤 1:在中间插入 FF:FE
→ 00:1A:2B:FF:FE:3C:4D:5E
步骤 2:翻转第 7 位(U/L 位)
00 → 00000000 → 翻转第 7 位 → 00000010 → 02
结果:02:1A:2B:FF:FE:3C:4D:5E
完整 Link-Local 地址:
FE80::21A:2BFF:FE3C:4D5E
隐私扩展地址(RFC 4941)
EUI-64 有个隐私问题:你的 IPv6 地址里嵌入了 MAC 地址,走到哪都能被追踪。就像你的身份证号里包含了出生地信息,有心人一看就知道你从哪来的。
隐私扩展(Privacy Extensions)解决了这个问题:
- 系统除了生成基于 EUI-64 的"稳定地址"外,还会定期生成随机临时地址
- 对外通信优先使用临时地址,防止被长期追踪
- 临时地址有过期时间(通常几天到几周)
现代操作系统(Windows 10+、macOS、Linux)默认开启隐私扩展。
IPv4 映射与兼容地址
IPv6 中嵌入 IPv4 地址的两种形式:
| 类型 | 格式 | 用途 |
|---|---|---|
| IPv4 兼容地址 | ::192.168.1.1 | 已废弃,不再使用 |
| IPv4 映射地址 | ::FFFF:192.168.1.1 | IPv6 套接字与 IPv4 节点通信 |
IPv6 取消了广播,所有"一对多"通信都通过组播实现。单播地址中 Global Unicast 是最常用的公网地址,Link-Local 是自动生成的本地链路地址。
本篇小结
- IPv6 128 位,冒号十六进制表示,支持前导零省略和 :: 压缩
- 单播分 Global、Link-Local、Unique-Local;组播以 FF 开头;任播靠路由区分
- EUI-64 从 MAC 地址生成接口 ID,但存在隐私风险
- 隐私扩展(RFC 4941)生成临时随机地址,防止追踪
::1是环回,::是未指定,FE80::/10是链路本地
动手实践
命令行查看本机 IPv6 地址:
- Windows:
ipconfig /all,找IPv6 Address和Temporary IPv6 Address - Linux:
ip addr show,找scope global和scope link
- Windows:
观察你的 Link-Local 地址是否包含你的 MAC 地址信息(对比
ip link输出的 MAC)尝试
ping ::1,验证 IPv6 协议栈是否正常访问 https://test-ipv6.com/,测试你的网络是否支持 IPv6