--- 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 而非完整路由协议