第53篇:OSPF Hello 报文与邻居建立条件
关键词
OSPF、Hello 报文、Router-ID、Area ID、认证、Hello 间隔、Dead 间隔、MTU
一、Hello 报文的作用
Hello 报文是 OSPF 最基本也最重要的报文。它的主要作用有:
- 发现邻居——发现链路上的其他 OSPF 路由器
- 维护邻居关系——周期性发送,超时即认为邻居 Down
- 参数协商——确保两端参数一致
- DR/BDR 选举——Hello 报文中携带 DR/BDR 字段
Hello 报文发送到组播地址: - 224.0.0.5(AllSPFRouters)——所有 OSPF 路由器 - 224.0.0.6(AllDRouters)——仅 DR 和 BDR
二、Hello 报文格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Version=2 | Type=1 | Packet Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Router ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Area ID |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Checksum | Auth Type |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authentication |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Authentication |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Network Mask | Hello Interval | Options |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Rtr Pri | Router Dead Interval |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Designated Router |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Backup Designated Router |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor 1 (Router ID) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Neighbor 2 (Router ID) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ... |
Hello 报文中包含的关键字段: - Network Mask——接口的子网掩码 - Hello Interval——发送 Hello 的时间间隔(秒) - Router Dead Interval——宣告邻居失效的超时时间 - Options——可选能力(如 NSSA、Opaque LSA 等) - Rtr Pri(Router Priority)——用于 DR/BDR 选举的优先级 - DR / BDR——当前的 DR 和 BDR 地址 - Neighbor 列表——最近收到的邻居列表
三、邻居建立的条件
两台路由器要建立邻居关系,Hello 报文中的以下参数必须一致:
条件 1:Area ID 相同
两台路由器必须在同一个区域内。
Area 0 ───── RouterA ─── 不匹配 ─── RouterB ───── Area 1
↓
无法建立邻居
条件 2:认证信息一致
如果配置了认证(明文或 MD5),两端必须匹配。
# 接口下配置明文认证
interface GigabitEthernet0/0/0
ospf authentication-mode simple plain huawei123
# 两端密码必须相同
条件 3:Hello Interval 和 Dead Interval 一致
默认值(广播/P2P 网络): - Hello Interval:10 秒 - Dead Interval:40 秒(4 倍 Hello 间隔)
# 修改 Hello 间隔(建议保持默认)
interface GigabitEthernet0/0/0
ospf timer hello 5 # 5 秒
ospf timer dead 20 # 20 秒(通常保持 4 倍关系)
如果两端 Hello 或 Dead 间隔不一致,邻居将无法建立。
条件 4:Subnet Mask 一致
在广播网络中,两端接口的子网掩码必须一致。
RouterA: 10.0.12.1/24
RouterB: 10.0.12.1/30 ← 掩码不匹配,邻居建立失败
注意:P2P 网络不校验掩码,因为 P2P 只有两端。
条件 5:MTU 一致(实为隐性要求)
虽然 OSPF 协议本身没有强制要求 MTU 一致,但 DBD 报文大小受 MTU 限制。如果两端 MTU 不同,可能导致 ExStart/Exchange 状态卡住。
推荐配置:
interface GigabitEthernet0/0/0
mtu 1500
条件 6:Network Type 一致
两端接口的网络类型必须匹配,否则会导致 LSA 无法正确解析。
| 网络类型 | 典型场景 |
|---|---|
| Broadcast | 以太网(默认) |
| P2P | 串行链路或手动配置 |
| NBMA | Frame Relay(历史) |
| P2MP | 非广播多路访问 |
# 将广播接口改为 P2P(加速邻居建立,消除 DR 选举)
interface GigabitEthernet0/0/0
ospf network-type p2p
四、默认 Hello/Dead 间隔
| 网络类型 | Hello 间隔 | Dead 间隔 |
|---|---|---|
| Broadcast | 10 秒 | 40 秒 |
| P2P | 10 秒 | 40 秒 |
| NBMA | 30 秒 | 120 秒 |
| P2MP | 30 秒 | 120 秒 |
五、Debug 示例:Hello 报文交互
# 开启 OSPF 调试
debugging ospf packet hello
# 输出示例
OSPF: Send Hello Packet from GE0/0/0 to 224.0.0.5
Router-ID: 1.1.1.1
Area: 0.0.0.0
Neighbor Count: 0
OSPF: Receive Hello Packet from GE0/0/0 src: 10.0.12.2
Router-ID: 2.2.2.2
Area: 0.0.0.0
Neighbor: 1.1.1.1 ← 关键:看到自己,进入 2-Way
六、常见故障场景
| 现象 | 原因 | 解决方法 |
|---|---|---|
| 邻居卡在 Init | 对方没收到自己的 Hello | 检查 ACL、防火墙、组播 |
| 邻居卡在 Init | 对方没将自己的 RID 加入 Neighbor 列表 | 检查 Area ID、认证 |
| 邻居反复振荡 | Hello/Dead 间隔不一致 | display ospf peer 对比 |
| 无法建立邻居 | 掩码不匹配 | 检查接口 IP 配置 |
| 邻居在 ExStart 卡住 | MTU 不匹配 | 统一两端 MTU |
七、总结
邻居建立条件(Hello 参数一致性):
- Area ID 相同
- 认证信息一致
- Hello/Dead 间隔一致
- 子网掩码一致(广播网络)
- MTU 一致(隐性要求)
- 网络类型一致 │ ▼ 邻居建立(2-Way) │ ▼ 邻接建立(Full)
八、思考
- OSPF Hello 报文发送到哪些组播地址?各是什么含义?
- 哪些参数必须两端一致才能建立 OSPF 邻居?
- 如果两端 Hello 间隔分别是 10 秒和 20 秒,会发生什么?
- 在广播网络中,为什么需要检查子网掩码一致?
- 如果将接口改为
ospf network-type p2p,对 Hello 报文的检查有什么影响?(提示:不再检查掩码和 DR 选举)
下篇预告:第54篇《OSPF 区域设计——骨干区域与非骨干区域的约束》——深入 OSPF 的区域划分与路由传递规则。