1. 为什么需要动态路由协议

静态路由适合规模较小、拓扑稳定的网络,但随着网络扩大,会出现:

  • 路由数量增加,人工配置成本高
  • 拓扑变化后需要人工调整
  • 多路径环境难以自动重新计算最优路径

动态路由协议的核心作用:

1
2
3
4
5
6
发现邻居
→ 交换路由/拓扑信息
→ 自动计算最佳路径
→ 拓扑变化
→ 自动重新收敛
→ 更新 RIB/FIB

IGP(Interior Gateway Protocol)主要用于一个自治系统内部。

常见:

1
2
3
OSPF
EIGRP
IS-IS

2. OSPF Neighbor、Hello 与 Router ID

OSPF 直接封装在 IP 中:

1
2
3
4
Ethernet
→ IPv4
→ Protocol 89
→ OSPF

不使用 TCP/UDP。

Hello

Hello 用于:

  • 发现 OSPF Neighbor
  • 维护 Neighbor Relationship
  • 携带 DR/BDR 等相关信息

典型 Ethernet Broadcast / Point-to-Point:

1
2
Hello Interval = 10s
Dead Interval = 40s

邻居已经进入 Full 后仍然持续发送 Hello。

如果接口仍 Up,但持续收不到有效 Hello:

1
2
Dead Interval 到期
→ Neighbor Down

如果物理接口直接 Down:

1
2
3
Interface Down
→ 可以快速感知
→ 不需要等待 Dead Interval

Router ID

Router ID 是 OSPF Router 的 32-bit 身份标识。

Cisco 常见选择逻辑:

1
2
3
1. 手工 router-id
2. 最高 Loopback IP
3. 最高 Up 状态非 Loopback L3 Interface IP

Router ID 不等于“数据包转发地址”。


3. OSPF Neighbor State、DR/BDR 与 LSDB 同步

主要状态:

1
2
3
4
5
6
7
Down
→ Init
→ 2-Way
→ ExStart
→ Exchange
→ Loading
→ Full

含义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Init
= 已收到对方 Hello
但对方 Hello 的 Neighbor List 中还没有我的 RID

2-Way
= 对方 Hello 的 Neighbor List 中已经出现我的 RID
双向可见性确认

ExStart
= 协商 DBD Master/Slave、Sequence

Exchange
= 交换 DBD

Loading
= LSR 请求缺失 LSA
LSU 返回 LSA
LSAck 确认

Full
= 该邻接关系完成所需 LSDB 同步

DBD / LSR / LSU / LSAck

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DBD
= Database Description
= LSDB 内容摘要/目录

LSR
= Link-State Request
= 请求缺失 LSA

LSU
= Link-State Update
= 携带一个或多个 LSA

LSAck
= Link-State Acknowledgment
= 确认收到 LSA

Broadcast Network 中的 DR/BDR

选举规则:

1
2
3
1. Interface Priority 越高越优
2. Priority 相同 → Router ID 越高越优
3. Priority = 0 → 无资格成为 DR/BDR

DR/BDR:

1
2
DR   = Designated Router
BDR = Backup Designated Router

DROther:

1
2
3
DROther ↔ DR  = Full
DROther ↔ BDR = Full
DROther ↔ DROther = 通常保持 2-Way

DR/BDR 是:

1
每个 Multiaccess Segment 独立选举

不是:

1
每个 Area 一个 DR/BDR

DR/BDR 不抢占:

1
2
3
4
5
6
7
8
9
现有 DR = R1
现有 BDR = R2

后来 R4 Priority 更高
→ 不会立即抢 DR

DR R1 Down
→ BDR R2 升为 DR
→ 再选新的 BDR

4. LSA、LSDB、SPF、RIB 与 FIB

OSPF 核心链:

1
2
3
4
5
6
7
8
9
10
11
12
13
Neighbor / Adjacency
↓
LSA Flooding
↓
LSDB
↓
SPF / Dijkstra
↓
RIB
↓
FIB
↓
实际数据转发

LSA

LSA(Link-State Advertisement)是拓扑信息单位。

LSDB

LSDB:

1
Link-State Database

保存本 Area 的链路状态拓扑信息。

同一个 Area 内 Router 通过 LSA Flooding 获得相应拓扑信息。

SPF

每台 Router 根据自己的 LSDB 独立运行 SPF。

即使 LSDB 相同:

1
2
R1 以自己为根跑 SPF
R2 以自己为根跑 SPF

因此最终 Routing Table 可以不同。

RIB

RIB:

1
Routing Information Base

控制平面的路由数据库。

典型查看:

1
show ip route

FIB

FIB:

1
Forwarding Information Base

是为数据平面快速转发准备的转发结构。

CEF 可概念化为:

1
2
3
FIB
+
Adjacency Information

完整逻辑:

1
2
3
4
5
6
LSDB
→ SPF
→ RIB
→ FIB
→ Adjacency
→ CEF Forwarding

ARP 与 Adjacency 不相同:

1
2
3
4
5
ARP:
Next-Hop IPv4 → MAC

CEF Adjacency:
保存实际下一跳转发所需的 L2 Rewrite 等信息

5. OSPF Cost、最短路径与 ECMP

OSPF 最终根据 Cost 进行路径选择。

自动 Cost:

1
Cost = Reference Bandwidth / Interface Bandwidth

经典 Cisco 默认:

1
Reference Bandwidth = 100 Mbps

因此:

1
2
3
100M → Cost 1
1G → 也可能 Cost 1
10G → 也可能 Cost 1

无法区分现代高速链路。

可以统一调整 Reference Bandwidth,例如:

1
2
router ospf 1
auto-cost reference-bandwidth 100000

单位通常为 Mbps:

1
100000 Mbps = 100 Gbps

整个 OSPF Domain 应保持一致。

也可以直接修改接口 Cost:

1
2
interface Ethernet0/0
ip ospf cost 100

Path Cost

路径 Cost 是沿路径相关出接口 Cost 的累加:

1
2
3
4
R1 → R2 = 10
R2 → R4 = 20

Total Cost = 30

OSPF 选择更低 Cost。

ECMP

ECMP:

1
2
Equal-Cost Multi-Path
等价多路径

如果:

1
2
Path A Cost = 30
Path B Cost = 30

在设备最大路径数量等条件允许时,可以同时安装。

如果:

1
2
Path A = 30
Path B = 31

则不再是 ECMP。

现代设备通常使用 Flow-Based Hashing:

1
2
3
Flow
→ Hash
→ Next-Hop / Path

而不是简单逐包轮流发送。

对比 EtherChannel:

1
2
3
4
5
EtherChannel:
Flow → Member Link

ECMP:
Flow → L3 Next-Hop / Path

6. OSPF Area、Area 0 与 ABR

单 Area 过大可能导致:

1
2
3
4
LSA Flooding 范围大
LSDB 大
拓扑变化影响范围大
SPF / 控制平面压力增加

因此 OSPF 可以划分多个 Area。

Area 0

1
Area 0 = Backbone Area

标准多区域设计:

1
2
3
4
5
Area 10
↓
Area 0
↓
Area 20

非骨干 Area 原则上需要连接 Backbone Area。

ABR

ABR:

1
Area Border Router

同时连接多个 Area。

例如:

1
2
3
Area 10 —— R3 —— Area 0
↑
ABR

ABR 按 Area 分别维护 LSDB:

1
2
Area 10 LSDB
Area 0 LSDB

不会把所有 Area 的详细拓扑混成一个 LSDB。

Area 10 内部发生变化:

1
2
3
4
5
6
7
8
9
Area 10 内 LSA Flooding
↓
ABR 更新 Area 10 LSDB
↓
重新计算
↓
如果跨区域可达性/Metric 发生变化
↓
向其他 Area 更新区域间路由信息

其他 Area 不需要知道:

1
2
3
Area 10 内部具体哪根链路断了
内部从 R6 改走 R7
内部 DR 是谁

但需要知道:

1
2
3
Prefix
可达性
区域间 Metric

因为这些信息会影响其他 Area 的选路。

OSPFv2 中区域间 Prefix 信息会涉及 Type 3 Summary LSA。


7. Default Route 与 OSPF 故障收敛

出口 Router:

1
R4 → ISP

如果 R4 自己存在:

1
0.0.0.0/0 → ISP

可以:

1
2
router ospf 1
default-information originate

向 OSPF Domain 注入默认路由。

普通:

1
default-information originate

通常要求本机 RIB 已存在默认路由。

而:

1
default-information originate always

即使本机没有默认路由,也仍然向 OSPF 发布:

1
0.0.0.0/0

因此可能产生黑洞风险。

数据转发

例如:

1
R1 → R2 → R3 → R4 → ISP

R1:

1
2
3
8.8.8.8
→ 匹配 0.0.0.0/0
→ Next-Hop R2

R2:

1
2
3
8.8.8.8
→ 查自己的 FIB
→ Next-Hop R3

逐跳独立转发。

LSA Flooding 时不会简单地每经过一个 Router 就把 LSA 中的“下一跳”改成本机。

下一跳是本地 Router 根据 OSPF 拓扑计算得到的本地转发结果。

故障收敛

1
2
3
4
5
6
7
8
故障
→ LSA 更新
→ Flooding
→ LSDB 更新
→ SPF
→ RIB
→ FIB
→ 新路径

8. BFD

BFD:

1
2
Bidirectional Forwarding Detection
双向转发检测

核心职责:

1
快速检测转发路径是否存活

它不负责:

1
2
3
计算 OSPF 路由
运行 SPF
生成 OSPF LSA

BFD 检测故障:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
BFD Down
↓
通知 OSPF
↓
OSPF Neighbor Down
↓
LSA 更新
↓
Flooding
↓
LSDB
↓
SPF
↓
RIB / FIB

BFD 可以服务:

1
2
3
4
OSPF
EIGRP
BGP
...

BFD 不取代 OSPF Hello。

1
2
3
4
5
6
OSPF Hello:
发现/维护 OSPF Neighbor
参与 OSPF 自身邻居机制

BFD:
快速检测路径是否还活着

核心:

1
2
BFD 负责快速发现故障
OSPF 负责故障后的路由收敛

9. EIGRP:Metric、DUAL 与备用路径

EIGRP 与 OSPF 的核心思路不同。

OSPF:

1
2
3
LSA
→ LSDB
→ SPF / Dijkstra

EIGRP:

1
2
3
4
5
Neighbor
→ 路由/距离信息
→ Topology Table
→ DUAL
→ Successor / Feasible Successor

默认 K Values

经典 EIGRP 默认:

1
2
3
4
5
K1 = 1
K2 = 0
K3 = 1
K4 = 0
K5 = 0

默认 Metric 主要考虑:

1
2
K1 → Bandwidth
K3 → Delay

即:

1
2
3
Minimum Bandwidth
+
Cumulative Delay

Bandwidth:

1
2
路径相关接口 bandwidth 参数
→ 取最小值

Delay:

1
2
沿路径相关 Delay
→ 累加

注意:

1
2
3
4
5
6
7
8
speed
= 物理接口工作速率

bandwidth
= 协议计算使用的逻辑参考参数

actual traffic
= 当前真实业务流量

bandwidth 通常不直接限制接口物理速率。

RD / FD / Successor

RD:

1
Reported Distance

表示:

1
2
邻居告诉我:
“我自己距离目标有多远”

FD:

1
Feasible Distance

表示本 Router 经某路径到目标的总 Metric。

Successor:

1
当前到目标 Prefix 的最佳下一跳 Router

Feasible Successor

FS:

1
Feasible Successor

是预先确认满足无环条件的备用下一跳。

Feasibility Condition:

1
RD(candidate) < FD(successor)

满足:

1
→ 可以成为 Feasible Successor

Successor 故障且存在 FS:

1
2
3
4
Successor Down
→ FS 快速接替
→ 成为新的 Successor
→ 重新评估剩余候选路径

不存在 FS:

1
2
3
4
5
6
7
Successor Down
→ Route Active
→ Query
→ 邻居计算
→ Reply
→ 找到新路径
→ Passive

EIGRP 中:

1
2
3
4
5
Passive
= 正常稳定状态

Active
= 正在通过 DUAL Query/Reply 寻找路径

FS 不等于简单的“第二优路径”。

必须满足:

1
RD(candidate) < FD(successor)

10. 配置、Show 与故障排查

OSPF 基础配置

1
2
3
4
router ospf 1
router-id 1.1.1.1
network 10.0.12.0 0.0.0.3 area 0
network 192.168.10.0 0.0.0.255 area 0

Wildcard:

1
2
0 = 必须匹配
1 = 不关心

例如:

1
2
3
4
5
6
7
/30
Mask 255.255.255.252
Wildcard 0.0.0.3

/24
Mask 255.255.255.0
Wildcard 0.0.0.255

OSPF network 命令本质:

1
2
3
匹配本机 Interface IP
→ 让接口参与指定 OSPF Area
→ 相应接口 Prefix 进入 OSPF

终端 LAN 可以:

1
2
router ospf 1
passive-interface Ethernet0/2

使 Prefix 仍可发布,但不在该接口建立 OSPF Neighbor。

OSPF Cost

1
2
interface Ethernet0/0
ip ospf cost 100

Reference Bandwidth:

1
2
router ospf 1
auto-cost reference-bandwidth 100000

EIGRP 基础配置示例

1
2
router eigrp 100
network 10.0.0.0 0.0.0.255

具体 named/classic mode 等配置形式视 IOS/平台而定。

OSPF 验证

1
2
3
4
5
6
7
show ip ospf neighbor
show ip ospf interface brief
show ip ospf interface
show ip ospf
show ip route ospf
show ip route
show ip protocols

EIGRP 验证

1
2
3
4
show ip eigrp neighbors
show ip eigrp topology
show ip route eigrp
show ip protocols

通用接口检查

1
2
3
show ip interface brief
show interfaces
show running-config

连通性验证

1
2
ping <destination>
traceroute <destination>

OSPF 常见排障逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
1. Interface 是否 Up?
↓
2. IP / Mask 是否正确?
↓
3. OSPF 是否启用在正确接口?
↓
4. Area 是否匹配?
↓
5. Hello / Dead 是否匹配?
↓
6. Authentication 是否匹配?
↓
7. Neighbor State 是否正常?
↓
8. LSDB 是否获得目标信息?
↓
9. RIB 是否安装目标 Prefix?
↓
10. FIB / Next-Hop / ARP 是否正常?
↓
11. Ping / Traceroute 验证

不要因为:

1
2
R1# show ip ospf neighbor
FULL

就判断:

1
“全网 OSPF 正常”

OSPF Neighbor 是本地链路上的关系。

R1 与 R2 Full:

1
只能证明 R1 ↔ R2 这一邻接正常

不能证明:

1
2
3
4
R2 ↔ R4
R3 ↔ R4
整个 OSPF Domain
目标 Prefix 的发布

全部正常。


V5 最终核心链

OSPF:

1
2
3
4
5
6
7
8
9
Hello
→ Neighbor
→ LSA
→ LSDB
→ SPF / Dijkstra
→ Cost
→ RIB
→ FIB
→ Forwarding

多区域:

1
2
3
4
Area
→ 限制详细拓扑信息传播范围
→ ABR 连接不同 Area
→ Area 0 作为 Backbone

故障:

1
2
3
4
5
6
7
Failure
→ Detection
→ LSA Flooding
→ LSDB
→ SPF
→ RIB/FIB
→ Convergence

BFD:

1
2
3
Fast Failure Detection
→ 通知 Routing Protocol
→ Routing Protocol 完成收敛

EIGRP:

1
2
3
4
5
6
Neighbor
→ Topology Table
→ DUAL
→ RD / FD
→ Successor
→ Feasible Successor

Feasibility Condition:

1
RD(candidate) < FD(successor)

一句话总结:

OSPF 通过 LSA 建立拓扑视图,再由 SPF 根据 Cost 计算最短路径;EIGRP 通过邻居通告和 DUAL 选择 Successor,并利用 Feasible Success