22. DHCP 选项
- DHCP 选项
选项用于在 DHCP 消息中携带附加信息和参数. 每个选项共享一个通用的基础格式, 如 22.1 节所述. 选项 中的所有取值均以网络字节序表示.
本文档描述了作为 DHCP 基础规范一部分而定义的 DHCP 选项. 将来可能在单独的文档中定义其他选项.
除非另有说明, 每个选项只能出现在 DHCP 消息的 options 区域中, 且只能出现一次. 如果一个选项确实出现 了多次, 每一次出现都被认为是独立的, 并且这些选项的 data 区域不得 (MUST NOT) 被连接或合并.
22.1. DHCP 选项格式
DHCP 选项格式如下:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| option-data |
| (option-len octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code 一个无符号整数, 标识本选项中所携带的具体选项类型.
option-len 一个无符号整数, 给出本选项中 option-data 字段的长度 (以八位组计).
option-data 该选项的数据; 该数据的格式取决于该选项的定义.
DHCPv6 选项通过封装 (encapsulation) 来划分作用域. 某些选项一般适用于客户端, 某些特定于某个 IA, 某些特定于 IA 内的地址. 后两种情况在 22.4 节和 22.6 节中讨论.
22.2. 客户端标识符选项 (Client Identifier Option)
客户端标识符 (Client Identifier) 选项用于在客户端与服务器之间携带标识客户端的 DUID (见第 9 节). 客户端标识符选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_CLIENTID | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. DUID .
. (variable length) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_CLIENTID (1).
option-len DUID 的长度 (以八位组计).
DUID 客户端的 DUID.
22.3. 服务器标识符选项 (Server Identifier Option)
服务器标识符 (Server Identifier) 选项用于在客户端与服务器之间携带标识服务器的 DUID (见第 9 节). 服务器标识符选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_SERVERID | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. DUID .
. (variable length) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_SERVERID (2).
option-len DUID 的长度 (以八位组计).
DUID 服务器的 DUID.
22.4. 用于非临时地址的身份关联选项 (Identity Association for Non-temporary Addresses Option)
用于非临时地址的身份关联选项 (IA_NA 选项) 用于携带一个 IA_NA、与该 IA_NA 相关联的参数, 以及与该 IA_NA 相关联的非临时地址.
IA_NA 选项中出现的地址不是临时地址 (见 22.5 节).
IA_NA 选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_IA_NA | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IAID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| T1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| T2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. IA_NA-options .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_IA_NA (3).
option-len 12 + IA_NA-options 字段的长度.
IAID 此 IA_NA 的唯一标识符; 该 IAID 必须 (MUST) 在该客户端所有 IA_NA 的
标识符之中唯一. IA_NA 的 IAID 编号空间与 IA_TA 的 IAID 编号空间相互独立.
T1 客户端联系最初为其分配该 IA_NA 中地址的服务器、以延长分配给该 IA_NA 的地址
生存期的时刻; T1 是相对于当前时刻、以秒为单位表示的时间长度.
T2 客户端联系任何可用服务器、以延长分配给该 IA_NA 的地址生存期的时刻; T2 是
相对于当前时刻、以秒为单位表示的时间长度.
IA_NA-options 与此 IA_NA 相关联的选项.
IA_NA-options 字段封装了特定于该 IA_NA 的选项. 例如, 携带与该 IA_NA 相关联地址的所有 IA 地址选项 都位于 IA_NA-options 字段中.
IA_NA 选项只能出现在 DHCP 消息的 options 区域中. 一条 DHCP 消息可以包含多个 IA_NA 选项.
涉及该 IA_NA 的任何操作的状态, 由 IA_NA-options 字段中的一条状态码 (Status Code) 选项指示.
注意, IA_NA 本身没有显式的 "生存期 (lifetime)" 或 "租期长度 (lease length)". 当某个 IA_NA 中所有 地址的有效生存期都已到期时, 该 IA_NA 可被视为已经到期. T1 和 T2 被包含进来, 是为了让服务器能显式 控制客户端何时就某个特定的 IA_NA 重新联系服务器.
在客户端发送给服务器的消息中, T1 和 T2 字段中的取值表示客户端对这些参数的偏好. 如果客户端对这些取值 没有偏好, 它将 T1 和 T2 设置为 0. 在服务器发送给客户端的消息中, 客户端必须 (MUST) 使用 T1 和 T2 字段 中的取值作为 T1 和 T2 参数, 除非这些字段中的取值为 0. T1 和 T2 字段中的取值是距 T1 和 T2 的秒数.
服务器选择 T1 和 T2 时间, 以允许客户端在 IA_NA 中任何地址的生存期到期之前延长其生存期, 即使服务器在 某段短时间内不可用. T1 和 T2 的推荐取值分别是服务器愿意延长的、该 IA 中地址的最短首选生存期的 0.5 倍 和 0.8 倍. 如果 "最短" 首选生存期是 0xffffffff ("无限"), 则推荐的 T1 和 T2 取值也是 0xffffffff. 如果 将 IA_NA 中地址续约的时间交由客户端自行决定, 服务器将 T1 和 T2 设置为 0.
如果服务器收到一个 T1 大于 T2、且 T1 和 T2 均大于 0 的 IA_NA, 服务器忽略 T1 和 T2 的无效取值, 并将 该 IA_NA 当作客户端已将 T1 和 T2 设置为 0 来处理.
如果客户端收到一个 T1 大于 T2、且 T1 和 T2 均大于 0 的 IA_NA, 客户端丢弃该 IA_NA 选项, 并像服务器未 包含该无效 IA_NA 选项一样处理消息的其余部分.
将 T1 或 T2 设置为 0xffffffff ("无限") 时应谨慎. 对于 T1 被设为 0xffffffff 的 IA, 客户端将永远不会 尝试延长其中任何地址的生存期. 对于 T2 被设为 0xffffffff 的 IA, 客户端将永远不会尝试使用 Rebind 消息 来寻找另一台服务器以延长其中任何地址的生存期.
22.5. 用于临时地址的身份关联选项 (Identity Association for Temporary Addresses Option)
用于临时地址的身份关联 (IA_TA) 选项用于携带一个 IA_TA、与该 IA_TA 相关联的参数, 以及与该 IA_TA 相关 联的地址. 此选项中的所有地址都被客户端作为临时地址使用, 如 RFC 3041 [12] 所定义. IA_TA 选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_IA_TA | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IAID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. IA_TA-options .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_IA_TA (4).
option-len 4 + IA_TA-options 字段的长度.
IAID 此 IA_TA 的唯一标识符; 该 IAID 必须 (MUST) 在该客户端所有 IA_TA 的标识符
之中唯一. IA_TA 的 IAID 编号空间与 IA_NA 的 IAID 编号空间相互独立.
IA_TA-options 与此 IA_TA 相关联的选项.
IA_TA-Options 字段封装了特定于该 IA_TA 的选项. 例如, 携带与该 IA_TA 相关联地址的所有 IA 地址选项都 位于 IA_TA-options 字段中.
每个 IA_TA 携带一 "组" 临时地址; 也就是说, 客户端所连接链路所分配的每个前缀最多一个地址.
IA_TA 选项只能出现在 DHCP 消息的 options 区域中. 一条 DHCP 消息可以包含多个 IA_TA 选项.
涉及该 IA_TA 的任何操作的状态, 由 IA_TA-options 字段中的一条状态码选项指示.
注意, 一个 IA 本身没有显式的 "生存期" 或 "租期长度". 当某个 IA_TA 中所有地址的有效生存期都已到期时, 该 IA 可被视为已经到期.
IA_TA 选项不包含 T1 和 T2 的取值. 客户端可以 (MAY) 通过在发送给服务器的 Renew 或 Rebind 消息中包含 这些地址于一个 IA_TA 选项中, 来请求延长临时地址的生存期. 例如, 客户端会请求延长某个临时地址的生存期, 以允许某个应用程序继续使用已建立的 TCP 连接.
客户端通过向服务器发送带有新 IAID 的 IA_TA 选项来获取新的临时地址. 从服务器请求新的临时地址, 等同于 按 RFC 3041 所述生成新的临时地址. 服务器将生成新的临时地址并返回给客户端. 客户端应当 (SHOULD) 在 先前分配地址的生存期到期之前, 请求新的临时地址.
只要一个 IA_TA (由 IAID 标识) 中的那些地址仍然有效, 服务器必须 (MUST) 返回同一组临时地址. 在一个 IA_TA 中地址的生存期到期之后, 该 IAID 可复用于标识带有新临时地址的新 IA_TA.
如果相关联 IA 中的临时地址的生存期尚未到期, 此选项可以 (MAY) 出现在 Confirm 消息中.
22.6. IA 地址选项 (IA Address Option)
IA 地址 (IA Address) 选项用于指定与某个 IA_NA 或 IA_TA 相关联的 IPv6 地址. IA 地址选项必须 (MUST) 被封装在 IA_NA 或 IA_TA 选项的 Options 字段中. Options 字段封装了特定于该地址的选项.
IA 地址选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_IAADDR | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| IPv6 address |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| preferred-lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| valid-lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. IAaddr-options .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_IAADDR (5).
option-len 24 + IAaddr-options 字段的长度.
IPv6 address 一个 IPv6 地址.
preferred-lifetime 选项中该 IPv6 地址的首选生存期, 以秒为单位表示.
valid-lifetime 选项中该 IPv6 地址的有效生存期, 以秒为单位表示.
IAaddr-options 与此地址相关联的选项.
在客户端发送给服务器的消息中, preferred-lifetime 和 valid-lifetime 字段中的取值表示客户端对这些参数 的偏好. 如果客户端对首选生存期和有效生存期没有偏好, 它可以发送 0. 在服务器发送给客户端的消息中, 客户 端必须 (MUST) 使用 preferred-lifetime 和 valid-lifetime 字段中的取值作为首选生存期和有效生存期. preferred-lifetime 和 valid-lifetime 中的取值是每个生存期剩余的秒数.
客户端丢弃任何首选生存期大于有效生存期的地址. 如果首选生存期大于有效生存期, 服务器忽略客户端设置的 生存期; 如果这些取值大于首选生存期, 服务器忽略客户端设置的 T1 和 T2 取值.
将地址的有效生存期设置为 0xffffffff ("无限") 时应谨慎, 这等同于将地址永久 (permanent) 分配给客户端.
IA 地址选项只能出现在 IA_NA 选项或 IA_TA 选项中. 在一个 IA_NA 选项或 IA_TA 选项中可以出现多个 IA 地址 选项.
涉及该 IA 地址的任何操作的状态, 由 IAaddr-options 字段中的一条状态码选项指示.
22.7. 选项请求选项 (Option Request Option)
选项请求 (Option Request) 选项用于标识客户端与服务器之间消息里的一组选项. 选项请求选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_ORO | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| requested-option-code-1 | requested-option-code-2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_ORO (6).
option-len 2 * (被请求选项的数量).
requested-option-code-n 客户端所请求选项的 option code.
客户端可以 (MAY) 在 Solicit、Request、Renew、Rebind、Confirm 或 Information-request 消息中包含一条 选项请求选项, 以告知服务器客户端希望服务器发送给它的选项. 服务器可以 (MAY) 在 Reconfigure 选项中包含 一条选项请求选项, 以指示客户端应从服务器请求哪些选项.
22.8. 偏好选项 (Preference Option)
偏好 (Preference) 选项由服务器发送给客户端, 以影响客户端对服务器的选择.
偏好选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_PREFERENCE | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| pref-value |
+-+-+-+-+-+-+-+-+
option-code OPTION_PREFERENCE (7).
option-len 1.
pref-value 本消息中所标识服务器的偏好值.
服务器可以 (MAY) 在 Advertise 消息中包含一条偏好选项, 以控制客户端对服务器的选择. 关于偏好选项的使 用及其数据取值的解释, 见 17.1.3 节.
22.9. 已用时间选项 (Elapsed Time Option)
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_ELAPSED_TIME | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| elapsed-time |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_ELAPSED_TIME (8).
option-len 2.
elapsed-time 客户端开始其当前 DHCP 事务以来所经过的时间量. 该时间以百分之一秒
(10^-2 秒) 表示.
客户端必须 (MUST) 在消息中包含一条已用时间 (Elapsed Time) 选项, 以表明客户端为完成一次 DHCP 消息 交换已尝试了多久. 已用时间从客户端在消息交换中发送第一条消息的时刻起算, 并且在消息交换的第一条消息 中, elapsed-time 字段被设置为 0. 服务器和中继代理使用此选项中的数据取值作为策略的输入, 以控制服务器 如何响应客户端消息. 例如, 已用时间选项允许一台备用 DHCP 服务器在主服务器未能在合理时间内应答时响应 请求. 已用时间取值是一个无符号的 16 位整数. 客户端使用取值 0xffff 来表示任何大于 Elapsed Time 选项 所能表示的最大时间值的已用时间取值.
22.10. 中继消息选项 (Relay Message Option)
中继消息 (Relay Message) 选项在 Relay-forward 或 Relay-reply 消息中携带一条 DHCP 消息.
中继消息选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_RELAY_MSG | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
. DHCP-relay-message .
. .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_RELAY_MSG (9).
option-len DHCP-relay-message 的长度.
DHCP-relay-message 在 Relay-forward 消息中, 指收到的消息 (逐字 (verbatim) 中继给下一个
中继代理或服务器); 在 Relay-reply 消息中, 指要被复制并中继给其地址位于该
Relay-reply 消息的 peer-address 字段中的中继代理或客户端的消息.
22.11. 认证选项 (Authentication Option)
认证 (Authentication) 选项携带认证信息, 用于对 DHCP 消息的身份和内容进行认证. 认证选项的使用在第 21 节中描述. 认证选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_AUTH | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| protocol | algorithm | RDM | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
| |
| replay detection (64 bits) +-+-+-+-+-+-+-+-+
| | auth-info |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
. authentication information .
. (variable length) .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_AUTH (11).
option-len 11 + 认证信息字段的长度.
protocol 本认证选项中所使用的认证协议.
algorithm 认证协议中所使用的算法.
RDM 本认证选项中所使用的重放检测方式.
Replay detection 用于该 RDM 的重放检测信息.
authentication information 认证信息, 由本认证选项中所用的 protocol 和 algorithm 规定.
22.12. 服务器单播选项 (Server Unicast Option)
服务器向客户端发送此选项, 以向客户端表明它获准向服务器单播 (unicast) 消息. 服务器单播选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_UNICAST | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
| server-address |
| |
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_UNICAST (12).
option-len 16.
server-address 客户端应使用单播方式发送消息所至的 IP 地址.
服务器在 server-address 字段中指定客户端应用单播方式发送消息所至的 IPv6 地址. 当客户端收到此选项时, 在允许且适当的情况下, 客户端使用选项中 server-address 字段所指定的 IPv6 地址, 直接向服务器发送消息.
当服务器向客户端发送一条 Unicast 选项时, 来自客户端的某些消息不会被中继代理中继, 也不会包含来自中继 代理的中继代理选项. 因此, 仅当中继代理不发送中继代理选项时, 服务器才应向客户端发送 Unicast 选项. DHCP 服务器拒绝任何不恰当地使用单播发送的消息, 以确保在使用中继代理选项时, 消息由中继代理进行中继.
关于客户端何时可以使用单播向服务器发送消息的细节, 见第 18 节.
22.13. 状态码选项 (Status Code Option)
此选项返回一个与出现它的 DHCP 消息或选项相关的状态指示. 状态码选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_STATUS_CODE | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| status-code | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
. .
. status-message .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_STATUS_CODE (13).
option-len 2 + status-message 的长度.
status-code 本选项中编码的状态的数字码. 状态码在 24.4 节中定义.
status-message 一段适合显示给最终用户的、UTF-8 编码的文本字符串, 且必须 (MUST NOT) 以
null 结尾.
状态码选项可以出现在 DHCP 消息的 options 字段中, 和/或另一个选项的 options 字段中. 如果状态码选项 未出现在一条它本可出现的消息中, 则该消息的状态被假定为 Success.
22.14. 快速提交选项 (Rapid Commit Option)
快速提交 (Rapid Commit) 选项用于表明使用两条消息的交换来进行地址分配. 快速提交选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_RAPID_COMMIT | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_RAPID_COMMIT (14).
option-len 0.
如果客户端准备执行第 17.1.1 节所述的 Solicit-Reply 消息交换, 它可以在 Solicit 消息中包含此选项.
当服务器完成 Solicit-Reply 消息交换时, 它必须 (MUST) 在响应 Solicit 消息的 Reply 消息中包含此选项.
讨论 (DISCUSSION):
每台以 Reply 响应包含 Rapid Commit 选项的 Solicit 的服务器, 都会将 Reply 消息中分配的地址提交
(commit) 给客户端, 且不会收到客户端已收到该 Reply 消息的任何确认. 因此, 如果有多台服务器响应一条
包含 Rapid Commit 选项的 Solicit, 某些服务器会提交未被客户端实际使用的地址.
未被使用的地址问题可以被最小化, 例如, 通过设计 DHCP 服务使得只有一台服务器响应 Solicit, 或者
对分配的地址使用相对较短的生存期.
22.15. 用户类别选项 (User Class Option)
用户类别 (User Class) 选项由客户端用于标识它所代表的用户或应用程序的类型或类别.
用户类别选项的格式为:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_USER_CLASS | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. user-class-data .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_USER_CLASS (15).
option-len user class data 字段的长度.
user-class-data 客户端所携带的用户类别.
此选项 data 区域中所包含的信息, 由一个或多个不透明 (opaque) 字段组成, 这些字段代表客户端所属的用户 类别或类别. 服务器根据此选项中标识的类别, 为客户端选择配置信息. 例如, 用户类别选项可用于将会计部门 人员的所有客户端, 配置为与营销部门人员的客户端使用不同的打印机. 此选项所携带的用户类别信息必须在 客户端上可配置.
用户类别选项的 data 区域必须 (MUST) 包含一个或多个 user class data 实例. 每个 user class data 实例 的格式如下:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+
| user-class-len | opaque-data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+
user-class-len 为两字节长, 以网络字节序指定不透明用户类别数据的长度.
服务器根据其配置解释此选项中标识的类别, 以选择适合客户端的配置信息. 服务器可以仅使用那些它被配置为 可解释的 user class 来选择客户端的配置信息, 而忽略任何其他 user class. 作为对包含 User Class 选项的 消息的响应, 服务器包含一条 User Class 选项, 其中包含那些被服务器成功解释的类别, 以便客户端能获知被 服务器解释的类别.
22.16. 供应商类别选项 (Vendor Class Option)
此选项由客户端用于标识制造运行该客户端的硬件的供应商. 此选项 data 区域中所包含的信息, 由一个或多个 不透明字段组成, 这些字段标识硬件配置的详细信息. 供应商类别选项的格式为:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_VENDOR_CLASS | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| enterprise-number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. vendor-class-data .
. . . . .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_VENDOR_CLASS (16).
option-len 4 + vendor class data 字段的长度.
enterprise-number 供应商在 IANA [6] 注册的 Enterprise Number.
vendor-class-data 运行客户端的那台主机的硬件配置.
vendor-class-data 由一系列独立的项组成, 每一项描述客户端硬件配置的某些特征. vendor-class-data 实例 的例子可能包括客户端所运行的操作系统版本, 或客户端上安装的内存量.
每个 vendor-class-data 实例的格式如下:
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+
| vendor-class-len | opaque-data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+
vendor-class-len 为两字节长, 以网络字节序指定不透明供应商类别数据的长度.
22.17. 供应商特定信息选项 (Vendor-specific Information Option)
此选项由客户端和服务器用于交换供应商特定信息.
供应商特定信息 (Vendor-specific Information) 选项的格式为:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_VENDOR_OPTS | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| enterprise-number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. option-data .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_VENDOR_OPTS (17).
option-len 4 + option-data 字段的长度.
enterprise-number 供应商在 IANA [6] 注册的 Enterprise Number.
option-data 一个长度为 option-len 八位组的、不透明对象, 由客户端和服务器上的供应商特定
代码解释.
此选项中所携带信息的定义由供应商特定. 供应商在 enterprise-number 字段中指示. 使用供应商特定信息可以 增强操作, 利用供应商 DHCP 实现中的附加特性. 未能收到所请求的供应商特定信息的 DHCP 客户端, 仍会将其 主机设备的 IPv6 协议栈配置为可用.
被封装的供应商特定选项字段必须 (MUST) 被编码为一系列与 DHCP 选项字段格式相同的 code/length/value 字段. option code 由 enterprise-number 字段所标识的供应商定义, 不由 IANA 管理. 每个被封装选项的格式 如下:
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| opt-code | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. option-data .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
opt-code 被封装选项的 code.
option-len 一个无符号整数, 给出此被封装选项中 option-data 字段的长度 (以八位组计).
option-data 被封装选项的数据区域.
DHCP 消息中可以出现多个供应商特定信息选项实例. 每个选项实例根据由该选项中的 Enterprise Number 所标识 的供应商所定义的选项 code 来解释.
22.18. 接口标识符选项 (Interface-Id Option)
中继代理可以 (MAY) 发送接口标识符 (Interface-id) 选项, 以标识收到客户端消息的接口. 如果中继代理收到 一条带有 Interface-id 选项的 Relay-reply 消息, 该中继代理通过由该选项所标识的接口将消息中继给客户端.
接口 ID 选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_INTERFACE_ID | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. interface-id .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_INTERFACE_ID (18).
option-len interface-id 字段的长度.
interface-id 一个由中继代理生成、用于标识其中一个中继代理接口的、任意长度的不透明取值.
服务器必须 (MUST) 将 Interface-Id 选项从 Relay-Forward 消息复制到它作为对该 Relay-Forward 消息的响应 而发送给中继代理的 Relay-Reply 消息中. 此选项不得 (MUST NOT) 出现在除 Relay-Forward 或 Relay-Reply 消息之外的任何消息中.
服务器可以 (MAY) 使用 Interface-ID 来进行参数分配策略. Interface-ID 应当 (SHOULD) 被视为一个不透明 取值, 策略仅基于精确匹配; 也就是说, 服务器不应在内部解析 Interface-ID. 一个接口的 Interface-ID 取值 应当 (SHOULD) 保持稳定且保持不变, 例如在中继代理重启之后; 如果 Interface-ID 发生改变, 服务器将无法在 参数分配策略中可靠地使用它.
22.19. 重配置消息选项 (Reconfigure Message Option)
服务器在 Reconfigure 消息中包含一条 Reconfigure Message 选项, 以向客户端指示客户端应以 Renew 消息还是 Information-request 消息作出响应. 此选项的格式为:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_RECONF_MSG | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| msg-type |
+-+-+-+-+-+-+-+-+
option-code OPTION_RECONF_MSG (19).
option-len 1.
msg-type Renew 消息为 5, Information-request 消息为 11.
Reconfigure Message 选项只能出现在 Reconfigure 消息中.
22.20. 重配置接受选项 (Reconfigure Accept Option)
客户端使用 Reconfigure Accept 选项向服务器宣告客户端是否愿意接受 Reconfigure 消息, 服务器使用此选项 告诉客户端是否接受 Reconfigure 消息. 在缺少此选项的情况下的默认行为, 对于客户端和服务器消息分别意味着 不愿意接受 Reconfigure 消息, 或指示不要接受 Reconfigure 消息. 下图给出 Reconfigure Accept 选项的格式:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| OPTION_RECONF_ACCEPT | 0 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
option-code OPTION_RECONF_ACCEPT (20).
option-len 0.