首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >震惊,一个问题让众多大佬夜不能寐,原因竟然是……

震惊,一个问题让众多大佬夜不能寐,原因竟然是……

作者头像
释然IT杂谈
发布2025-11-19 15:51:48
发布2025-11-19 15:51:48
310
举报
文章被收录于专栏:释然IT杂谈释然IT杂谈
晚上群友在群里问了一个问题

简短场景复述

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

下面先做原因分析(为什么会卡),再给出一步步可执行的解决方案,便于直接复制到运维工单使用。

一、为什么会卡在 Exstart(分析 —— 趋势与机理)

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 常用命令,便于直接执行。

1) 确认邻居状态与角色(Master/Slave)

华为:

代码语言:javascript
复制
display ospf peer verbose

H3C(Comware):

代码语言:javascript
复制
display ospf peer verbose

看点:是否都显示 Exstart,以及哪一侧是 Master、哪一侧是 Slave。Master 一般先发 DD 包。

2) 核对接口 MTU(首要步骤)

华为查看接口 MTU:

代码语言:javascript
复制
display interface GigabitEthernet0/0/1 
# 或 Vlanif
display interface Vlanif10

华为查看 OSPF 接口信息(是否启用 MTU 检查):

代码语言:javascript
复制
display ospf interface GigabitEthernet0/0/1

查找 MTU Enable: Yes/No、OSPF 接口显示的 MTU 值。

H3C 查看接口 MTU:

代码语言:javascript
复制
display interface GigabitEthernet1/0/1

对比两端 MTU(物理与 SVI 都要看)。注意 VLAN tag 会使有效 MTU 差 4 字节的场景(某些平台默认考虑/不考虑)。

3) 立即试验性修复(快速验证 MTU 是否为罪魁)

方案 A(统一 MTU)—— 在双方将接口 MTU 设为相同(例如 1500)

华为:

代码语言:javascript
复制
interface GigabitEthernet1/0/1 
  mtu 1500

H3C:

代码语言:javascript
复制
interface GigabitEthernet1/0/1 
  mtu 1500

方案 B(绕过 MTU 检查)—— 在华为侧临时禁用 OSPF MTU 检查(若已开启):

代码语言:javascript
复制
interface Vlanif10
  undo ospf mtu-enable

说明:若修改 MTU 或禁用后邻居由 Exstart → Exchange → Full,MTU 问题基本确认。

4) 核对 OSPF 基本配置(Area / Network-type / Auth / Timers)

华为查看 OSPF 接口配置:

代码语言:javascript
复制
display ospf interface Vlanif10
display current-configuration | include ospf

H3C 查看:

代码语言:javascript
复制
display ospf interface GigabitEthernet1/0/1
display current-configuration | include ospf

重点比对:

  • Area ID 是否完全一致(注意十进制 vs 点分表示)
  • network-type(broadcast/p2p)是否一致
  • authentication mode & key 是否一致
  • hello/dead timers 是否一致

如果直连链路,建议临时将两端都设为 p2p(point-to-point)来简化 DR/BDR 与 MTU 问题

华为:

代码语言:javascript
复制
interface  X
  ospf network-type p2p

H3C:

代码语言:javascript
复制
interface  X
  ospf network-type p2p

5) 看 Router ID / DR 优先级

查看 RID:

代码语言:javascript
复制
display ospf brief
代码语言:javascript
复制
# 华为
interface X
  ospf dr-priority 0/100

# H3C
interface X
  ospf priority 0/100

(设置优先级为 0 可以避免成为 DR,便于做测试)

6) 抓包 / 调试(当上面没定位到问题)

在设备上开启 OSPF 包级 debug,或在链路上用 Wireshark 抓包(过滤 ospf

代码语言:javascript
复制
# H3C
debugging ospf packet

# 华为
debugging ip packet error 

抓到的关键点:DD 包里 MTU 字段、DD 包的 flags(I/ M/ MS/ More/ Master/Slave)。若一侧持续发带有本端 MTU 的 DD,而另一侧不回以合适的应答,很可能是 MTU/实现差异。

7) 最后手段:重启 OSPF 进程(谨慎)

代码语言:javascript
复制
# 华为
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 包终于能正常往返。

四、为什么 Error=0 ?

因为设备认为:

“我收到的包格式没问题呀。”

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 或厂商兼容, 先看看—— 中间那几台“透明设备”, 是不是该被拔醒

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 释然IT杂谈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、为什么会卡在 Exstart(分析 —— 趋势与机理)
  • 二、快速排查流程(按优先级,越早越能命中问题)
    • 1) 确认邻居状态与角色(Master/Slave)
    • 2) 核对接口 MTU(首要步骤)
    • 3) 立即试验性修复(快速验证 MTU 是否为罪魁)
    • 4) 核对 OSPF 基本配置(Area / Network-type / Auth / Timers)
    • 5) 看 Router ID / DR 优先级
    • 6) 抓包 / 调试(当上面没定位到问题)
    • 7) 最后手段:重启 OSPF 进程(谨慎)
    • 三、为什么“拔插线”能救命?
    • 四、为什么 Error=0 ?
    • 五、以后遇到这种情况怎么办?
    • 六、总结一句话
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档