Skip to content
Kurisu
Go back

OSPF 进阶

OSPF(Open Shortest Path First)是典型的链路状态型路由协议。


一、OSPF LSA 详解

1.1 LSA 与 LSDB

链路状态(Link State) 描述路由器自己激活了 OSPF 的接口信息;全网洪泛的这些信息汇总为 LSDB(链路状态数据库),同区域内各路由器 LSDB 相同。路由器各自运行 SPF,以自己为根得到无环最短路径树。

OSPFv2 的 LSA 共 11 种,本文看最核心的 6 种。

1.2 LSA 头部格式

LSA 头部共 20 字节:

字段说明
链路状态老化时间 (LS Age)LSA 的生存时间,初始为 0,最大 3600 秒
链路状态类型 (LS Type)LSA 的类型编号
链路状态 ID (Link State ID)根据类型不同含义不同
通告路由器 (Advertising Router)产生该 LSA 的路由器的 Router-ID
链路状态序列号 (LS Sequence Number)初始 0x80000001,每次更新 +1,终点 0x7FFFFFFF
链路状态校验和 (Checksum)用于校验 LSA 完整性
长度 (Length)LSA 的总字节长度

链路状态类型 + 链路状态 ID + 通告路由器 唯一标识一个 LSA(LSA 三元组)。

1.3 判断 LSA 新旧关系

  1. 序列号越大越新
  2. 序列号相同,校验和大的更新
  3. 校验和也相同则比老化时间:
    • 老化时间为 3600 秒 → 无条件加载
    • 差值 > 15 分钟 → 老化时间小的更新
    • 差值 < 15 分钟 → 两条相同

周期刷新:每 30 分钟通告本地 LSA;老化到 1800 秒时始发路由器重建并洪泛。

1.4 Type-1 LSA:Router LSA

每台路由器都产生 Type-1 LSA(“家门口的状况”);接口分属多区域时每区域各产生一个。

标志位:

比特位含义
V 位 (Virtual Link Endpoint)该路由器为虚链路端点
E 位 (External)该路由器为 ASBR
B 位 (Border)该路由器为 ABR(区域边界路由器)

Link(链路) 描述直连接口,每个 Link 含:

参数说明
链路类型 (Link Type)P2P、TransNet、StubNet、Virtual Link
链路 ID (Link ID)根据链路类型不同含义不同
链路数据 (Link Data)根据链路类型不同含义不同
度量值 (Metric)Cost 值

1.5 Type-2 LSA:Network LSA

DR 产生 Type-2 LSA,列出接入该网络的所有路由器,补齐 Type-1 缺失的掩码。Type-1 + Type-2 共同描述区域内部拓扑。

1.6 Type-3 LSA:Network Summary LSA

3 类 LSA 传递域间路由信息:

1.7 Type-5 LSA:AS External LSA

5 类 LSA 传递域外路由信息,由重发布(import-route)把其他协议路由导入 OSPF。

种⼦度量值(seed-metric):导入后舍弃原开销、赋规定值,默认 1,重发布可改。

度量值类型:

类型E 位计算方式
Metric-Type-1E=0本地到达 ASBR 开销 + 种子度量值
Metric-Type-2E=1(默认)所有设备都等于种子度量值

转发地址(Forwarding Address, FA):FA 非 0.0.0.0 时流量发往 FA 而非通告 ASBR,规避次优路径。

1.8 Type-4 LSA:ASBR Summary LSA

4 类格式与 3 类一致,但通告 ASBR 的 RID(掩码全 0),供其他区域定位 ASBR。

1.9 Type-7 LSA:NSSA External LSA

7 类是 5 类在 NSSA 中的”马甲”,出 NSSA 后由 ABR 转成 5 类;标记 O_NSSA,优先级 150。

7 类的 FA 默认使用 ASBR 的环回接口地址。

1.10 LSA 总结表

LSA 类型名称LS ID通告者传播范围携带信息
Type-1Router通告者 RID区域内每台路由器单区域直连拓扑
Type-2NetworkDR 接口 IPDR单区域MA 网络拓扑补充
Type-3Sum-Net目标网络号ABR(跨区转换)ABR 相邻单区域域间路由
Type-4Sum-AsbrASBR 的 RIDABR(跨区转换)除 ASBR 所在区域ASBR 位置
Type-5External域外目标网络号ASBR整个 OSPF 域域外路由
Type-7NSSA域外目标网络号ASBR(NSSA 内)NSSA 区域域外路由(NSSA)

二、OSPF 报文格式

2.1 OSPF 协议概述

OSPF 跨层封装——无四层,报文直接封装在 IP 数据中,协议号 89。

OSPF 报文共五种:Hello、DBD、LSR、LSU、LSAck。

2.2 OSPF 报文头部

五种报文共有头部,24 字节:

字段说明
VersionOSPFv2 恒为 2
Type1-Hello, 2-DD, 3-LSR, 4-LSU, 5-LSAck
Packet Length整个报文长度(字节数)
Router ID路由器的 OSPF Router-ID
Area ID所属区域 ID(32 bit)
Checksum校验和
Authentication Type认证类型
Authentication Data认证数据

2.3 Hello 报文

Hello 报文周期性发现、建立、保活邻居关系,并完成 DR/BDR 选举。

限制邻居关系建立的参数:

  1. 子网掩码(MA 网络中需一致,华为特有检查)
  2. Hello 间隔(缺省 P2P/Broadcast 为 10s,NBMA/P2MP 为 30s)
  3. Dead 间隔(缺省为 Hello 间隔的 4 倍)
  4. Options 字段(特殊区域标记)
  5. 认证

DR/BDR 选举:由 Router Priority 决定,缺省 1;优先级 0 不参选。

2.4 DBD 报文(DD)

数据库描述报文,三个作用:

  1. 未携带数据的 DBD 包做主从关系选举
  2. 携带数据的 DBD 包做目录信息共享(LSA 头部)
  3. 做隐式确认

字段:

字段说明
I 位 (Initial)主从选举时为 1,选举完成后置 0
M 位 (More)后续还有 DD 报文
MS 位 (Master)Master 置 1,Slave 置 0
DD Sequence Number由 Master 决定序列号

2.5 LSR 报文

链路状态请求报文,基于 DBD 请求本地未知 LSA,以 LSA 三元组(链路状态类型、链路状态 ID、通告路由器)唯一标识。

2.6 LSU 报文

链路状态更新报文,真正携带 LSA 信息;一个 LSU 可包含多个 LSA。

MA 网络中组播地址:

2.7 LSAck 报文

链路状态确认报文,完成显性确认,包含所确认 LSA 的头部。

2.8 OSPF 接口网络类型

网络类型OSPF 工作方式HelloDeadDR/BDR
Broadcast(以太网)Broadcast10s40s需要选举
P2P(PPP、HDLC)P2P10s40s不需要
环回接口P2P(华为)--不需要
P2MPP2MP30s120s不需要
NBMA(帧中继)NBMA30s120s需要选举

互通接口的网络类型必须一致,否则可能导致路由计算错误。


三、OSPF 优化

3.1 路由汇总

OSPF 的汇总称区域汇总,分两类:

域间路由汇总:在 ABR 上汇总 3 类 LSA。

[r1-ospf-1-area-0.0.0.2]abr-summary 192.168.0.0 255.255.252.0

只能汇总 ABR 自身通过 1、2 类 LSA 学到的路由。

域外路由汇总:在 ASBR 上汇总 5 类/7 类 LSA。

[r4-ospf-1]asbr-summary 172.16.0.0 255.255.252.0

汇总后开销:Type 2 = 明细最大开销 +1;Type 1 = 明细最大开销

3.2 特殊区域

OSPF 特殊区域分两大类、四小类:

第一大类条件

  1. 不能是骨干区域
  2. 不能有虚链路
  3. 不能有 ASBR

末梢区域(Stub):拒绝 4/5 类 LSA,自动生成指向骨干的 3 类缺省路由。

[r5-ospf-1-area-0.0.0.2]stub  # 区域内所有设备都需配置

完全末梢区域(Totally Stub):Stub 之上再拒绝 3 类 LSA,仅留 3 类缺省。

[r1-ospf-1-area-0.0.0.2]stub no-summary  # 仅 ABR 配置

第二大类条件

  1. 不能是骨干区域
  2. 不能有虚链路
  3. 存在 ASBR

非完全末梢区域(NSSA):拒绝 4/5 类 LSA,域外路由以 7 类传递,自动生成 7 类缺省。

[r4-ospf-1-area-0.0.0.1]nssa  # 区域内所有设备都需配置

完全 NSSA(Totally NSSA):NSSA 之上再拒绝 3 类 LSA,产生 3 类缺省。

[r3-ospf-1-area-0.0.0.1]nssa no-summary  # 仅 ABR 配置

3.3 各区域允许的 LSA 类型

区域类型1 类2 类3 类4 类5 类7 类
普通区域有有有有有无
Stub有有有无无无
Totally Stub有有仅缺省无无无
NSSA有有有无无有
Totally NSSA有有仅缺省无无有

四、不规则区域解决方案

4.1 问题场景

OSPF 要求非骨干区域必须与 Area 0 直连,骨干区域唯一且不可分割。实际可能出现:

  1. 远离骨干的非骨干区域
  2. 不连续的骨干区域

虚链路是解决不规则区域的虚拟逻辑链路。

配置方法:

[r2-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3
[r3-ospf-1-area-0.0.0.1]vlink-peer 2.2.2.2

注意:

4.3 多进程双向重发布

解决不规则区域最常用的方式:在 ASBR 上互导不同 OSPF 进程的路由。

[r3]ospf 1
[r3-ospf-1]import-route ospf 2

[r3]ospf 2
[r3-ospf-2]import-route ospf 1

双向重发布后全网可学到所有 OSPF 路由,无选路不佳与环路问题。


五、OSPF 选路原则

5.1 路由优先级

OSPF 内部路由默认优先级 10,域外(O_ASE / O_NSSA)150。

5.2 选路规则

  1. 域内优于域间:1/2 类 LSA > 3 类 LSA(即使开销更大)
  2. 域间优于域外:3 类 LSA > 5/7 类 LSA(即使开销更大)
  3. Type 1 永远优于 Type 2
  4. Type 2 选路:先比种子度量值 → 再比沿途累加开销
  5. Type 1 选路:比总开销(种子度量值 + 沿途累加开销)
  6. 华为体系中 5 类与 7 类 LSA 选路规则相同

5.3 开销值计算

Cost = 参考带宽 / 真实带宽

改开销值的方法:

# 修改参考带宽(全网需要一致)
[r3-ospf-1]bandwidth-reference 1000

# 直接修改接口开销值(推荐)
[r3-GigabitEthernet0/0/0]ospf cost 1000

六、OSPF 防环机制

6.1 域间防环

6.2 域内防环

得益于 SPF(最短路径优先):LSDB 中的 LSA 转成有向图,以本设备为根算出无环最短路径树,路径装入路由表。


七、拓展配置

7.1 手工认证

# 接口认证
[r5-GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher 123456

# 区域认证
[r3-ospf-1-area-0.0.0.0]authentication-mode md5 1 cipher 123456

# 虚链路认证
[r4-ospf-1-area-0.0.0.1]vlink-peer 3.3.3.3 md5 1 cipher 123456

7.2 加快收敛

# 修改 Hello 时间(死亡时间自动 4 倍匹配)
[r5-GigabitEthernet0/0/0]ospf timer hello 5

# 修改死亡时间
[r1-GigabitEthernet0/0/0]ospf timer dead 20

7.3 缺省路由

缺省类型产生方式标记优先级
3 类缺省特殊区域自动生成OSPF10
5 类缺省default-route-advertiseO_ASE150
7 类缺省NSSA 区域自动或手动下发O_NSSA150
# 下发 5 类缺省
[r2-ospf-1]default-route-advertise always

# 下发 7 类缺省
[r4-ospf-1-area-0.0.0.1]nssa default-route-advertise


Share this post:

Previous Post
Burp Suite 实战:暴力破解、重放与 HTTPS 抓包
Next Post
路由策略