---
tags: [计算机网络, OSPF, BGP, 动态路由协议]
create time: 2026-05-18 01:10
---
# 动态路由协议:OSPF 与 BGP
## 概述
在大型网络中手动维护静态路由不现实——网络拓扑变化时每条路由都要手动更新。动态路由协议让路由器自动"学习"彼此的网络,发现链路故障后自动切换路径。核心分类:
| 类别 | IGP (内部网关协议) | EGP (外部网关协议) |
|------|-------------------|-------------------|
| 代表协议 | OSPF, IS-IS, RIP | **BGP** |
| 使用场景 | 同一个 AS(自治系统)内 | **不同 AS 之间**(即互联网 backbone)|
| 算法类型 | 链路状态 (LSA), 距离向量 | 路径向量 |
## OSPF(Open Shortest Path First)
### 基本概念
OSPF 是一种**链路状态**协议,每台路由器收集全网拓扑信息,独立计算最短路径树(SPF)。
```mermaid
flowchart TD
subgraph "AS 内部 — OSPF Area 0"
R1["Router A"] --- R2["Router B"]
R1 --- R3["Router C"]
R2 --- R3
R1 --- SW1["Network 192.168.1.0/24"]
R2 --- SW2["Network 10.0.0.0/8"]
R3 --- R4["Router D"]
R4 --- SW3["Network 172.16.0.0/12"]
end
style R1 fill:#DDA0DD,color:#000
style R3 fill:#FFD700,color:#000
```
### OSPF 工作流程
```mermaid
sequenceDiagram
participant R1 as Router A
participant R2 as Router B
participant R3 as Router C
Note over R1,R3: Step 1: Neighbor Discovery
R1->>R2: Hello Packet (multicast 224.0.0.5)
R2-->>R1: Hello + DB Description
R1->>R2: Adjacency Established ✅
Note over R1,R3: Step 2: LSA Exchange
R1->>R2: LSUpdate (我的直连网络: 192.168.1.0/24, cost=10)
R1->>R3: LSUpdate (我的直连网络: 192.168.1.0/24, cost=10)
Note over R1,R3: Step 3: SPF Calculation
R2->>R2: Dijkstra → 最优路径已构建
R3->>R3: Dijkstra → 最优路径已构建
Note over R1,R3: Step 4: Routing Table Updated
```
### OSPF 区域(Area)概念
OSPF 用"区域"来水平扩展:
| 区域类型 | 特点 |
|----------|------|
| **Backbone Area 0** | 所有其他 Area 必须连接到 Area 0 |
| Standard Area | 传播全部 LSA,路由表最大 |
| Stub Area | 不接受 Type 5 LSA(外部路由),注入一条 default route |
| Totally Stubby | Stub + 不接收 Type 3(区域间路由),只有一条默认路由 |
| NSSA (Not-So-Stubby Area) | Stub 的变种,允许引入外部路由(Type 7)|
```mermaid
flowchart LR
R1["ABR: Router A
Area 0 ↔ Area 1"] -->|"全部LSA"| A0["Area 0 (Backbone)"]
A0 -->|"全部LSA"| R1
R1 -->|"汇总路由 → Stub"| A1["Area 1 (Totally Stubby)
只有默认路由"]
style R1 fill:#FFD700,color:#000
style A0 fill:#DDA0DD,color:#000
style A1 fill:#98FB98,color:#000
```
- **ABR** (Area Border Router): 连接多个区域的边界路由器
- **ASBR** (AS Boundary Router): 引入外部路由的路由器
### Cost 计算
```
Cost = Reference_Bandwidth / Interface_Bandwidth
参考带宽默认值: 100 Mbps (10^8)
接口实际 Cost:
- 10 Mbps Ethernet: 100 / 10 = 10
- 100 Mbps Ethernet: 100 / 100 = 1
- 1 Gbps Ethernet: 100 / 1000 = 0 → 调为 1
- 10 Gbps Ethernet: 100 / 10000 = 0 → 需调整参考带宽
```
> [!warning] 参考带宽问题
> 如果参考带宽是 100Mbps,那么 Gigabit (1G) 和 TenGig (10G) 的 cost 都是 1,无法区分优劣。正确做法:
> ```bash
> router ospf 1
> distance ospf 10
> auto-cost reference-bandwidth 10000 # 单位 Mbps → 支持到 100G
> ```
### 查看 OSPF 状态
```bash
$ ip route | grep O # 过滤 OSPF learned routes
O 10.0.0.0/8 [110/20] via 192.168.1.1, eth0
OE1 172.16.0.0/12 [110/130] via 192.168.1.1, eth0
$ ip -d ospf show # FRR/quagga/Zebra
$ netstat -s | grep ospf # OSPF 统计信息
# Quagga/FRR 中的详细查看
$ vtysh
show ip ospf neighbor # 邻居关系
show ip ospf database # LSA 数据库
show ip ospf route # 计算出的 OSPF 路由
show ip ospf interface eth0 # 接口 OSPF 状态
```
## BGP(Border Gateway Protocol)
### BGP vs OSPF 对比
| 特性 | OSPF | BGP |
|------|------|-----|
| 范围 | AS 内部 (IGP) | **AS 间 (EGP)** |
| 算法 | 链路状态 (Dijkstra) | **路径向量** |
| 传输 | IP 协议号 89 | **TCP 179** |
| 收敛速度 | 秒级 | 分钟级(设计如此,稳定优先)|
| 可扩展性 | ~几千台路由器 | **全球互联网 10 万+ 前缀** |
| 策略控制 | 基于 cost | **丰富的 attribute 策略** |
### BGP 两种会话类型
```mermaid
flowchart LR
iBGP["iBGP
同一 AS 内的路由器"] -->|"传递可达信息
不改变 next-hop"| R1["AS 65001
Peer A -- Peer B"]
eBGP["eBGP
不同 AS 间"] -->|"交换路由并修改 next-hop"| R2["AS 65001 -- AS 65002
Peer A -- Peer B"]
style iBGP fill:#DDA0DD,color:#000
style eBGP fill:#98FB98,color:#000
```
### BGP 属性(Attributes)选路顺序
当多条路径可选时,按以下优先级逐条比较:
```mermaid
flowchart TD
Start["新路由到达"] --> Weight["① Cisco专有 Weight
本地有效"]
Weight --> LocPrf["② Local Preference
AS 内传递"]
LocPrf --> Originate["③ 本地起源 > 接收的路由"]
Originate --> AS_Path["④ AS Path 最短"]
AS_Path --> ORIGIN["⑤ Origin: IGD < EGP < INCOMPLETE"]
ORIGIN --> MED["⑥ MED: 越低越好"]
MED --> ebgp["⑦ eBGP > iBGP"]
ebgp --> IGP_Cost["⑧ IGP cost to next-hop"]
IGP_Cost --> Cluster["⑨ Cluster List 最短"]
Cluster --> RouterID["⑩ Router ID 最小"]
style Start fill:#FFD700,color:#000
style LocPrf fill:#DDA0DD,color:#000
style AS_Path fill:#98FB98,color:#000
```
### ASN(自治系统编号)
| 范围 | 说明 |
|------|------|
| 0–64511 | 私有 ASN(类似 RFC1918 IP 地址)|
| 64512–65534 | 16-bit 扩展私有 ASN |
| 65535 | 保留 |
| 65536–4294967295 | 32-bit 全局 ASN(互联网注册)|
IANA 分配给各大 ISPs 和大型企业(如 Google: AS15169, Cloudflare: AS13335, Alibaba: AS37963)。
## RIP(Routing Information Protocol)— 了解即可
RIP 是最简单的距离向量协议,已基本被淘汰:
- 跳数上限 15(第 16 跳视为不可达)
- 每 30 秒广播整个路由表
- `routing protocol name is rip` → 太慢了,现代网络不用
## 关联笔记
- [[hhs/NETWORK/静态路由与默认网关]] — 静态路由是动态协议的替代方案
- [[hhs/NETWORK/NAT原理与应用]] — NAT 后方的路由器不需要运行 OSPF/BGP
- [[hhs/NETWORK/负载均衡]] — Load Balancer 通常依赖 L4/L7 而非完整路由协议