摘要
- RFC 1868 处理的是 Proxy ARP 留下的短暂错误:拨号主机从一台通信服务器离线,又经另一台上线时,局域网邻居仍可能保存旧服务器的硬件地址。
- UNARP 借用未经请求的 ARP Reply,把硬件地址长度设为零,请支持该扩展的节点删除旧映射;不支持的节点应拒绝这种缩短报文,操作者也可以关闭扩展。
- 广播已发送、某节点已收到、解析器已接受、缓存已删除、新映射已学到以及数据已转发,是六类不同事实。UNARP 不为后五项签发回执。
号码没有变,接入门却换了
一名远程用户拨入共享调制解调器池。对办公室局域网上的 Host A 来说,这个用户的 IP 地址像是与自己同网;实际上,用户藏在通信服务器之后。Host A 发出 ARP 请求时,CS1 代用户回复自己的硬件地址。此后,Host A 把发往该 IP 的帧交给 CS1 转送。
RFC 1027 记录了这种 Proxy ARP 兼容办法。它让不懂子网的旧主机继续工作,不必看到网关后的真实拓扑。代价是,本地主机把路径事实压缩成一条缓存:这个 IP,当前交给这个硬件地址。
用户随后断线,并在缓存老化前通过 CS2 重拨。IP 地址保持不变,代答者已经改变。Host A 不知道这个变化,仍把帧送往 CS1。旧记录在语法上完好,在时间上却已失真。
1995 年 11 月以 Experimental 身份发布的 RFC 1868,没有重写路由,也没有另造一种报文格式。它只增加了一个否定动作:CS1 失去远程用户后,广播通知局域网,旧映射应当作废。
ARP 保存的是每个节点自己的判断
RFC 826 的 ARP 把协议地址与本地硬件地址联系起来。请求提出问题,回复携带发送者映射;接收方可以把这组信息合入自己的表中,以便下次直接发送。
这里没有一台统一的 ARP 登记服务器,也没有让所有节点同时提交版本的事务。每台主机只维护自己需要的邻居认知。这种局部性减少了中心依赖,也使同一时刻的不同节点可能相信不同年代的映射。
RFC 1122 因而要求主机具备某种缓存失效机制,并列出可组合的四类办法:定时老化、单播轮询、链路层故障建议,以及高层发现投递问题后向链路层给出的建议。Proxy ARP 让失效更迫切,因为缓存中的硬件地址属于中间服务器,不一定属于 IP 使用者本身。
四种办法留下的证据并不相同。超时只说明本地信任期结束;轮询失败说明若干次询问无答;链路层建议说明本地发送遇到问题;高层建议说明更上层看到了失败。它们都不自动证明远程主机已经从 CS1 移到 CS2。
一份没有硬件答案的 Reply
UNARP 沿用 ARP Reply 的 opcode 2,却把硬件地址长度设为零。源协议地址填离网主机的 IP,目标协议地址填 255.255.255.255;因为长度为零,源和目标硬件地址字段都不存在。链路层头部之外,整个报文只有十六字节。
支持 RFC 1868 的接收方看到它后,应删除与源 IP 对应的 ARP 缓存项。发送服务器甚至不必保存“自己是否曾代答”的状态;只要远程主机断线,就可以发 UNARP。能够优雅离开局域网的普通主机也可以为自己发送。
这种宽松不是疏忽。多删一次,通常只是迫使下一次通信重新解析;不删,则会继续把帧交给已经不掌握路径的服务器。设计把“先遗忘”置于“假装连续”之前。
但删掉旧映射并不会生成新映射。Host A 即使执行了 UNARP,也只知道不再使用某个旧答案。它仍须发出新的 ARP 请求、收到新的答复,再尝试传输。旧认知消失,不等于新路径存在。
兼容期里的沉默没有单一含义
RFC 1868 明确预期支持与不支持 UNARP 的节点共处。硬件地址长度为零就是识别界线。不了解扩展的常规实现应把缩短的 Reply 当作无效报文拒绝,而不是把全零硬件地址写入缓存。
这个退化方式较安全,却也让广播的证明能力止步于发送端。如果 Host A 没有回应,CS1 无法区分:它已收包并删除、已收包但拒绝、根本没收包、没有相应缓存,或扩展已被关闭。协议没有收集逐节点确认。
文件还建议实现提供配置开关,以防某些厂商的 ARP 对缩短格式反应异常。也就是说,本地拒绝是设计的一部分。RFC 可以定义一种共同消息,却不能靠发布就让所有运行代码采用同一种解释。
文中“有理由期待广泛支持”也是预期,不是部署测量。Experimental 状态与后来标准目录中的记录能证明文档存在,不能替代实现普查。
后来的 UNARP 增加了重复与条件
1997 年的 RFC 2176 在 MAPOS 上定义了相关机制。它使用专门的操作码,保留真实硬件地址,并要求节点上线时以三十秒间隔广播三次。接收方只有在报文中的硬件地址与缓存值不同时,才删除相应 IP 项。
这些改变收紧了动作含义。三次发送降低单帧丢失造成旧状态残留的可能;硬件比较避免删除已经指向当前节点的映射。但三次发送仍不是三份确认。RFC 2176 另外要求缓存老化,并在链路丢失时立即清除相关条目,说明 UNARP 仍只是多种失效信号之一。
RFC 3790 后来把 RFC 1868 归为依赖 IPv4、用于删除链路上 ARP 缓存项的扩展。这个分类说明设计在历史记录中的位置,不说明它被谁部署或效果如何。
新声明也不能倒推全部结果
RFC 5227 后来把 ARP Request 中并存的两种声音说得更明白:发送者字段在断言一组映射,目标字段在询问另一组映射。ARP Probe 表面上询问地址是否有人使用,同时暗示自己准备使用;ARP Announcement 则宣告“我现在正在使用这个地址”。
UNARP 说的是相反方向:请停止相信旧映射。无论正面还是负面声明,都只是接收方的链路本地输入。接收方要验证格式、对照自身状态并决定动作。它们都不能单独证明全网一致、地址绝无冲突、后续帧已到目的地,或应用已经完成工作。
这段历史不要求 ARP 出现一个中央裁判。它要求给分散状态的每次变化取一个诚实名称。“离网广播已发出”“某观察点看见帧”“某节点删除条目”“新映射已学习”“首个数据包已成功”都可以核验;没有逐处观测时,“网络已经忘记”只是把愿望写成了事实。
来源与证据界限
RFC 826、RFC 1027 与 RFC 1122 提供报文、Proxy ARP 和缓存失效基础;RFC 1868 定义 Experimental 离网消息;RFC 2176 给出后来的链路专用变体;RFC 3790 记录 IPv4 依赖;RFC 5227 解释后来的探测与宣告语义。这些原始资料能证明规范与当时陈述,不能证明今日部署率、普遍支持、某个产品合规、某次真实事故、恶意行为或任何网络上的最终交付。
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
