This repository has been archived on 2026-05-24. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
all-in-kingsoft/hhs/NETWORK/03-网络层/07-动态路由协议OSPF-BGP.md
T
2026-05-17 22:27:07 +08:00

6.5 KiB
Raw Blame History

tags, create time
tags create time
计算机网络
OSPF
BGP
动态路由协议
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)。

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 工作流程

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)
flowchart LR
    R1["ABR: Router A<br/>Area 0 ↔ Area 1"] -->|"全部LSA"| A0["Area 0 (Backbone)"]
    A0 -->|"全部LSA"| R1
    R1 -->|"汇总路由 → Stub"| A1["Area 1 (Totally Stubby)<br/>只有默认路由"]
    
    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,无法区分优劣。正确做法:

router ospf 1
 distance ospf 10
 auto-cost reference-bandwidth 10000  # 单位 Mbps → 支持到 100G

查看 OSPF 状态

$ 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 两种会话类型

flowchart LR
    iBGP["iBGP<br/>同一 AS 内的路由器"] -->|"传递可达信息<br/>不改变 next-hop"| R1["AS 65001<br/>Peer A -- Peer B"]
    
    eBGP["eBGP<br/>不同 AS 间"] -->|"交换路由并修改 next-hop"| R2["AS 65001 -- AS 65002<br/>Peer A -- Peer B"]
    
    style iBGP fill:#DDA0DD,color:#000
    style eBGP fill:#98FB98,color:#000

BGP 属性(Attributes)选路顺序

当多条路径可选时,按以下优先级逐条比较:

flowchart TD
    Start["新路由到达"] --> Weight["① Cisco专有 Weight<br/>本地有效"]
    Weight --> LocPrf["② Local Preference<br/>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 → 太慢了,现代网络不用

关联笔记