摘要

  • Demand RIP 用带确认的触发式交换取代 X.25、ISDN 广域网上的周期广播,让空闲电路能够关闭;由触发响应学到的路由通常被长期保留,不因日常沉默而超时。
  • 电路管理器在实际建连失败时可以报告下一跳不可达,路由随后才进入老化、抑制与删除。确认包证明更新或分片已收到,却不证明路由内容为真,更不证明用户流量成功。
  • RFC 1581 只报告一个已完成实现,并且新机制是在 X.25 与 ISDN 上同自身互测。RFC 1264 提醒我们:单一实现、单一环境的运行记录不是独立多厂商互通的凭证。

周期广播买来了什么,又花掉了什么

RFC 1582 是与 RFC 1581 配套的 Standards Track 规范,其官方记录把时间定在 1994 年 2 月。它面对的是连接导向的公用数据网:有数据时建立虚电路,流量消失后释放。一次用户通信可能很短,下一次可能很久以后才来。

普通 RIP 的周期更新破坏了这种经济性。路由器即使没有新信息,也要反复向每个下一跳发送路由状态。广域网没有局域网那样的一次广播,所谓“广播”其实是逐个地址发送。RFC 算了一笔账:N 台路由器每轮可能产生 N × (N - 1) 个更新,分布在 N × (N - 1) / 2 对连接上。更现实的限制是,一块接口能够同时建立的通道可能少于已知邻居;文档举出的 ISDN 基本速率接口只有两个同时呼叫通道。

降低更新频率能省钱,却会拖慢变化传播;保持频率又让电路难以空闲。Demand RIP 没有在两者之间简单取平均数。它改写了证据制度:不再周期性证明“我还活着”,而是在变化发生时可靠地送达变化。

安静不再等于证据过期

RFC 1581 是配套的协议分析;RFC Editor 记录将它标为 Informational。它概括了新机制:按需广域电路只发送触发更新,更新会重传到收到确认,而接收方不会按普通周期规则让其中的信息自然过期。局域网与固定点到点链路仍然使用普通 RIP 的周期更新,沉默规则并没有扩展到这些固定链路。

RFC 1582 把差异写进路由数据库。局域网上从周期响应学到的条目是临时的,没有刷新就会老化。广域网上从触发响应学到的条目则通常是“永久”的,日常运行中不因沉默而超时。

这里的永久不是永真。它表示:没有出现协议认可的反证之前,继续沿用最后一次接受的状态。完整更新可以把一条路由标成不可达,也可以通过缺少原有条目来撤回它;接口可以下降;连续重传可以得不到确认;真正承载报文时,电路管理器可能无法建立到下一跳的呼叫。

因此,“三十秒没听见邻居”与“尝试呼叫但失败”是两种完全不同的记录。前者在这个设计里是预期沉默,后者才可能启动失效流程。系统没有消灭不确定性,只是把判断权从周期计时器移到了事件与组件边界。

电路管理器获得了一句能够改变路由的话

RFC 1582 画出的协议栈把 IP、IPX 及其路由应用放在电路管理器之上。电路管理器保存逻辑下一跳到 X.25 或 ISDN 物理地址的映射;需要发送用户数据或路由更新、而当前没有虚电路时,它负责建连;空闲一段时间后,它也可以断开。

当正常转发触发的建连失败,电路管理器向路由应用发送 circuit down。经由该下一跳的永久条目于是转成临时状态,开始老化;之后被通告为不可达,经历 hold-down,最后才删除。若电路及时恢复,条目可以重新转回永久;若已经过期,则必须重新请求完整数据库。

circuit up 也不是对旧路由表的背书。它只说明电路管理器按自己的恢复方法重新联系上对端。正因如此,恢复之后还要重新交换完整信息。物理呼叫成功、路由存在、转发表选用、数据包通过和应用正常,是五张不同的收据。

文档还诚实地留下一个空白:电路管理器究竟怎样恢复连接,不在规范范围内。通道耗尽、地址映射错误、远端拒绝、链路故障都可能在路由应用那里表现为同一个 down 信号。信号可以驱动安全动作,却不能独自解释原因。

收到更新,不等于收到真相

触发更新减少重复流量,也让每一次变化更不能丢。虚电路资源不足、发送队列溢出、电路被抢占或帧损坏,都可能让一个 UDP 路由报文消失。既然下一轮周期广播不再自动补课,RFC 1582 增加了请求、响应、确认和重传。

大更新会拆成多个分片。每个分片分别确认,接收方只有在所有分片到齐后才更新数据库。如果重组时限结束仍不完整,就丢弃这组分片,再请求完整更新;新序列号到来时,不完整的旧组也必须退出。

这套机制给出了严格但有限的证明。确认说明某个响应分片抵达;完整重组说明接收方拿到了一组可应用的更新;序列号区分前后版本。它们不证明被通告的网络真实可达,不证明路由已经进入转发表,不证明某个用户报文随后跨过电路,也不证明服务可用。

安全列表同样有边界。配置同时决定向哪些逻辑邻居发送更新、接受哪些来源;列表之外的报文必须丢弃。RIP-2 还可以提供额外认证。但“获准说话”仍不等于“所说内容必然正确”。身份、权限、传输完整性与运行结果必须分别记录。

省下线路费用,增加了状态债务

永久条目不能靠遗忘修复。RFC 1582 要求保留所有替代路由;若内存不足,只保留有限选择,就必须记得自己丢弃过什么,并在剩余选择消失前主动重新获取。周期刷新原本不断重建的知识,现在要么留在内存中,要么通过明确请求找回来。

这就是设计真正的交换。少打电话,意味着更长久地相信本地状态;更长久的状态,又要求可靠撤回、确认重传、分片原子性、电路管理器协作与重启同步。电信账单下降了,状态管理的责任上升了。

RFC 1582 特别讨论了电路管理器和路由应用拥有不同生命周期的情况。在紧密结合的产品里,它们近似同一程序;在 Unix 主机上,一个可能在内核,一个是可独立崩溃的进程;也可能有单独的接口卡。只要两者能分别死亡和重启,就必须有 keepalive 与状态重同步。一个还活着的电路管理器不能证明路由应用仍在,一个仍运行的路由进程也不能证明底层管理器保存了同一时代的状态。

一个实现,是窄而真实的证据

RFC 1581 没有把实验写成胜利宣言。它说当时据信只有一个完成的实现。Spider Systems 产品支持 IP RIP-1、IPX RIP 与 IPX SAP,尚不支持 RIP-2;新机制在 X.25 和 ISDN 上与自身互测,并在以太局域网上同普通 RIP 实现共存。另有两个仅支持 Novell 的实现仍在开发。

这比纸面规范多,也比多厂商成熟部署少。它证明代码存在,证明两种广域网环境中完成过自兼容运行;却没有证明另一支独立代码能够理解同一分片、计时器、重启与 down/up 边界。

RFC 1264 的记录解释了为什么这种区分重要。路由协议是分布式、实时算法;一个实现能在一个环境中工作,不保证它在另一环境或多厂商组合中工作。独立实现、全部功能测试与安全机制验证,是彼此独立的证据要求。

“已实现”不应被改写为“已经互通”,“同自身测试”也不该被贬成“毫无证据”。历史写作的责任,就是保留每张收据原来的尺寸。

后来的改变仍保留了同一道边界

1997 年 1 月的 RFC 2091 及其官方记录描述了相对 RFC 1582 的效率改进:初次或恢复时完成全量交换,此后只发送变化;减少内存和路由流量;并通过不用旧式分片,取消原来的 255 分片上限。

但核心责任没有消失。触发响应学到的路由仍通常长期保留;电路管理器仍提供 down/up 信号;更新仍需确认与重传;长时间没有确认仍可成为把下一跳标成不可达的有界负面证据;重启或恢复仍需要 flush 与完整重建。

后来的文档没有让出版物自动变成部署,也没有让确认包变成路径事实。它只是展示了同一个运行问题如何被重新实现。线路可以被设计成安静,路由可以被设计成在安静中保留;但任何一层都不应借此声称它已经证明了下一层的结果。

来源