








简短场景复述:
华为交换机对接 H3C 路由器,中间透传3台安全设备。OSPF 邻居建立停在 Exstart,error 计数全 0,抓包/日志也没明显丢包或错误——这种情况非常常见于跨厂商互联。

下面先做原因分析(为什么会卡),再给出一步步可执行的解决方案,便于直接复制到运维工单使用。
MTU/数据库描述(DD) 字段不一致 — 高概率(≈90%)
Exstart/Exchange 阶段交换的是 DD 包,DD 包里包含接口 MTU。若一端严格检查 MTU(H3C/Cisco 类行为),另一端忽略或使用不同 MTU(华为默认可能不检查或接口 MTU 不同),会导致一端丢弃对方的 DD 包,邻居无法进入 Exchange/Full。错误计数为 0 很可能是因为包被接收但不认(不计为 error)。
OSPF 接口 / 网络类型不匹配(Broadcast vs P2P 等)
若两侧把同一链路配置为不同 network-type,会影响 DR/BDR 选举与 DD 行为,有时导致卡在 Exstart。
认证/Area/计时器不一致
认证类型或密钥不一致通常会更早失败,但在某些实现上也会表现为交换阶段异常。Hello/Dead 定时器不一致也会影响邻居稳定性。
Router ID 冲突 / DR/BDR 优先级问题
相同 RID、DR 优先级设置异常,可能导致主从(Master/Slave)选举失败或角色错乱,从而卡在 Exstart。
单向包/ACL/设备实现差异或 BUG
ACL/防火墙 过滤 OSPF(协议 89)单播包;或厂商实现细节(DD 标志处理、MTU 检查逻辑等)差异;固件 BUG 也会出现这种“无报错但卡住”的现象。
物理/链路层问题
Duplex/Speed 不匹配、链路错误导致帧错误,虽然不一定产生 OSPF error,但会干扰 DD 交换。

原则:从最常见 → 最复杂,先排 MTU,再看配置,然后抓包/调试。每一步我给出华为与 H3C 常用命令,便于直接执行。
华为:
display ospf peer verboseH3C(Comware):
display ospf peer verbose看点:是否都显示 Exstart,以及哪一侧是 Master、哪一侧是 Slave。Master 一般先发 DD 包。
华为查看接口 MTU:
display interface GigabitEthernet0/0/1
# 或 Vlanif
display interface Vlanif10华为查看 OSPF 接口信息(是否启用 MTU 检查):
display ospf interface GigabitEthernet0/0/1查找 MTU Enable: Yes/No、OSPF 接口显示的 MTU 值。
H3C 查看接口 MTU:
display interface GigabitEthernet1/0/1对比两端 MTU(物理与 SVI 都要看)。注意 VLAN tag 会使有效 MTU 差 4 字节的场景(某些平台默认考虑/不考虑)。
方案 A(统一 MTU)—— 在双方将接口 MTU 设为相同(例如 1500):
华为:
interface GigabitEthernet1/0/1
mtu 1500H3C:
interface GigabitEthernet1/0/1
mtu 1500方案 B(绕过 MTU 检查)—— 在华为侧临时禁用 OSPF MTU 检查(若已开启):
interface Vlanif10
undo ospf mtu-enable说明:若修改 MTU 或禁用后邻居由 Exstart → Exchange → Full,MTU 问题基本确认。
华为查看 OSPF 接口配置:
display ospf interface Vlanif10
display current-configuration | include ospfH3C 查看:
display ospf interface GigabitEthernet1/0/1
display current-configuration | include ospf重点比对:
如果直连链路,建议临时将两端都设为 p2p(point-to-point)来简化 DR/BDR 与 MTU 问题:
华为:
interface X
ospf network-type p2pH3C:
interface X
ospf network-type p2p查看 RID:
display ospf brief# 华为
interface X
ospf dr-priority 0/100
# H3C
interface X
ospf priority 0/100(设置优先级为 0 可以避免成为 DR,便于做测试)
在设备上开启 OSPF 包级 debug,或在链路上用 Wireshark 抓包(过滤 ospf)
# H3C
debugging ospf packet
# 华为
debugging ip packet error 抓到的关键点:DD 包里 MTU 字段、DD 包的 flags(I/ M/ MS/ More/ Master/Slave)。若一侧持续发带有本端 MTU 的 DD,而另一侧不回以合适的应答,很可能是 MTU/实现差异。
# 华为
reset ospf process
# H3C
reset ospf x(会短暂影响路由,生产环境谨慎,最好在维护时段或先在一端做)

这不是玄学,是网络现实。 所谓“透明安全设备”,其实从不真的“透明”。
常见原因如下
现象 | 背后机制 |
|---|---|
ARP/MAC 表老化不及时 | 安全设备内部桥接缓存旧表项,报文路径不对称,OSPF 单播包被错转或丢弃。 |
协议号 89 被检查或缓存 | 某些防火墙对 OSPF(IP 协议 89)报文做会话跟踪或深度检测,导致延迟、乱序。 |
路径 MTU 被缩小 | 安全设备添加 VLAN Tag 或隧道封装,路径 MTU 实际 <1500,DD 包被丢。 |
硬件 buffer 锁死 | ASIC 芯片层报文缓存卡死,拔插线重新协商物理层、刷新缓冲。 |
虚拟“网桥”内部转发表错误 | 三台设备串联,任意一台缓存错误,整个链路 OSPF 报文即失真。 |
而拔插线同时触发了三件事:
1️⃣ 刷新 MAC/ARP 表(重新学习邻居);
2️⃣ 清空安全设备会话表;
3️⃣ 重新协商物理层链路(Link Re-Negotiation)。
结果——链路“洗白”,DD 包终于能正常往返。

因为设备认为:
“我收到的包格式没问题呀。”
OSPF 只统计格式错误、认证失败、校验错误;逻辑不同步(比如包延迟、乱序、丢失)并不会计入 error。所以 Error=0 反而是陷阱: 看似一切正常,其实邻居“卡在中间”谈崩了。

排查顺序 | 操作 | 目的 |
|---|---|---|
① MTU 检查 | ping -s 1472 -M do | 确认路径 MTU 没被安全设备截断 |
② ACL 检查 | 检查协议号 89 | 确保 OSPF 报文被透传 |
③ network-type | 设为 p2p | 避免 DR/BDR + 多播干扰 |
④ 抓包比对 | 看 DD 包序号是否成对 | 验证报文有无延迟或丢失 |
⑤ 接口重启 | shutdown / undo shutdown | 代替拔插线刷新状态 |
⑥ 定期清表 | 清 ARP/MAC / 会话表 | 防止透明设备缓存失真 |
逻辑问题分析半天,物理层动手三秒。
在网络世界里,“透明”设备往往最不透明,“Error=0”并不代表世界安宁。
下次再遇到 OSPF 卡在 Exstart, 别急着背锅给 MTU 或厂商兼容, 先看看—— 中间那几台“透明设备”, 是不是该被拔醒了