跳到主要内容

21. DHCP 选项 (DHCP Options)

选项 (options) 用于在 DHCP 消息中携带附加信息和参数. 每个选项都共享一个通用基础格式, 如第 21.1 节所述. 选项中的所有值都以网络字节序表示.

本文档规定了作为此基础 DHCP 规范一部分定义的 DHCP options. 其他选项已经或将来可能在单独文档中定义. 关于定义新选项的指南, 参见 [RFC7227]. 关于 IANA 维护的 DHCPv6 "Option Codes" 注册表的更多信息, 参见第 24 章.

除非另有说明, 每个选项只能出现在 DHCP 消息的 options 区域中, 且只能出现一次. 如果某个选项确实出现多次, 则每个实例都被视为独立实例, 这些选项的数据区域禁止拼接或以其他方式组合.

只允许出现一次的选项称为 "singleton options". 本文档中定义的非 singleton options 只有 IA_NA (见第 21.4 节), Vendor Class (见第 21.16 节), Vendor-specific Information (见第 21.17 节) 和 IA_PD (见第 21.21 节) 选项. 此外, IA Address (见第 21.6 节) 和 IA Prefix (见第 21.22 节) 可以在其各自的 IA 选项中出现多次.

21.1. DHCP 选项格式 (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) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 12: Option Format

option-code: 标识此选项中携带的具体选项类型的无符号整数. 这是一个 2-octet 字段.

option-len: 给出此选项中 option-data 字段长度的无符号整数, 单位为 octets. 这是一个 2-octet 字段.

option-data: 该选项的数据. 此数据的格式取决于选项定义. 这是一个可变长度字段, 长度以 octets 为单位, 由 option-len 指定.

DHCP options 通过封装 (encapsulation) 来限定作用域. 一些选项通常适用于客户端, 一些选项特定于某个 IA, 还有一些选项特定于 IA 内的地址. 后两种情况在第 21.4 节和第 21.6 节中讨论.

21.2. Client Identifier 选项 (Client Identifier Option)

Client Identifier option 用于携带标识客户端的 DUID (见第 11 章). 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) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 13: Client Identifier Option Format

option-code: OPTION_CLIENTID (1).

option-len: DUID 的长度, 单位为 octets.

DUID: 客户端的 DUID.

21.3. Server Identifier 选项 (Server Identifier Option)

Server Identifier option 用于携带标识服务器的 DUID (见第 11 章). 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) .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 14: Server Identifier Option Format

option-code: OPTION_SERVERID (2).

option-len: DUID 的长度, 单位为 octets.

DUID: 服务器的 DUID.

21.4. 非临时地址的身份关联选项 (Identity Association for Non-Temporary Addresses Option)

Identity Association for Non-temporary Addresses (IA_NA) option 用于携带 IA_NA, 与该 IA_NA 相关联的参数, 以及与该 IA_NA 相关联的非临时地址.

需要短期/特殊用途地址的客户端可以使用新的 IA_NA 绑定来请求地址, 并在使用完毕后释放该地址.

注意: IA_NA option 中出现的地址不是临时地址 (见第 21.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 .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 15: Identity Association for Non-Temporary Addresses
Option Format

option-code: OPTION_IA_NA (3).

option-len: 12 + IA_NA-options 字段的长度.

IAID: 此 IA_NA 的唯一标识符. IAID 在此客户端所有 IA_NA 的标识符中必须唯一. IA_NA IAID 的编号空间与其他 IA option 类型 (即 IA_PD) 的编号空间分离. 这是一个包含无符号整数的 4-octet 字段.

T1: 一个时间间隔, 在此时间后客户端应联系提供 IA_NA 中地址的服务器, 以延长分配给该 IA_NA 的地址生命周期. T1 是相对于当前时间的持续时间, 以秒为单位表示. 这是一个包含无符号整数的 4-octet 字段.

T2: 一个时间间隔, 在此时间后客户端应联系任何可用服务器, 以延长分配给该 IA_NA 的地址生命周期. T2 是相对于当前时间的持续时间, 以秒为单位表示. 这是一个包含无符号整数的 4-octet 字段.

IA_NA-options: 与此 IA_NA 相关联的选项. 这是一个可变长度字段, 其长度比 option-len 字段中的值少 12 octets.

IA_NA-options 字段封装了特定于此 IA_NA 的选项. 例如, 携带与此 IA_NA 相关联地址的所有 IA Address options (见第 21.6 节) 都位于 IA_NA-options 字段中.

每个 IA_NA 携带一"组"非临时地址. 分配多少地址由服务器策略决定, 但通常从分配给客户端所连接链路的每个前缀中最多分配一个地址.

IA_NA option 只能出现在 DHCP 消息的 options 区域中. DHCP 消息可以包含多个 IA_NA options, 但每个选项必须具有唯一的 IAID.

涉及此 IA_NA 的任何操作状态由 IA_NA-options 字段中的 Status Code option (见第 21.13 节) 指示.

注意, IA_NA 本身没有显式的 "lifetime" 或 "lease length". 当 IA_NA 中所有地址的有效生命周期都已到期时, 可以认为该 IA_NA 已到期. 包含 T1 和 T2 是为了让服务器能够明确控制客户端何时就特定 IA_NA 重新联系服务器.

在客户端发送给服务器的消息中, T1 和 T2 字段应当设置为 0. 服务器必须忽略从客户端接收的消息中这些字段的任何值.

在服务器发送给客户端的消息中, 除非这些字段中的值为 0, 客户端必须将 T1 和 T2 字段中的值用作 T1 和 T2 时间. T1 和 T2 字段中的值是距离 T1 和 T2 的秒数, 并从接收消息时开始计算.

按照第 7.7 节, 值 0xffffffff 被视为表示 "infinity", 应谨慎使用.

服务器选择 T1 和 T2 值, 以便客户端可在 IA_NA 中任何地址生命周期到期前延长其生命周期, 即使服务器在短时间内不可用也是如此. T1 和 T2 的推荐值分别为服务器愿意延长的该 IA 中地址最短首选生命周期的 0.5 和 0.8 倍. 如果"最短"首选生命周期为 0xffffffff ("infinity"), 推荐的 T1 和 T2 值也为 0xffffffff. 如果 IA_NA 中地址的续租时间要由客户端自行决定, 服务器将 T1 和 T2 值设置为 0. 客户端必须遵循第 14.2 节定义的规则.

如果客户端收到一个 T1 大于 T2 且 T1 和 T2 都大于 0 的 IA_NA, 客户端丢弃该 IA_NA option, 并像服务器未包含这个无效 IA_NA option 一样处理消息的其余部分.

21.5. 临时地址的身份关联选项 (Identity Association for Temporary Addresses Option)

Identity Association for Temporary Addresses (IA_TA) option 已废止. 关于此选项的历史信息, 请参阅 [RFC8415].

客户端不应发送此选项. 服务器不应发送此选项. 当服务器收到 IA_TA option 时, 应当忽略该选项, 并照常继续消息处理.

由于此选项在废弃前从未在服务器或客户端实现中流行, 任何仍尝试发送它的实现都不太可能使该选项得到处理.

21.6. IA Address 选项 (IA Address Option)

IA Address option 用于指定地址. 在本文档中, 它仅被规定为封装在 IA_NA 内. DHCPv6 Leasequery [RFC5007] 使用 IA Address option 时不将其封装在 IA_NA 中. IAaddr-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 .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 16: IA Address Option Format

option-code: OPTION_IAADDR (5).

option-len: 24 + IAaddr-options 字段的长度.

IPv6-address: 一个 IPv6 地址. 客户端禁止为此地址形成长度不是 128 的隐式前缀. 这是一个 16-octet 字段.

preferred-lifetime: 选项中该地址的首选生命周期, 以秒为单位表示. 这是一个包含无符号整数的 4-octet 字段.

valid-lifetime: 选项中该地址的有效生命周期, 以秒为单位表示. 这是一个包含无符号整数的 4-octet 字段.

IAaddr-options: 与此地址相关联的选项. 这是一个可变长度字段, 其长度比 option-len 字段中的值少 24 octets.

在客户端发送给服务器的消息中, preferred-lifetime 和 valid-lifetime 字段应当设置为 0. 服务器必须忽略任何收到的值.

客户端不应发送带未指定地址 (::) 的 IA Address option.

在服务器发送给客户端的消息中, 客户端必须将 preferred-lifetime 和 valid-lifetime 字段中的值用作首选生命周期和有效生命周期. 这些字段中的值是各生命周期的剩余秒数.

客户端必须丢弃首选生命周期大于有效生命周期的任何地址.

按照第 7.7 节, 如果地址的有效生命周期为 0xffffffff, 则视为表示 "infinity", 应谨慎使用.

一个 IA_NA option 中可以出现多个 IA Address options.

21.7. Option Request 选项 (Option Request Option)

Option Request 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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 17: Option Request Option Format

option-code: OPTION_ORO (6).

option-len: 2 * 请求选项的数量.

requested-option-code-n: 客户端请求的某个选项的 option code. 每个 option code 都是包含无符号整数的 2-octet 字段.

客户端必须在 Solicit, Request, Renew, Rebind 或 Information-request 消息中包含 Option Request option, 以告知服务器客户端希望服务器发送给客户端的选项.

Option Request option 禁止包含以下 option codes:

  • Client Identifier (见第 21.2 节)

  • Server Identifier (见第 21.3 节)

  • IA_NA (见第 21.4 节)

  • IA_TA (选项已废止, 见第 21.5 节)

  • IA_PD (见第 21.21 节)

  • IA Address (见第 21.6 节)

  • IA Prefix (见第 21.22 节)

  • Option Request (本节)

  • Elapsed Time (见第 21.9 节)

  • Preference (见第 21.8 节)

  • Relay Message (见第 21.10 节)

  • Authentication (见第 21.11 节)

  • Server Unicast (选项已废止, 见第 21.12 节)

  • Status Code (见第 21.13 节)

  • Rapid Commit (见第 21.14 节)

  • User Class (见第 21.15 节)

  • Vendor Class (见第 21.16 节)

  • Interface-Id (见第 21.18 节)

  • Reconfigure Message (见第 21.19 节)

  • Reconfigure Accept (见第 21.20 节)

其他顶层 option codes 必须出现在 Option Request option 中, 否则服务器不会发送它们. 只有顶层 option codes 可以出现在 Option Request option 中. 封装在容器选项中的 option codes 不应出现在 Option Request option 中. 容器选项的示例见 [RFC7598]. 但是, 可以定义一些选项来规定例外, 允许在 Option Request option 中包含封装的 option codes. 例如, 即使某个选项被封装, 也可以使用 Option Request option 来表示对某项功能的支持, Prefix Exclude option [RFC6603] 就是这种情况. 见 [IANA-OPTION-DETAILS].

关于哪些 option codes 是必需, 允许或禁止的权威列表, 见 [IANA-OPTION-DETAILS].

21.8. Preference 选项 (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 |
+-+-+-+-+-+-+-+-+

Figure 18: Preference Option Format

option-code: OPTION_PREFERENCE (7).

option-len: 1.

pref-value: 此消息中服务器的偏好值. 允许值从 0 (最低) 到 255 (最优先). 缺少该选项表示偏好值为 0. 这是一个 1-octet 无符号整数.

服务器可以在 Advertise 消息中包含 Preference option, 以控制客户端对服务器的选择. 关于客户端如何使用 Preference option 以及如何解释 Preference option 数据值, 参见第 18.2.9 节.

21.9. Elapsed Time 选项 (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 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 19: Elapsed Time Option Format

option-code: OPTION_ELAPSED_TIME (8).

option-len: 2.

elapsed-time: 自客户端开始其当前 DHCP 事务以来经过的时间. 该时间以百分之一秒 (10^-2 seconds) 为单位表示. 这是一个包含无符号整数的 2-octet 字段.

客户端必须在消息中包含 Elapsed Time option, 以指示客户端尝试完成 DHCP 消息交换已有多久. 经过时间从客户端发送该消息交换中第一条消息的时间开始测量, 并且在该消息交换的第一条消息中, elapsed-time 字段设置为 0. 服务器和中继代理将此选项中的数据值作为策略输入, 该策略控制服务器如何响应客户端消息. 例如, Elapsed Time option 允许辅助 DHCP 服务器在主服务器未在合理时间内应答时响应请求. elapsed-time 值是一个 16-bit (2-octet) 无符号整数. 客户端使用值 0xffff 表示任何大于 Elapsed Time option 可表示最大时间值的 elapsed-time 值.

21.10. Relay Message 选项 (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 .
. .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 20: Relay Message Option Format

option-code: OPTION_RELAY_MSG (9).

option-len: DHCP-relay-message 字段的长度.

DHCP-relay-message: 在 Relay-forward 消息中, 这是收到的消息, 会逐字中继到下一个中继代理或服务器. 在 Relay-reply 消息中, 这是要复制并中继给 Relay-reply 消息 peer-address 字段中地址所对应中继代理或客户端的消息. 长度以 octets 为单位, 由 option-len 指定.

21.11. Authentication 选项 (Authentication Option)

Authentication option 携带认证信息, 用于认证 DHCP 消息的身份和内容. Authentication option 的使用在第 20 章中说明. 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) +-+-+-+-+-+-+-+-+
| | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
. authentication information .
. (variable length) .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 21: Authentication Option Format

option-code: OPTION_AUTH (11).

option-len: 11 + authentication information 字段的长度.

protocol: 此 Authentication option 中使用的认证协议. 这是一个 1-octet 无符号整数.

algorithm: 认证协议中使用的算法. 这是一个 1-octet 无符号整数.

RDM: 此 Authentication option 中使用的重放检测方法. 这是一个 1-octet 无符号整数.

replay detection: RDM 的重放检测信息. 这是一个 64-bit (8-octet) 字段.

authentication information: 认证信息, 由此 Authentication option 中使用的 protocol 和 algorithm 指定. 这是一个可变长度字段, 其长度比 option-len 字段中的值少 11 octets.

IANA 在 https://www.iana.org/assignments/auth-namespaces 维护 protocol, algorithm 和 RDM 值的注册表.

21.12. Server Unicast 选项 (Server Unicast Option)

Server Unicast option 已废止. 关于此选项的历史信息, 请参阅 [RFC8415].

服务器禁止发送此选项. 当任何实体收到 Server Unicast option 时, 应当忽略该选项, 并照常继续消息处理.

21.13. Status Code 选项 (Status Code Option)

此选项返回与其所在 DHCP 消息或选项相关的状态指示. 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 .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 22: Status Code Option Format

option-code: OPTION_STATUS_CODE (13).

option-len: 2 + status-message 字段的长度.

status-code: 此选项中编码的状态数值码. 这是一个包含无符号整数的 2-octet 字段.

status-message: 适合显示给最终用户的 UTF-8 编码 [RFC3629] 文本字符串. 禁止以 NUL 结尾. 这是一个可变长度字段, 其长度比 option-len 字段中的值少 2 octets.

Status Code option 可以出现在 DHCP 消息的 "options" 字段中和/或另一个选项的 "options" 字段中. 如果 Status Code option 未出现在本可以出现该选项的消息中, 则假定消息状态为 Success.

status-code 值如下:

       +===============+======+===================================+
| Name | Code | Description |
+===============+======+===================================+
| Success | 0 | Success. |
+---------------+------+-----------------------------------+
| UnspecFail | 1 | Failure, reason unspecified; this |
| | | status code is sent by a server |
| | | to indicate a failure not |
| | | explicitly specified in this |
| | | document. |
+---------------+------+-----------------------------------+
| NoAddrsAvail | 2 | The server has no addresses |
| | | available to assign to the IA(s). |
+---------------+------+-----------------------------------+
| NoBinding | 3 | Client record (binding) |
| | | unavailable. |
+---------------+------+-----------------------------------+
| NotOnLink | 4 | The prefix for the address is not |
| | | appropriate for the link to which |
| | | the client is attached. |
+---------------+------+-----------------------------------+
| UseMulticast | 5 | Sent by a server to a client to |
| | | force the client to send messages |
| | | to the server using the |
| | | All_DHCP_Relay_Agents_and_Servers |
| | | multicast address. Obsoleted; no |
| | | longer used. |
+---------------+------+-----------------------------------+
| NoPrefixAvail | 6 | The server has no prefixes |
| | | available to assign to the |
| | | IA_PD(s). |
+---------------+------+-----------------------------------+

Table 3: Status Code Definitions

关于当前状态码列表, 参见 https://www.iana.org/assignments/dhcpv6-parameters 中的 "Status Codes" 注册表.

21.14. Rapid Commit 选项 (Rapid Commit Option)

Rapid Commit option 用于表示使用两消息交换进行地址分配. 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 | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 23: Rapid Commit Option Format

option-code: OPTION_RAPID_COMMIT (14).

option-len: 0.

如果客户端准备执行第 18.2.1 节所述的 Solicit/Reply 消息交换, 则可以在 Solicit 消息中包含此选项.

当完成 Solicit/Reply 消息交换时, 服务器必须在响应 Solicit 消息而发送的 Reply 消息中包含此选项.

讨论:

  • 每个对包含 Rapid Commit option 的 Solicit 以 Reply 响应的服务器, 都会把 Reply 消息中的租约提交给客户端, 但不会收到客户端已接收 Reply 消息的任何确认. 因此, 如果多个服务器响应包含 Rapid Commit option 的 Solicit, 除一个服务器外, 其他所有服务器都会提交客户端实际未使用的租约. 如果 DHCP 服务器更新 DNS [RFC4704], 这可能导致 DNS 中的地址信息不正确, 并且对 leasequery 请求 [RFC5007] 的响应可能包含客户端未使用租约的信息.

  • 可以通过设计 DHCP 服务使只有一个服务器响应 Solicit, 或者为新分配租约使用相对较短的生命周期, 来尽量减少未使用租约的问题.

21.15. User Class 选项 (User Class Option)

客户端使用 User Class option 来标识其代表的用户或应用程序的类型或类别.

User Class 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_USER_CLASS | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. user-class-data .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 24: User Class Option Format

option-code: OPTION_USER_CLASS (15).

option-len: user-class-data 字段的长度.

user-class-data: 客户端携带的用户类别. 长度以 octets 为单位, 由 option-len 指定.

此选项数据区域中包含的信息由一个或多个 opaque 字段组成, 这些字段表示客户端所属的一个或多个用户类别. 服务器根据此选项标识的类别为客户端选择配置信息. 例如, User Class option 可用于为会计部门人员的所有客户端配置与市场部门人员客户端不同的打印机. 此选项携带的用户类别信息必须可在客户端上配置.

User Class option 的数据区域必须包含一个或多个 user-class-data 信息实例. 每个 user-class-data 实例的格式如下:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+
| user-class-len | opaque-data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+

Figure 25: Format of user-class-data Field

user-class-len 字段长度为 2 octets, 并以网络字节序指定 opaque user-class-data 的长度.

服务器根据自身配置解释此选项标识的类别, 以为客户端选择适当的配置信息. 服务器可以只使用其配置为可解释的用户类别来选择客户端配置信息, 并忽略任何其他用户类别. 在响应包含 User Class option 的消息时, 服务器可以包含一个 User Class option, 其中携带服务器已成功解释的类别, 以便通知客户端服务器解释了哪些类别.

21.16. Vendor Class 选项 (Vendor Class Option)

客户端使用此选项来标识制造客户端运行所在硬件的供应商. 此选项数据区域中包含的信息由一个或多个 opaque 字段组成, 这些字段标识硬件配置的详细信息. Vendor Class 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_VENDOR_CLASS | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| enterprise-number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. vendor-class-data .
. . . . .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 26: Vendor Class Option Format

option-code: OPTION_VENDOR_CLASS (16).

option-len: 4 + vendor-class-data 字段的长度.

enterprise-number: 供应商注册的 Enterprise Number, 由 IANA [IANA-PEN] 维护. 这是一个包含无符号整数的 4-octet 字段.

vendor-class-data: 客户端运行所在节点的硬件配置. 这是一个可变长度字段, 其长度比 option-len 字段中的值少 4 octets.

vendor-class-data 字段由一系列独立条目组成, 每个条目描述客户端硬件配置的某个特征. vendor-class-data 实例的示例可能包括客户端运行的操作系统版本或客户端安装的内存量.

每个 vendor-class-data 实例的格式如下:

   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+
| vendor-class-len | opaque-data |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+

Figure 27: Format of vendor-class-data Field

vendor-class-len 字段长度为 2 octets, 并以网络字节序指定 opaque vendor-class-data 的长度.

服务器和客户端禁止包含多个具有相同 Enterprise Number 的 OPTION_VENDOR_CLASS 实例. 每个 OPTION_VENDOR_CLASS 实例可以携带多个 vendor-class-data 实例.

21.17. Vendor-Specific Information 选项 (Vendor-Specific Information Option)

客户端和服务器使用此选项来交换供应商特定信息.

Vendor-specific Information 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_VENDOR_OPTS | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| enterprise-number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. vendor-option-data .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 28: Vendor-Specific Information Option Format

option-code: OPTION_VENDOR_OPTS (17).

option-len: 4 + vendor-option-data 字段的长度.

enterprise-number: 供应商注册的 Enterprise Number, 由 IANA [IANA-PEN] 维护. 这是一个包含无符号整数的 4-octet 字段.

vendor-option-data: 供应商选项, 由客户端和服务器上的供应商特定代码解释. 这是一个可变长度字段, 其长度比 option-len 字段中的值少 4 octets.

此选项携带信息的定义由供应商指定. 供应商由 enterprise-number 字段指示. 使用供应商特定信息可利用供应商 DHCP 实现中的附加功能来增强操作. 未收到所请求供应商特定信息的 DHCP 客户端仍会将节点的 IPv6 栈配置为可正常工作.

vendor-option-data 字段必须编码为一系列 code/length/value 字段, 其格式与 DHCP options (见第 21.1 节) 相同. suboption codes 由 enterprise-number 字段标识的供应商定义, 不由 IANA 管理. 每个 suboption 的格式如下:

    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
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| suboption-code | suboption-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. suboption-data .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 29: Vendor-Specific Options Format

suboption-code: suboption 的代码. 这是一个 2-octet 字段.

suboption-len: 给出此 suboption 中 suboption-data 字段长度的无符号整数, 单位为 octets. 这是一个 2-octet 字段.

suboption-data: suboption 的数据区域. 长度以 octets 为单位, 由 suboption-len 指定.

Vendor-specific Information option 的多个实例可以出现在 DHCP 消息中. 每个选项实例都根据该选项中 Enterprise Number 标识的供应商定义的 option codes 来解释. 服务器和客户端禁止发送多个具有相同 Enterprise Number 的 Vendor-specific Information option 实例. 每个 Vendor-specific Information option 实例可以包含多个 suboptions.

有兴趣接收 Vendor-specific Information option 的客户端:

  • 必须在 Option Request option 中指定 Vendor-specific Information option.

  • 可以指定关联的 Vendor Class option (见第 21.16 节).

  • 可以指定带有适当数据的 Vendor-specific Information option.

只有当客户端的 Option Request options 中指定了 Vendor-specific Information options 时, 服务器才返回这些选项, 并且:

  • 可以使用关联 Vendor Class options 中的 Enterprise Numbers 来限制返回的 Vendor-specific Information options 中的 Enterprise Numbers 集合.

  • 可以返回所有已配置的 Vendor-specific Information options.

  • 可以使用消息中或其配置中的其他信息来决定返回 Vendor-specific Information options 中的哪组 Enterprise Numbers.

21.18. Interface-Id 选项 (Interface-Id Option)

中继代理可以发送 Interface-Id option, 以标识收到客户端消息的接口. 如果中继代理收到带 Interface-Id option 的 Relay-reply 消息, 则中继代理通过该选项标识的接口将消息中继给客户端.

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 .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 30: Interface-Id Option Format

option-code: OPTION_INTERFACE_ID (18).

option-len: interface-id 字段的长度.

interface-id: 中继代理生成的任意长度 opaque 值, 用于标识中继代理的某个接口. 长度以 octets 为单位, 由 option-len 指定.

服务器必须将 Interface-Id option 从 Relay-forward 消息复制到服务器为响应该 Relay-forward 消息而发送给中继代理的 Relay-reply 消息中. 除 Relay-forward 或 Relay-reply 消息外, 此选项禁止出现在任何消息中.

服务器可以将 interface-id 字段用于参数分配策略. interface-id 值应被视为 opaque 值, 且策略仅基于精确匹配. 也就是说, 服务器不应在内部解析 interface-id 字段. 某个接口的 interface-id 值应保持稳定且不变, 例如在中继代理重启后仍保持不变. 如果 interface-id 值发生变化, 服务器将无法在参数分配策略中可靠地使用它.

21.19. Reconfigure Message 选项 (Reconfigure Message Option)

服务器在 Reconfigure 消息中包含 Reconfigure Message option, 以向客户端指示客户端是以 Renew 消息, Rebind 消息, 还是 Information-request 消息响应. Reconfigure 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_RECONF_MSG | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| msg-type |
+-+-+-+-+-+-+-+-+

Figure 31: Reconfigure Message Option Format

option-code: OPTION_RECONF_MSG (19).

option-len: 1.

msg-type: Renew 消息为 5, Rebind 消息为 6, Information-request 消息为 11. 这是一个 1-octet 无符号整数.

Reconfigure Message option 只能出现在 Reconfigure 消息中.

21.20. Reconfigure Accept 选项 (Reconfigure Accept Option)

客户端使用 Reconfigure Accept option 向服务器声明客户端是否愿意接受 Reconfigure 消息, 服务器使用此选项告诉客户端是否接受 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 | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 32: Reconfigure Accept Option Format

option-code: OPTION_RECONF_ACCEPT (20).

option-len: 0.

21.21. 前缀委派的身份关联选项 (Identity Association for Prefix Delegation Option)

IA_PD option 用于携带前缀委派身份关联, 与该 IA_PD 相关联的参数, 以及与其相关联的前缀. IA_PD 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_PD | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| IAID (4 octets) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| T1 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| T2 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
. .
. IA_PD-options .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 33: Identity Association for Prefix Delegation Option Format

option-code: OPTION_IA_PD (25).

option-len: 12 + IA_PD-options 字段的长度.

IAID: 此 IA_PD 的唯一标识符. IAID 在此客户端所有 IA_PD 的标识符中必须唯一. IA_PD IAID 的编号空间与其他 IA option 类型 (即 IA_NA) 的编号空间分离. 这是一个包含无符号整数的 4-octet 字段.

T1: 一个时间间隔, 在此时间后客户端应联系提供 IA_PD 中前缀的服务器, 以延长委派给该 IA_PD 的前缀生命周期. T1 是相对于消息接收时间的持续时间, 以秒为单位表示. 这是一个包含无符号整数的 4-octet 字段.

T2: 一个时间间隔, 在此时间后客户端应联系任何可用服务器, 以延长分配给该 IA_PD 的前缀生命周期. T2 是相对于消息接收时间的持续时间, 以秒为单位表示. 这是一个包含无符号整数的 4-octet 字段.

IA_PD-options: 与此 IA_PD 相关联的选项. 这是一个可变长度字段, 其长度比 option-len 字段中的值少 12 octets.

IA_PD-options 字段封装了特定于此 IA_PD 的选项. 例如, 携带与此 IA_PD 相关联前缀的所有 IA Prefix options (见第 21.22 节) 都位于 IA_PD-options 字段中.

IA_PD option 只能出现在 DHCP 消息的 options 区域中. DHCP 消息可以包含多个 IA_PD options, 但每个选项必须具有唯一的 IAID.

涉及此 IA_PD 的任何操作状态由 IA_PD-options 字段中的 Status Code option (见第 21.13 节) 指示.

注意, IA_PD 本身没有显式的 "lifetime" 或 "lease length". 当 IA_PD 中所有前缀的有效生命周期都已到期时, 可以认为该 IA_PD 已到期. 包含 T1 和 T2 字段是为了让服务器能够明确控制客户端何时应就特定 IA_PD 联系服务器.

在客户端发送给服务器的消息中, T1 和 T2 字段应当设置为 0. 服务器必须忽略从客户端接收的消息中这些字段的任何值.

在服务器发送给客户端的消息中, 除非这些字段中的值为 0, 客户端必须将 T1 和 T2 字段中的值用作 T1 和 T2 计时器. T1 和 T2 字段中的值是距离 T1 和 T2 的秒数.

服务器选择 T1 和 T2 时间, 以便客户端可在 IA_PD 中任何前缀生命周期到期前延长其生命周期, 即使服务器在短时间内不可用也是如此. T1 和 T2 的推荐值分别为服务器愿意延长的 IA_PD 中前缀最短首选生命周期的 0.5 和 0.8 倍. 如果 IA_PD 中前缀的续租时间要由客户端自行决定, 服务器将 T1 和 T2 设置为 0. 客户端必须遵循第 14.2 节定义的规则.

如果客户端收到一个 T1 大于 T2 且 T1 和 T2 都大于 0 的 IA_PD, 客户端丢弃该 IA_PD option, 并像服务器未包含 IA_PD option 一样处理消息的其余部分.

21.22. IA Prefix 选项 (IA Prefix Option)

IA Prefix option 用于指定与 IA_PD 相关联的前缀. IA Prefix option 必须封装在 IA_PD option 的 IA_PD-options 字段中 (见第 21.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_IAPREFIX | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| preferred-lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| valid-lifetime |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| prefix-length | |
+-+-+-+-+-+-+-+-+ IPv6-prefix |
| (16 octets) |
| |
| |
| |
| +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| | .
+-+-+-+-+-+-+-+-+ .
. IAprefix-options .
. .
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 34: IA Prefix Option Format

option-code: OPTION_IAPREFIX (26).

option-len: 25 + IAprefix-options 字段的长度.

preferred-lifetime: 选项中该前缀的首选生命周期, 以秒为单位表示. 值 0xffffffff 表示 "infinity" (见第 7.7 节). 这是一个包含无符号整数的 4-octet 字段.

valid-lifetime: 选项中该前缀的有效生命周期, 以秒为单位表示. 值 0xffffffff 表示 "infinity". 这是一个包含无符号整数的 4-octet 字段.

prefix-length: 此前缀的长度, 单位为 bits. 这是一个 1-octet 无符号整数.

IPv6-prefix: 一个 IPv6 前缀. 这是一个 16-octet 字段.

IAprefix-options: 与此前缀相关联的选项. 这是一个可变长度字段, 其长度比 option-len 字段中的值少 25 octets.

在客户端发送给服务器的消息中, preferred-lifetime 和 valid-lifetime 字段应当设置为 0. 服务器必须忽略这些生命周期字段中收到的任何值.

客户端不应发送 "prefix-length" 字段为 0 (且 "IPv6-prefix" 字段为未指定值 (::)) 的 IA Prefix option. 客户端可以在 "prefix-length" 字段中发送非零值并在 "IPv6-prefix" 字段中发送未指定值 (::), 以表示对要委派前缀大小的偏好. 关于 prefix-length hints 的更多细节, 参见 [RFC8168].

客户端必须丢弃首选生命周期大于有效生命周期的任何前缀.

preferred-lifetime 和 valid-lifetime 字段中的值是各生命周期的剩余秒数. 关于这些值如何用于委派前缀, 详见第 18.2.10.1 节.

按照第 7.7 节, preferred lifetime 或 valid lifetime 的值 0xffffffff 被视为表示 "infinity", 应谨慎使用.

IA Prefix option 只能出现在 IA_PD option 中. 单个 IA_PD option 中可以出现多个 IA Prefix options.

涉及此 IA Prefix option 的任何操作状态由 IAprefix-options 字段中的 Status Code option (见第 21.13 节) 指示.

21.23. Information Refresh Time 选项 (Information Refresh Time Option)

客户端请求此选项, 服务器返回此选项, 用于指定客户端在刷新从 DHCP 服务器获取的信息前应等待多久的上限. 它只在响应 Information-request 消息的 Reply 消息中使用. 在其他消息中, 通常会有其他信息指示客户端何时应联系服务器, 例如 T1/T2 时间和生命周期. 当配置参数发生变化或发生重新编号事件时, 此选项很有用, 因为以无状态模式运行的客户端将能够更新其配置.

Information Refresh 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_INFORMATION_REFRESH_TIME| option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| information-refresh-time |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 35: Information Refresh Time Option Format

option-code: OPTION_INFORMATION_REFRESH_TIME (32).

option-len: 4.

information-refresh-time: 相对于当前时间的持续时间, 以秒为单位表示. 这是一个包含无符号整数的 4-octet 字段.

DHCP 客户端在发送 Information-request 消息时, 必须在 Option Request option (见第 21.7 节) 中请求此选项. 客户端禁止在任何其他消息的 Option Request option 中请求此选项.

如果在 Information-request 的 Option Request option 中请求了此选项, 服务器在向 Information-request 消息发送 Reply 时应当包含此选项. 选项值禁止小于 IRT_MINIMUM. 此选项必须只出现在 Reply 消息的顶层 options 区域中.

如果对 Information-request 消息的 Reply 不包含此选项, 客户端必须表现为已提供值为 IRT_DEFAULT 的选项.

如果客户端收到的此选项值小于 IRT_MINIMUM, 则必须使用刷新时间 IRT_MINIMUM.

按照第 7.7 节, 值 0xffffffff 被视为表示 "infinity", 并意味着客户端不应在没有其他触发条件的情况下刷新其配置数据, 例如检测到移动到新链路.

如果客户端在刷新时间到期前联系服务器以获取新数据或刷新某些现有数据, 则它也应当刷新此选项覆盖的所有数据.

当客户端检测到刷新时间已到期时, 应当尝试按照第 18.2.6 节规定发送 Information-request 来更新其配置数据, 但客户端必须在 0 到 INF_MAX_DELAY 之间随机延迟一段时间后再发送第一个 Information-request.

客户端可以为刷新时间设置最大值. 每当客户端收到的此选项值高于该最大值时, 都使用该最大值. 这也意味着当收到的值为 "infinity" 时会使用最大值. 最大值可能使客户端不易受到基于伪造 DHCP 消息的攻击. 如果没有最大值, 客户端可能会在可能无限长的时间内使用错误信息. 不过, 也可能存在需要很长刷新时间的原因, 因此使此最大值可配置可能是有用的.

21.24. SOL_MAX_RT 选项 (SOL_MAX_RT Option)

DHCP 服务器向客户端发送 SOL_MAX_RT option, 以覆盖 SOL_MAX_RT 的默认值. 选项中的 SOL_MAX_RT 值替换第 7.6 节定义的默认值. SOL_MAX_RT option 的一个用途是为 SOL_MAX_RT 设置更高的值. 这会减少未收到 Solicit 消息响应的客户端产生的 Solicit 流量.

SOL_MAX_RT 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_SOL_MAX_RT | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SOL_MAX_RT value |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 36: SOL_MAX_RT Option Format

option-code: OPTION_SOL_MAX_RT (82).

option-len: 4.

SOL_MAX_RT value: SOL_MAX_RT 的覆盖值, 单位为秒. 必须在此范围内: 60 <= "value" <= 86400 (1 day). 这是一个包含无符号整数的 4-octet 字段.

DHCP 客户端在 Solicit 消息中发送的任何 Option Request option (见第 21.7 节) 内, 必须包含 SOL_MAX_RT option code.

如果客户端已在 Option Request option 中包含 SOL_MAX_RT option code, DHCP 服务器可以在发送给该客户端的任何响应中包含 SOL_MAX_RT option. SOL_MAX_RT option 作为发送给客户端的消息中的顶层选项发送.

DHCP 客户端必须忽略任何小于 60 或大于 86400 的 SOL_MAX_RT option 值.

如果 DHCP 客户端收到一条包含 SOL_MAX_RT option 且该选项具有有效 SOL_MAX_RT 值的消息, 客户端必须将其内部 SOL_MAX_RT 参数设置为 SOL_MAX_RT option 中包含的值. 然后, 第 15 章和第 18.2.1 节定义的重传机制会使用此 SOL_MAX_RT 值.

此机制的目的是为网络管理员提供一种方法, 在所有 DHCP 服务器都不可用时避免过多 DHCP 流量. 因此, 预期该值会在实际可行的范围内尽可能长时间保留.

更新后的 SOL_MAX_RT 值仅适用于客户端收到 SOL_MAX_RT option 的网络接口.

21.25. INF_MAX_RT 选项 (INF_MAX_RT Option)

DHCP 服务器向客户端发送 INF_MAX_RT option, 以覆盖 INF_MAX_RT 的默认值. 选项中的 INF_MAX_RT 值替换第 7.6 节定义的默认值. INF_MAX_RT option 的一个用途是为 INF_MAX_RT 设置更高的值. 这会减少未收到 Information-request 消息响应的客户端产生的 Information-request 流量.

INF_MAX_RT 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_INF_MAX_RT | option-len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| INF_MAX_RT value |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 37: INF_MAX_RT Option Format

option-code: OPTION_INF_MAX_RT (83).

option-len: 4.

INF_MAX_RT value: INF_MAX_RT 的覆盖值, 单位为秒. 必须在此范围内: 60 <= "value" <= 86400 (1 day). 这是一个包含无符号整数的 4-octet 字段.

DHCP 客户端在 Information-request 消息中发送的任何 Option Request option (见第 21.7 节) 内, 必须包含 INF_MAX_RT option code.

如果客户端已在 Option Request option 中包含 INF_MAX_RT option code, DHCP 服务器可以在发送给该客户端的任何响应中包含 INF_MAX_RT option. INF_MAX_RT option 是发送给客户端的消息中的顶层选项.

DHCP 客户端必须忽略任何小于 60 或大于 86400 的 INF_MAX_RT option 值.

如果 DHCP 客户端收到一条包含 INF_MAX_RT option 且该选项具有有效 INF_MAX_RT 值的消息, 客户端必须将其内部 INF_MAX_RT 参数设置为 INF_MAX_RT option 中包含的值. 然后, 第 15 章和第 18.2.6 节定义的重传机制会使用此 INF_MAX_RT 值.

更新后的 INF_MAX_RT 值仅适用于客户端收到 INF_MAX_RT option 的网络接口.