18. DHCP 客户端发起的配置交换
- DHCP 客户端发起的配置交换
客户端与一台或多台服务器发起消息交换, 以获取或更新其感兴趣的信息. 客户端可以在操作 系统配置过程中、在应用层要求时、在无状态地址自动配置 (Stateless Address Autoconfiguration) 要求时, 或在需要扩展地址生存期时 (Renew 和 Rebind 消息), 发起该配置交换.
18.1. 客户端行为
客户端在地址的正常生命周期中使用 Request、Renew、Rebind、Release 和 Decline 消息. 当 它可能已移动到一条新链路时, 它使用 Confirm 来验证地址. 当它需要配置信息但不需要地址时, 它使用 Information-Request 消息.
如果客户端拥有一个具有足够范围的源地址 (可被服务器用作返回地址), 并且客户端已从服务器 收到 Server Unicast 选项 (22.12 节), 客户端应当 (SHOULD) 将任何 Request、Renew、Release 和 Decline 消息单播 (unicast) 给该服务器.
讨论 (DISCUSSION):
使用单播可以避免由于中继代理对消息进行中继所造成的延迟, 也可以避免由于客户端消息
被投递给多台服务器而导致的服务器开销和重复响应. 要求客户端通过中继代理中继所有 DHCP
消息, 使得所有由客户端发送的消息中都能包含中继代理选项. 服务器应该仅在不会使用中
继代理选项时才启用单播的使用.
18.1.1. Request 消息的创建与传输
客户端使用 Request 消息来向 IA 填充地址并获取其他配置信息. 客户端在 Request 消息中包含 一个或多个 IA 选项. 随后服务器在 Reply 消息的 IA 选项中将地址和其他关于 IA 的信息返回给 客户端.
客户端生成一个事务 ID (transaction ID), 并将该取值插入 "transaction-id" 字段.
客户端将目标服务器的标识符放入服务器标识符 (Server Identifier) 选项中.
客户端必须 (MUST) 包含一条客户端标识符 (Client Identifier) 选项, 以向服务器标识自身. 客户端 添加任何其他适当的选项, 包括一个或多个 IA 选项 (如果客户端正在请求服务器为其分配某些网络 地址).
客户端必须 (MUST) 包含一条选项请求 (Option Request) 选项 (见 22.7 节), 以表明客户端感兴趣 接收哪些选项. 客户端可以 (MAY) 包含带有数据取值的选项, 作为向服务器提示其希望返回的参数取值.
客户端包含一条 Reconfigure Accept 选项 (见 22.20 节), 表明它是否愿意接受来自服务器的 Reconfigure 消息.
客户端按照第 14 节传输消息, 使用以下参数:
IRT REQ_TIMEOUT
MRT REQ_MAX_RT
MRC REQ_MAX_RC
MRD 0
如果消息交换失败, 客户端根据客户端的本地策略采取相应的行动. 客户端可能采取的行动示例 包括:
-
从客户端已知的服务器列表中另选一台服务器; 例如, 以 Advertise 消息响应的那些服务器.
-
发起第 17 节所述的服务器发现过程.
-
终止配置过程并报告失败.
18.1.2. Confirm 消息的创建与传输
每当客户端可能已移动到一条新链路时, 分配给该链路上各接口的那些地址的前缀, 可能不再 适用于客户端当前所连接的链路. 客户端可能已移动到新链路的时机示例包括:
o 客户端重启.
o 客户端物理连接到有线连接.
o 客户端从睡眠模式返回.
o 使用无线技术的客户端改变了接入点.
在客户端可能已移动到新链路的任何情况下, 客户端必须 (MUST) 发起一次 Confirm/Reply 消息交换. 客户端在 Confirm 消息中包含可能被移动到新链路的、分配给该接口的任何 IA, 以及那些 IA 相关联 的地址. 任何响应的服务器将通过它返回给客户端的 Reply 消息中的状态, 来指示那些地址是否 适用于客户端所连接的链路.
客户端将 "msg-type" 字段设置为 CONFIRM. 客户端生成一个事务 ID, 并将该取值插入 "transaction-id" 字段.
客户端必须 (MUST) 包含一条客户端标识符选项, 以向服务器标识自身. 客户端包含在为其发送 Confirm 消息的那个接口所分配的所有 IA 对应的 IA 选项. 这些 IA 选项包含客户端当前与那些 IA 相关联的 所有地址. 客户端应当 (SHOULD) 将任何 IA_NA 选项中的 T1 和 T2 字段, 以及 IA Address 选项中的 preferred-lifetime 和 valid-lifetime 字段, 都设置为 0, 因为服务器将忽略这些字段.
客户端在该接口上发出的第一条 Confirm 消息必须 (MUST) 被延迟一段介于 0 与 CNF_MAX_DELAY 之间的 随机时长. 客户端按照第 14 节传输消息, 使用以下参数:
IRT CNF_TIMEOUT
MRT CNF_MAX_RT
MRC 0
MRD CNF_MAX_RD
如果客户端在如第 14 节所述的消息传输过程终止之前未收到任何响应, 客户端应当 (SHOULD) 继续 使用任何 IP 地址 (使用这些地址最后已知的生存期), 并应当 (SHOULD) 继续使用任何先前获得的其他 配置参数.
18.1.3. Renew 消息的创建与传输
为了延长与某个 IA 相关联的地址的首选生存期 (preferred lifetime) 和有效生存期 (valid lifetime), 客户端向最初为客户端分配该 IA 中地址的服务器发送一条 Renew 消息, 其中包含该 IA 的一个 IA 选项. 客户端在该 IA 的 IA 选项中包含这些地址相关联的 IA Address 选项. 服务器根据 服务器的管理配置, 为该 IA 中的地址确定新的生存期. 服务器也可以向 IA 添加新的地址. 服务器 可以通过将那些地址的首选生存期和有效生存期设置为 0, 从而从 IA 中移除地址.
服务器通过分配给 IA 的 T1 和 T2 参数, 控制客户端联系服务器以延长已分配地址生存期的时间.
在 IA 的 T1 时刻, 客户端发起一次 Renew/Reply 消息交换, 以延长 IA 中任何地址的生存期. 客户端 在其 Renew 消息中包含一个 IA 选项, 其中含有当前分配给该 IA 的所有地址.
如果服务器 (对于一个 IA_NA) 将 T1 或 T2 设置为 0, 或者 (对于一个 IA_TA) 没有 T1 或 T2 时间, 则客户端可以分别自行决定发送 Renew 或 Rebind 消息.
客户端将 "msg-type" 字段设置为 RENEW. 客户端生成一个事务 ID, 并将该取值插入 "transaction-id" 字段.
客户端将目标服务器的标识符放入服务器标识符选项中.
客户端必须 (MUST) 包含一条客户端标识符选项, 以向服务器标识自身. 客户端添加任何其他适当的 选项, 包括一个或多个 IA 选项. 客户端必须 (MUST) 在 Renew 消息中包含客户端当前与那些 IA 相关联 的地址列表.
客户端必须 (MUST) 包含一条选项请求选项 (见 22.7 节), 以表明客户端感兴趣接收哪些选项. 客户端 可以 (MAY) 包含带有数据取值的选项, 作为向服务器提示其希望返回的参数取值.
客户端按照第 14 节传输消息, 使用以下参数:
IRT REN_TIMEOUT
MRT REN_MAX_RT
MRC 0
MRD 直到 T2 的剩余时间
当到达 T2 时刻 (见 18.1.4 节) 时, 消息交换终止, 此时客户端开始一次 Rebind 消息交换.
18.1.4. Rebind 消息的创建与传输
在 IA 的 T2 时刻 (只有在 T1 时刻发送的 Renew 消息所发往的服务器未响应时才会到达), 客户端 与任何可用的服务器发起一次 Rebind/Reply 消息交换. 客户端在其 Rebind 消息中包含一个 IA 选项, 其中含有当前分配给该 IA 的所有地址.
客户端将 "msg-type" 字段设置为 REBIND. 客户端生成一个事务 ID, 并将该取值插入 "transaction-id" 字段.
客户端必须 (MUST) 包含一条客户端标识符选项, 以向服务器标识自身. 客户端添加任何其他适当的 选项, 包括一个或多个 IA 选项. 客户端必须 (MUST) 在 Rebind 消息中包含客户端当前与那些 IA 相关联 的地址列表.
客户端必须 (MUST) 包含一条选项请求选项 (见 22.7 节), 以表明客户端感兴趣接收哪些选项. 客户端 可以 (MAY) 包含带有数据取值的选项, 作为向服务器提示其希望返回的参数取值.
客户端按照第 14 节传输消息, 使用以下参数:
IRT REB_TIMEOUT
MRT REB_MAX_RT
MRC 0
MRD 直到所有地址的有效生存期均已到期的剩余时间
当分配给 IA 的所有地址的有效生存期到期时 (见第 10 节), 消息交换终止, 此时客户端有几种替代 行动可供选择; 例如:
-
客户端可以选择使用 Solicit 消息来定位一台新的 DHCP 服务器, 并向该新服务器发送针对已 到期 IA 的 Request.
-
客户端可能在其他 IA 中拥有其他地址, 因此客户端可以选择丢弃已到期的 IA, 而使用其他 IA 中的地址.
18.1.5. Information-request 消息的创建与传输
客户端使用 Information-request 消息来获取配置信息, 而不向其分配任何地址.
客户端将 "msg-type" 字段设置为 INFORMATION-REQUEST. 客户端生成一个事务 ID, 并将该取值插入 "transaction-id" 字段.
客户端应当 (SHOULD) 包含一条客户端标识符选项, 以向服务器标识自身. 如果客户端未包含客户端 标识符选项, 服务器将不能向客户端返回任何客户端特定的选项, 或者服务器可以选择根本不响应该 消息. 如果 Information-Request 消息将被认证, 客户端必须 (MUST) 包含一条客户端标识符选项.
客户端必须 (MUST) 包含一条选项请求选项 (见 22.7 节), 以表明客户端感兴趣接收哪些选项. 客户端 可以 (MAY) 包含带有数据取值的选项, 作为向服务器提示其希望返回的参数取值.
客户端在该接口上发出的第一条 Information-request 消息必须 (MUST) 被延迟一段介于 0 与 INF_MAX_DELAY 之间的随机时长. 客户端按照第 14 节传输消息, 使用以下参数:
IRT INF_TIMEOUT
MRT INF_MAX_RT
MRC 0
MRD 0
18.1.6. Release 消息的创建与传输
为了释放一个或多个地址, 客户端向服务器发送一条 Release 消息.
客户端将 "msg-type" 字段设置为 RELEASE. 客户端生成一个事务 ID, 并将该取值放入 "transaction-id" 字段.
客户端将分配了这些地址的服务器标识符放入服务器标识符选项中.
客户端必须 (MUST) 包含一条客户端标识符选项, 以向服务器标识自身. 客户端在 "options" 字段中 包含含有它正释放的地址的那些 IA 的选项. 待释放的地址必须 (MUST) 被包含在这些 IA 中. 客户端 希望继续使用的、属于这些 IA 的任何地址, 不得 (MUST NOT) 被添加到这些 IA 中.
客户端不得 (MUST NOT) 将任何它正释放的地址用作 Release 消息或任何随后发送的消息中的源地址.
由于 Release 消息可能会丢失, 如果没有收到 Reply, 客户端应当重传该 Release. 然而, 存在客户端 可能不希望在放弃之前等待正常重传超时的情况 (例如断电时). 实现应当重传一次或多次, 但可以 (MAY) 选择提前终止重传过程.
客户端按照第 14 节传输消息, 使用以下参数:
IRT REL_TIMEOUT
MRT 0
MRC REL_MAX_RC
MRD 0
一旦客户端开始 Release 消息交换过程, 它必须 (MUST) 停止使用所有正被释放的地址. 如果地址被释放但 来自 DHCP 服务器的 Reply 丢失, 客户端将重传 Release 消息, 而服务器可能以一条状态码为 NoBinding 的 Reply 来响应. 因此, 客户端不应将 Release 消息交换中状态码为 NoBinding 的 Reply 消息视为 指示错误.
注意, 如果客户端未能释放这些地址, 分配给 IA 的每个地址将在该地址的有效生存期到期时由服务器 收回.
18.1.7. Decline 消息的创建与传输
如果客户端检测到服务器分配给它的一个或多个地址已被另一个节点使用, 客户端向服务器发送一条 Decline 消息, 告知该地址可疑.
客户端将 "msg-type" 字段设置为 DECLINE. 客户端生成一个事务 ID, 并将该取值放入 "transaction-id" 字段.
客户端将分配了这些地址的服务器标识符放入服务器标识符选项中.
客户端必须 (MUST) 包含一条客户端标识符选项, 以向服务器标识自身. 客户端在 "options" 字段中 包含含有它正拒绝的地址的那些 IA 的选项. 待拒绝的地址必须 (MUST) 被包含在这些 IA 中. 客户端 希望继续使用的、属于这些 IA 的任何地址不应被添加到这些 IA 中.
客户端不得 (MUST NOT) 将任何它正拒绝的地址用作 Decline 消息或任何随后发送的消息中的源地址.
客户端按照第 14 节传输消息, 使用以下参数:
IRT DEC_TIMEOUT
MRT 0
MRC DEC_MAX_RC
MRD 0
如果地址被拒绝但来自 DHCP 服务器的 Reply 丢失, 客户端将重传 Decline 消息, 而服务器可能以一条 状态码为 NoBinding 的 Reply 来响应. 因此, 客户端不应将 Decline 消息交换中状态码为 NoBinding 的 Reply 消息视为指示错误.
18.1.8. Reply 消息的接收
在收到为响应一条 Solicit (带有 Rapid Commit 选项)、Request、Confirm、Renew、Rebind 或 Information-request 消息而发来的有效 Reply 消息时, 客户端提取 Reply 中所含的配置信息. 客户端 可以 (MAY) 选择报告 Reply 消息中状态码选项里的任何状态码或消息.
客户端应当 (SHOULD) 在 Reply 消息中收到的任何 IA 的每个地址被用于通信之前, 对这些地址执行 重复地址检测 (duplicate address detection) [17]. 如果发现任何地址正被链路上使用, 客户端向 服务器发送一条 Decline 消息, 如第 18.1.7 节所述.
如果 Reply 是响应以下消息之一而收到的: Solicit (带有 Rapid Commit 选项)、Request、Renew 或 Rebind, 客户端根据 Reply 消息中所含 IA 选项中的信息, 更新它所记录的关于 IA 的信息:
-
记录 T1 和 T2 时间.
-
将 IA 选项中任何新的地址, 作为客户端所记录的内容, 添加到该 IA 中.
-
更新客户端已在该 IA 中记录的、IA 选项中任何地址的生存期.
-
丢弃客户端所记录的该 IA 中、在 IA Address 选项中有效生存期为 0 的任何地址.
-
对于客户端已在该 IA 中记录、但未包含在服务器发来的 IA 中的任何地址信息, 保持不变.
各项具体配置信息的管理在第 22 节各选项的定义中有详述.
如果客户端收到一条带有状态码 UnspecFail 的 Reply 消息, 服务器是在表明它由于未指明的故障 状况而无法处理该消息. 如果客户端将原始消息重传给同一服务器以重试期望的操作, 客户端必须 (MUST) 限制其重传消息的速率, 并限制其重传消息的持续时间.
当客户端收到一条带有状态码取值 UseMulticast 的 Reply 消息时, 客户端记录收到该消息, 并通过 收到该消息的接口、使用多播 (multicast) 向服务器发送后续消息. 客户端使用多播重新发送原始消息.
当客户端作为对 Confirm 消息的响应、从服务器收到 NotOnLink 状态时, 客户端执行 DHCP 服务器搜寻 (如第 17 节所述) 以及客户端发起的配置 (如第 18 节所述). 如果客户端收到任何未指示 NotOnLink 状态的 Reply 消息, 客户端可以使用该 IA 中的地址, 并忽略任何指示 NotOnLink 状态的消息.
当客户端作为对 Request 消息的响应、从服务器收到 NotOnLink 状态时, 客户端可以重新发出该 Request 而不指定任何地址, 或者重新启动 DHCP 服务器发现过程 (见第 17 节).
客户端逐个检查每个 IA 中的状态码. 如果状态码为 NoAddrsAvail, 客户端在该 IA 中未收到任何可用 地址, 并可以选择尝试从另一台服务器获取该 IA 的地址. 客户端使用那些不含 NoAddrsAvail 状态码 选项的 IA 中的地址和其他信息. 如果客户端在任何 IA 中均未收到地址, 它可以选择尝试另一台服务器 (或许重新启动 DHCP 服务器发现过程), 或者使用 Information-request 消息仅获取其他配置信息.
当客户端收到作为对 Renew 或 Rebind 消息的响应而发来的 Reply 消息时, 客户端独立检查每个 IA. 对于原始 Renew 或 Rebind 消息中的每个 IA, 客户端:
-
如果该 IA 含有一条状态码为 NoBinding 的状态码选项, 则发送一条 Request 消息 (并且不发送 任何额外的 Renew/Rebind 消息);
-
如果该 IA 不在 Reply 消息中, 则发送一条 Renew/Rebind 消息;
-
否则, 接受该 IA 中的信息.
当客户端收到作为对 Release 消息的响应而发来的有效 Reply 消息时, 无论服务器返回的状态码选项是 什么, 客户端都认为 Release 事件已完成.
当客户端收到作为对 Decline 消息的响应而发来的有效 Reply 消息时, 无论服务器返回的状态码选项是 什么, 客户端都认为 Decline 事件已完成.
18.2. 服务器行为
在本讨论中, 假定服务器已以某种实现特定的方式配置了对客户端感兴趣的配置.
在大多数情况下, 服务器将发送 Reply 以响应客户端消息. 该 Reply 消息必须 (MUST) 总是包含服务器 标识符 (Server Identifier) 选项, 其中含有服务器的 DUID, 以及 (如果原客户端消息中存在的话) 原 客户端消息中的客户端标识符 (Client Identifier) 选项.
在大多数 Reply 消息中, 服务器包含含有客户端配置信息的选项. 服务器必须意识到 RFC 2460 第 5 节 中关于数据包大小以及分片使用的建议. 如果客户端在其消息中包含了选项请求选项, 服务器在 Reply 消息中包含那些在选项请求选项中标识的、且服务器已被配置为要返回给客户端的选项的配置参数. 如果 服务器已被如此配置, 它可以 (MAY) 向客户端返回额外的选项.
18.2.1. Request 消息的接收
当服务器通过单播从一台它尚未发送过单播选项的客户端收到 Request 消息时, 服务器丢弃该 Request 消息, 并以一条含有状态码选项 (其取值为 UseMulticast)、一个含有服务器 DUID 的服务器标识符选项、 原客户端消息中的客户端标识符选项、以及不含其他任何选项的 Reply 消息作为响应.
当服务器收到一条有效的 Request 消息时, 服务器根据服务器的策略和配置信息, 为该客户端创建绑定, 并记录客户端请求的 IA 和其他信息.
服务器通过将 "msg-type" 字段设置为 REPLY, 并将事务 ID 从 Request 消息复制到 transaction-id 字段, 来构造一条 Reply 消息.
服务器必须 (MUST) 在 Reply 消息中包含一条含有服务器 DUID 的服务器标识符选项, 以及来自 Request 消息的客户端标识符选项.
如果服务器发现客户端消息中任何 IA 里的一个或多个 IP 地址的前缀, 对客户端所连接的链路不适当, 服务器必须 (MUST) 将该 IA 连同取值为 NotOnLink 的状态码 (Status Code) 选项, 返回给客户端.
如果服务器无法向客户端消息中的某个 IA 分配任何地址, 服务器必须 (MUST) 在 Reply 消息中包含该 IA, 其中不含任何地址, 并带有一个状态码选项 (其状态码为 NoAddrsAvail).
对于任何服务器可以分配地址的 IA, 服务器包含该 IA 及其地址和其他配置参数, 并将该 IA 记录为一 个新的客户端绑定.
如果服务器希望要求客户端接受 Reconfigure 消息, 服务器包含一条 Reconfigure Accept 选项.
服务器包含如第 18.2 节所述、要返回给客户端的其他配置信息选项.
如果服务器发现客户端在 Request 消息中包含了一个 IA, 而服务器已经有一条将该 IA 与该客户端关联 起来的绑定, 则说明客户端重新发送了一条它未收到 Reply 的 Request 消息. 服务器要么重新发送一条 先前缓存的 Reply 消息, 要么发送一条新的 Reply 消息.
18.2.2. Confirm 消息的接收
当服务器收到 Confirm 消息时, 服务器确定 Confirm 消息中的地址是否适用于客户端所连接的链路. 如果 Confirm 消息中的所有地址都通过此测试, 服务器返回 Success 状态. 如果任何地址未通过此测试, 服务器返回 NotOnLink 状态. 如果服务器无法执行此测试 (例如, 服务器没有关于客户端所连接链路 上前缀的信息), 或者客户端发送的 IA 中没有任何地址, 服务器必须 (MUST) NOT 向客户端发送应答.
服务器忽略 IA 选项中的 T1 和 T2 字段, 以及 IA Address 选项中的 preferred-lifetime 和 valid-lifetime 字段.
服务器通过将 "msg-type" 字段设置为 REPLY, 并将事务 ID 从 Confirm 消息复制到 transaction-id 字段, 来构造一条 Reply 消息.
服务器必须 (MUST) 在 Reply 消息中包含一条含有服务器 DUID 的服务器标识符选项, 以及来自 Confirm 消息的客户端标识符选项. 服务器包含一条指示 Confirm 消息状态的状态码选项.
18.2.3. Renew 消息的接收
当服务器通过单播从一台它尚未发送过单播选项的客户端收到 Renew 消息时, 服务器丢弃该 Renew 消息, 并以一条含有状态码选项 (其取值为 UseMulticast)、一个含有服务器 DUID 的服务器标识符选项、原 客户端消息中的客户端标识符选项、以及不含其他任何选项的 Reply 消息作为响应.
当服务器收到一条含有来自客户端的 IA 选项的 Renew 消息时, 它定位该客户端的绑定, 并验证来自 客户端的 IA 中的信息与该客户端所存储的信息相匹配.
如果服务器无法为 IA 找到客户端条目, 服务器在 Reply 消息中返回该 IA (不含任何地址), 并带有一条 状态码选项 (其状态设为 NoBinding).
如果服务器发现任何地址对客户端所连接的链路不适当, 服务器将该地址返回给客户端, 其生存期设为 0.
如果服务器为客户端找到了该 IA 中的地址, 则服务器将该 IA 连同新的生存期和 T1/T2 时间发送回客户端. 服务器可以选择改变返回给客户端的、IA 中的地址列表和地址生存期.
服务器通过将 "msg-type" 字段设置为 REPLY, 并将事务 ID 从 Renew 消息复制到 transaction-id 字段, 来构造一条 Reply 消息.
服务器必须 (MUST) 在 Reply 消息中包含一条含有服务器 DUID 的服务器标识符选项, 以及来自 Renew 消息的客户端标识符选项.
服务器包含如第 18.2 节所述、要返回给客户端的其他配置信息选项.
18.2.4. Rebind 消息的接收
当服务器收到一条含有来自客户端的 IA 选项的 Rebind 消息时, 它定位该客户端的绑定, 并验证来自 客户端的 IA 中的信息与该客户端所存储的信息相匹配.
如果服务器无法为 IA 找到客户端条目, 并且服务器根据自身的显式配置信息确定 IA 中的地址对客户端 接口所连接的链路不适当, 服务器可以 (MAY) 向客户端发送一条 Reply 消息, 其中包含客户端的 IA, 并将该 IA 中地址的生存期设为零. 该 Reply 构成对客户端的显式通知, 表明该 IA 中的地址不再有效. 在这种情况下, 如果服务器不发送 Reply 消息, 它会静默地丢弃该 Rebind 消息.
如果服务器发现任何地址对客户端所连接的链路不再适当, 服务器将该地址返回给客户端, 其生存期设为 0.
如果服务器为客户端找到了该 IA 中的地址, 则服务器应当 (SHOULD) 将该 IA 连同新的生存期和 T1/T2 时间 发送回客户端.
服务器通过将 "msg-type" 字段设置为 REPLY, 并将事务 ID 从 Rebind 消息复制到 transaction-id 字段, 来构造一条 Reply 消息.
服务器必须 (MUST) 在 Reply 消息中包含一条含有服务器 DUID 的服务器标识符选项, 以及来自 Rebind 消息的客户端标识符选项.
服务器包含如第 18.2 节所述、要返回给客户端的其他配置信息选项.
18.2.5. Information-request 消息的接收
当服务器收到 Information-request 消息时, 客户端正在请求不包含任何地址分配的配置信息. 服务器 根据服务器已知的服务器配置策略, 确定适用于该客户端的所有配置参数.
服务器通过将 "msg-type" 字段设置为 REPLY, 并将事务 ID 从 Information-request 消息复制到 transaction-id 字段, 来构造一条 Reply 消息.
服务器必须 (MUST) 在 Reply 消息中包含一条含有服务器 DUID 的服务器标识符选项. 如果客户端在 Information-request 消息中包含了客户端标识符 (Client Identification) 选项, 服务器将该选项复制到 Reply 消息中.
服务器包含如第 18.2 节所述、要返回给客户端的配置信息选项.
如果从客户端收到的 Information-request 消息未包含客户端标识符选项, 服务器应当 (SHOULD) 以一条 含有任何不由客户端身份决定的配置参数的 Reply 消息作出响应. 如果服务器选择不响应, 客户端可能 会无限期地继续重传该 Information-request 消息.
18.2.6. Release 消息的接收
当服务器通过单播从一台它尚未发送过单播选项的客户端收到 Release 消息时, 服务器丢弃该 Release 消息, 并以一条含有状态码选项 (其取值为 UseMulticast)、一个含有服务器 DUID 的服务器标识符选项、 原客户端消息中的客户端标识符选项、以及不含其他任何选项的 Reply 消息作为响应.
在收到一条有效的 Release 消息后, 服务器检查 IA 以及 IA 中地址的有效性. 如果消息中的 IA 处于该 客户端的某个绑定中, 且 IA 中的地址已由服务器分配给那些 IA, 服务器从这些 IA 中删除这些地址, 并使这些地址可用于分配给其他客户端. 服务器忽略未分配给该 IA 的地址, 尽管它可以选择记录错误.
在处理完所有地址后, 服务器生成一条 Reply 消息, 并包含一条取值为 Success 的状态码选项、一个含有 服务器 DUID 的服务器标识符选项, 以及一个含有客户端 DUID 的客户端标识符选项. 对于 Release 消息中 服务器没有任何绑定信息的每个 IA, 服务器使用 Release 消息中的 IAID 添加一个 IA 选项, 并在该 IA 选项中包含一条取值为 NoBinding 的状态码选项. IA 选项中不包含其他选项.
服务器可以选择在地址生存期到期后仍保留已分配地址和 IA 的记录, 以便服务器能将先前分配的地址 重新分配给客户端.
18.2.7. Decline 消息的接收
当服务器通过单播从一台它尚未发送过单播选项的客户端收到 Decline 消息时, 服务器丢弃该 Decline 消息, 并以一条含有状态码选项 (其取值为 UseMulticast)、一个含有服务器 DUID 的服务器标识符选项、 原客户端消息中的客户端标识符选项、以及不含其他任何选项的 Reply 消息作为响应.
在收到一条有效的 Decline 消息后, 服务器检查 IA 以及 IA 中地址的有效性. 如果消息中的 IA 处于该 客户端的某个绑定中, 且 IA 中的地址已由服务器分配给那些 IA, 服务器从这些 IA 中删除这些地址. 服务器忽略未分配给该 IA 的地址 (尽管如果发现这样的地址, 它可以选择记录错误).
客户端已发现 Decline 消息中的任何地址在其链路上已被使用. 因此, 服务器应当 (SHOULD) 标记客户端 所拒绝的地址, 使得这些地址不被分配给其他客户端, 并且可以 (MAY) 选择发出地址被拒绝的通知. 服务器 上的本地策略决定 Decline 消息中标识的地址何时可被重新分配.
在处理完所有地址后, 服务器生成一条 Reply 消息, 并包含一条取值为 Success 的状态码选项、一个含有 服务器 DUID 的服务器标识符选项, 以及一个含有客户端 DUID 的客户端标识符选项. 对于 Decline 消息中 服务器没有任何绑定信息的每个 IA, 服务器使用 Release 消息中的 IAID 添加一个 IA 选项, 并在该 IA 选项中包含一条取值为 NoBinding 的状态码选项. IA 选项中不包含其他选项.
18.2.8. Reply 消息的传输
如果原始消息是由服务器直接收到的, 服务器使用收到原始消息的那个 IP 数据报的源地址字段中的地址, 将 Reply 消息单播直接发给客户端. Reply 消息必须 (MUST) 通过收到原始消息的那个接口被单播.
如果原始消息是在 Relay-forward 消息中收到的, 服务器构造一条 Relay-reply 消息, 并将 Reply 消息 置于一条 Relay Message 选项 (见 22.10 节) 的载荷中. 如果 Relay-forward 消息包含了一条 Interface-id 选项, 服务器将该选项复制到 Relay-reply 消息中. 服务器使用收到 Relay-forward 消息的那个 IP 数据报 的源地址字段中的地址, 将 Relay-reply 消息单播直接发给该中继代理.