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 新旧关系
- 序列号越大越新
- 序列号相同,校验和大的更新
- 校验和也相同则比老化时间:
- 老化时间为 3600 秒 → 无条件加载
- 差值 > 15 分钟 → 老化时间小的更新
- 差值 < 15 分钟 → 两条相同
周期刷新:每 30 分钟通告本地 LSA;老化到 1800 秒时始发路由器重建并洪泛。
1.4 Type-1 LSA:Router LSA
- 产生者:每台运行 OSPF 的路由器 | 传播范围:区域内
- 携带信息:直连接口状况与接口 Cost | LS ID:通告者的 Router-ID
每台路由器都产生 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
- 产生者:MA 网络中的 DR | 传播范围:区域内
- 携带信息:MA 网络掩码 + 接入该网络的所有 Router-ID | LS ID:DR 接口的 IP 地址
DR 产生 Type-2 LSA,列出接入该网络的所有路由器,补齐 Type-1 缺失的掩码。Type-1 + Type-2 共同描述区域内部拓扑。
1.6 Type-3 LSA:Network Summary LSA
- 产生者:ABR(区域边界路由器) | 传播范围:ABR 相邻的单区域
- 携带信息:域间路由信息(目标网段和开销) | LS ID:目标网络号
3 类 LSA 传递域间路由信息:
- 传递方式类似距离矢量协议,通告者即到达目标网段的下一跳
- 跨区域需通告者转换(由下一个 ABR 重新产生)
- 需用 1、2 类 LSA 计算拓扑来定位通告者
1.7 Type-5 LSA:AS External LSA
- 产生者:ASBR | 传播范围:整个 OSPF 域(除特殊区域外)
- 携带信息:域外路由信息 | LS ID:外部路由的目标网络号
5 类 LSA 传递域外路由信息,由重发布(import-route)把其他协议路由导入 OSPF。
种⼦度量值(seed-metric):导入后舍弃原开销、赋规定值,默认 1,重发布可改。
度量值类型:
| 类型 | E 位 | 计算方式 |
|---|---|---|
| Metric-Type-1 | E=0 | 本地到达 ASBR 开销 + 种子度量值 |
| Metric-Type-2 | E=1(默认) | 所有设备都等于种子度量值 |
转发地址(Forwarding Address, FA):FA 非 0.0.0.0 时流量发往 FA 而非通告 ASBR,规避次优路径。
1.8 Type-4 LSA:ASBR Summary LSA
- 产生者:与 ASBR 同区域的 ABR | 传播范围:除 ASBR 所在区域的单区域
- 携带信息:ASBR 的位置信息 | LS ID:ASBR 的 Router-ID
4 类格式与 3 类一致,但通告 ASBR 的 RID(掩码全 0),供其他区域定位 ASBR。
1.9 Type-7 LSA:NSSA External LSA
- 产生者:NSSA 区域的 ASBR | 传播范围:NSSA 区域内
- 携带信息:域外路由信息(与 5 类格式一致) | LS ID:域外路由的目标网络号
7 类是 5 类在 NSSA 中的”马甲”,出 NSSA 后由 ABR 转成 5 类;标记 O_NSSA,优先级 150。
7 类的 FA 默认使用 ASBR 的环回接口地址。
1.10 LSA 总结表
| LSA 类型 | 名称 | LS ID | 通告者 | 传播范围 | 携带信息 |
|---|---|---|---|---|---|
| Type-1 | Router | 通告者 RID | 区域内每台路由器 | 单区域 | 直连拓扑 |
| Type-2 | Network | DR 接口 IP | DR | 单区域 | MA 网络拓扑补充 |
| Type-3 | Sum-Net | 目标网络号 | ABR(跨区转换) | ABR 相邻单区域 | 域间路由 |
| Type-4 | Sum-Asbr | ASBR 的 RID | ABR(跨区转换) | 除 ASBR 所在区域 | ASBR 位置 |
| Type-5 | External | 域外目标网络号 | ASBR | 整个 OSPF 域 | 域外路由 |
| Type-7 | NSSA | 域外目标网络号 | ASBR(NSSA 内) | NSSA 区域 | 域外路由(NSSA) |
二、OSPF 报文格式
2.1 OSPF 协议概述
OSPF 跨层封装——无四层,报文直接封装在 IP 数据中,协议号 89。
OSPF 报文共五种:Hello、DBD、LSR、LSU、LSAck。
2.2 OSPF 报文头部
五种报文共有头部,24 字节:
| 字段 | 说明 |
|---|---|
| Version | OSPFv2 恒为 2 |
| Type | 1-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 选举。
限制邻居关系建立的参数:
- 子网掩码(MA 网络中需一致,华为特有检查)
- Hello 间隔(缺省 P2P/Broadcast 为 10s,NBMA/P2MP 为 30s)
- Dead 间隔(缺省为 Hello 间隔的 4 倍)
- Options 字段(特殊区域标记)
- 认证
DR/BDR 选举:由 Router Priority 决定,缺省 1;优先级 0 不参选。
2.4 DBD 报文(DD)
数据库描述报文,三个作用:
- 未携带数据的 DBD 包做主从关系选举
- 携带数据的 DBD 包做目录信息共享(LSA 头部)
- 做隐式确认
字段:
| 字段 | 说明 |
|---|---|
| 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 网络中组播地址:
- 224.0.0.6:非 DR/BDR 向 DR、BDR 发送 LSU
- 224.0.0.5:DR 向所有 OSPF 路由器泛洪 LSU
2.7 LSAck 报文
链路状态确认报文,完成显性确认,包含所确认 LSA 的头部。
2.8 OSPF 接口网络类型
| 网络类型 | OSPF 工作方式 | Hello | Dead | DR/BDR |
|---|---|---|---|---|
| Broadcast(以太网) | Broadcast | 10s | 40s | 需要选举 |
| P2P(PPP、HDLC) | P2P | 10s | 40s | 不需要 |
| 环回接口 | P2P(华为) | - | - | 不需要 |
| P2MP | P2MP | 30s | 120s | 不需要 |
| NBMA(帧中继) | NBMA | 30s | 120s | 需要选举 |
互通接口的网络类型必须一致,否则可能导致路由计算错误。
三、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 特殊区域分两大类、四小类:
第一大类条件
- 不能是骨干区域
- 不能有虚链路
- 不能有 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 配置
第二大类条件
- 不能是骨干区域
- 不能有虚链路
- 存在 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 直连,骨干区域唯一且不可分割。实际可能出现:
- 远离骨干的非骨干区域
- 不连续的骨干区域
4.2 虚链路(Virtual Link)
虚链路是解决不规则区域的虚拟逻辑链路。
配置方法:
[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
注意:
- 只跨越一个非骨干区域
- 邻居关系不存入 OSPF 邻居表
- 基于开销值小的物理链路建立,本地有物理链路则虚链路永不中断
- Vlink 所在非骨干区域不能传递聚合路由(防环)
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/2 类 LSA > 3 类 LSA(即使开销更大)
- 域间优于域外:3 类 LSA > 5/7 类 LSA(即使开销更大)
- Type 1 永远优于 Type 2
- Type 2 选路:先比种子度量值 → 再比沿途累加开销
- Type 1 选路:比总开销(种子度量值 + 沿途累加开销)
- 华为体系中 5 类与 7 类 LSA 选路规则相同
5.3 开销值计算
Cost = 参考带宽 / 真实带宽
改开销值的方法:
# 修改参考带宽(全网需要一致)
[r3-ospf-1]bandwidth-reference 1000
# 直接修改接口开销值(推荐)
[r3-GigabitEthernet0/0/0]ospf cost 1000
六、OSPF 防环机制
6.1 域间防环
- 按星型拓扑部署:所有非骨干区域必须与 Area 0 直连
- 区域间水平分割:ABR 不把某区域收到的 3 类 LSA 再注回该区域
- ABR 从非骨干区域收到的 3 类 LSA 不能用于区域间路由计算
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 类缺省 | 特殊区域自动生成 | OSPF | 10 |
| 5 类缺省 | default-route-advertise | O_ASE | 150 |
| 7 类缺省 | NSSA 区域自动或手动下发 | O_NSSA | 150 |
# 下发 5 类缺省
[r2-ospf-1]default-route-advertise always
# 下发 7 类缺省
[r4-ospf-1-area-0.0.0.1]nssa default-route-advertise