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