V6IPv6Hub

进阶篇 · 搞懂机制

地址是怎么自动配出来的:SLAAC、RA 与 DHCPv6 - IPv6Hub

SLAACDHCPv6RA

本页目录

  1. 一、三个角色
  2. 二、RA:一条消息决定一切
  3. 三、三种典型组合
  4. 四、一个必须知道的事实:Android 只支持 SLAAC
  5. 五、接口标识如何生成
  6. 六、地址的三个状态
  7. 七、排障速查表
  8. 八、常用查看命令
  9. 小结

地址是怎么自动配出来的:SLAAC、RA 与 DHCPv6

IPv4 里我们习惯了"插上网线 → 找 DHCP 要地址"。IPv6 的做法完全不同:主力是无状态自动配置(SLAAC),由路由器用一条通告消息"广播"给整条链路。理解这条消息,就理解了 IPv6 地址分配的全过程。

一、三个角色

角色 职责
主机 监听链路通告,自己生成地址
路由器 周期性发送 RA(路由器通告),告知前缀与默认网关
DHCPv6 服务器(可选) 提供地址或额外配置(DNS、NTP 等)

注意关键差别:路由器是"通知方",不是"分配方"。它不记录谁用了哪个地址,也不做地址池管理——主机自己算自己的地址。

二、RA:一条消息决定一切

RA(Router Advertisement,ICMPv6 类型 134,RFC 4861)由路由器周期性发送(默认间隔 200~600 秒),主机也可以主动发 RS 请求立即获得。它携带的关键信息:

字段/选项 作用
前缀信息(PIO) 网络前缀、长度(通常 /64)、有效期
A 标志 该前缀允许主机用 SLAAC 生成地址
M 标志 主机应通过 DHCPv6 获取地址(有状态)
O 标志 主机应通过 DHCPv6 获取其他配置(无状态)
Router Lifetime 默认网关的有效期,为 0 表示"我不是默认网关"
源链路层地址 网关的 MAC,用于直接通信
MTU 选项 告知链路 MTU,避免 PMTUD 黑洞
RDNSS 选项 直接下发 DNS 服务器地址(RFC 8106)

三、三种典型组合

组合一:纯 SLAAC(最常见)

M=0, O=0, A=1

主机用 RA 里的前缀 + 自己生成的 64 位接口标识,拼出完整地址。DNS 靠 RA 中的 RDNSS 选项下发。这是家庭网络和现代企业网的默认形态——没有任何服务器也在工作。

组合二:SLAAC + DHCPv6 无状态

M=0, O=1

地址仍由 SLAAC 生成,但 DNS、NTP、域名后缀等参数从 DHCPv6 获取。适合需要集中下发多个配置项的场景。

组合三:DHCPv6 有状态

M=1

地址与配置全部由 DHCPv6 服务器提供,管理方式接近传统 DHCPv4。适合需要**精确记录"谁用了哪个地址"**的合规场景。

四、一个必须知道的事实:Android 只支持 SLAAC

Android 不实现 DHCPv6 客户端。 这意味着:

这不是 Android 的"缺陷",而是当年的设计取舍。但实践中它影响巨大:给访客网络做 IPv6 规划时,务必同时开启 SLAAC。 只靠 DHCPv6 的方案会让大量手机用户上不了 IPv6。

五、接口标识如何生成

得到 /64 前缀后,后 64 位接口标识的生成方式:

方式 特点
EUI-64 由 MAC 地址变换(插入 ff:fe、反转 U/L 位),可被追踪,现已不推荐
隐私扩展 随机生成,定期更换(RFC 4941),Windows/macOS/Linux 默认开启
稳定隐私 用密钥 + 前缀稳定派生(RFC 7217),既保护隐私又保持稳定

这就是为什么同一台手机会"每次连 Wi-Fi 地址都不一样"——那是隐私保护在工作,不是配置错误。

六、地址的三个状态

SLAAC 生成的地址不是"有或没有"这么简单,而是有生命周期:

tentative(候选,正在做 DAD 检测)
   ↓ 检测通过
preferred(首选,正常收发)
   ↓ 超过 preferred lifetime
deprecated(弃用,还能用但不用于新连接)
   ↓ 超过 valid lifetime
invalid(失效,彻底移除)

所以一台设备同时挂 3~5 个 IPv6 地址非常正常:链路本地 + 若干 GUA(含新旧前缀、含临时地址)。看到地址多不要慌,看状态和有效期。

七、排障速查表

现象 优先怀疑
有 fe80:: 但没有 2xxx: 地址 没收到 RA,或收到但 A=0 且无 DHCPv6
有 GUA 但没有默认路由 RA 的 Router Lifetime = 0,或 RA 来自非网关设备
有地址能 ping 通网关,但打不开网页 没收到 RDNSS,DNS 未配置
地址每隔一段时间变化 隐私扩展的正常行为
Android 设备上不了 IPv6,电脑可以 网络只开了 DHCPv6 有状态,关掉了 SLAAC
重启路由器后地址全变 运营商重新下发了不同前缀(PD 变更)

八、常用查看命令

系统 命令 看什么
Windows ipconfig /all 是否有 2xxx: GUA、默认网关、DNS
Windows netsh interface ipv6 show route 是否有 ::/0 默认路由
Windows netsh interface ipv6 show neighbors 邻居缓存(NDP 结果)
Linux ip -6 addr show 地址与状态(valid_lft/preferred_lft)
Linux ip -6 route show 默认路由与 RA 学到的路由
Linux rdisc6 <网卡> 主动监听并打印 RA 内容(需 ndisc6 工具)
macOS ifconfig / ndp -rn 地址列表 / 邻居与默认路由器表

第三条命令 rdisc6 值得记住:当"为什么没拿到地址"时,直接看 RA 里到底有没有前缀、A 位开没开,比猜快得多。

小结

下一篇:《IPv6 与 DNS:AAAA 记录与双栈解析》。

← 地址规划与子网划分:/32 /48 /56 /64 怎么定 IPv6 与 DNS:AAAA 记录与双栈解析 →