Skip to content

OSPF 路由协议(链路状态)

考情分析

OSPF 是 408 网络层的重要考点,和 RIP 经常放在一起对比考。选择题侧重考 OSPF 的特性(链路状态、使用 Dijkstra、洪泛法等),大题有时会给一个拓扑让你用 Dijkstra 算法计算最短路径。

考频:★★★★

OSPF 的基本思想

OSPF(Open Shortest Path First,开放最短路径优先)是一种链路状态路由协议。

和 RIP 的距离向量思路不同,OSPF 的每个路由器都掌握整个网络的拓扑信息,然后独立地用 Dijkstra 算法计算到每个目的网络的最短路径。

核心流程:

  1. 每个路由器发现自己的邻居和到邻居的链路代价
  2. 构造一条 LSA(Link State Advertisement,链路状态通告),描述自己和邻居的连接关系
  3. 通过**洪泛法(Flooding)**将 LSA 发送给网络中的所有路由器
  4. 每个路由器收集所有 LSA,构建出完整的链路状态数据库(LSDB)
  5. 在 LSDB 基础上,用 Dijkstra SPF 算法计算到每个目的网络的最短路径树

五种报文类型

OSPF 定义了五种报文,直接封装在 IP 数据报中(协议号 89),不使用 TCP 或 UDP。

类型名称功能
1Hello发现和维护邻居关系,周期性发送
2数据库描述(DBD)向邻居概述自己的 LSDB 内容
3链路状态请求(LSR)向邻居请求特定的 LSA
4链路状态更新(LSU)向邻居发送 LSA(洪泛的核心报文)
5链路状态确认(LSAck)对收到的 LSU 进行确认

邻居关系建立过程:

LSA 与洪泛

LSA 的内容

每个路由器产生的 LSA 描述了它与哪些网络/路由器直接相连,以及链路的代价。

例如,路由器 R1 的 LSA 可能是:

  • R1 ↔ Net1,代价 1
  • R1 ↔ R2,代价 5
  • R1 ↔ R3,代价 3

洪泛法(Flooding)

路由器收到一条新的 LSA 后,将其从除接收接口外的所有接口转发出去。这样,一条 LSA 最终会传遍整个网络(或整个区域)。

洪泛的特点:

  • 每条 LSA 都有序列号,防止旧的 LSA 覆盖新的
  • 收到 LSA 后要发送 LSAck 确认,保证可靠传输
  • 只在链路状态发生变化时才洪泛新的 LSA(不像 RIP 定期广播整张路由表)

Dijkstra SPF 计算

每个路由器收集到完整的 LSDB 后,以自己为根节点运行 Dijkstra 算法,计算到所有目的网络的最短路径树。

Dijkstra 算法的基本过程:

  1. 初始化:将自己放入已确认集合 S,到自己的距离为 0
  2. S 的邻居中选出距离最小的节点 u,加入 S
  3. 更新 u 的所有邻居的距离(松弛操作)
  4. 重复步骤 2-3 直到所有节点都加入 S

计算示例

给定拓扑(链路代价标注在边上):

R1 ---5--- R2 ---2--- R4
|          |          |
3          1          4
|          |          |
R3 ---6--- R5 ---1--- R6

从 R1 出发,Dijkstra 计算过程:

步骤加入S到R2到R3到R4到R5到R6
初始R153
1R3539
2R25376
3R553767
4R453767
5R653767

最短路径:

  • R1→R2:距离 5,路径 R1→R2
  • R1→R3:距离 3,路径 R1→R3
  • R1→R4:距离 7,路径 R1→R2→R4
  • R1→R5:距离 6,路径 R1→R2→R5
  • R1→R6:距离 7,路径 R1→R2→R5→R6

区域划分

大型网络中如果所有路由器都互相洪泛 LSA,开销会很大。OSPF 引入了**区域(Area)**的概念来控制洪泛范围。

  • 骨干区域(Area 0):所有区域都必须连接到骨干区域
  • 非骨干区域:编号非 0 的区域,内部的 LSA 只在本区域洪泛
  • 区域边界路由器(ABR):连接两个区域的路由器,负责在区域间传递路由摘要

区域划分的好处:

  • 减少了 LSA 洪泛的范围,降低网络开销
  • 每个区域内的路由器只需要维护本区域的完整 LSDB
  • 区域之间通过 ABR 交换路由摘要信息

DR 与 BDR

为什么需要 DR/BDR

多路访问网络(如以太网)中,如果有 N 个路由器,两两建立邻接关系需要 N(N1)2 对,LSA 交换量会非常大。

OSPF 引入了 DR(Designated Router,指定路由器)BDR(Backup Designated Router,备份指定路由器) 来解决这个问题。

三种角色

角色功能
DR负责收集本网段所有路由器的 LSA 并统一分发,充当 LSA 交换的"中心节点"
BDRDR 的备份,DR 故障时自动接替,避免重新选举的开销
DROther普通路由器,只与 DR 和 BDR 建立邻接关系,不与其他 DROther 建立邻接

引入 DR 后,N 个路由器只需建立 2(N1) 个邻接关系(每个 DROther 与 DR 和 BDR 各一个),远少于 N(N1)2

DR/BDR 选举规则

  1. 比较优先级(Priority):优先级最高的成为 DR,次高的成为 BDR。优先级范围 0~255,默认值为 1
  2. 优先级相同时比较 Router ID:Router ID 大的优先。Router ID 通常是路由器上最大的 IP 地址(或手动配置的值)
  3. 优先级为 0 不参与选举:将优先级设为 0 可以确保该路由器不会成为 DR 或 BDR
  4. 非抢占式:DR/BDR 选举完成后,即使有优先级更高的新路由器加入网络,也不会抢占当前的 DR/BDR。只有当 DR 故障时,BDR 才会升级为 DR,然后重新选举 BDR

邻居 vs 邻接

这两个概念容易混淆:

概念含义建立条件
邻居(Neighbor)通过 Hello 报文互相发现的路由器交换 Hello 报文即可
邻接(Adjacency)完成了 LSDB 同步的路由器对需要完整的 DBD/LSR/LSU 交换过程

在多路访问网络中,所有路由器都是邻居,但只有与 DR/BDR 之间才会建立邻接关系。在点对点链路中,没有 DR/BDR 选举,直连的两个路由器直接建立邻接。

OSPF vs RIP 对比

对比项RIPOSPF
算法类型距离向量链路状态
度量标准跳数链路代价(可以基于带宽等)
最大规模15 跳无限制
更新方式定期广播完整路由表(30秒)只在变化时洪泛 LSA
传输方式UDP 端口 520直接封装在 IP 中(协议号 89)
路由环路可能(无穷计数)不会(每个路由器有全局视图)
收敛速度
支持区域不支持支持(Area 划分)
路由表来源邻居的距离向量全网的链路状态数据库
负载均衡不支持支持等价多路径

交互可视化

加载可视化中...

易错点

1. OSPF 不使用 TCP 或 UDP

OSPF 报文直接封装在 IP 数据报中,协议号为 89。这和 RIP(UDP)、BGP(TCP)都不一样。

2. OSPF 的"洪泛"不是"广播"

洪泛是将 LSA 从所有接口(除接收接口)转发出去,让整个区域的路由器都收到。广播是数据链路层的概念。虽然效果类似"传遍所有节点",但实现机制不同。

3. 每个路由器独立计算路由

所有路由器的 LSDB 相同,但每个路由器以自己为根运行 Dijkstra,所以得到的最短路径树不同。最终生成的路由表也不同。

4. 区域 0 是骨干区域,不可或缺

所有非骨干区域必须直接与 Area 0 相连。如果某个区域无法直连 Area 0,需要通过虚链路(virtual link)连接。

5. OSPF 链路代价不是跳数

OSPF 的代价可以根据链路带宽、延迟等因素设置。不同厂商的默认计算方式可能不同(常见的是 代价=108带宽(bps))。

高频考点清单

  • OSPF 是链路状态协议,每个路由器掌握全网拓扑
  • 五种报文类型:Hello、DBD、LSR、LSU、LSAck
  • 洪泛法传播 LSA,只在状态变化时洪泛
  • 用 Dijkstra 算法计算最短路径
  • OSPF 直接封装在 IP 中,协议号 89
  • 区域划分:骨干区域 Area 0,ABR 负责区域间路由
  • OSPF vs RIP 的各项对比

真题练习

相关真题(6题)

2026Q37选择题2分

OSPF 链路状态路由算法计算路由表条目数

2026Q38选择题2分

OSPF 支持区域划分,RIP 和 BGP 不支持

2025Q47综合题9分

RIP/BGP 综合题:距离向量收敛、eBGP/iBGP 会话与 AS-PATH 选路

2017Q37选择题2分

RIP 用 UDP 封装,OSPF 直接用 IP 封装,BGP 用 TCP 封装

2014Q47综合题9分

OSPF 综合题:链路状态数据库、Dijkstra 算法与路由表构建

2013Q47综合题9分

多自治系统路由综合题:子网划分、RIP/OSPF 路由计算