摘要
- RFC 1931 允许同一网段部署多个 Dynamic RARP 应答服务器来提高可用性,但要求它们都连接同一个逻辑地址权威;不同应答除服务器自身字段外若不一致,就是协议错误。
- 地址权威维护永久绑定、临时绑定和可用池,却并不等于现场事实。RFC 建议分配前用 ARP 或 ICMP 探测,因为数据库标为“可用”的地址可能正被使用。
- 这份文件于 1996 年 4 月以 Informational 发布,今天列入 Legacy;它记录的是部分 Sun 平台自 1988 年开始使用的历史设计,并未制定互联网标准,也不能据此声称它导致了后来的 DHCP。
沉默不是一个错误码
RARP 面向这样一台启动中的主机:它知道自己的硬件地址,却不知道协议地址。主机广播询问,由保存硬件地址到 IP 映射的一个或多个服务器作答。原协议没有否定应答,这是有意的——一台服务器不知道,并不表示其他服务器也不知道。
但对安装程序而言,沉默的含义太多了。请求可能丢失,服务器可能离线,机器可能未登记,也可能接错了网段;甚至网络里根本没有 RARP 服务器。客户端只能退避重试,却不知道等待是否仍有意义。所谓“插上线就自动安装”,也不是真的从零开始:网络号、地址结构和命名系统仍须由管理员预先准备。
RFC 1931 所记录的 Dynamic RARP,首先把这种沉默拆成了可观察的结果。它沿用 RARP 的包格式与链路封装,新增请求、应答和错误三个操作码。已有永久绑定时,服务器返回普通 REVARP_REPLY;没有永久绑定时,可以分配一个临时地址并返回 DRARP_REPLY;不能分配则必须返回 DRARP_ERROR。
错误又被细分为策略禁止、地址耗尽、权威暂时不可用、已知机器出现在错误网段,以及其他失败。分类让客户端和管理员能采取不同动作,但错误名称本身不会认证服务器,更不会证明它描述的原因真实。
这份文档的历史边界同样清楚。RFC Editor 的现行记录 将其列为 Legacy 流的 Informational 文档,并明确它没有定义互联网标准。文中说某些 Sun Microsystems 平台从 1988 年起使用 DRARP;到 1996 年 4 月发表时,这些平台已不再销售,DHCP 也已在一定程度上承担其角色。这里保存的是经验,不是为 DRARP 追认继承权。
动态分配不等于每台服务器自行决定
DRARP 最容易被误读之处,是把“多个服务器”当成“多个权威”。RFC 的规则恰好相反。同一请求得到的多个 DRARP 应答,除了发送服务器自身地址字段以外必须一致;否则就是协议错误。多个进程只是一个服务的多个出口。
每个网段放置一台服务器,可以降低网络分区造成的损失;同一网段放置多台,则能减少单机或单段故障的影响。但所有服务器都必须与同一个地址权威通信。文中实现用 NIS 和一个集中式 RPC 服务 IPalloc 保存与修改绑定,并限制管理员和 DRARP 服务器等授权主体执行分配。RFC 只是描述该机制,没有把 IPalloc 或其安全做法标准化。
地址权威维护三类状态:永久绑定、临时绑定,以及仍可用于临时分配的地址。它要支持创建、查询、删除、清理,还要处理并发请求与变更授权。“一个权威”是逻辑一致性要求,不必等于一台物理主机。RFC 也承认可以分区实现,只是实现和管理成本会显著上升。
这一区分具有现实意义。五台高可用服务器若共享同一份错误状态,只会更快、更稳定地传播错误。冗余提高的是回答能力,不会自动产生正确性,更不会把分配权去中心化。
一致的账本仍可能落后于网线
RFC 1931 并未把权威数据库神化为现场事实。它明确提醒:管理数据库认为可用的地址,实际上可能已经被某台运行中的设备占用。因此分配前应检查网络,早期实现采用 ARP 与 ICMP Echo。
ARP 可以按需发现协议地址与硬件地址之间的映射。收到响应,是“此刻、此链路上有人声称使用该地址”的证据;它不是产权证,也不能证明响应者获得授权。没有响应同样不是永久空闲的证明,分区、丢包或静默设备都可能制造假阴性。
于是出现三个不能互相替代的层次。硬件标识只是报文携带的链路层值;权威数据库表达组织当前承认的绑定;现场探测提供某一时刻的局部运行证据。把三者合并为“身份”,会同时丢失授权、唯一性与时间范围。
机器跨网段移动时,边界更明显。两个地址权威必须相同或彼此通信,硬件标识的作用域也必须足够宽,才能避免不同网段里相同数值指向不同设备。即使如此,一个硬件地址也不能认证持有者或用户。
服务器还能监听其他服务器的通告,发现似乎未协调的应答者,并在进入受限模式前上报。RFC 却没有定义服务器之间裁定“谁是冒牌者”的协议。发现异常与作出治理判断,是两件事;后者仍需通过地址权威或线下管理完成。
生命周期不是完成证明
临时地址必须活得足够久,让安装、命名和其他管理记录完成传播,并能穿过短暂的服务器或网络故障。RFC 提到早期实现使用一小时缓存已足够,但这只是经验值,不是普适租期。到期允许稀缺地址回收,却不能证明客户端已经配置成功。
这一点把地址分配与后续服务明确分开。拿到应答,不等于名称注册成功,不等于启动资源已经分配,不等于密钥或初始口令已经安全送达,也不等于应用可用。协议状态只能证明协议承诺的那一小步。
后来 DHCP 采用了不同的状态机。RFC 1541 让客户端面对多个报价作出显式选择,并以服务器标识和租约组织承诺;RFC 2131 进一步规范流程,也允许客户端在本地检查发现地址冲突后拒绝报价。这是架构上的对照,不是 DRARP 造成 DHCP 的历史因果链。
另一条路径把局部冲突处理缩到单一链路。RFC 3927 允许主机自行选择、探测、声明乃至防御 IPv4 链路本地地址,但该地址不可路由,也不承担持久身份。RFC 5227 将 IPv4 地址冲突检测整理为 ARP Probe 与 Announcement。它们提供的仍是局部、限时证据,无法消除隔离、并发与恶意响应的限制。
规则、运行与现实之间
Heng Lu 的《Running-Code Primacy》为这段历史提供了一把分析尺。数据库是符号化协调记录,真正上网的主机与报文则会反驳过时记录。运行代码的优先性不是取消规则,而是要求规则在执行前接受现场检验。
《Minimum Initial Specification》提醒我们,共同层应严格但尽量小。DRARP 真正需要共享的是:同一请求的答案必须一致,错误必须可区分,临时状态不能在依赖尚未收敛前回收。NIS 表结构、RPC 实现、缓存时长和本地授权政策可以保留为局部选择。
《On Reality Layers》所区分的现实层,也能解释这份 RFC 的持久价值。账本能协调,协议应答能配置,现场探测能否定;三者都有力量,却不是同一种力量。RFC 1931 没把多台服务器误写成多个真相,也没把一个一致账本误写成现实本身。
来源
- RFC 1931 — Dynamic RARP Extensions for Automatic Network Address Acquisition
- RFC Editor — RFC 1931 现行记录
- RFC 903 — A Reverse Address Resolution Protocol
- RFC 826 — An Ethernet Address Resolution Protocol
- RFC 1541 — Dynamic Host Configuration Protocol
- RFC 2131 — Dynamic Host Configuration Protocol
- RFC 3927 — Dynamic Configuration of IPv4 Link-Local Addresses
- RFC 5227 — IPv4 Address Conflict Detection
- Heng Lu — Running-Code Primacy
- Heng Lu — Minimum Initial Specification, Localized Future Decision, and Voluntary Adoption
- Heng Lu — On Reality Layers, Symbolic Power, and Why Clarity Feels So Hostile
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
