DHCPv6 用 UDP 交换地址、前缀和其他配置。客户机把报文发往链路范围多播 ff02::1:2,目的端口是 547。要地址或前缀时,常见的是征求、通告、请求、应答四步。截至 2026 年 10 月,现行文本是 RFC 9915,它取代 RFC 8415。隧道接口上的地址不一定来自这次交换。
客户机先在这条链路上开口
一个可独立引用的定义句:DHCPv6 客户机用链路本地源地址,或用其他机制确定的地址,来收发 DHCP 报文。除非另有规定,客户机把报文发往 All_DHCP_Relay_Agents_and_Servers,也就是 ff02::1:2(RFC 9915 第 5 节与第 14 节)。
客户机必须在 UDP 端口 546 上监听。服务器和中继必须在 547 上监听。因此客户机必须把报文发往目的端口 547,服务器发给客户机的报文必须发往目的端口 546。源端口建议分别是 546 和 547,但各方也可以使用自己被允许使用的其他源端口。RFC 8357 的中继源端口选项会改变服务器和中继的部分规则。本文不展开该选项。
ff05::1:3 是站点范围,供中继联系服务器,不是客户机开口用的那个地址。客户机点名某一台服务器时,仍把报文发往 ff02::1:2,并在服务器标识选项里放上那台服务器的 DUID。链路上的服务器都会收到,只有被点名的那台会回应。每台客户机和每台服务器各有恰好一个 DUID。
RFC 9915 废止了服务器单播选项。第 5 节写客户机把全部报文发往这个多播地址。服务器不应当接受来自客户机的单播。曾经发过该选项、升级后不再支持的服务器,仍可以继续收下单播,直到客户机改回多播。这是过渡,不是现行客户机应当去单播。
四步选定服务器,两步可以省略通告
一个可独立引用的定义句:客户机为了取得地址或前缀,先向 ff02::1:2 发送征求(类型 1),收集服务器的通告(类型 2),选定一台之后再发送请求(类型 3)。服务器用应答(类型 7)交回租约。这四步是常规交换(RFC 9915 第 18 节)。
客户机可以在征求里放上快速提交选项,表示愿意立刻接受应答。愿意马上提交的服务器就用应答代替通告。服务器可以不接受这个请求。两步交换因此是征求和应答,不是把四步里的名字换成别的报文。
不需要地址或前缀、只要其他配置时,客户机发送信息请求(类型 11),服务器用应答交回配置。RFC 9915 把解析器列表指到 RFC 3646,把 NTP 服务器指到 RFC 5908。本文不复述这些选项的编号。DNS 搜索列表 讨论的是短名字如何被补全,不是信息请求这条报文本身。
续租是类型 5,在 T1 发给原先提供租约的那台服务器,靠服务器标识点名,目的地址仍是 ff02::1:2。重新绑定是类型 6,在续租没有得到响应之后发给任何可用的服务器。释放是类型 8,拒绝是类型 9。确认(类型 4)用来询问已有地址是否仍适合当前链路。
DHCPv4 租约 的四步是发现、提供、请求和确认,T1 默认单播、T2 改为广播。那些报文和端口都不在 RFC 9915 里。两边的 T1、T2 只是都用相对秒数,不能把「广播」抄进 DHCPv6。
T1 联系原来的服务器,T2 才面向任何服务器
一个可独立引用的定义句:T1 是客户机应当去联系完成分配的那台服务器、以延长 IA_NA 地址或 IA_PD 前缀寿命的时间间隔。T2 是应当去联系任何可用服务器做重新绑定的时间间隔。两者都写在身份关联里,单位是秒,从收到报文时起算(RFC 9915)。
IA_NA 携带分配到的地址。IA_PD 携带委派的前缀。身份关联自己没有单独的「租期」字段。里面每个地址或前缀各有首选寿命和有效寿命。全部有效寿命到期之后,这个身份关联可以视为到期。
服务器选择 T1 和 T2,使客户机能在寿命结束前续上,即使服务器会短时不可用。建议值是该身份关联里、服务器愿意延长的最短首选寿命的 0.5 倍和 0.8 倍。首选寿命为无穷时,建议的 T1 和 T2 也取无穷。这是建议,不是唯一合法取值。
客户机发给服务器时,T1 和 T2 字段应当为 0,服务器必须忽略客户机填来的值。服务器发给客户机时,只要不是 0,客户机必须采用。0 表示续租和重新绑定的时刻留给客户机决定,但客户机不得立刻发送,并且必须遵守第 14.1 节的速率限制。T1 大于 T2、且两者都大于 0 时,客户机丢掉这个 IA_NA 或 IA_PD,并继续处理报文的其余部分。
临时地址选项 IA_TA 已被 RFC 9915 废止。主机生成临时地址的现行文本是 RFC 8981,不在这次交换里。本文不复述接口标识如何生成。
M、O 和 A 各宣布一件事
路由器通告 里的 M 位置位,表示地址可以通过 DHCPv6 获得。M 已经置位时,O 是多余的,因为 DHCPv6 会返回全部可用的配置信息。O 位置位,表示还有其他配置信息,例如与 DNS 有关的信息。M 和 O 都不置位,表示没有信息经由 DHCPv6 提供(RFC 4861 第 4.2 节)。
前缀选项上的 A 位是另一件事。它置位时,这个前缀可以用于无状态地址自动配置。L 位才表示该前缀可以用来判断目的地是否在链上。因此「自己用前缀拼地址」和「向 DHCPv6 要地址」是通告里不同的位。某一主机看见 O 置位后会不会发出信息请求,本文没有测量。
RFC 9762 在前缀选项里增加了 P 位,也叫 DHCPv6-PD Preferred。它独立于通告中的 M 和 O。置位表示网络更希望客户机使用前缀委派,而不是在这个前缀上用无状态配置或 DHCPv6 取得单独地址。路由器默认应当把 P 置 0,除非管理员明确配置。没有 P 位,并不表示前缀委派不可用。本文不复述客户机处理 P 位的全部细则。
前缀委派交给客户机的是一段前缀,默认路由器仍来自路由器通告。IA_PD 不代替类型 134。
隧道接口可以不跑这次交换
一个可独立引用的结论句:ff02::1:2 是链路范围多播。路由器不得把多播包转发到超出其范围的地方(RFC 4291)。物理链路上的 DHCPv6 交换停留在那条链路上。隧道接口上的地址要另看那张接口,它可以由隧道协议写入,而不经过类型 1 到类型 7。
中继用类型 12 把客户机的报文转到不在同一条链路上的服务器。中继对客户机是透明的。本文不展开中继封装的字段。
源地址选择 发生在路由已经选定出接口之后。DHCPv6 若没有在隧道接口上留下地址,候选集里就没有从这次交换得来的那一个。无状态配置生成的地址是另一条路,见上面的 A 位。
本文不提供打开 DHCPv6 客户机、填写前缀委派或在隧道里转发 ff02::1:2 的步骤。
现象对照
| 现象 | 更可能先看什么 |
|---|---|
目的是 ff02::1:2、UDP 目的端口 547、类型 1 | 征求。还没有选定服务器 |
| 征求里带有快速提交,接下来直接是类型 7 | 服务器接受了两步交换。它也可以不接受 |
| 类型 11 之后只有应答,没有地址 | 信息请求只要其他配置。地址和前缀看 IA_NA、IA_PD |
T1 到了仍发往 ff02::1:2 | 现行文本用多播加服务器标识点名原服务器,不是 DHCPv4 那种单播 |
| 通告里 A 置位、M 不置位,接口上仍有地址 | 地址可以来自无状态配置。M 不置位只说明没有经由 DHCPv6 提供地址 |
| 隧道接口有地址,物理链路上的交换并未出现在隧道上 | 两条链路分开。隧道地址不一定来自 RFC 9915 |
核对清单
- 先看目的是不是 ff02::1:2:客户机的报文发往这里,目的端口 547。源端口可以不是 546;
- 四步和两步分开:常规是征求、通告、请求、应答。快速提交可以变成征求加应答,服务器可以拒绝;
- T1、T2 在身份关联里:建议是最短首选寿命的 0.5 和 0.8。0 留给客户机,但不得立刻发送;
- M、A、P 不是同一位:M 指向 DHCPv6 地址,A 指向无状态配置,P 表示更希望前缀委派;
- IA_TA 已废止:临时地址看 RFC 8981。不要用 RFC 8415 的单播选项描述现行客户机。