- 链路状态协议:每台路由器描述自己周围的链路状态,不是直接传递路由表。
- 使用 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 报文,可靠传输确认 |
📝报文交互完整流程(主线)
- Hello 报文交互(Down → Init → 2‑Way) 接口使能 OSPF 后,周期发送 Hello 报文到组播
224.0.0.5
- 收到对方 Hello,但 Hello 的邻居列表没有自己 Router‑ID →
Init状态(单向收到 Hello) - 收到对方 Hello,且 Hello 邻居列表包含自己 Router‑ID,双向可见 →
2‑Way,邻居关系建立。
Broadcast 网络:DROther 路由器之间到此为止,维持 2‑Way,不继续建立邻接;仅 DROther 与 DR、BDR 继续往下同步数据库。
- DBD 报文交互,协商主从(2‑Way → ExStart → Exchange) 需要同步 LSDB 的两台设备开始交互 DBD 报文
- ExStart:发送空 DBD 报文,通过 Router‑ID 大小选举主从;Router‑ID 大为主设备,控制 DBD 报文序列号。
- Exchange:主从协商完成,互相发送携带 LSA 摘要目录的 DBD 报文,双方拿到对方 LSDB 目录。
- 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 回执确认。
整体工作流程(串联报文)
- 发送Hello 报文,发现 OSPF 邻居
- 邻居状态到达 2‑Way(双向通信确认)
- 广播 / 非广播网络中选举 DR/BDR,建立邻接关系
- 交互 DBD 报文(数据库摘要),交换链路状态数据库摘要信息
- 同步链路状态信息:LSR(链路状态请求)→ LSU(链路状态更新)→ LSAck(链路状态确认),获取缺失的 LSA
- 两端得到完全一致的 LSDB(链路状态数据库)
- 本地执行 SPF 算法,计算最短路径树
- 生成 OSPF 路由条目,注入设备路由表
区域与路由器角色
| 概念 | 说明 |
|---|---|
| Area 0 | 骨干区域,所有非骨干区域必须物理连接到 Area 0 |
| 普通区域 | 承载业务网段,通过 ABR 连接骨干区域 |
| IR 内部路由器 | 全部 OSPF 接口都在同一个区域内 |
| BR 骨干路由器 | 至少有一个接口属于 Area 0 骨干区域 |
| ABR 区域边界路由器 | 同时属于多个区域,其中一个接口在 Area0,负责区域之间路由传递 |
| ASBR 自治系统边界路由器 | 引入外部路由(静态 / RIP 等)进入 OSPF 域 |
设计建议:
- 小型网络可以直接单 Area 0。
- 中大型网络使用 Area 0 + 多个普通区域。
- 虚链路只适合临时补救,长期网络规划尽量避免使用虚链路。
邻居建立条件(必须全部匹配)
- 接口属于同一个 Area ID
- Hello 时间、Dead 死亡时间一致
- Router‑ID 全网不冲突
- 认证方式、密码完全一致(如果开启认证)
- 接口 OSPF 网络类型匹配
- 接口 IP 同一网段,二层三层链路可达
- 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 / 安全策略、下一跳可达性 |
评论