🧩 一、什么是 DHCPv6-PD
DHCPv6 Prefix Delegation(PD) 是 DHCPv6 的一种扩展机制,用来给下游路由器分配一个可用的前缀(subnet prefix),而不是单个 IPv6 地址。
通俗解释:
- DHCPv6 分配“地址” → 给主机
- DHCPv6-PD 分配“网段” → 给路由器,让它继续给内部主机分配地址(通常通过 SLAAC)
🌐 二、使用场景
| 场景 | 描述 | 示例 |
|---|---|---|
| 家庭宽带(ISP 分配) | 家用路由器通过 DHCPv6-PD 向 ISP 请求一个前缀,比如 /56 | ISP → 分配 2001:db8:abcd:1200::/56 |
| 企业子网分配 | 总路由器将多个前缀分给不同部门的边界路由器 | 总网段 /48 → 子部门各 /56 |
| 嵌套路由 / 4G / 光猫桥接模式 | 下级路由器自动获取上级分配的 IPv6 子网 | 光猫 → 家用路由器 |
⚙️ 三、协议角色
| 角色 | 对应 DHCPv6 名称 | 作用 |
|---|---|---|
| 请求方(Requesting Router) | DHCPv6 客户端 | 向上游请求前缀(类似主机请求地址) |
| 委派方(Delegating Router) | DHCPv6 服务器 | 从上游地址池中选取可用前缀并下发 |
🔁 四、DHCPv6-PD 报文流程(与 IA_PD 选项配合)
与普通 DHCPv6 类似,只是使用的 IA_NA 变为 IA_PD(Identity Association for Prefix Delegation)。
| 阶段 | 报文 | 源地址 / 目标地址 | 含义 |
|---|---|---|---|
| ① | Solicit | 源:Link-local目标:ff02::1:2 | 请求 PD,包含 IA_PD option。 |
| ② | Advertise | 源:服务器LL或GUA目标:客户端LL | 告知可用前缀范围、生命周期。 |
| ③ | Request | 源:客户端LL目标:服务器LL/GUA | 请求确认某个前缀。 |
| ④ | Reply | 源:服务器LL/GUA目标:客户端LL | 返回最终分配的前缀。 |
🔹 若支持 Rapid Commit,可跳过 Advertise/Request(两步完成)。
🧱 五、关键选项(Option)
| Option Code | 名称 | 说明 |
|---|---|---|
| 25 | IA_PD(Identity Association for Prefix Delegation) | 外层容器,标识一个 PD 实例(包含 IAID、T1、T2)。 |
| 26 | IAPREFIX | 在 IA_PD 中携带实际分配的前缀、生命周期。 |
| 13 | Status Code | 表示是否成功(如 NoPrefixAvail)。 |
| 6 | ORO | 客户端声明希望返回哪些 Option。 |
🧩 六、IAPREFIX Option 结构
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_IAPREFIX (26) | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| preferred-lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| valid-lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| prefix-length | |
+-+-+-+-+-+-+-+-+ |
| |
| IPv6 prefix (variable) |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| sub-options (if any) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 字段 | 含义 | 长度(字节) | 说明 |
|---|---|---|---|
| preferred-lifetime | 地址在此时间内“首选”使用 | 4 | 单位为秒(uint32)。超过此时间,地址仍可用但不再推荐新连接使用。 |
| valid-lifetime | 地址在此时间内仍“有效” | 4 | 单位为秒。超过此时间后,前缀应立即废弃。 |
| prefix-length | 前缀长度 | 1 | 表示前缀位数(如 56、60、64),最大 128。 |
| IPv6 prefix | 实际分配的前缀 | 16 | 例如:2001:db8:abcd:1000::(网络部分,主机位清零)。 |
🧭 七、下游地址分配过程
获得前缀后,请求方(下级路由器)通常会:
- 为每个 LAN 接口生成子前缀
- 例如上游分配
/56,路由器可将其拆分成多个/64:
- 例如上游分配
- 在 LAN 口上发送 RA(Router Advertisement)
- 广播这些
/64前缀,让终端通过 SLAAC 自动生成地址。
- 广播这些
- 为上行口配置默认路由
- 使用上游的 Link-local 地址作为默认网关。
🔐 八、续租与回收流程
| 阶段 | 触发时间 | 报文 | 源地址 | 目的地址 | 功能说明 |
|---|---|---|---|---|---|
| Renew | 当前租约时间到达 T1(推荐值:有效期的 0.5) | RENEW | 客户端的 link-local 地址 | 服务器单播地址(如果已知) | 请求续租,更新相同前缀。 |
| Rebind | 当前租约时间到达 T2(推荐值:有效期的 0.8) | REBIND | 客户端的 link-local 地址 | 组播地址 ff02::1:2(所有 DHCPv6 服务器/中继) | 无响应时广播请求任何服务器续租。 |
| Expire | 超过 valid-lifetime | —— | —— | —— | 前缀被废弃,不可再用。 |
| 📘 公式(推荐值) |
🧠 小结:
- T1、T2 由服务器指定,客户端只需遵守。
- 若未指定,客户端可采用默认比例(0.5、0.8)。
- 在 T1 之前,客户端正常使用分配前缀;
T1 到 T2 之间 尝试与原服务器续租;
T2 到 valid-lifetime 尝试向任意服务器续租;
过 valid-lifetime 后立即撤销配置。