IPv6 地址分类与 EUI-64
IPv4 把地址粗暴地划成 A/B/C/D/E 类,网络与拓扑耦合在一起。IPv6 重新设计了地址架构,按用途划分类型,并把网络和拓扑分离。本文讲解 IPv6 的四大地址类型、EUI-64 自动生成机制,以及 IPv6 相对 IPv4 在架构上的关键改进。
🗂️ IPv6 地址四大类型
| 类型 | 前缀 | 对应 IPv4 概念 | 用途 |
|---|---|---|---|
| 全球单播 (GUA) | 2000::/3 | 公网地址 | 互联网可路由的全球唯一地址 |
| 链路本地 (LLA) | FE80::/10 | 169.254.x.x(APIPA) | 仅限同一链路通信,路由器不转发 |
| 唯一本地 (ULA) | FC00::/7 | 私网地址(10/172.16/192.168) | 内网使用,不向互联网路由 |
| 组播 | FF00::/8 | D 类组播 (224.0.0.0/4) | 一对多通信 |
| 任播 | —(复用单播空间) | IPv4 无对应概念 | 一对最近 |
⚠️ IPv6 没有广播地址
IPv4 既有单播也有广播(全网广播 255.255.255.255、子网广播 x.x.x.255)。IPv6 彻底取消广播,所有一对多通信都走组播。这是 IPv6 在效率和安全上的关键改进——避免广播风暴。
🌍 1. 全球单播地址 (GUA, Global Unicast)
前缀 2000::/3,即前 3 bit 为 001,对应地址范围:
0010 0000 ... ... = 2000::
↓
0011 1111 1111 ... = 3FFF:FFFF:...
所以 GUA 覆盖:2000:: ~ 3FFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF典型结构(以 /64 子网为例):
2001:0db8:abcd:0012:0000:0000:0000:0001
└──── 前 48 bit (全局前缀) ────┘└16bit┘└─ 后 64 bit (接口 ID) ─┘
子网号
网络前缀部分:2001:0db8:abcd:0012/64
接口标识符::0000:0000:0000:0001💡 前缀 48 vs 64
- 前 48 bit:由 IANA→RIR→运营商分配的全球路由前缀。
- 第 49~64 bit:子网号,由企业/站点内部划分。
- 后 64 bit:接口标识符,标识链路上的一个接口。
🔗 2. 链路本地地址 (LLA, Link-Local)
前缀 FE80::/10,仅限本链路,路由器不会转发LLA 报文到其他链路。
FE80:0000:0000:0000:xxxx:xxxx:xxxx:xxxx/10特点:
- 接口使能 IPv6 后会自动生成一个 LLA,无需手工配置就能与本链路设备通信。
- OSPFv3、路由协议邻居都使用 LLA 建立关系——即使接口没配 GUA,也能跑 OSPFv3。
- 路由的下一跳默认是 LLA,而不是 GUA。
- 不能跨链路访问(三层不可路由)。
AR1 ──g0───g0── AR2
LLA: FE80::1 LLA: FE80::2
GUA: 2001:12::1 GUA: 2001:12::2
OSPFv3 邻居:用 FE80 建邻
静态路由:ipv6 route 2001:3::/64 FE80::2 (下一跳用 LLA)📝 LLA 与 ARP 的协作
LLA 天然"绑定"一个接口,下一跳写 LLA 就不用再递归查询出接口。这与 IPv4 默认用 GUA 作下一跳形成鲜明对比。
🏠 3. 唯一本地地址 (ULA, Unique Local)
前缀 FC00::/7(FC00:: ~ FDFF::),等同于 IPv4 私网地址(10.0.0.0/8 等)。
FC00:0000:0000:0000:xxxx:xxxx:xxxx:xxxx/7
其中第 7 bit 区分:
0 —— IANA 分配(保留未启用)
1 —— 本地自行分配 (FD00::/8)⚠️ ULA 的局限
ULA 地址在互联网上不可路由,功能上等价于 IPv4 私网。但 IPv4 的私网地址全球千篇一律(大量重复 192.168.1.0/24),ULA 通过引入全局 ID 增加唯一性,降低企业合并时的地址冲突概率。
👥 4. 组播地址 (Multicast)
前缀 FF00::/8:
FFXX:....::/16
└┬┘
flag + scopeFF 后第一个字节的两位关键域:
| bit | 名称 | 含义 |
|---|---|---|
| 高 4 bit (flag) | 0/1 | 0=永久组播;1=临时组播 |
| 低 4 bit (scope) | 0-F | 作用范围 |
常见 scope 取值:
| scope | 含义 | 示例 |
|---|---|---|
1 | 节点本地 | FF01::1 |
2 | 链路本地 | FF02::1 所有主机、FF02::2 所有路由器、FF02::5 OSPFv3 |
5 | 站点本地 | FF05::1 |
E | 全球 | FF0E::1 |
关键组播地址:
FF02::1 本链路所有主机
FF02::2 本链路所有路由器
FF02::5 OSPFv3 组播
FF02::6 OSPFv3 DR/BDR 组播
FF02::1:FF00:0 请求节点组播(Solicited-Node)💡 请求节点组播地址
作用是把"广播式 ARP 查询"收窄成"少数设备订阅的组播查询":
请求节点组播 = FF02::1:FF + 单播地址后 24 bit
含 GUA 2001:db8:1::2,对应 FF02::1:FF00:2
含 GUA 2001:db8:1::3,对应 FF02::1:FF00:3只有后 24 bit 相同的设备才侦听同一组播,避免全网都被 ARP 请求打扰。
📍 5. 任播地址 (Anycast)
任播地址复用单播地址空间,不单独划前缀。多个接口配置同一个任播地址,路由器按最近原则把数据送到拓扑上最近的那个配置节点。
Internet
|
┌────┼────┐
DNS1 DNS2 DNS3 (都配 2001:db8:abcd::53)
近 远特点:
- 任播不能作为源地址(因为发送方不知道数据最终被哪个节点接收)。
- 任播地址不执行 DAD 重复地址检测——多个接口本来就用同一地址。
- 常用于 Anycast DNS、CDN、就近服务调度。
⚠️ 配置方式
在接口上配置单播地址后追加 anycast 关键字:
[Router-G0/0/0] ipv6 address 2001:db8:abcd::53/64 anycast🧬 EUI-64:从 MAC 自动生成接口 ID
IPv6 接口标识符 64 bit 长,可以用 MAC 地址 + EUI-64 规则自动生成。
步骤
- MAC 地址(48 bit) 中间插入
FFFE(16 bit),得到 64 bit。 - 翻转 U/L 位(第 7 位,从低位数第 1 bit 为 LSB):
0→1或1→0,表示"本地管理"。
MAC: 00-E0-FC-C5-6B-E9 (48 bit)
↓
插入 FFFE: 00E0:FCFF:FEC5:6BE9
↓
翻转 U/L 位: 02E0:FCFF:FEC5:6BE9 (第 1 字节 00 → 02)📝 为什么翻转 U/L 位?
MAC 的第 7 bit 是 U/L(Universal/Local)位:
0= 全球唯一(出厂分配)1= 本地管理
EUI-64 自动生成的接口 ID 是"由 MAC 改造而来",属于"本地衍生",按规范要把 U/L 位翻成 1。这样从 EUI-64 就能识别出"这是本地生成的",便于和真全球唯一接口 ID 区分。
配置
[Router] interface GigabitEthernet 0/0/0
[Router-G0/0/0] ipv6 enable
[Router-G0/0/0] ipv6 address 2001:db8:1::/64 eui-64设备会用 2001:db8:1:: 前缀 + EUI-64 接口 ID 拼出完整 GUA 地址。
🏗️ IPv6 网络与拓扑的分离(对比 IPv4 的核心改进)
IPv4 把"网络"和"互联拓扑"耦合在同一前缀里:
IPv4:
AR1 ───── AR2
1.1.12.1 1.1.12.2 /24
└──共同网段──┘
既是"一条网络",也描述了"AR1 和 AR2 在同一链路"IPv6 把这两个职责拆分:
IPv6:
AR1 ───── AR2
GUA: 2001:12::1 GUA: 2001:12::2/64 ← "网络/路"
LLA: FE80::1 LLA: FE80::2 ← "拓扑/由"
OSPFv3 用 LLA 建邻,路由下一跳写 LLA
GUA 用于业务通信| 职责 | IPv4 | IPv6 |
|---|---|---|
| 谁承载网络 | 前缀本身(如 10.1.12.0/24) | GUA 前缀 |
| 谁承载拓扑 | 同一前缀 | LLA |
| 下一条写什么 | GUA | LLA |
| 改网络前缀会怎样 | 邻居关系跟着变 | 邻居用 LLA,网络前缀变了邻居不乱 |
⚠️ 这个分离的实战价值
- 重新编址(换运营商)时,只改 GUA,LLA 不变,OSPFv3 邻居关系不中断。
- 互联网地址不浪费在"互联链路拓扑"上——LLA 不占全球地址空间。
📋 配置速查
ipv6
#
interface GigabitEthernet0/0/0
ipv6 enable
ipv6 address 2001:db8:1::1/64 # 手工指定 GUA
ipv6 address 2001:db8:2::/64 eui-64 # EUI-64 生成 GUA
ipv6 address fe80::1 link-local # 手工指定 LLA
ipv6 address auto link-local # 自动生成 LLA
ipv6 address 2001:db8:abcd::53/64 anycast # 任播| 命令 | 生成内容 |
|---|---|
ipv6 address X::Y/64 | 手工静态 GUA |
ipv6 address X::/64 eui-64 | 前缀 + EUI-64 自动拼 |
ipv6 address fe80::1 link-local | 手工 LLA |
ipv6 address auto link-local | 自动 LLA(基于 EUI-64) |
💡 LLA 自动生成规则
未手工指定时,设备用 FE80:: + EUI-64(基于接口 MAC)自动生成 LLA。所以即使你只配了 ipv6 enable,接口也立刻有一个 LLA。
📚 常见问题
Q:GUA 和 LLA 能同时存在吗? 能,且通常都存在。一个接口可以同时配 1 个 LLA + 多个 GUA。
Q:ULA 能否跨互联网通信? 不能,运营商路由器不路由 ULA。如需对外通信要通过 NAT66(ULA ↔ GUA 转换)或部署 VPN。
Q:虽然有 ULA,IPv6 也需要 NAT 吗? 通常不推荐 NAT66,IPv6 地址充足是其核心价值。ULA 主要用于纯内网隔离。
🤖 AI伴学
IPv6 地址分类比 IPv4 的"按 A/B/C 类切分"更细致,初学者容易混淆 GUA/LLA/ULA/组播/任播的用途。建议用 AI 当陪练:
"我正在学 IPv6 地址分类。请随机给我 20 个 IPv6 地址,让我判断它们分别属于哪种类型(GUA/LLA/ULA/组播/任播),并说出判断依据。"
想了解如何用 AI 生成 IPv6 地址规划表并核对类型,请参考 实践任务:网络基础的 AI 辅助。
