14. 客户端发起消息交换的可靠性
- 客户端发起消息交换的可靠性
在 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 都为零, 客户端会继续发送该消息, 直到收到响应.