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 数据包类型(常见的几种)
类型 | 名称 | 用途 |
---|---|---|
1 | Hello | 建立/维护邻居关系(邻接关系) |
2 | Database Description | 交换链路状态数据库摘要信息 |
3 | Link-State Request | 请求某些 LSA |
4 | Link-State Update | 正式发送 LSA(用来洪泛) |
5 | Link-State Acknowledgment | 确认收到的 LSA |
🏗️ OSPF 的结构特性
- 支持区域(Area) :可将大型网络划分为多个 Area(区域),Area 0 为主干区域(Backbone)。
- 支持 VLSM 和 CIDR:不像 RIP,只支持固定子网。
- 支持多条等价路径(Equal-Cost Multi-Path, ECMP) 。
- 开销(Cost)可自定义 ,一般与带宽、延迟等因素有关。
📈 和 RIP 对比一波:
特性 | RIP | OSPF |
---|---|---|
算法类型 | 距离向量 | 链路状态(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 算法算出最短路径,生成路由表。