摘要

  • RFC 2333 明确把 NHRP 放在路由决策之后:它解析适合的 NBMA 下一跳,但不替代路由协议,也不执行端到端可达测试。
  • 是否值得建立捷径,取决于拓扑、建链成本、应用需求、NHRP 覆盖范围和环路安全;“适用”只代表值得尝试,不代表捷径已经存在。
  • 登记成功、权威解析答复和缓存命中分别记录有限的控制面状态,必须结合来源、策略、Holding Time、刷新与清除信息理解。
  • 在 ATM 上,获得地址之后仍可能需要建立虚电路;建链、双向转发、远端服务和应用结果都有各自的证明责任。
  • 运维判断应按路由、适用性、映射、连接、数据面、服务和应用逐层推进,不能用前一层的“绿色”替后一层结案。

最像成功的那条记录,只回答了一个问题

NHRP 的界面状态很容易诱导过度解释。

当一条缓存记录显示目标 IP、下一跳 NBMA 地址、权威标志和剩余时间时,人们自然会把它概括为“下一跳已经通了”。但 RFC 2333 的问题不是“这一行字段齐不齐”,而是“NHRP 在什么环境下适合被使用”。

适用性说明先划定功能,再讨论机制。

网络可能非常适合使用 NHRP,却还没有任何客户端发起解析。客户端可能拿到一份正确映射,却没有建立底层连接。虚电路可能成功建立,IP 转发仍可能受到过滤、回程或 MTU 问题影响。主机可能在网络层响应,而应用进程已经停止。

因此,缓存记录不是缩小版的端到端结果。它是下一步行动的输入。

路由先说“往哪里走”

RFC 2333 直接指出,NHRP 不是路由协议。

源站先通过普通网络层路由确定到达目的地的下一跳。如果这条路径经过 NBMA 接口,且本地没有可用映射,源站才可能发起 NHRP Resolution Request。目的地位于同一个逻辑 NBMA 网络时,答复可以给出目的站自身地址;目的地在外部时,答复给出当前出口路由器的 NBMA 地址。

当 NHRP 借助动态路由工作时,返回的出口反映的是路由系统已经作出的选择。

这并不证明该出口在所有维度上最优。原有路径跳数较少,不等于时延最低、拥塞最小、成本最低或故障域最独立。NHRP 也不为路由算法的政策和数据来源背书。

更重要的是,解析结果属于某个路由时期。度量或拓扑快速变化时,捷径可能很快过时。RFC 2333 还警告:在某些路由器到路由器的场景中,如果底层路由丢失抑制环路所需的信息,NHRP 捷径可能形成持续转发环路。

映射继承了路由决策,却不能把那项决策永久冻结。

捷径不是默认真理,而是一笔成本账

经典 IP over ATM 以 LIS 为边界。

同一 LIS 内的站点可以通过 ATMARP 完成 IP 到 ATM 地址解析。不同 LIS 的站点即使共享一张物理 ATM 网络,通常也要经过 IP 路由器。NHRP 的价值在于越过这个逻辑限制:它可以解析跨 LIS 的目标或出口地址,让数据在同一逻辑 NBMA 网络中绕过部分中间路由器。

这不代表每个流都应建立捷径。

面向连接的底层需要信令、接口资源和持续状态。一次很短、没有特殊 QoS 要求的通信,可能在捷径建好之前就结束。捷径成本可以是时间、设备负担,也可以是实际费用。RFC 2333 因而把决定放在应用需求与运营策略附近。

“本环境适合 NHRP”回答的是机制是否合理;“此刻为这条流建立捷径”还需要一次具体决策。

谁可以发起,决定了网络会长出多少状态

普通 IP 包可能在捷径建立前已经经过多个节点。

如果沿途每个理解 NHRP 的节点都为同一流量发起解析,网络会形成多条重复捷径。RFC 2333 建议把发起权限制给三类主体:有 NBMA 接口的源主机、路径上第一个可通过 NBMA 接口到达其下一跳的路由器,或者流量必须经过的策略路由器。

这是一条状态治理规则。

它不保证发起者一定成功,而是界定谁有资格让底层为某段流量承担新的连接与缓存成本。发起权如果没有边界,一项优化就可能成为状态放大器。

路由器到路由器,是最清楚的停止线

RFC 2333 把 host-host、host-router 和 router-host 列入基本适用场景。router-router 则暴露了更深的限制。

当路由协议的路径信息在自治系统边界等位置发生变化时,基本 NHRP 可能缺少抑制环路所需的上下文。适用性说明只为一种更安全的特例开门:目的主机稳定地直接邻接出口路由器的非 NBMA 接口。

Q bit 表示请求者是路由器。如果目的地不满足稳定直连条件,出口路由器可以返回 NAK,让数据继续走普通路由路径。

这份否定答复不是可达性失败。它拒绝的是一项尚未证明安全的优化。

把 NAK 直接计入“网络不可达”,会抹去协议最重要的保护动作:捷径不成立时,保留权威清晰的原路径。

登记 ACK 只证明服务器接受了映射

RFC 2332 允许 NHRP Client 向 serving NHS 登记自己的协议地址与 NBMA 地址。

服务器收到 Registration Request 后要进行错误检查和策略判断。它可能因为不能服务该地址、资源不足、管理策略禁止或唯一性冲突而返回 NAK。

成功的 Registration Reply 有明确价值:NHS 在当时条件下接受了这份映射信息。

它没有探测远端应用,也没有自动建立端到端虚电路。它不能证明所有 NHS 已经同步,更不能保证路由仍会把请求送到相同的逻辑域。

登记还必须刷新。规范建议客户端按 Holding Time 的一定比例重发,以便即使偶尔丢包也能维持条目。需要持续续期的状态,本身就承认其权威会随时间衰减。

ACK 是一次受理收据,不是存活证明。

“权威答复”中的权威有明确对象

NHRP 区分 authoritative 与 non-authoritative resolution information。

客户端可以要求由服务于目标的 NHS 给出权威答复。中转 NHS 在被允许时,也可能用自己的缓存返回非权威信息。这个区别帮助接收者判断答复来自谁、与目标有什么服务关系。

但权威范围仍然只是地址映射。

即使答复来自正确的 serving NHS,它也不能代替 ATM 信令判断资源是否充足,不能证明 closed user group 或地址过滤允许直接通信,不能确认回程,不能检查远端服务端口。

“权威”不是“全知”。它表示该服务器有资格回答这一项映射,而不是有资格替后续所有层宣告成功。

一张缓存表,实际混合了多种来源

RFC 2332 没有规定缓存只能从一种路径产生。

NHS 可以从登记、Resolution Request/Reply、预配置表、ARP 或规范之外的机制获得映射。NHC 也可以从解析答复、人工配置或其他机制填充本地缓存。

如果界面只展示“存在”,这些来源差异会全部消失。

RFC 2677 提供了更完整的观察字段:缓存类型、用途、Holding Time 是否有效、剩余时间、协商 MTU 等。学习得到的条目在倒计时归零后应被删除;人工配置条目的 Holding Time 则可能没有定义,因为它可以由非易失配置支撑。

相同的地址对因此可能代表完全不同的证据链。刚收到的权威答复、SCSP 同步来的副本、人工写入的静态项和缓存的负面答复,不应被同一个“绿色”覆盖。

缓存表保存声明,不直接观察数据包。

多台服务器一致,不等于外部现实仍然一致

SCSP 解决的是服务器之间的缓存同步问题。RFC 2335 把这套机制用于分布式 NHRP 服务。

多个 NHS 共享信息,可以让请求落到不同服务器时仍获得相对一致的结果。这对可扩展性和运营稳定性有价值。

但是,同步没有产生新的端点观测。

如果源信息已经陈旧,复制可以让更多服务器一致地陈旧。服务器之间的共识证明复制成功,不证明外部主机仍在原地址,也不证明电路和转发有效。

RFC 2332 因此还定义 Purge Request 来使缓存失效,并规定环路、协议地址不可达、无效答复、认证失败、跳数超限等错误。控制面状态天然需要拒绝、清除和重建。

地址解析之后,底层才开始回答自己的问题

RFC 2332 对面向连接与无连接 NBMA 的区别写得很清楚。

在 SMDS 一类无连接环境中,获得地址后可以开始发送。在 ATM 一类面向连接环境中,源站可能还要建立具有所需带宽的连接。

所以,“resolved”从来不等于“connected”。

建链可能因为资源、策略或远端接口而失败。连接可能建立,却没有正确的 IP 转发或回程。数据包可能双向通过,而应用认证、事务或业务语义仍然失败。

这些事件由不同组件观察,必须分别取证。

普通路由路径是连续性,不是落后的失败模式

当某个数据包触发解析时,源站可以丢弃它、暂存它,或继续沿路由路径发送。RFC 2332 推荐把沿原路径转发作为默认选择,因为解析期间数据仍可能到达。

如果 NHRP Request 遇到不支持 NHRP 的路由器,请求可能被静默丢弃。捷径无法形成,但逐跳连接仍可维持。

这说明 NHRP 的目标是优化路径,不是取代基本连通性。

NHRP 失败而业务正常,与 NHRP 状态正常而业务失败,都是合理且必须被监控系统表达的组合。