摘要
- RFC 1433 允许路由项携带 ARP Helper Address,使主机或路由器能够尝试解析同一链路服务上、却属于另一 IP 网络的下一跳。
- 帮助者本身必须能用本地方法解析,不能递归调用 Directed ARP;请求还要经过目标路由、同一物理接口以及防洪泛、防环路过滤。
- 得到链路地址也不是路径承诺:底层过滤可以不对称、也可以不具传递性,使第三方下一跳“有地址却走不通”。
一条链路上的多张 IP 地图
RFC 1433 面对的不是后来教科书里那种“一条局域网对应一个 IP 子网”的整齐世界。SMDS 之类的大型公共数据服务可以在同一个链路层网络上承载多个分别管理的 IP 网络。一台路由器同时在其中两个网络拥有地址,就能观察到它们实际上共用同一底层服务。
从路由计算看,这个观察能带来捷径。若发送者与目标下一跳都在同一链路层服务上,数据包似乎不必先绕到双重寻址的路由器,再由它送回同一底层网络。路由器可以发布一个更直接的下一跳,甚至通过 ICMP Redirect 把这个信息告诉主机。
但收到信息的节点只得到了一半答案。它知道下一跳的 IP 地址和应使用的物理接口,却不知道链路帧应发往哪个地址。节点的本地地址解析规则属于它所在的 IP 网络;“外来”IP 网络可能使用另一组 ARP 请求地址,也可能不用 ARP,而依靠管理表或别的解析过程。
因此,路由表中的一行可以语法正确、代价更低,却无法执行。路由选择回答“下一步交给哪个 IP 地址”;地址解析回答“底层帧送到哪里”。RFC 1433 的价值,在于它没有把两个答案都包装成模糊的“可达”。
把依赖写进路由项
Directed ARP 沿用普通 ARP 报文格式。它新增的关键状态不是另一种广播,而是与路由项绑定的 ARP Helper Address。若该字段为空,节点已经知道如何在本地解析下一跳;若不为空,它指向那个宣告“此外来地址与本接口共享链路层网络”的路由器。
帮助地址保存了责任来源。路由信息不仅说“去那里”,还说明“若你不知道怎样得到链路地址,就向当初提供这条信息的路由器询问”。通过距离向量协议学到的外来下一跳,通常以信息发布者为帮助者;通过 Redirect 学到时,发送 Redirect 的当前路由器承担同一角色,除非接收者已经能自行解析。
解析过程先查本地表。若目标已经缓存,直接返回。若没有目标且帮助字段为空,就运行本地解析。若帮助字段存在,节点先用本地方法解析帮助者,再把以外来 IP 为目标的 ARP Request 定向送往帮助者的链路地址,等待回答。没有回答就返回失败,原始 IP 包无法继续下发。
这个过程有一道重要的终止线:不得再用 Directed ARP 去解析 ARP Helper。帮助者必须在本地可解析范围内。否则 A 的路由可以依赖 B,B 再依赖 C,C 又依赖另一个节点,解析链会变成隐藏的递归路由,环路与失败责任都难以识别。
转发问题与代答问题
收到一个目标不是自己的 ARP Request,主机会静默丢弃。路由器也不能仅凭“我知道一些路由”就转发。目标地址必须匹配某个允许的下一跳,或匹配一条直接可达的目的路由;那条路由还必须使用请求进入时的同一物理接口。若路由指向别的接口,把请求反送回入口没有正当依据。
通过检查后,路由器仍有两种不同动作。若目标 IP 网络采用 ARP,它把请求送往该网络使用的链路层请求地址,让目标或相应参与者回答。若目标网络采用非 ARP 的本地解析,路由器先用那个过程取得映射,再以“published ARP”方式代表目标回送回答。
两个回答看起来都能填入 ARP 缓存,证据来源却不同。前者说明请求经帮助者抵达某个回答者;后者说明帮助者把自身掌握的本地映射翻译成 ARP。只保存 IP 与链路地址,就会抹掉究竟是谁回答、依据哪套系统、何时观察到。
回答也没有承担更多权力。它不证明设备的组织身份,不证明发布者有权决定路由,不证明下一跳会转发目标数据,更不证明回程方向开放。它只在特定接口与时刻提供一个地址关联。
未回答的问题也会消耗网络
地址发现往往具有广播或多播性质。允许路由器继续转发这类请求,就可能把一个问题放大为风暴。RFC 1433 要求 Directed ARP 路由器过滤传播范围,以约束故障主机或路由器制造的 ARP 洪泛,并终止路由不稳定或错误手工配置造成的环路。
文献没有假装存在一组适用于所有链路的固定数值。它提出可组合的控制:在短时间内限制相同源 IP 与目标 IP 组合的重复请求;不要把请求再发往承载入站帧的同一个链路目标地址;利用 IP 层与链路层之间的广播标志,拒绝继续转发以链路广播形式收到的请求。
这些过滤分别约束频率、简单反射和广播扩散。它们都不判断映射是否真实。治理对象是“一个尚未得到答案的问题能占用多少共享资源”。
时间与计数仍由管理者选择。第一次请求可能丢失,合法主机因而会重试。限制过严,会把一次丢包变成长期沉默;限制过松,会让环路继续。完整记录应保存请求对、入站目标类型、物理接口、计数窗口、过滤决定,以及随后是否收到回答。
执行条件消失,路由也应失效
RFC 1433 没让路由脱离其执行依赖而永久存在。主机若因帮助者缓存过期等原因无法再解析 Redirect 所指的外来下一跳,就必须清除关联路由项。路由不是抽象真理;支撑它的地址解析链断裂后,它不应继续吸走流量。
兼容性问题同样说明这一点。支持 Directed ARP 的路由器可能把外来下一跳发布给不支持该机制的邻居。后者能读懂 next-hop 字段,却无法完成底层解析。发布者可能需要同时提供一个传统下一跳,例如以自身为下一跳并赋予较高代价;若路由关系由管理员配置,也可以明确禁止发布此外来值。
同一个路由值对两个接收者可能有不同含义:一个带着帮助状态和执行程序,另一个只有地址字符串。协议能力不是部署后的附注,而是这条路由是否可用的组成部分。
第三方下一跳削弱了撤回责任
动态路由的复杂性之一,是发布者必须为信息变化负责。它发布的路线失效时,应撤回或更新;信息来源不可用时,依赖状态也要失效。第三方下一跳改变了这种观察关系:发布者建议两个别的节点直接通信,自己可能不再位于数据路径上,因而看不到那段链路何时失败。
RFC 1433 的 SMDS 过滤例子把风险写得很具体。策略可以允许 R1 与 R2 通信,也允许 R2 与 R3 通信,却禁止 R1 与 R3 直接通信。R2 对 R3 的认识完全真实,仍可能向 R1 发布一个底层策略不允许的直接下一跳。共同邻居不会自动产生传递性。
过滤还可能不对称:R3 能向 R1 发包,R1 却不能回送。一个方向看到帧、收到回答,不能证明反方向。把三个节点画在同一条线上,只是拓扑简图;真实的许可矩阵按节点对和方向分别存在。
测试必须真正触碰争议链路
文献建议在安装路由或第一次使用前,直接向下一跳的链路层地址发送 ICMP echo。这里“直接”不是修辞。若只向下一跳的 IP 地址发普通 echo,路由系统可能选用另一条路径,成功的回应就无法证明本地邻接。
测试要经过它声称验证的依赖。即使如此,一次成功也只说明特定时刻的一次直接交换。它不证明所有流量类别都放行,不证明对称,不证明下一跳会继续转发,也不证明未来状态。后续变化的探测属于动态路由系统,RFC 1433 明确没有包办。
因此,专业证据链至少包括:路由与发布者、帮助地址、帮助者的本地解析、定向请求、回答者与映射、接口、过滤结果、直接邻接探测、首个数据帧和回程观察。任何一步都不能替代下一步。
来源与证据边界
RFC 1433 定义实验性过程;RFC 826 提供 ARP 基础;RFC 1209 提供 SMDS 环境;RFC 1267 与 RFC 1247 给出当时的 BGP-3 和 OSPF 语境;RFC 1122 与 RFC 792 提供主机和 ICMP 约束。
这些来源不证明当前部署、厂商行为、攻击发生率或现代最佳实践。RFC 1433 的安全章节甚至只写明未讨论安全问题。它留下的是更窄也更持久的认识:控制平面可以指出一个候选执行者,却不能替链路层承诺解析、许可、对称与持续传输。
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
