🧩 一、IPv6 地址的三大类型(按功能划分)
| 类型 | 名称 | 特点 | 举例 |
|---|---|---|---|
| 单播 (Unicast) | 一对一通信 | 表示网络中唯一的接口 | 2001:db8::1, fe80::1 |
| 组播 (Multicast) | 一对多通信 | 表示一组节点 | ff02::1, ff02::2 |
| 任播 (Anycast) | 一对最近通信 | 多个节点共用一个地址,路由选择最近者 | 通常分配给多个服务器的相同接口 |
🧭 二、单播地址的常见类型
IPv6 的单播地址主要分为以下几类👇
| 地址类型 | 前缀 | 用途 | 特点 |
|---|---|---|---|
| 全局单播 (Global Unicast) | 2000::/3(即 2000–3fff) | 公网可路由地址(类似 IPv4 的公网 IP) | 唯一且可跨 Internet 路由 |
| 链路本地地址 (Link-Local) | fe80::/10 | 同一链路内通信(邻居发现、RA/RS) | 自动生成,不能跨网段路由 |
| 唯一本地地址 (Unique Local Address, ULA) | fc00::/7(常用 fdxx::/8) | 内网使用(类似 IPv4 私有地址) | 不可公网路由,可在本地或 VPN 使用 |
| 环回地址 (Loopback) | ::1/128 | 本机测试用(类似 IPv4 的 127.0.0.1) | 仅在本地主机使用 |
| 未指定地址 (Unspecified) | ::/128 | 表示“无地址”,用于启动阶段(如 DAD) | 不能作为通信源/目的 |
| 链路本地前缀(本地链路段) | fe80::/64(通常) | 每个接口自动配置 | 通常基于 MAC/EUI-64 或随机生成 |
| IPv4 映射地址 (IPv4-mapped IPv6) | ::ffff:192.168.1.1 | IPv6-only 环境中表示 IPv4 地址 | 用于 IPv4/IPv6 互操作 |
| IPv4 兼容地址 (IPv4-compatible) | 已废弃 | ::192.168.1.1 | 旧标准,现不再使用 |
| Link-local-Address |
link-local地址与ULA地址在使用场景上是否冲突
Link-Local 和 ULA 不冲突,因为它们的用途完全不同、作用范围不同、甚至通信逻辑也不同。
Link-local 是“链路通信地址”,ULA 是“站点通信地址”。
- Link-local:设备在一个网段内通信、发现邻居、找路由器。
- ULA:设备在**整个局域网(可跨多个网段)**内部通信。 Link-local地址是自生成的,只要设备启动了IPv6就会有link-local地址,然后才能获取其它地址。
Link-Local 地址是否固定?
不一定固定,但通常是稳定的。
- 它是根据网卡接口标识(Interface Identifier, IID) 自动生成的。
- IID 通常取决于网卡的 MAC 地址,或者系统为隐私生成的随机值。 因此:
- 如果设备的 MAC 地址不变、算法一致 → Link-local 地址基本不会变。
- 如果启用了 隐私扩展(Privacy Extension) 或系统策略改变 IID 生成方式 → 地址可能不同。
Link-Local 地址的结构
| 10 bits | 54 bits | 64 bits |
| Prefix | 000...0 | Interface Identifier |
- 前缀固定为
fe80::/10。 - 中间 54 位保留为 0。
- 后 64 位是 接口标识符 (IID)。
IID(接口标识符)的生成算法
IPv6 支持多种 IID 生成方式,不同系统和安全要求可能不同。
| 方式 | 描述 | 稳定性 | 特点 |
|---|---|---|---|
| EUI-64(传统) | 从 MAC 地址转换 | ✅ 稳定 | 可推算出设备的真实 MAC(隐私差) |
| Stable Secret-based(RFC 7217) | 从随机密钥和接口信息生成 | ✅ 稳定 | 隐私好,现代系统使用 |
| 随机 IID(Privacy Extension, RFC 4941) | 随机生成,周期更换 | ❌ 不稳定 | 用于临时全局地址,几乎不用在 link-local 上 |
EUI-64 生成算法
假设网卡 MAC 地址是:
00:1A:2B:3C:4D:5E
EUI-64 生成 IID 的步骤如下:
| 步骤 | 操作 | 结果 |
|---|---|---|
| 1️⃣ | 把 MAC 地址分成两半 | 00:1A:2B 和 3C:4D:5E |
| 2️⃣ | 插入固定的 FF:FE 中间 | 00:1A:2B:FF:FE:3C:4D:5E |
| 3️⃣ | 翻转第 7 位(U/L 位) | 改为 02:1A:2B:FF:FE:3C:4D:5E(表示本地管理) |
| 4️⃣ | 拼接到 fe80::/64 前缀 | fe80::021a:2bff:fe3c:4d5e |
| ✅ 得到最终 Link-local 地址: |
fe80::021a:2bff:fe3c:4d5e
Stable Secret-based RFC 7217(现代系统默认)
现代 Linux、Windows、macOS 为了防止通过地址推测设备 MAC,通常使用 “Stable Privacy Address” 机制(RFC 7217)。 IID 计算公式:
IID = F(Prefix, Network_Interface, DAD_Counter, Secret_Key)
其中:
- Prefix = fe80::/64(或全局前缀)
- Network_Interface = 接口名(如 eth0)
- DAD_Counter = 检测重试次数
- Secret_Key = 随机生成、系统保存在内核里
🔹 结果:
同一设备、同一接口、同一前缀 → IID 固定。
但不同机器、不同接口 → IID 不同(无法反推出 MAC)。
🌐 三、组播/多播地址(Multicast)
IPv6 完全取消了广播,所有广播功能都由组播取代。
组播地址总是以 ff00::/8 开头,第二个字节定义了作用范围(Scope)。
| 范围 | 地址示例 | 含义 |
|---|---|---|
| ff02::1 | 所有节点(All Nodes) | 当前链路上所有设备 |
| ff02::2 | 所有路由器(All Routers) | 当前链路上所有路由器 |
| ff05::2 | 区域范围的所有路由器 | 用于更大范围的管理 |
| ff02::1:ffXX:XXXX | Solicited-Node 组播地址 | NDP(邻居发现)使用,用于 IPv6→MAC 解析 |
组播地址结构一般是:
| 8bit | 4bit | 4bit | 112bit |
| ff | flags | scope | group ID |
也就是:
ffXY::Z...
其中:
X是 Flags(标志)Y是 Scope(作用范围)- 后面的部分是 Group ID(组的标识符)
Flags(标志位)字段 —— 控制“性质”
Flags 是 4 位(二进制),定义了组播地址的特征。
一般写成 4 bit 二进制 abcd,每一位都有特定含义:
| 位 | 名称 | 含义 | 取值说明 |
|---|---|---|---|
| a(bit 0) | R-Flag(Rendezvous Point) | 是否为固定 RP(多播路由相关) | 一般为 0 |
| b(bit 1) | P-Flag(Prefix-based) | 是否根据前缀自动派生 | 一般为 0 |
| c(bit 2) | T-Flag(Transient) | 是否临时(Transient)组播 | 1 = 临时,0 = 永久(标准分配) |
| d(bit 3) | Reserved | 保留位 | 一般为 0 |
👉 实际网络中常见的情况:
ff02:Flags = 0,表示永久的(well-known)组播地址。ff32:Flags = 3(临时 + link-local),极少见,用于实验性多播。
Scope(作用范围)字段 —— 控制“传播范围”
Scope 是 4 位十六进制值,定义该组播包能传播的最大范围。
| Scope 值 | 范围 | 说明 |
|---|---|---|
1 | Interface-local | 仅限本接口(测试用途) |
2 | Link-local | 同一链路(最常见),NDP 都用这个 |
3 | Subnet-local | 子网级别(很少用) |
4 | Admin-local | 管理员限定范围 |
5 | Site-local | 整个站点(多个链路) |
8 | Organization-local | 整个机构(例如公司网) |
E | Global | 全球范围(几乎不用) |
| 👉 IPv6 NDP 的所有组播地址都用 Scope = 2(link-local), | ||
| 比如: |
ff02::1 所有节点(链路内)
ff02::2 所有路由器(链路内)
ff02::1:ffxx:xxxx solicited-node(链路内)
Group ID(组编号)
Group ID 是 最后 112 位,用于区分不同的多播组。
它就像“组播频道号”。
常见标准分配的 Group ID:
| 地址 | Group ID | 名称 |
|---|---|---|
ff02::1 | 0x1 | 所有节点组 (All Nodes) |
ff02::2 | 0x2 | 所有路由器组 (All Routers) |
ff02::1:ffXX:XXXX | 0x1ffXX:XXXX | solicited-node 组 |
ff05::2 | 0x2 | 所有站点路由器 |
ff02::1:2 | 0x1:2 | 所有 DHCP 服务器 |
常见的标准组播地址(IPv6 内置)
| 地址 | 名称 | 用途 |
|---|---|---|
| ff02::1 | 所有节点 | 路由器 RA 广播通告 |
| ff02::2 | 所有路由器 | 主机 RS 请求路由器 |
| ff02::1:ffxx:xxxx | Solicited-node | NDP 地址解析 |
| ff02::1:2 | 所有 DHCPv6 服务器 | DHCPv6 请求 |
| ff02::5 / ff02::6 | OSPFv3 | 路由协议 |
| ff02::9 | RIPng | 路由更新 |
| ff02::fb | mDNS | 本地设备发现 |
🧮 四、任播地址(Anycast)
| 项目 | 内容 |
|---|---|
| 含义 | 多个接口共享同一地址,数据包发给最近的一个 |
| 用途 | 内容分发、DNS 负载均衡(如多个 DNS 服务器共用一个地址) |
| 配置方式 | 从单播地址池中手动指定为 Anycast,无特殊前缀 |
| 示例 | 多个路由器接口都配置 2001:db8::1,客户端请求会自动发往最近的那台 |
🧠 五、作用范围(Scope)总结
IPv6 地址天然带“范围”概念:
| 范围 | 说明 | 可路由性 |
|---|---|---|
| Interface-local | 本机内(如 ::1) | 否 |
| Link-local | 本地链路(如 fe80::/10) | 否 |
| Site-local | 已废弃(原为内网使用) | 否 |
| Unique-local (fd00::/8) | 内网、VPN | 否(但可通过隧道或 NAT66) |
| Global (2000::/3) | 互联网 | ✅ 可路由 |
🧾 六、速查表汇总
| 类型 | 前缀 | 示例 | 可公网路由 | 典型用途 |
|---|---|---|---|---|
| 未指定地址 | ::/128 | :: | ❌ | 初始化、DAD |
| 环回地址 | ::1/128 | ::1 | ❌ | 本地测试 |
| 链路本地 | fe80::/10 | fe80::1 | ❌ | NDP、RS/RA |
| 唯一本地 (ULA) | fd00::/8 | fd12:3456::1 | ❌ | 内网通信 |
| 全局单播 | 2000::/3 | 2001:db8::1 | ✅ | 公网通信 |
| 组播 | ff00::/8 | ff02::1, ff02::2 | 局域/全网 | 路由发现、ND、服务 |
| 任播 | (无固定前缀) | 多节点共享 2001:db8::1 | ✅ | 最近节点选路 |