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 中移除。