摘要

  • RFC 3074 把客户端标识符或硬件地址映射到 256 个值之一,再用共享的哈希桶分配表决定哪台 DHCP 服务器应当响应。
  • 文档同时考虑了被指定服务器不可用或无地址、未分配桶、客户端计时不可靠和配置遭篡改。正确哈希只能证明配置选择,不能证明实时服务能力。

DHCP 客户端广播 DHCPDISCOVER 时,多台服务器都可能收到并作答;BOOTP 中继也可能把请求转发给所有已配置目标。2001 年 2 月,B. Volz、S. Gonczi、T. Lemon 与 R. Stevens 发布 RFC 3074,希望减少这种重复。参与者只需共享初始配置,之后便可各自算出同一个“服务/不服务”决定。

计算从 Service Transaction ID 开始。存在 Client Identifier 选项时必须使用它;否则由 hlen 给出长度,以 chaddr 的最多前十六个字节为输入。规范指定的 Pearson 哈希输出 0 到 255。每台服务器得到一张 32 字节的 Hash Bucket Assignment 位图;某位被置一,意味着对应桶中的请求必须由该服务器处理。

这种一致性很有价值。同一输入、同一混合表与相同 HBA 可以在没有持续通信的情况下得出同一责任人。中继还能用 Server-ID 与桶的配对选择一个或多个转发目标。算法把广播请求分摊给协作者,又不要求既有 DHCP 客户端改变行为。

但哈希读取的不是服务器现况。它不查询进程是否运行、网络路径是否可达、伙伴的租约状态是否一致,也不查看地址池中是否还有适合的地址。STID 描述一笔客户端事务,HBA 描述管理员分配的责任;两者都不是实时容量指标。

RFC 3074 对此有直接表述:负责响应的服务器可能不可用,或已经没有合适地址。可选的 Delayed Service 参数允许原本被哈希排除的服务器,在客户端第一次尝试之后等待 S 秒再回答。这不是宣布原先计算出错,而是在首选者获得响应机会之后,为沉默设置受控出口。

等待时间本身也需要证据。客户端提供非零 secs 时,服务器应当使用它;然而 RFC 明言有些客户端可能没有正确实现该字段。服务器也可记住自己第一次拒绝的请求,当同一 transaction ID 再次出现而 secs 仍为零时,用本地观察到的间隔代替。前者信任客户端声明,后者连接两次重试。两者都不能独自证明首选服务器为何没有回答。

若没有配置 Delayed Service,HBA 就是严格的服务/不服务边界。无人认领的桶会使相应事务被完全忽略,文档还指出这在某些场景可能是有意行为。因此覆盖范围必须单独审查:实现可以毫无差错地算出一个值,而配置也可以毫无歧义地让所有人都不响应。

“负载百分比”也不能被当成即时测量。RFC 称该方法在群体层面具有概率性;短时请求分布可能偏离设定比例,数量增加后才应逐渐接近。算法不观察 CPU、队列、剩余地址或延迟,只分配标识符。STID 不必唯一,但需要足够多样,才能形成有用的分布。

配置由此成为执行链的一部分。HBA 可以来自文件、Windows NT 注册表、EEPROM 或约定算法,也可以封装进其他协议传输。RFC 3074 本身不提供安全性;若 HBA 在网络上传递,消息必须防篡改,因为改变桶归属可以让部分乃至全部客户端遭遇拒绝服务。相同代码无法发现参与者持有不同地图,也无法纠正共同收到的恶意地图。

RFC 2131 提供了更大的 DHCP 背景:客户端必须准备接收多个响应,DHCP 作为机制受本地管理政策约束。从 DISCOVER 到 OFFER、客户端选择、REQUEST、ACK,再到实际使用配置,仍有多项事件。RFC 3074 优化的是谁被允许先回答,并未把后续结果塞进哈希值。RFC 1542 说明 BOOTP 中继行为,却不证明某台中继正确部署了这一算法。

后来的 RFC 7031 把伙伴配置不一致称为 failover 方案中的常见问题,并把负载均衡放在 DHCPv6 failover 核心以外。它不是对 RFC 3074 现实部署的回溯报告,只能帮助我们保持类别清晰:分发请求、同步状态和故障接管相互关联,却不是同一功能。

借用后来的 Running-Code Primacy 视角,完整凭证链应包括 STID 来源、哈希结果、桶覆盖、责任服务器、实际可达性、合适地址、延迟接管、OFFER、选择、REQUEST、ACK 与可用配置。Reality Layers 则提醒我们,确定性算出的“负责人”具有符号上的确定感,却未必拥有完成服务的操作能力。这些是后来的分析工具,不能归因于 RFC 作者或 IETF。

RFC 3074 精确解决了一个问题:谁应先尝试。它以较小计算代价减少重复答复,也诚实保留了离线、耗尽和沉默的出口。历史教训不是哈希失效,而是不要要求一次正确计算证明它从未测量的事实。

来源