摘要

  • 水平分割选择不把路由发回来源邻居;毒性逆转则保留这条通告,却把度量设为 16,明确排除学习者作为返回下一跳。
  • 这份负面证据无需等待超时就能打断两节点互指,但会放大更新报文,也无法阻止三台及以上路由器相互循环引用旧信息。

标准追上了已经运行的程序

1988 年 6 月发布的 RFC 1058 不是 RIP 的出生证。它首先说明,自己要记录一个已经广泛使用、却从未被正式统一描述的协议,并调和各实现之间的细节差异。直接原型是 Berkeley Unix 随附的 routed;更早的血缘来自 Xerox 的 PUP 与 XNS,而距离向量思想在早期 ARPANET 路由中已经出现。

这种来路决定了文本的气质。稳定性规则不是从抽象图形上添出的装饰,而是给运行代码遇到的问题补上的约束。每台路由器只保存目的地、当前度量以及提供最佳路径的邻居;邻居之间交换距离,谁也不持有一份同时更新的全网地图。

RIP 原本就面向规模适中、技术相对同质的自治系统内部。知识模型越简洁,部署越容易;代价是一个数字不会携带自己完整的传播谱系。

同一份消息被误认成两份证据

设 A 通过 B 到达网络 D。B 与 D 的真实连接失效后,仍可能听见 A 宣告 D 可达。若 B 改为选择 A,它采纳的并不是一条独立备份路径,而是自己早先告诉 A 的信息。此时 A 仍指向 B,B 又指向 A。

两边都可以忠实执行本地算法,却共同制造环路。数据包来回转动,通告距离逐步升高。RIP 把这种失败称为“数到无穷”:旧的低度量没有立刻消失,而是经由邻居反复加一,仿佛故障只是让目的地越来越远。

问题的根部不是谁拥有目的地,也不必假设谁在撒谎。邻居只看见数字和发送者,看不见这个数字是否由自己此前的通告派生而来。

16 同时限制故障与网络大小

RIP 把 16 定义为无穷,因此有效路由最多是 15 跳。这个限制常被当成老协议无法扩展的证据,但它还有另一面:无穷越小,错误路由能被逐次加大的次数越少。

RFC 1058 直接写出了取舍。无穷必须大于任何合法路径,否则正常目的地会被误判;它又不能无谓地大,否则数到无穷会持续太久。15 跳不是偶然常数,而是可覆盖范围与故障收敛速度的共同边界。

度量 16 也不是“互联网从此找不到 D”的宣判。它只表示,在这一 RIP 交换、这一接口与这一时刻,通告的路径不可用。另一接口、另一协议或之后的新通告仍可能建立可达性。

沉默挡住回声,毒化撤销旧信念

普通水平分割实行一条来源规则:从哪个邻居或接口学来的路由,就不要再朝那个方向宣告。若 A 的 D 路由来自 B,A 发给 B 的完整更新中省略 D。B 的信息不会绕过 A 再伪装成佐证。

毒性逆转采取更明确的做法。A 仍在发给 B 的更新中列出 D,但把度量写成 16。它表达的是一个窄命题:B 不应经由 A 去 D,因为 A 自己的首选路径正是返回 B。

省略与否定在静态拓扑里看似等价,时间却让二者分开。若 A 只是不再提 D,B 可能继续保留一条“经 A 到 D”的旧记录,直到计时器到期。若 A 主动发送 16,B 一收到就能用负面状态替换旧的正面状态。

因此,毒化并没有否认 A 在所有方向上的路由。它只撤销了循环返回的那个用途。

用报文空间购买更快的撤回

在共享的校园骨干上,一台路由器可能从同一接口学到大量路由。水平分割把它们从返回更新中全部省去;毒性逆转则要逐条列出并标成 16。结果可能是一份主要由“不要走我”组成的大报文。

稳定时,这些条目的新增信息很少。拓扑变化时,它们却能立刻覆盖仍在邻居表中的旧可达记录。多发送的字节,买到的是不必等待超时的撤回。

RFC 1058 因而没有假装存在唯一的无成本答案。实现可以采用普通水平分割、毒性逆转、交给管理员选择,或只在变更后的有限时间内毒化、随后改为省略。度量 16 的协议含义不变;可配置的是负面证据占用多少带宽、保留多久。

两节点镜像被打破,三节点圆环仍在

毒性逆转最确定的能力只覆盖两台路由器。若 A 与 B 相互把对方当作 D 的下一跳,双方都会把返回通告设为 16。旧路径不必慢慢过期,互指关系立即失去支撑。

加入第三台路由器,来源就可能藏在转角之后。A 依赖 B,B 依赖 C,C 又依赖 A。每台设备都没有把路由直接发回自己刚刚学习它的那个邻居,水平分割看到的局部规则都没有被违反;完整圆环仍然成立。度量只能继续向 16 增长。

触发更新试图缩短这段危险期。首选路由一旦变差,路由器不等下一轮周期更新便向邻居发送变化;依赖它的节点接受更差度量,再向后传播。不过,这仍是异步消息瀑布。触发报文可能延迟、与周期报文交错,或撞上另一项本地变化。加速不等于全网原子提交。

删除之前,撤回应当继续可见

RIP 还把路由失效与表项删除分成两个时刻。超时路由先被置为 16,在垃圾回收期内继续出现在更新里,之后才真正从表中消失。立即删除虽节约一个表项,却无法纠正邻居手里仍为正值的副本。

负面信息由此拥有自己的寿命。它最终会消失,但在消失前必须有机会抵达仍保存旧信念的节点。这与毒性逆转属于同一种秩序:先使撤回可观察,再回收本地状态。

地址版本改变,知识边界没有改变

RFC 1812 后来要求 RIP 实现必须具备水平分割,并建议支持毒性逆转;考虑到额外路由开销,它也允许提供关闭开关,并建议限制无限度量返回通告的持续时间。

IPv6 没有消除邻居信息循环引用的问题。RFC 2080 在 RIPng 中保留这一机制,把毒性逆转称为优先方式,同时建议按接口选择无水平分割、普通分割或毒化。前缀格式换了,证据谱系的困难没有换。

RFC 2091 为按需电路设计了带顺序与确认的触发更新,避免依赖周期性全表广播。但它仍要求套用毒性逆转规则。可靠送达只能证明消息到了,不能证明消息不是循环复制的。

RFC 2453 的 RIPv2 成熟规范继续把度量 16、水平分割、毒性逆转、触发传播以及双节点边界放在一起。报文字段的扩充从未把局部保护升级为完整路径知识。

“不可达”究竟证明了什么

一条毒化路由只证明:对这位接收者而言,发送者不应成为那条返回接收者的首选路由之下一跳。它不证明目的地全球消失,不证明所有替代路径都已断开,也不证明邻居有恶意或应承担故障责任。

这份克制正是历史价值所在。RIP 没有传送完整路径,却利用通告方向、终止度量与时间,让一部分来源信息进入决策。它快速解决自己能识别的互信环,也把看不见的更长环写进了协议边界。

来源与证据边界

这些标准能证明算法、要求与版本延续,不能证明当今厂商默认值、部署占比、某个网络的实际收敛时间或环路背后的主观意图。Trigger RIP 只适用于 RFC 2091 的按需电路语境;RIPng 偏好毒化,也不等于每个接口都已启用。