首页 / 文章 / OSPF

OSPF

  • 链路状态协议:每台路由器描述自己周围的链路状态,不是直接传递路由表。
  • 使用 SPF(最短路径优先)算法:根据统一的 LSDB 数据库计算最短路径树。
  • 支持区域划分:用 Area 降低 LSDB 规模,减少 SPF 计算压力。
  • 收敛较快:比 RIP 更适合中大型网络。
  • 支持 VLSM/CIDR:无类路由协议,支持可变长子网掩码。
  • 使用 Cost 作为度量:Cost 越小,路径越优。

OSPF 五种报文与完整邻居报文交互过程

OSPF 报文封装在 IP 报文中,IP 协议号 89;组播地址:224.0.0.5(所有 OSPF 路由器)、224.0.0.6(DR/BDR)

报文 全称 作用
Hello Hello 发现、保活邻居,协商基础参数
DBD(DD) Database Description 交换 LSDB 数据库摘要(目录清单,不带完整 LSA)
LSR Link‑State Request 向对端请求自己缺失的 LSA 完整内容
LSU Link‑State Update 携带完整 LSA,发送链路状态更新
LSAck Link‑State Acknowledgment 确认收到 LSU 报文,可靠传输确认

📝报文交互完整流程(主线)

  1. Hello 报文交互(Down → Init → 2‑Way) 接口使能 OSPF 后,周期发送 Hello 报文到组播224.0.0.5
  • 收到对方 Hello,但 Hello 的邻居列表没有自己 Router‑IDInit状态(单向收到 Hello)
  • 收到对方 Hello,且 Hello 邻居列表包含自己 Router‑ID,双向可见2‑Way,邻居关系建立。

Broadcast 网络:DROther 路由器之间到此为止,维持 2‑Way,不继续建立邻接;仅 DROther 与 DR、BDR 继续往下同步数据库。

  1. DBD 报文交互,协商主从(2‑Way → ExStart → Exchange) 需要同步 LSDB 的两台设备开始交互 DBD 报文
  • ExStart:发送空 DBD 报文,通过 Router‑ID 大小选举主从;Router‑ID 大为主设备,控制 DBD 报文序列号。
  • Exchange:主从协商完成,互相发送携带 LSA 摘要目录的 DBD 报文,双方拿到对方 LSDB 目录。
  1. LSR + LSU + LSAck(Exchange → Loading → Full)
  • 对比 DBD 目录,发现本地缺少 / 过期的 LSA,发送 LSR 报文,请求对应的完整 LSA;
  • 对端收到 LSR,回复 LSU 报文,携带完整 LSA 数据;
  • 收到 LSU 之后,回复 LSAck 报文做确认,保证可靠传输;
  • 反复执行 LSR‑LSU‑LSAck,直到双方所有 LSA 全部同步完成 → Full邻接状态。

记忆:Hello 发现邻居;DBD 交换目录;LSR 提需求;LSU 给数据;LSAck 回执确认。

整体工作流程(串联报文)

  1. 发送Hello 报文,发现 OSPF 邻居
  2. 邻居状态到达 2‑Way(双向通信确认)
  3. 广播 / 非广播网络中选举 DR/BDR,建立邻接关系
  4. 交互 DBD 报文(数据库摘要),交换链路状态数据库摘要信息
  5. 同步链路状态信息:LSR(链路状态请求)→ LSU(链路状态更新)→ LSAck(链路状态确认),获取缺失的 LSA
  6. 两端得到完全一致的 LSDB(链路状态数据库)
  7. 本地执行 SPF 算法,计算最短路径树
  8. 生成 OSPF 路由条目,注入设备路由表

区域与路由器角色

概念 说明
Area 0 骨干区域,所有非骨干区域必须物理连接到 Area 0
普通区域 承载业务网段,通过 ABR 连接骨干区域
IR 内部路由器 全部 OSPF 接口都在同一个区域内
BR 骨干路由器 至少有一个接口属于 Area 0 骨干区域
ABR 区域边界路由器 同时属于多个区域,其中一个接口在 Area0,负责区域之间路由传递
ASBR 自治系统边界路由器 引入外部路由(静态 / RIP 等)进入 OSPF 域

设计建议:

  • 小型网络可以直接单 Area 0。
  • 中大型网络使用 Area 0 + 多个普通区域。
  • 虚链路只适合临时补救,长期网络规划尽量避免使用虚链路。

邻居建立条件(必须全部匹配)

  1. 接口属于同一个 Area ID
  2. Hello 时间、Dead 死亡时间一致
  3. Router‑ID 全网不冲突
  4. 认证方式、密码完全一致(如果开启认证)
  5. 接口 OSPF 网络类型匹配
  6. 接口 IP 同一网段,二层三层链路可达
  7. Stub/NSSA 特殊区域属性配置一致

OSPF 邻居状态机

Down → Init → 2‑Way → ExStart → Exchange → Loading → Full

状态 含义
Down 未收到任何有效 Hello 报文,初始状态
Init 收到对方 Hello,但对方 Hello 邻居列表没有自己 Router‑ID(单通)
2‑Way 双方 Hello 互相看见对方,邻居关系建立完成
ExStart 协商 DBD 报文的主从角色
Exchange 互相交换 DBD 数据库摘要目录
Loading 发送 LSR 请求缺失 LSA,接收 LSU 更新,执行确认
Full LSDB 数据库完全同步,邻接建立完成

注意: Broadcast 广播网络中,DROther 路由器之间停留在2‑Way 属于正常现象,只和 DR/BDR 达到 Full。 邻居(2‑Way)≠邻接(Full);只有邻接关系才会同步完整 LSDB。

Cost 与选路

OSPF 使用 Cost 作为度量值。Cost 越小,路径越优。

默认 Cost 计算公式:Cost = 100M / 接口带宽

路由优先级(内部优先于外部): 区域内路由 (Intra‑Area) > 区域间路由 (Inter‑Area) > 外部 E1 > 外部 E2

基础配置示例(华为)

system-view
ospf 1 router-id 1.1.1.1
 area 0
  network 10.1.12.0 0.0.0.255
  network 1.1.1.1 0.0.0.0

多区域拓扑示例:R1 -- Area 0 -- R2 -- Area 1 -- R3

R2 作为 ABR 设备,接口分别加入 Area0 与 Area1。

常用查看命令

display ospf peer                #查看OSPF邻居、状态
display ospf interface           #查看接口OSPF参数、DR/BDR
display ospf brief               #OSPF简要信息
display ospf lsdb               #查看链路状态数据库
display ospf routing            #OSPF计算出来的路由
display ip routing-table protocol ospf  #路由表中OSPF路由

常见排障入口

表格

现象 优先检查点
完全没有邻居 物理链路、接口是否 UP、Area ID、network 宣告、ACL 是否拦截协议号 89
卡在 Init 单向报文,检查链路单通、ACL 过滤 Hello 报文
卡在 2‑Way 广播网络 DROther 之间,属于正常;P2P 网络卡在 2‑Way 为异常
卡在 ExStart / Exchange MTU 不匹配、Router‑ID 冲突、网络类型不一致
邻居 Full 但是没有路由 network 宣告是否正确、LSDB 是否完整、ABR/ASBR、路由过滤策略
OSPF 路由存在但是业务不通 回程路由、ACL / 安全策略、下一跳可达性
分享这篇:
扫码阅读本文 扫码用手机阅读 / 分享

评论