跳到主要内容

14. 客户端发起消息交换的可靠性

  1. 客户端发起消息交换的可靠性

在 sections 17 和 18 所述的客户端发起消息交换中, DHCP 客户端负责消息的可靠传递. 如果 DHCP 客户端未能从服务器收到预期响应, 客户端必须重传其消息. 本节描述客户端在客户端发起消息交换中应使用的重传策略.

注意, 本节描述的过程在用于 Solicit message 时会稍作修改. 修改后的过程见 section 17.1.2.

客户端通过向服务器发送消息来开始消息交换. 当客户端成功从一个或多个服务器收到适当的一个或多个响应时, 或者当消息交换根据下文描述的重传机制被认为已经失败时, 该消息交换终止.

客户端的重传行为由以下变量控制和描述:

  RT     重传超时

IRT 初始重传时间

MRC 最大重传次数

MRT 最大重传时间

MRD 最大重传持续时间

RAND 随机化因子

每次发送或重传消息时, 客户端都按照下面给出的规则设置 RT. 如果 RT 在消息交换终止前到期, 客户端会重新计算 RT 并重传该消息.

每次计算新的 RT 时都包含随机化因子 (RAND), 它是在 -0.1 到 +0.1 之间按均匀分布选择的随机数. 引入随机化因子是为了尽量减少 DHCP 客户端所发送消息之间的同步.

选择随机数的算法不需要具备密码学强度. 该算法 SHOULD 在 DHCP 客户端每次调用时产生不同的随机数序列.

首次消息发送的 RT 基于 IRT:

  RT = IRT + RAND*IRT

后续每次消息发送的 RT 基于前一个 RT 值:

  RT = 2*RTprev + RAND*RTprev

MRT 指定 RT 值的上限 (不考虑使用 RAND 所加入的随机化). 如果 MRT 的值为 0, 则 RT 值没有上限. 否则:

  if (RT > MRT)
RT = MRT + RAND*MRT

MRC 指定客户端可以重传消息次数的上限. 除非 MRC 为零, 一旦客户端已经发送该消息 MRC 次, 消息交换即失败.

MRD 指定客户端可以重传消息的时间长度上限. 除非 MRD 为零, 一旦自客户端首次发送该消息起已经经过 MRD 秒, 消息交换即失败.

如果 MRC 和 MRD 都非零, 只要满足前两段中指定的任一条件, 消息交换即失败.

如果 MRC 和 MRD 都为零, 客户端会继续发送该消息, 直到收到响应.