跳到主要内容

7. DHCP 常量 (DHCP Constants)

本节描述 DHCP 使用的各种程序常量和网络常量.

7.1. 多播地址

DHCPv6 使用以下多播地址:

All_DHCP_Relay_Agents_and_Servers (ff02::1:2)

: 客户端用于与相邻的, 即同链路上的, 中继代理和服务器通信的链路范围多播地址. 所有服务器和中继代理都是此多播组的成员.

All_DHCP_Servers (ff05::1:3)

: 中继代理用于与服务器通信的站点范围多播地址. 使用原因可以是中继代理希望向所有服务器发送消息, 或者它不知道服务器的单播地址. 注意, 为了让中继代理使用此地址, 它必须拥有一个具有足够作用域且服务器可达的地址. 站点内的所有服务器都在属于该站点的接口上成为此多播组的成员.

7.2. UDP 端口

客户端必须在 UDP 端口 546 上侦听 DHCP 消息. 服务器和中继代理必须在 UDP 端口 547 上侦听 DHCP 消息.

因此, 客户端必须把 DHCP 消息发送到 UDP 目的端口 547. 服务器必须把 Relay-reply 消息发送到 UDP 目的端口 547, 并把客户端消息发送到 UDP 目的端口 546. 中继代理必须把 Relay-forward 和 Relay-reply 消息发送到 UDP 目的端口 547, 并把客户端消息发送到 UDP 目的端口 546.

建议客户端从 UDP 源端口 546 发送消息, 服务器和中继代理从 UDP 源端口 547 发送消息. 但是, 客户端, 服务器和中继代理可以从其被允许使用的任何 UDP 源端口发送 DHCP 消息.

请注意, Relay Source Port Option [RFC8357] 会改变服务器和中继代理的其中一些规则.

7.3. DHCP 消息类型

DHCP 定义了以下消息类型. 这些消息的格式见第 8 节和第 9 节. 其他消息类型已经被定义, 未来也可能继续定义. 参见 https://www.iana.org/assignments/dhcpv6-parameters. 每种消息类型的数字编码显示在括号中.

SOLICIT (1)

: 客户端发送 Solicit 消息以定位服务器.

ADVERTISE (2)

: 服务器发送 Advertise 消息, 表明它可提供 DHCP 服务, 作为对从客户端收到的 Solicit 消息的响应.

REQUEST (3)

: 客户端向特定服务器发送 Request 消息, 请求配置参数, 包括地址和/或被委派前缀.

CONFIRM (4)

: 客户端向任何可用服务器发送 Confirm 消息, 以确定已分配给它的地址对于客户端当前连接的链路是否仍然合适.

RENEW (5)

: 客户端向最初提供其租约和配置参数的服务器发送 Renew 消息, 以延长分配给客户端的租约生命周期并更新其他配置参数.

REBIND (6)

: 客户端向任何可用服务器发送 Rebind 消息, 以延长分配给客户端的租约生命周期并更新其他配置参数. 该消息在客户端没有收到 Renew 消息响应后发送.

REPLY (7)

: 服务器在收到客户端的 Solicit, Request, Renew 或 Rebind 消息后, 发送包含已分配租约和配置参数的 Reply 消息. 服务器在响应 Information-request 消息时发送包含配置参数的 Reply 消息. 服务器在响应 Confirm 消息时发送 Reply 消息, 以确认或否认分配给客户端的地址对于客户端当前连接的链路是否合适. 服务器也会发送 Reply 消息来确认收到 Release 或 Decline 消息.

RELEASE (8)

: 客户端向为其分配租约的服务器发送 Release 消息, 表明客户端将不再使用一个或多个已分配租约.

DECLINE (9)

: 客户端向服务器发送 Decline 消息, 表明客户端已确定服务器分配的一个或多个地址在客户端所连接的链路上已经被使用.

RECONFIGURE (10)

: 服务器向客户端发送 Reconfigure 消息, 通知客户端服务器有新的或更新后的配置参数, 客户端需要与服务器发起 Renew/Reply, Rebind/Reply 或 Information-request/Reply 事务以接收更新信息.

INFORMATION-REQUEST (11)

: 客户端向服务器发送 Information-request 消息, 在不向客户端分配任何租约的情况下请求配置参数.

RELAY-FORW (12)

: 中继代理发送 Relay-forward 消息, 直接或通过另一个中继代理把消息转发给服务器. 收到的消息, 即客户端消息或来自另一个中继代理的 Relay-forward 消息, 会被封装在 Relay-forward 消息的一个选项中.

RELAY-REPL (13)

: 服务器向中继代理发送 Relay-reply 消息, 其中包含由该中继代理递送给客户端的消息. Relay-reply 消息可以由其他中继代理继续转发, 以递送到目标中继代理.

服务器将客户端消息作为选项封装在 Relay-reply 消息中, 中继代理提取该消息并转发给客户端.

7.4. DHCP 选项代码

DHCP 在消息中大量使用选项. 其中一些选项在第 21 节定义. 其他选项在其他文档中定义, 或未来可能定义. 关于新选项定义的指导, 见 [RFC7227].

7.5. 状态码

DHCP 使用状态码来传达客户端和服务器消息中所请求操作的成功或失败, 并提供有关消息失败具体原因的额外信息. 具体状态码在第 21.13 节定义.

如果 Status Code 选项 (见第 21.13 节) 没有出现在一个本可包含该选项的消息中, 则假定该消息的状态为 Success.

7.6. 传输与重传参数

表 1 中的取值用于描述客户端和服务器的消息传输行为. 其中一些值会按随机化因子和退避进行调整 (见第 15 节). 传输还可能受到速率限制影响 (见第 14.1 节).

参数默认值描述
SOL_MAX_DELAY1 sec首个 Solicit 的最大延迟
SOL_TIMEOUT1 sec初始 Solicit 超时
SOL_MAX_RT3600 secs最大 Solicit 超时值
REQ_TIMEOUT1 sec初始 Request 超时
REQ_MAX_RT30 secs最大 Request 超时值
REQ_MAX_RC10最大 Request 重试次数
CNF_MAX_DELAY1 sec首个 Confirm 的最大延迟
CNF_TIMEOUT1 sec初始 Confirm 超时
CNF_MAX_RT4 secs最大 Confirm 超时
CNF_MAX_RD10 secs最大 Confirm 持续时间
REN_TIMEOUT10 secs初始 Renew 超时
REN_MAX_RT600 secs最大 Renew 超时值
REB_TIMEOUT10 secs初始 Rebind 超时
REB_MAX_RT600 secs最大 Rebind 超时值
INF_MAX_DELAY1 sec首个 Information-request 的最大延迟
INF_TIMEOUT1 sec初始 Information-request 超时
INF_MAX_RT3600 secs最大 Information-request 超时值
REL_TIMEOUT1 sec初始 Release 超时
REL_MAX_RC4最大 Release 重试次数
DEC_TIMEOUT1 sec初始 Decline 超时
DEC_MAX_RC4最大 Decline 重试次数
REC_TIMEOUT2 secs初始 Reconfigure 超时
REC_MAX_RC8最大 Reconfigure 尝试次数
HOP_COUNT_LIMIT8Relay-forward 消息中的最大跳数
IRT_DEFAULT86400 secs (24 hours)默认信息刷新时间
IRT_MINIMUM600 secs最小信息刷新时间
MAX_WAIT_TIME60 secs等待响应所需的最大时间

表 1: 传输与重传参数

7.7. 时间值和作为时间值的"infinity"表示

生命周期, T1 和 T2 的所有时间值都是无符号 32-bit 整数, 并以秒为单位表示. 当 0xffffffff 用作生命周期 (如 [RFC4861] 中所用) 或 T1/T2 的值时, 表示"infinity".

把地址或被委派前缀的有效生命周期设置为 0xffffffff ("infinity") 等同于向客户端永久分配地址或永久委派前缀, 只应在确实需要永久分配时使用.

设置 T1 或 T2 为 0xffffffff ("infinity") 时应谨慎. 如果某个 IA 的 T1 设置为 0xffffffff, 客户端将永远不会尝试延长该 IA 中任何地址的生命周期. 如果某个 IA 的 T2 设置为 0xffffffff, 客户端将永远不会尝试使用 Rebind 消息定位其他服务器来延长该 IA 中任何地址的生命周期.