AIDC 学习日志 Day 3:OSPF Underlay 实验、故障排查与深入解析tags: AIDC, 数据中心网络, Underlay, OSPF, ECMP, VRP, 故障排查, 实验
!abstract 本节概览
今天从理论进入实验思维,围绕 2 Spine、2 Leaf 的 OSPF Underlay,学习"接口状态 → 直连 IP → OSPF 邻居 → Loopback 路由 → ECMP → 故障收敛"的完整验证链条,并设计链路故障和 Cost 变化实验。
上一课:\[AIDC学习日志-第02天-Underlay路由设计]
一、今日学习目标与完成情况
- 理解 OSPF Underlay 实验拓扑
- 掌握物理接口、Loopback 和
/31地址规划 - 理解接口、直连、邻居、路由四层验证顺序
- 掌握 VRP 下 OSPF Underlay 的配置逻辑
- 验证 OSPF 邻居
Full状态 - 通过路由表识别 ECMP
- 理解指定源地址 Ping 的验证作用
- 设计单链路故障收敛实验
- 设计修改 OSPF Cost 导致 ECMP 消失的实验
- 在 eNSP、EVE-NG 或真实设备上完成实际输入和输出记录
!success 今日结论
理论和实验设计任务已完成。下一步重点是动手搭建拓扑、输入配置、保存设备输出,并对真实故障现象进行比对。
二、实验拓扑
text
Spine1
/ \
Leaf1 Leaf2
\ /
Spine2
连接关系:
text
Leaf1 ↔ Spine1
Leaf1 ↔ Spine2
Leaf2 ↔ Spine1
Leaf2 ↔ Spine2
设计特点:
- Leaf1 和 Leaf2 不直接连接;
- Spine1 和 Spine2 不直接连接;
- 每台 Leaf 连接两台 Spine;
- Leaf1 到 Leaf2 存在两条潜在路径;
- 两条路径等价时可以形成 ECMP。
三、地址规划
Loopback 地址
| 设备 | Loopback0 | 作用 |
|---|---|---|
| Spine1 | 1.1.1.1/32 |
稳定设备地址、OSPF Router ID |
| Spine2 | 2.2.2.2/32 |
稳定设备地址、OSPF Router ID |
| Leaf1 | 3.3.3.3/32 |
稳定设备地址、源地址、后续可作 VTEP |
| Leaf2 | 4.4.4.4/32 |
稳定设备地址、目标地址、后续可作 VTEP |
物理点到点链路
| 链路 | Spine 端 | Leaf 端 |
|---|---|---|
| Spine1---Leaf1 | 10.0.0.0/31 |
10.0.0.1/31 |
| Spine2---Leaf1 | 10.0.0.2/31 |
10.0.0.3/31 |
| Spine1---Leaf2 | 10.0.0.4/31 |
10.0.0.5/31 |
| Spine2---Leaf2 | 10.0.0.6/31 |
10.0.0.7/31 |
记忆方法:
text
Spine 端使用偶数地址
Leaf 端使用奇数地址
四、四层验证模型
今天明确了排障不能跳层。每次实验按以下顺序进行:
text
1. 接口层:接口是否 Up
2. 直连 IP 层:相邻接口地址能否 Ping
3. OSPF 层:邻居是否达到 Full
4. 路由层:Loopback 路由和 ECMP 是否存在
如果直连 IP 不通,不应先判断 OSPF;如果邻居正常但没有 ECMP,应检查 Cost 和路由选择,而不是马上怀疑物理链路。
五、接口层验证
命令:
text
display ip interface brief
关注:
- 接口名称;
- IP 地址;
- Physical 状态;
- Protocol 状态。
理想状态:
text
up/up
常见判断:
| 状态 | 可能含义 |
|---|---|
up/up |
物理层和协议层正常 |
down/down |
链路断开、接口关闭或拓扑未连接 |
up/down |
物理层通常正常,但协议层存在问题 |
六、直连 IP 层验证
Leaf1 连接 Spine1、Spine2 的地址分别为:
text
Leaf1:10.0.0.1、10.0.0.3
Spine1:10.0.0.0
Spine2:10.0.0.2
Leaf1 执行:
text
ping 10.0.0.0
ping 10.0.0.2
直连 Ping 失败时,优先检查:
- 接口是否真的相连;
- 接口是否
shutdown; - IP 地址和掩码是否正确;
- 是否切换为三层接口;
- 对端接口是否启用。
七、OSPF 邻居层验证
命令:
text
display ospf peer brief
Leaf1 预期有两个邻居:
text
1.1.1.1 Full
2.2.2.2 Full
Spine1 预期有两个邻居:
text
3.3.3.3 Full
4.4.4.4 Full
这里显示的通常是邻居 Router ID,不一定是建立邻居的物理接口地址。
OSPF 状态简化
text
Down 没有收到有效 Hello
Init 收到 Hello,但对方未确认自己
2-Way 双方发现彼此
ExStart 协商数据库同步
Exchange 交换数据库摘要
Loading 请求详细链路状态
Full 数据库同步完成
点到点 Leaf-Spine 链路的理想状态是 Full。
八、VRP 配置示例
Leaf1
text
system-view
sysname Leaf1
interface GE1/0/1
undo portswitch
ip address 10.0.0.1 255.255.255.254
undo shutdown
quit
interface GE1/0/2
undo portswitch
ip address 10.0.0.3 255.255.255.254
undo shutdown
quit
interface LoopBack0
ip address 3.3.3.3 255.255.255.255
quit
ospf 1 router-id 3.3.3.3
area 0
network 10.0.0.0 0.0.0.1
network 10.0.0.2 0.0.0.1
network 3.3.3.3 0.0.0.0
quit
Spine1
text
system-view
sysname Spine1
interface GE1/0/1
undo portswitch
ip address 10.0.0.0 255.255.255.254
undo shutdown
quit
interface GE1/0/2
undo portswitch
ip address 10.0.0.4 255.255.255.254
undo shutdown
quit
interface LoopBack0
ip address 1.1.1.1 255.255.255.255
quit
ospf 1 router-id 1.1.1.1
area 0
network 10.0.0.0 0.0.0.1
network 10.0.0.4 0.0.0.1
network 1.1.1.1 0.0.0.0
quit
Spine2 配置逻辑
text
GE1/0/1:10.0.0.2/31
GE1/0/2:10.0.0.6/31
LoopBack0:2.2.2.2/32
Router ID:2.2.2.2
text
network 10.0.0.2 0.0.0.1
network 10.0.0.6 0.0.0.1
network 2.2.2.2 0.0.0.0
Leaf2 配置逻辑
text
GE1/0/1:10.0.0.5/31
GE1/0/2:10.0.0.7/31
LoopBack0:4.4.4.4/32
Router ID:4.4.4.4
text
network 10.0.0.4 0.0.0.1
network 10.0.0.6 0.0.0.1
network 4.4.4.4 0.0.0.0
!note
不同 CloudEngine 型号和 VRP 版本的接口名称、三层口默认状态和命令支持可能不同。部分设备默认已是三层接口,不需要
undo portswitch。
九、Loopback 路由与 ECMP 验证
Leaf1 执行:
text
display ip routing-table 4.4.4.4
重点观察:
- 目标前缀是否为
4.4.4.4/32; - 路由来源是否为 OSPF;
- 是否存在两个等价下一跳;
- 两条路径的 Cost 是否相同。
理想结果抽象为:
text
4.4.4.4/32
via 10.0.0.0 → Spine1
via 10.0.0.2 → Spine2
两个 OSPF 邻居为 Full 不代表一定形成 ECMP;只有到同一目标的多个等价最优下一跳同时进入路由表,才能确认 ECMP。
十、指定源地址 Ping
Leaf1 执行:
text
ping -a 3.3.3.3 4.4.4.4
验证链路:
text
Leaf1 Loopback 3.3.3.3
↓
Leaf2 Loopback 4.4.4.4
↓
返回 Leaf1 Loopback
失败时按顺序检查:
text
Leaf1 是否有 4.4.4.4/32
Leaf2 是否有 3.3.3.3/32
两端 Loopback 是否 Up
OSPF 是否发布 Loopback
是否有 ACL 或策略阻断
十一、故障实验一:关闭一条链路
在 Leaf1 上关闭连接 Spine1 的接口:
text
system-view
interface GE1/0/1
shutdown
预期结果:
GE1/0/1变为 Down;- Leaf1 与 Spine1 的 OSPF 邻居消失;
- Spine2 邻居仍保持
Full; 4.4.4.4/32不会消失;- 经 Spine1 的下一跳被删除;
- 只保留经 Spine2 的下一跳;
- 指定源 Ping 仍可能成功。
故障前:
text
4.4.4.4/32
via 10.0.0.0
via 10.0.0.2
收敛后:
text
4.4.4.4/32
via 10.0.0.2
恢复接口:
text
interface GE1/0/1
undo shutdown
等待邻居重新达到 Full 后,ECMP 可能恢复。
十二、故障实验二:修改 OSPF Cost
恢复链路后,在 Leaf1 的 GE1/0/2 上设置更高 Cost:
text
system-view
interface GE1/0/2
ospf cost 100
可能出现:
text
经 Spine1 总 Cost:20
经 Spine2 总 Cost:110
此时:
- 两个 OSPF 邻居仍可能为
Full; - 但高 Cost 路径不是等价最优路径;
- 路由表可能只保留经 Spine1 的下一跳;
- ECMP 消失。
查看:
text
display ip routing-table 4.4.4.4
恢复默认 Cost:
text
interface GE1/0/2
undo ospf cost
十三、课堂问答与批改
问题:两个邻居均为 Full,但目标路由只有一个下一跳,能否认定 Spine2 故障?
我的回答:
说明 OSPF 协议层没有问题,可能出现物理层问题。
批改:不能直接认定 Spine2 故障。邻居为 Full 说明邻接和数据库同步正常,基础物理/IP 通常也正常。应检查 Cost、ECMP 路径数量限制和路由策略。
问题:应该先检查什么?
我的回答:
应该先检查是不是因为 Cost 不是等价的。
批改:正确。应比较到同一目标 4.4.4.4/32 的完整路径总 Cost,而不是只看本地一个接口的 Cost。
问题:Cost 更高为什么邻居仍是 Full?
我的回答:
Cost 不影响 OSPF 完成所有链接,只影响 ECMP 选路。
批改:核心理解正确。更准确地说,Cost 影响最优路径选择和是否形成 ECMP,不影响邻居能否完成数据库同步。
问题:关闭 Leaf1 到 Spine1 后,目标路由会消失吗?
我的回答:
不会消失,只是 OSPF 路径逐渐消失,还能通过 Spine2 路径发现。
批改:结论正确。应表述为经 Spine1 的路径和下一跳被撤销,但 4.4.4.4/32 仍通过 Spine2 保留;不是目标路由逐渐消失。
十四、今天的排障思维
text
接口 Up?
↓
直连 IP 可达?
↓
OSPF 邻居 Full?
↓
目标 Loopback 路由存在?
↓
是否有多个等价下一跳?
↓
Cost 是否相等?
↓
去程和回程是否都存在?
↓
最后检查 ACL、策略和设备限制
十五、仍需实践和巩固
!question 保留的疑问
- 真实设备上
display ip routing-table如何完整显示两个 ECMP 下一跳; - OSPF 邻居从
Full到失效的实际时间; - 接口直接 Down 与只丢失 Hello 时的收敛差异;
- OSPF Hello、Dead、LSA、SPF 和 BFD 的具体时间关系;
- OSPF Cost 的默认计算、参考带宽调整和工程规划;
- 关闭链路后指定源 Ping 的实际丢包和恢复情况;
- VRP 不同 CloudEngine 型号对
undo portswitch、/31和 OSPF 命令的差异; - ECMP 哈希如何将不同业务流分配到不同链路。
十六、OSPF 深入与 Underlay 工程化
今天继续学习 OSPF 邻居状态机、Hello/Dead Timer、Cost、LSA、LSDB、网络类型和 OSPF/BGP Underlay 选择。本部分与前面的实验内容同属第 3 天,不拆分新日志。
OSPF 邻居状态机
text
Down → Init → 2-Way → ExStart → Exchange → Loading → Full
Down:尚未收到有效 Hello;Init:收到 Hello,但对端尚未确认自己;2-Way:双方确认彼此存在;ExStart:协商数据库同步主从;Exchange:交换数据库摘要;Loading:请求缺少的详细 LSA;Full:链路状态数据库同步完成。
当前点到点 Leaf-Spine Underlay 的目标状态是 Full。
Hello、Dead Timer 与收敛
常见默认值:
text
Hello:10 秒
Dead:40 秒
接口直接 Down 时通常可立即感知;接口仍 Up 但 Hello 被丢弃时,需要等待 Dead Timer。总收敛时间还包括 LSA 生成与泛洪、SPF 计算、路由表和转发表更新。
我的疑问
OSPF 重新计算路径是 60 秒吗?
结论:不是固定 60 秒,实际时间取决于接口状态、Hello/Dead、LSA、SPF 和设备配置。后续还需学习 BFD。
OSPF Cost 与参考带宽
OSPF 比较到同一目标的完整路径总 Cost:
text
路径 A:10 + 10 = 20
路径 B: 5 + 15 = 20
两条路径可以形成 ECMP。简化公式:
text
Cost = 参考带宽 ÷ 接口带宽
若参考带宽太低,1G、10G、100G 可能都显示 Cost 1。工程中应统一调整参考带宽或手工配置:
text
interface GE1/0/2
ospf cost 100
网络类型和 Loopback
Leaf-Spine Underlay 通常使用三层点到点链路,不需要 DR/BDR。广播网络才重点涉及 DR/BDR 和 Type 2 LSA。
Loopback 通常使用 /32,代表单个精确逻辑地址,适合作为 Router ID、管理地址、BGP 邻居地址和 VXLAN VTEP 地址。Loopback 可以发布路由,但不需要与远端建立邻居。
LSA、LSDB、路由表和转发表
当前 Area 0 点到点 Underlay 中最核心的是 Type 1 Router LSA。
text
LSA → LSDB → SPF 计算 → 路由表 → 转发表
- LSDB:保存 OSPF 收集到的完整拓扑和 LSA 信息;
- 路由表:SPF 计算后选出的最优路径;
- 转发表:硬件实际使用的转发结果。
我的回答
Router LSA 是核心类型;LSDB 是获取可用路径、还没开始 SPF,路由表是已经下载好的可直接使用路径。
批改:核心方向正确。LSDB 更准确地说是完整拓扑数据库,不直接等于可用路径;SPF 根据 LSDB 计算后才将最优路径写入路由表。
Full 邻居但没有目标路由
应检查:
text
display ospf interface
display ospf lsdb
display ospf routing
display ip routing-table 1.1.1.1
display current-configuration configuration ospf
我的回答
可能未配置 Loopback,或者 Loopback 未加入 OSPF;如果 LSA 存在但路由表没有,可能因 Cost 过高不是最优路由。
回答正确。还应排查路由策略、下一跳可达性、协议优先级和路由实例。
AIDC Underlay 为什么倾向单区域
原因包括:
- 结构简单;
- 避免复杂区域边界;
- 便于 ECMP;
- 便于自动化生成配置;
- 故障排查路径清晰;
- Loopback 和 VTEP 地址容易统一发布。
概括为:
text
简单、可扩展、可自动化、路径一致
我的回答
结构简单,避免复杂的区域边界,便于 ECMP、自动化生成配置和故障排查,Loopback 与 VTEP 地址容易统一发布。
回答完整正确。
十七、OSPF 与 BGP Underlay 初步对比
OSPF Underlay
优点:配置直观、收敛机制容易理解、适合中小规模实验、便于从 HCIP 衔接。局限是超大规模下 LSDB/SPF 压力增大,路径策略与扩展能力不如 BGP 灵活。
BGP Underlay
典型形式:
text
Leaf-Spine 之间建立 eBGP
Loopback 通过 BGP 发布
优点:路径控制强、扩展性好、适合大规模数据中心、与 EVPN Overlay 衔接自然、便于自动化。缺点是 AS、邻居、策略和路由属性更复杂。
初步选择原则:
text
学习和中小型实验:OSPF Underlay
大规模生产 AIDC:常见 BGP Underlay
VXLAN EVPN 控制平面:通常使用 BGP EVPN
这不是说 BGP 绝对优于 OSPF,而是取决于规模、厂商、自动化和设计要求。
十八、今日综合练习与回答记录
-
OSPF 邻居有几个关键步骤?
- 我的回答:七个关键步骤。
- 结论:正确,顺序为
Down → Init → 2-Way → ExStart → Exchange → Loading → Full。
-
接口
up/up但邻居 Down 的原因?- 我的回答:Area ID 不同、Hello 时间不一致、OSPF 未启用。
- 结论:正确;还可检查认证、网络类型、Router ID 冲突、MTU 和 ACL。
-
第一跳 Cost 更小能否直接判断路径更优?
- 我的回答:不能,要看总路径。
- 结论:正确,必须比较完整路径总 Cost。
-
为什么 Loopback 使用
/32?- 我的回答:更精细,只有一个接口地址。
- 结论:方向正确;准确说是
/32表示单个精确主机前缀,代表设备的单一逻辑身份。
-
Full 邻居但目标 Loopback 路由不存在检查什么?
- 我的回答:未配置 Loopback,或未加入 OSPF;可能哈希了,不一定是问题。
- 结论:前两点正确。哈希只影响已有 ECMP 路径的具体流量,不解释目标路由完全不存在。
十九、仍需实践和巩固
!question 后续实验重点
- OSPF 七个状态在真实设备输出中的表现;
- Hello、Dead、LSA、SPF 和 BFD 的实际时间关系;
- VRP 中参考带宽的全局调整方法;
- OSPF 网络类型和 DR/BDR 的区别;
- 被动接口的 VRP 具体配置;
display ospf lsdb与路由表的对应关系;- BGP Underlay 的 eBGP 邻居和 Loopback 发布配置。
二十、第三天最终总结与下一课
本文件现已合并第 3 天的 OSPF Underlay 实验、故障排查、OSPF 深入、LSA/LSDB 和 OSPF/BGP 对比内容。
text
地址规划
→ VRP 配置
→ OSPF 邻居
→ LSA/LSDB
→ SPF 与路由表
→ ECMP
→ 指定源 Ping
→ Cost 调整
→ 链路故障收敛
→ OSPF 与 BGP Underlay 选择
明天开始:BGP Underlay。
- BGP AS 和 eBGP 邻居
- Leaf-Spine 为什么常用 eBGP Underlay
- Loopback 如何通过 BGP 发布
- BGP 路由选择属性
- eBGP 与 OSPF Underlay 的差异
- BGP 如何衔接 VXLAN EVPN
后续内容继续追加到本文件,不新建第 4 天日志。