SLAAC协议
🧩 一、SLAAC 是什么?
SLAAC(Stateless Address Autoconfiguration)
是一种让主机自动获取 IPv6 地址、前缀长度、默认网关的方法。
它依赖 ICMPv6 的 Router Solicitation(RS)/Router Advertisement(RA) 报文 完成配置。
简单说:
主机上电后,不用手动设置,也不用 DHCPv6,就能通过本地链路和路由器交互,自己生成地址。
🌐 二、SLAAC 运行机制
| 阶段 | 报文 | 行为 | 说明 |
|---|
| 1. 链路本地地址生成 | 无报文 | 主机先生成一个 fe80::/64 地址(Link-Local)。 | 用于后续邻居发现。 |
| 2. DAD 冲突检测 | NS → NA | 检查该地址是否已被占用(DAD)。 | 若无人回应,地址生效。 |
| 3. 发送 Router Solicitation (RS) | RS | 主机主动询问“有没有路由器?” | 源地址为 link-local,目标为 ff02::2(所有路由器组播)。 |
| 4. 接收 Router Advertisement (RA) | RA | 路由器广播网络前缀、MTU、DNS 等信息。 | 通常目标为 ff02::1(所有节点)。 |
| 5. 生成全局单播地址 | 无报文 | 主机用 RA 提供的前缀拼接自己的接口标识(EUI-64 或随机数)形成地址。 | 示例:2001:db8:abcd:1::1234 |
| 6. 再次进行 DAD 检查 | NS → NA | 确认新地址唯一。 | 若无冲突,开始使用。 |
🧠 三、RA 报文中的关键字段
SLAAC 的行为主要受 Router Advertisement (RA) 报文的标志位控制:
| 字段 | 名称 | 含义 |
|---|
| M (Managed) | Managed Address Configuration | 若为 1 → 表示需使用 DHCPv6(有状态) 分配地址。 |
| O (Other) | Other Configuration | 若为 1 → 表示使用 DHCPv6(无状态) 获取额外信息(如 DNS)。 |
| A (Autonomous) | Autonomous Address Configuration | 在 Prefix Information Option 中:表示该前缀可用于 SLAAC 自动生成地址。 |
| L (On-link) | On-link Prefix | 表示该前缀内的地址可直接通信(不需通过路由)。 |
常见组合:
- M=0, O=0 → 纯 SLAAC
- M=0, O=1 → SLAAC + DHCPv6(仅参数)
- M=1 → DHCPv6(有状态)为主
🔢 四、地址生成算法(简述)
1. 接口标识生成方式
| 方法 | 说明 | 示例 |
|---|
| EUI-64 | 基于网卡 MAC 生成,稳定但可能泄漏隐私。 | MAC=aa:bb:cc:dd:ee:ff → Interface ID= a8bb:ccff:fedd:eeff |
| 随机地址(Privacy Extension) | RFC 4941:定期更换后64位随机数,增强隐私。 | 每隔一段时间换一个地址。 |
| Stable-Secret 地址 | RFC 7217:基于接口 + 密钥 + 前缀哈希生成,稳定又防跟踪。 | 各操作系统默认方法(如 Windows、Linux 新版)。 |
🧩 五、SLAAC 与 DHCPv6 的关系
| 模式 | M 位 | O 位 | 地址来源 | 参数来源 | 说明 |
|---|
| 纯 SLAAC | 0 | 0 | 由 RA 提供前缀生成 | 无 | 仅靠 RA |
| SLAAC + DHCPv6 无状态 | 0 | 1 | SLAAC 生成 | DHCPv6 获取 DNS 等信息 | 常见家庭网络 |
| DHCPv6 有状态 | 1 | 0/1 | DHCPv6 分配 | DHCPv6 | 企业网络常见 |
📦 六、SLAAC 的优缺点
| 优点 | 缺点 |
|---|
| 不依赖 DHCP 服务器,自动化程度高 | 不易集中管理 |
| 节省网络资源 | 难以记录设备地址变化 |
| 配置简单、快速 | DNS 参数无法单独下发(需配合 DHCPv6) |