第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 的工作方式

3.2 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 取代 |
思考
- 为什么 RIP 的 Bellman-Ford 算法容易产生环路,而 OSPF 的 Dijkstra 算法天然无环?
- OSPF 的 SPF 计算消耗 CPU,当网络频繁变化时可能成为瓶颈,如何解决?
- RIP 的最大跳数限制为 15,这个值是怎么确定的?为什么不是 10 或 20?
下篇预告:第35篇:RIP 协议原理与防环机制