Open Shortest Path First

🌐 什么是 OSPF?

OSPF 是一个内部网关协议(IGP), 用于同一个自治系统(AS)内部的路由计算 。它比 RIP 更强大、更精细、适用于大型网络环境。


🔓 “Open” 是什么含义?

  • Open(开放) 是指这个协议是公开标准,不是专利协议,任何厂商都可以实现。
  • 它由 IETF 维护,RFC 文档对外公开(最早是 RFC 2328)。

🧠 OSPF 的工作原理

OSPF 采用的是 链路状态算法(Link-State Routing Algorithm) ,核心特点如下:

1. 每个路由器都有全网拓扑图

  • 路由器维护关于整个网络拓扑的一个图结构(路由器 + 链路 + 开销)。
  • 不像 RIP 只知道“邻居告诉我的路径”,OSPF 直接知道“整个世界长啥样”。

2. 使用 Dijkstra 最短路径算法

  • 每个路由器会运行 Dijkstra 算法(最短路径优先,SPF),计算自己到所有其他路由器的最短路径。
  • 因为每个路由器都知道整个网络的结构,所以它能单独计算出最优路径。

3. OSPF 通告与 LSA(链路状态广告)

  • 路由器之间不交换整个路由表,而是交换 链路状态信息(LSA)
  • 每个路由器会构造一条 LSA,描述:
    • 我是谁
    • 我的接口(邻居有哪些)
    • 每条链路的开销(cost)

4. LSA 通过洪泛法传递(flooding)

  • LSA 会通过整个网络洪泛出去, 所有路由器都会收到相同的链路状态数据库(LSDB)
  • 所以每台路由器的拓扑图都是一样的。

5. IP 协议中协议号为 89

  • OSPF 使用原始 IP 包直接传输,而不是通过 TCP 或 UDP。
  • IP 报文头的协议字段值是 89

📦 OSPF 数据包类型(常见的几种)

类型名称用途
1Hello建立/维护邻居关系(邻接关系)
2Database Description交换链路状态数据库摘要信息
3Link-State Request请求某些 LSA
4Link-State Update正式发送 LSA(用来洪泛)
5Link-State Acknowledgment确认收到的 LSA

🏗️ OSPF 的结构特性

  • 支持区域(Area) :可将大型网络划分为多个 Area(区域),Area 0 为主干区域(Backbone)。
  • 支持 VLSM 和 CIDR:不像 RIP,只支持固定子网。
  • 支持多条等价路径(Equal-Cost Multi-Path, ECMP)
  • 开销(Cost)可自定义 ,一般与带宽、延迟等因素有关。

📈 和 RIP 对比一波:

特性RIPOSPF
算法类型距离向量链路状态(Dijkstra)
收敛速度
最大跳数限制15 跳无限制
拓扑知识只知邻居全网拓扑图
通告内容整张路由表仅通告链路状态(LSA)
数据传输协议UDP(端口 520)直接使用 IP(协议号 89)
适用网络小型中大型

🧪 举个例子帮助理解:

假设有三个路由器组成网络:

R1 ----- R2 ----- R3
 \                /
   ---- R4 -------

每条边有不同的“cost”,比如:

  • R1-R2:1
  • R2-R3:1
  • R1-R4:2
  • R4-R3:2

R1 会广播一个 LSA,内容大致为:

我是 R1:
  - 有一条链路到 R2,cost=1
  - 有一条链路到 R4,cost=2

这个 LSA 会被洪泛到 R2、R4,然后继续转发,直到 R3 也收到了它。

所有路由器汇总所有人的 LSA 后,就能构建如下图:

R1---1---R2---1---R3
 |              /
 2            2
 |          /
 R4---------

然后它们各自用 Dijkstra 算法算出最短路径,生成路由表。