Skip to content

OSPF 简介

OSPF(Open Shortest Path First,开放式最短路径优先) 是一种链路状态协议,使用 SPF(Shortest Path First) 算法(Dijkstra 算法)计算路由域的拓扑结构。

OSPF 基本原理

  1. 每台路由器都会在所有形成邻接关系的邻居之间发送 LSA(链路状态通告)
  2. 每台收到邻居路由器 LSA 的设备会将其记录在 LSDB(链路状态数据库) 中,并将 LSA 拷贝并发送给所有邻居。
  3. 通过 LSA 的泛洪,整个区域内的路由器将同步形成相同的 LSDB(不同区域之间 LSA 不会泛洪)。
  4. 当 LSDB 同步完毕后,每台路由器以自身为根,使用 SPF 算法 计算无环拓扑图,以找到每个目的地的最短路径。
  5. 依据 SPF 算法生成的拓扑图,路由器构建自己的 路由表(Routing Table)
  6. 路由表建立完成后,OSPF 进入稳定状态,仅通过 Hello 包 进行 Keepalive 维护邻居关系,并默认每 30 分钟泛洪一次 LSA 以更新链路状态。

OSPF 的 5 种包类型与 6 种邻居状态

OSPF 的 5 种包类型

  1. Hello - 发现和维持邻居关系。
  2. DBD(Database Description) - 数据库描述,用于同步 LSDB。
  3. LSR(Link-State Request) - 链路状态请求,用于请求特定的 LSA。
  4. LSU(Link-State Update) - 链路状态更新,传输 LSA。
  5. LS ACK(Link-State Acknowledgment) - LSA 确认,确保可靠传输。

OSPF 的 6 种邻居状态

  1. INIT - 邻居发现阶段,收到对方 Hello 包。
  2. 2-Way - 双向通信建立,选举 DR/BDR(指定路由器/备份指定路由器)。
  3. Exstart - 数据库同步初始化,协商 DBD 交换顺序。
  4. Exchange - 交换 DBD,传递 LSDB 概要信息。
  5. Loading - 发送 LSR 请求缺失的 LSA 并获取完整数据库。
  6. Full - LSDB 同步完成,形成完整邻接关系。

邻居与邻接

  • 邻居关系:通过 Hello 包 进行协商,达到 2-Way 状态。
  • 邻接关系:邻居关系建立后,LSDB 同步完毕,达到 Full 状态。

OSPF 的优点

  1. 区域划分:通过 分区域架构(Area)减少 CPU 和内存消耗。
  2. 无类路由:支持 VLSM(可变长子网掩码)CIDR(无类域间路由)
  3. 负载均衡:支持 等价多路径(ECMP,Equal Cost Multi-Path) 负载均衡。
  4. 组播传输:使用 224.0.0.5(全 OSPF 路由器)224.0.0.6(DR/BDR 路由器) 组播地址,减少对非 OSPF 设备的影响。
  5. 支持认证:可以配置 明文或 MD5 认证,增强安全性。
  6. 外部路由标记:支持外部路由的 Tag 标记 以区分不同来源的路由。
  7. TOS(Type of Service)支持:历史上 OSPF 支持 TOS 路由选择,但因使用率低已在 RFC 2328 中移除。