关键词:OSPF、故障排查、邻居状态、Init状态、ExStart状态、DBD、MTU

第67篇:OSPF 邻居故障排查:状态卡在 Init/ExStart

一、引言

OSPF 邻居关系建立失败是网络工程师最常见的故障场景之一。邻居状态卡在某些中间状态(如 Init、ExStart、Exchange)而非正常达到 Full,意味着 OSPF 的某个建立步骤受阻。

掌握 OSPF 邻居状态的排查方法,首先需要理解每个状态的含义和进入该状态的条件。状态卡在某个位置,说明满足了进入该状态的条件,但不满足继续向前迁移的条件。沿着状态机的方向逐层排查,可以快速定位故障根因。

二、核心概念

2.1 常见卡点状态及含义

卡点状态 说明 典型原因
Down 未收到有效 Hello 物理故障、OSPF未使能、Hello被过滤
Init 收到 Hello 但未看到自己 单向通信、ACL过滤对方Hello
2-Way 双向已建立但不继续 DROther间正常;网络类型不匹配
ExStart Master/Slave协商失败 MTU不匹配、DBD报文问题
Exchange DBD交换未完成 区域不一致、LSA问题
Loading LSA请求未完成 链路丢包、LSA过大

2.2 排查方法论

OSPF 邻居故障排查遵循"由外到内、由底到顶"的原则:

排查方法论 - 图示

三、技术细节

3.1 卡在 Init 状态的排查

状态含义:路由器收到了对方的 Hello 报文,但在 Hello 的 Neighbor List 中没有看到自己的 Router ID。

排查步骤:

步骤 检查项 命令
1 双方接口 IP 是否在同一网段 display ip interface brief
2 对方是否收到了本端的 Hello 抓包分析
3 是否存在 ACL 过滤 display acl all
4 Hello 间隔/Dead 间隔是否匹配 display ospf interface
5 Area ID 是否一致 display ospf interface
6 认证是否匹配 display current-configuration
7 网络类型是否一致 display ospf interface

3.2 卡在 ExStart 状态的排查

状态含义:双向通信已建立,但在 Master/Slave 协商阶段(交换 DBD 报文)受阻。

排查步骤:

步骤 检查项 命令
1 接口 MTU 是否一致 display interface
2 DBD 报文是否被丢弃 debugging ospf packet dbd
3 OSPF MTU 检查是否启用 display ospf interface
4 链路是否存在严重丢包 ping 测试
5 接口是否配置了 OSPF MTU ignore display current-configuration

ExStart 卡点最常见原因:MTU 不匹配。DBD 报文可能携带较大的 LSA 摘要信息,如果接收方接口的 MTU 小于 DBD 报文大小,且 IP 报文不允许分片(DF 位设置),则报文被丢弃。

3.3 关键调试命令

# 开启OSPF事件调试
debugging ospf events

# 开启OSPF报文调试
debugging ospf packet hello
debugging ospf packet dbd
debugging ospf packet lsr
debugging ospf packet lsu
debugging ospf packet lsack

# 开启所有OSPF调试
debugging ospf all

# 终端监视调试输出
terminal monitoring
terminal monitor

四、实战配置/案例分析

4.1 案例一:卡在 Init 状态——ACL 过滤

故障现象:R1 与 R2 的 OSPF 邻居状态卡在 Init。

排查过程:

  1. 检查 R1 的状态:
[R1] display ospf peer
 Neighbor
   Neighbor ID: 2.2.2.2
   Negotiation: Init/Init
  1. 抓包分析:R1 能收到 R2 的 Hello,但 R2 的 Hello 中 Neighbor List 没有 R1 的 Router ID。

  2. 检查 R2 是否收到 R1 的 Hello——在 R2 上抓包,发现 R2 没有收到 R1 的 Hello。

  3. 检查 R2 接口的入方向 ACL:

[R2] display acl 3000
 ACL 3000, name "inbound-filter"
  rule 5 deny ip source 10.1.1.1 0
  rule 10 permit ip
  1. 根因:ACL 3000 拒绝源地址为 R1 的报文,导致 R1 的 Hello 无法到达 R2。

  2. 修复:

[R2] acl 3000
 [R2-acl-adv-3000] undo rule 5
 # 或
 [R2-acl-adv-3000] rule 5 permit ip source 10.1.1.1 0

4.2 案例二:卡在 ExStart 状态——MTU 不匹配

故障现象:R1 与 R2 的 OSPF 邻居状态在 ExStart 和 2-Way 之间震荡。

排查过程:

  1. 检查邻居状态:
[R1] display ospf peer verbose
   Neighbor ID: 2.2.2.2
   State: ExStart
   State Info: InexStart
  1. 检查接口 MTU:
[R1] display interface GigabitEthernet 0/0/1
  Current system uptime: 1 day, 2 hours
  ...
  Output Queue: size 1000, depth 0
  ...
  MTU: 1500 Bytes

[R2] display interface GigabitEthernet 0/0/1
  MTU: 9000 Bytes    # Jumbo Frame
  1. 开启 DBD 调试:
[R1] debugging ospf packet dbd
 # 观察到DBD持续重传但无确认
  1. 根因:R2 发送的 DBD 报文超过了 R1 接口的 MTU,R1 丢弃了该报文。

  2. 修复方案(任选其一):

# 方案1:统一MTU
[R2] interface GigabitEthernet 0/0/1
 [R2-GigabitEthernet0/0/1] ip mtu 1500

# 方案2:忽略OSPF MTU检查
[R1] interface GigabitEthernet 0/0/1
 [R1-GigabitEthernet0/0/1] ospf mtu-ignore
[R2] interface GigabitEthernet 0/0/1
 [R2-GigabitEthernet0/0/1] ospf mtu-ignore

4.3 案例三:一端 Init 一端 Down

故障现象:R1 显示邻居为 Init,R2 显示没有该邻居。

分析:R1 收到了 R2 的 Hello,但 R2 没有收到 R1 的 Hello。这是典型的单向通信问题。

排查方向: 1. 检查 R2 接口的入方向是否有 ACL 或防火墙规则 2. 检查中间网络设备(交换机、防火墙)是否有不对称的过滤策略 3. 检查组播路由是否正常(224.0.0.5)

五、总结

卡点状态 首选排查方向
Down 物理链路 → OSPF 进程 → 接口宣告
Init 单向通信 → ACL 过滤 → 组播可达性
ExStart MTU 不匹配 → DBD 报文 → 链路丢包
Exchange 区域不一致 → LSA 问题 → 认证
Loading 链路丢包 → LSA 过大 → 资源不足

思考

  1. 为什么 OSPF 邻居卡在 Init 状态通常意味着单向通信问题?如果通信是双向的,邻居状态为什么会停留在 Init?
  2. MTU 不匹配为什么会影响 ExStart 状态而不是 Init 状态?ExStart 阶段交换的 DBD 报文与 Hello 报文在大小上有何差异?
  3. 在排查 OSPF 邻居故障时,为什么建议先检查物理链路和 IP 连通性,再检查 OSPF 配置参数?

下篇预告:第68篇:OSPF 邻接震荡典型案例分析