第34篇:距离矢量 vs 链路状态:RIP 与 OSPF 的根本差异

关键词:距离矢量、链路状态、RIP、OSPF、路由算法、收敛、LSA、Dijkstra


一、引言

在第33篇中,我们了解到动态路由协议分为 IGP 和 EGP 两大类。在 IGP 中,又有两种截然不同的设计理念:距离矢量(Distance Vector)和链路状态(Link State)。RIP 是距离矢量协议的代表,OSPF 是链路状态协议的代表。理解这两类协议在算法原理上的根本差异,是掌握动态路由的核心。

二、核心概念

2.1 距离矢量协议(RIP)

距离矢量协议只告诉邻居"我到某个目的的距离和方向",不告诉邻居网络的整体拓扑。每台路由器只知道:

  • 到达每个目的网络的跳数(距离)
  • 从哪个接口发出(矢量/方向)

这就像你只告诉邻居"去北京走这条路,还有 3 座城市",却不告诉邻居沿途有哪些城市。

2.2 链路状态协议(OSPF)

链路状态协议告诉所有路由器"我连接了哪些网络,每条链路的成本是多少"。每台路由器都会收集全网所有链路的完整信息,形成拓扑数据库,然后自己独立计算最短路径。

这就像给每个邻居发一张完整的"全国地图",每个人自己规划路线。

2.3 核心差异对比

维度 距离矢量(RIP) 链路状态(OSPF)
交换的信息 路由表(目的 + 跳数) 链路状态(接口 + 邻居 + Cost)
计算方式 贝尔曼-福特(Bellman-Ford) 迪杰斯特拉(Dijkstra SPF)
拓扑感知 无(只知道邻居告诉的) 有(知道全网拓扑)
收敛速度 慢(逐跳传播) 快(SPF 独立计算)
环路风险 高(需要额外防环机制) 低(SPF 天然无环)
资源消耗 低(只传路由表) 高(传全网拓扑 + SPF 计算)
适用规模 小(≤15 跳) 大(无硬性限制)

三、技术细节

3.1 RIP 的工作方式

RIP 的工作方式 - 图示

3.2 OSPF 的工作方式

OSPF 的工作方式 - 图示

3.3 RIP 的典型问题

问题 说明 影响
计数到无穷(Counting to Infinity) 故障信息传播慢,跳数逐跳增长到 16 收敛极慢
慢收敛 更新周期 30 秒,故障感知延迟 环路窗口期长
路由回灌 路由器把从某邻居学到的路由又宣告回该邻居 形成环路
15 跳限制 最大跳数 15,16 表示不可达 限制网络规模

名词澄清:"路由回灌"指路由器把从某邻居学到的路由又宣告回该邻居,是产生环路和计数到无穷的根源之一;RIP 依赖水平分割(Split Horizon,禁止向学习来源回灌)、毒性逆转、触发更新和 Hold-Down 四种机制来压制这类问题(详见下篇)。

3.4 OSPF 的优势

优势 说明
SPF 算法天然无环 最短路径树不存在环路
快速收敛 LSA 洪泛 + SPF 重算(秒级)
无跳数限制 通过 Cost 累加,理论上无上限
区域划分 支持多区域,LSA 泛洪范围受限
增量更新 只有拓扑变化才发送 LSA

3.5 OSPF 的代价

代价 说明
内存消耗 需要存储完整的 LSDB
CPU 消耗 SPF 计算占用 CPU
带宽消耗 LSA 洪泛占用链路带宽
配置复杂度 区域设计、Router ID、认证等

四、实战配置与故障案例

4.1 案例一:RIP 计数到无穷的复现

拓扑:R1 — R2 — R3,R1 直连 10.1.1.0/24。

前置条件:关闭水平分割(华为 RIP 默认启用水平分割,若不关闭,R3 不会将从 R2 学到的路由再通告回 R2,计数到无穷不会发生)。


# 初始状态:正常收敛后
# R1: 直连 10.1.1.0/24(metric=0)
# R2: 学到 10.1.1.0/24 via R1, metric=1
# R3: 学到 10.1.1.0/24 via R2, metric=2

# 模拟 R1-R2 链路断开
[R2] interface GigabitEthernet 0/0/1
[R2-GigabitEthernet0/0/1] shutdown

# RIP 的故障传播过程(关闭水平分割、无毒化反转时的经典场景):
# 核心机制:路由回灌(route flip-flap),而非简单的"失效信息传播慢":
#
# T0: R2 接口 shutdown,出接口 down → R2 立即将 10.1.1.0/24 标记为不可达
#     R2 触发 triggered update,向 R3 通告 10.1.1.0/24 metric=16
#
# T1: R3 的 30s 更新周期恰在此刻到期(R3 尚未收到 T0 的 metric=16 通告)
#     R3 正常发送周期更新,其中仍包含 10.1.1.0/24(metric=2,下一跳 R2)
#     → 因水平分割已关闭,R3 将该路由通告回 R2(路由回灌)
#
# T2: R2 收到 R3 的更新,此时 R2 路由表中该路由已删除
#     R2 认为"经 R3 可达",重新加入路由表(metric=3),触发更新通告 R3
#
# T3: R3 收到 metric=3,但当前表中仍有 metric=2(尚未超时)
#     按 RIP 路由选择规则(只接受更优),R3 暂不更新
#     但当 R2 的 metric=16 通告到达 R3 后,R3 删除该路由
#     此后 R3 再收到 R2 的 metric=3 时,因表中无此路由,接受并加入(metric=3)
#
# T4+: 双方开始互相"续命":
#     R2 metric=4 → 通告 R3 → R3 metric=4 → 通告 R2 → …
#     每轮 30s metric 递增 1,直到 metric=16 → 双方同时判定不可达
#
# 这就是"计数到无穷"(Count-to-Infinity)
#
# 时间窗口示意:
#   R2:  [shutdown] ──删除路由──→ 触发update(metric=16)──→ 收到R3的metric=2 → 重新加入(metric=3)
#   R3:  [未收到失效] ──30s到期,正常更新(metric=2)──→ …收到metric=16→删除…收到metric=3→加入

4.2 案例二:OSPF 基本组网验证(邻居 + 路由)

# OSPF 配置
[R1] ospf 1 router-id 1.1.1.1
[R1-ospf-1] area 0
[R1-ospf-1-area-0.0.0.0] network 10.1.1.0 0.0.0.255
[R1-ospf-1-area-0.0.0.0] network 10.1.2.0 0.0.0.255

[R2] ospf 1 router-id 2.2.2.2
[R2-ospf-1] area 0
[R2-ospf-1-area-0.0.0.0] network 10.1.2.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0] network 10.1.3.0 0.0.0.255

# 验证 OSPF 邻居和路由
<R2> display ospf peer
 OSPF Process 1 with Router ID 2.2.2.2
 Neighbors
 Area 0.0.0.0 interface 10.1.2.2(GigabitEthernet0/0/1)'s neighbors
  Neighbor ID  Pri  State    Dead Time  Address     Interface
  1.1.1.1      1    Full/BDR 00:00:32   10.1.2.1    GigabitEthernet0/0/1

<R2> display ip routing-table protocol ospf
Route Flags: R - relay, D - download to fib
------------------------------------------------------------------------------
Routing Table : OSPF
         Destinations : 1        Routes : 1
Destination/Mask    Proto  Pre   Cost    Flags  NextHop        Interface
10.1.1.0/24         OSPF   10    2        D     10.1.2.1       GigabitEthernet0/0/1
# Cost=2:路径上两个出接口默认 Cost 各 1(参考带宽 100M、GE 口);回显为简化示意

4.3 案例三:OSPF Cost 计算

OSPF 的 Cost = 参考带宽 / 接口带宽(默认参考带宽 100 Mbps)。结果取整数部分,且最小为 1。

接口带宽 默认 Cost 说明
10 Mbps 10 100/10
100 Mbps 1 100/100
1 Gbps 1 100/1000 < 1,按 1 计算(需要调整参考带宽)
10 Gbps 1 同上,1 Gbps 以上链路需要调整参考带宽
# 当网络中有 1Gbps 及以上链路时,需要调整参考带宽
[HUAWEI] ospf 1
[HUAWEI-ospf-1] reference-bandwidth 10000   # 单位 Mbps

# 调整后 Cost 计算:
# 100Mbps  → 10000/100    = 100
# 1Gbps    → 10000/1000   = 10
# 10Gbps   → 10000/10000  = 1
# 40Gbps   → 10000/40000  ≈ 0.25,取 1(仍需进一步增大参考带宽)

建议手动设置端口OSPF COST,方便网络维护。

4.4 案例四:RIP 与 OSPF 的选型决策

场景:某企业有 20 台路由器,网络中包含 1Gbps 和 10Gbps 链路。

评估维度 RIP OSPF
跳数限制 最大 15 跳,20 台路由器多层连接可能超 无限制
Cost 精度 仅跳数,无法区分链路质量 支持带宽敏感的 Cost
收敛速度 分钟级,故障影响时间长 秒级,快速恢复
配置复杂度 低 中
设备资源 消耗低 消耗较高

结论:选择 OSPF。网络规模超过 RIP 设计范围,且链路带宽差异大,需要 OSPF 的 Cost 区分能力。

五、总结

特性 RIP(距离矢量) OSPF(链路状态)
算法 Bellman-Ford Dijkstra SPF
信息交换 路由表 链路状态(LSA)
收敛 慢(30s 周期 + 慢收敛) 快(事件触发 + SPF)
最大规模 15 跳 无硬性限制
环路风险 高 低(SPF 天然无环)
资源需求 低 中/高
适用场景 教学/极小网络 企业主流选择
理解要点 说明
RIP 交换"路标" 只告诉方向和距离
OSPF 交换"地图" 共享完整拓扑,各自计算
收敛速度差异 OSPF 远快于 RIP
现代网络 RIP 已基本被 OSPF/IS-IS 取代

思考

  1. 为什么 RIP 的 Bellman-Ford 算法容易产生环路,而 OSPF 的 Dijkstra 算法天然无环?
  2. OSPF 的 SPF 计算消耗 CPU,当网络频繁变化时可能成为瓶颈,如何解决?
  3. RIP 的最大跳数限制为 15,这个值是怎么确定的?为什么不是 10 或 20?

下篇预告:第35篇:RIP 协议原理与防环机制