1. OSPF的理论与实践

73 阅读6分钟

基本知识

1.1 OSPF基本概念

  • 定义:OSPF(Open Shortest Path First)是 IGP(域内网关协议),基于 链路状态 思想与 Dijkstra SPF 算法,按 区域(Area) 划分,收敛快、可扩展性好。
  • 协议号:IPv4 的 IP Protocol = 89,组播地址 224.0.0.5(AllSPFRouters)224.0.0.6(AllDRouters)
  • 设备角色
    • 内部路由器(Internal Router) :所有接口都在同一 Area 内。
    • ABR(Area Border Router) :连接两个或多个 Area(其中必含 Area 0)。
    • ASBR(AS Boundary Router) :与外部路由域交互(重分发),产生外部路由。
  • 报文类型(五大控制报文)
    1. Hello:发现/维持邻居,DR/BDR 选举。
    2. DD/DBD(Database Description) :邻接建立时的数据库目录摘要。
    3. LSR(Link State Request) :向对端请求缺失/过期的 LSA。
    4. LSU(Link State Update) :携带具体 LSA 内容。
    5. LSAck(Link State Acknowledgment) :对 LSU 的确认,确保可靠泛洪。

1.2 邻居与邻接(Neighbor vs. Adjacency)

  • 邻居:在同一链路上互相收发 Hello 并满足参数匹配(Area-ID、Hello/Dead、网络类型、认证、Stub 标志、MTU 等)的路由器。
  • 邻接:在邻居基础上进一步完成数据库同步(DD/LSR/LSU/LSAck),达到 Full 状态;并非所有网络类型/邻居都会形成邻接(如广播网段上非 DR/BDR 与非 DRother 之间通常不全邻接)。
  • 邻接状态机(FSM)
    • Down → (收到 Hello)→ Init(我看见你)→ 2-Way(彼此看见,各自的 Router-ID 都出现在对方 Hello 的邻居列表里)→(若需邻接,如与 DR/BDR 或在 P2P)→ ExStart(协商主从/MTU)→ Exchange(交换 DBD)→ Loading(LSR/LSU 同步细节)→ Full
    • 常见卡点
      • 2-Way 停滞:可能是广播网段上非 DR/BDR 之间的正常现象;或 Stub 标志不一致。
      • ExStart 卡住:多为 MTU 不匹配;或 DD 序列协商异常。

在点到点/点到多点网络中,邻接关系的建立过程和广播网络一样,唯一不同的是不需要选举DR和BDR,DD报文是组播发送的。

1.3 DR/BDR 与网络类型

  • 为什么需要 DR/BDR:在多访问链路(广播或 NBMA)上,若所有路由器彼此全邻接,将导致 N×(N−1)/2 的邻接关系与泛洪风暴。DR/BDR 作为中心节点,其他 DRother 与 DR/BDR 建立邻接,显著降低复杂度。
  • 选举规则(同一网段内):
    1. 接口优先级(Priority) 高者胜(0 表示不参与选举)。
    2. 优先级相同,则 Router-ID 大者胜。
    3. 非抢占:已当选者不会被后来更优者替换,除非重置/中断。
  • 网络类型与默认 Hello/Dead(常见)
    • Broadcast(以太网) :Hello/Dead 常见为 10s/40s,有 DR/BDR。
    • Point-to-Point(P2P) :Hello/Dead 常见为 10s/40s,无 DR/BDR,形成全邻接。
    • NBMA:默认常见 30s/120s,有 DR/BDR,需要手工邻居;可调为 P2MP/P2P 以简化。
    • P2MP:逻辑多点,通常无 DR/BDR。
  • 以太网上的 P2P:很多厂商支持把以太口改为 network-type p2p,可绕过 DR/BDR,适合两点直连链路或核心收敛优化。

1.4 LSA 类型与作用域(OSPFv2 常用)

LSA(Link-State Advertisement)是 OSPF 的“数据库记录”,通过可靠泛洪在相应作用域内传播。

  • Type 1:Router-LSA(路由器自身在某 Area 的连接/开销)→ 仅在本 Area 内有效
  • Type 2:Network-LSA(由 DR 产生,描述多访问网段与连接其上的路由器)→ 仅在本 Area 内
  • Type 3:Summary-LSA(ABR 产生,把一个 Area 的前缀摘要到另一个 Area)→ 跨 Area,但不出 AS
  • Type 4:ASBR-Summary-LSA(ABR 发布 ASBR 的可达性)→ 跨 Area,但不出 AS
  • Type 5:AS-External-LSA(ASBR 注入的外部路由,如从 BGP/静态重分发)→ 整个 OSPF 域内传播(Stub/NSSA 除外)
  • Type 7:NSSA-External-LSA(NSSA 内的外部路由,由 NSSA ABR 翻译为 Type 5)→ NSSA 内本地,出区后变 Type 5
  • (扩展/不常用)Type 9/10/11:Opaque LSA(流量工程/扩展用途)。
  • 老化与刷新
    • LSA Refresh 通常 30 分钟MaxAge 通常 3600 秒
    • 序列号、年龄与 LSAck 确保一致性与环路避免。

1.5 路由选择逻辑(简化顺序)

  1. 前缀匹配(最长匹配优先)。
  2. OSPF 路由类型优先级(常规认知):
    • Intra-Area(区域内)
    • Inter-Area(区域间 / 来自 Type 3/4)
    • ExternalE1/N1(把链路代价叠加进来)优先于 E2/N2(只看外部度量)。
  3. 同等级比较:比较 累计 Cost;再比较 Router-ID 等细粒度规则(厂商实现略有差异)。
  4. 等价负载分担(ECMP) :多条相同度量的路径可被同时安装(数量上限与策略由设备决定)。
  • Cost 计算:通常是 参考带宽 / 接口带宽,结果为整数,接口/进程均可手工设定;为避免千兆/万兆接口都为 1 的“扁平化”,需把 参考带宽 调到更大(如 100G)。

1.6 区域(Area)与分层设计

  • Area 0(Backbone) :所有非 0 区域必须与 Area 0 连通(物理或通过 虚链路),跨区流量必须经由骨干。
  • 分层意义
    • 控制 LSA 泛洪范围,降低每台设备的 LSDB 规模,提升收敛与稳定性。
    • ABR路由汇总,隔离故障与变动。
  • 虚链路(Virtual Link) :当某个非 0 区域与 Area 0 不连续时,可在一条 非 Stub 的传输区 上在两台 ABR 之间建立虚链路,逻辑上把该 ABR 接入 Backbone。设计上应 少用,更偏向过渡方案。

实验

2.1 拓扑图

2.2 各机器配置

A MSR36-20_1

#
interface LoopBack0
 ip address 1.1.1.1 255.255.255.255
#
interface LoopBack1
 ip address 1.1.2.1 255.255.255.255
#
interface GigabitEthernet0/0
 port link-mode route
 combo enable copper
 ip address 200.200.200.1 255.255.255.0
#
interface GigabitEthernet0/1
 port link-mode route
 combo enable copper
#              
interface GigabitEthernet0/2
 port link-mode route
 combo enable copper
 ip address 100.100.100.1 255.255.255.0
#

#
ospf 1 router-id 1.1.1.1
 area 0.0.0.0
  network 1.1.2.1 0.0.0.0
  network 200.200.200.0 0.0.0.255
 area 0.0.0.1
  network 1.1.1.1 0.0.0.0
  network 100.100.100.0 0.0.0.255
#
return

B MSR36-20_2

#
interface LoopBack0
 ip address 2.2.2.2 255.255.255.255
#
interface LoopBack1
 ip address 2.2.1.2 255.255.255.255
#
interface GigabitEthernet0/0
 port link-mode route
 combo enable copper
 ip address 200.200.200.2 255.255.255.0
#          
interface GigabitEthernet0/2
 port link-mode route
 combo enable copper
 ip address 130.130.130.2 255.255.255.0
#

#
ospf 1 router-id 2.2.2.2
 area 0.0.0.0
  network 2.2.2.2 0.0.0.0
  network 200.200.200.0 0.0.0.255
 area 0.0.0.2
  network 2.2.1.2 0.0.0.0
  network 130.130.130.0 0.0.0.255
#
return

C MSR36-20_3

#
interface LoopBack0
 ip address 3.3.3.3 255.255.255.255
#
interface GigabitEthernet0/0
 port link-mode route
 combo enable copper
#
interface GigabitEthernet0/1
 port link-mode route
 combo enable copper
 ip address 10.10.10.254 255.255.255.0
#
interface GigabitEthernet0/2
 port link-mode route
 combo enable copper
 ip address 100.100.100.3 255.255.255.0
#

#
ospf 1 router-id 3.3.3.3
 area 0.0.0.1
  network 3.3.3.3 0.0.0.0
  network 10.10.10.0 0.0.0.255
  network 100.100.100.0 0.0.0.255
#
return

D MSR36-20_4

#
interface LoopBack0
 ip address 4.4.4.4 255.255.255.255
#
interface GigabitEthernet0/1
 port link-mode route
 combo enable copper
 ip address 20.20.20.254 255.255.255.0
#
interface GigabitEthernet0/2
 port link-mode route
 combo enable copper
 ip address 130.130.130.4 255.255.255.0
#

#
ospf 1 router-id 4.4.4.4
 area 0.0.0.2
  network 4.4.4.4 0.0.0.0
  network 20.20.20.0 0.0.0.255
  network 130.130.130.0 0.0.0.255
#
return

F PC

2.3 实验结果

A peer

各路由器和自己所在区域的路由器建立起邻居关系。

B 路由表

C PC ping通