Appearance
OSPF 简介
OSPF(Open Shortest Path First,开放式最短路径优先) 是一种链路状态协议,使用 SPF(Shortest Path First) 算法(Dijkstra 算法)计算路由域的拓扑结构。
OSPF 基本原理
- 每台路由器都会在所有形成邻接关系的邻居之间发送 LSA(链路状态通告)。
- 每台收到邻居路由器 LSA 的设备会将其记录在 LSDB(链路状态数据库) 中,并将 LSA 拷贝并发送给所有邻居。
- 通过 LSA 的泛洪,整个区域内的路由器将同步形成相同的 LSDB(不同区域之间 LSA 不会泛洪)。
- 当 LSDB 同步完毕后,每台路由器以自身为根,使用 SPF 算法 计算无环拓扑图,以找到每个目的地的最短路径。
- 依据 SPF 算法生成的拓扑图,路由器构建自己的 路由表(Routing Table)。
- 路由表建立完成后,OSPF 进入稳定状态,仅通过 Hello 包 进行 Keepalive 维护邻居关系,并默认每 30 分钟泛洪一次 LSA 以更新链路状态。
OSPF 的 5 种包类型与 6 种邻居状态
OSPF 的 5 种包类型
- Hello - 发现和维持邻居关系。
- DBD(Database Description) - 数据库描述,用于同步 LSDB。
- LSR(Link-State Request) - 链路状态请求,用于请求特定的 LSA。
- LSU(Link-State Update) - 链路状态更新,传输 LSA。
- LS ACK(Link-State Acknowledgment) - LSA 确认,确保可靠传输。
OSPF 的 6 种邻居状态
- INIT - 邻居发现阶段,收到对方 Hello 包。
- 2-Way - 双向通信建立,选举 DR/BDR(指定路由器/备份指定路由器)。
- Exstart - 数据库同步初始化,协商 DBD 交换顺序。
- Exchange - 交换 DBD,传递 LSDB 概要信息。
- Loading - 发送 LSR 请求缺失的 LSA 并获取完整数据库。
- Full - LSDB 同步完成,形成完整邻接关系。
邻居与邻接
- 邻居关系:通过 Hello 包 进行协商,达到 2-Way 状态。
- 邻接关系:邻居关系建立后,LSDB 同步完毕,达到 Full 状态。
OSPF 的优点
- 区域划分:通过 分区域架构(Area)减少 CPU 和内存消耗。
- 无类路由:支持 VLSM(可变长子网掩码) 和 CIDR(无类域间路由)。
- 负载均衡:支持 等价多路径(ECMP,Equal Cost Multi-Path) 负载均衡。
- 组播传输:使用 224.0.0.5(全 OSPF 路由器) 和 224.0.0.6(DR/BDR 路由器) 组播地址,减少对非 OSPF 设备的影响。
- 支持认证:可以配置 明文或 MD5 认证,增强安全性。
- 外部路由标记:支持外部路由的 Tag 标记 以区分不同来源的路由。
- TOS(Type of Service)支持:历史上 OSPF 支持 TOS 路由选择,但因使用率低已在 RFC 2328 中移除。