OSPF 的 LSA 到底在传什么:六类 LSA 的通告者、泛洪范围与转换

· 8 分钟阅读

OSPF 是当今 IP 网络里最常用的内部网关协议之一。和 RIP 这类距离矢量协议不同,OSPF 不交换路由表,它交换的是链路状态——也就是 LSA(链路状态通告)。

每台路由器把收到的 LSA 收进 LSDB(链路状态数据库),拼出一张完整的网络地图,再用 SPF 算法独立算出最短路径树。所以理解 LSA,基本等于理解了 OSPF 一半的工作方式。

一、先建立三个概念

  • LSA:描述路由器、网段及其状态的最小数据单元,是拼拓扑的”积木块”
  • LSDB:区域内所有 LSA 的集合,也就是那张”地图”
  • SPF:在 LSDB 上跑的算法,用来算最优路径

三者的关系是:LSA 拼成 LSDB,LSDB 喂给 SPF。

LSA 通用头部

所有类型的 LSA 共享同一个 20 字节头部,这是识别和处理它们的基础:

 0                   1                   2                   3
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           LS Age              |    Options    |    LS Type    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                        Link State ID                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     Advertising Router                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                     LS Sequence Number                        |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|         LS Checksum           |             Length            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
字段含义
LS Age老化时间(秒),从 0 递增,到 3600 秒即 MaxAge
Options可选功能位(如 E 位标识是否支持外部路由)
LS TypeLSA 类型,最关键的一个字段
Link State ID标识符,含义随类型变化
Advertising Router产生该 LSA 的路由器 Router ID
LS Sequence Number32 位序列号,用于判断新旧
LS Checksum校验和,保证完整性
LengthLSA 总长度(含头部)

Link State ID 是理解各类 LSA 的钥匙——它填什么,取决于 LS Type。这也是为什么排障时不能只看”有没有 LSA”,得看”这条 LSA 的 LSID 对不对”。

二、六类常用 LSA

Type 1 · Router LSA

  • 功能:描述路由器自身的所有链路状态
  • 通告者:区域内的每一台 OSPF 路由器
  • 泛洪范围:仅在所属区域内
  • Link State ID:产生者的 Router ID
  • 内容:Router ID、所有链路的类型 / 邻居 / IP / 掩码 / 开销

类比:在房间(区域)里,每个人做自我介绍——“我是张三,认识李四和王五,走过去的距离分别是 10 和 20”。

Type 2 · Network LSA

  • 功能:描述多路访问网络(如以太网)上连接了哪些路由器
  • 通告者:该网段的 DR(指定路由器)
  • 泛洪范围:仅在所属区域内
  • Link State ID:DR 在该网段上的接口 IP
  • 内容:网段子网掩码、连接到此网段的所有路由器 Router ID 列表

类比:宴会厅(多路访问网络)里,司仪(DR)负责报”这厅里有哪些人”。没有 DR,N 台路由器两两建邻接就会变成 N² 条关系。

Type 3 · Summary LSA

  • 功能:在区域之间传递路由信息
  • 通告者:ABR(区域边界路由器)
  • 泛洪范围:跨区域
  • Link State ID:目标网段地址
  • 内容:目标网段地址与掩码、到达该网段的开销

类比:ABR 像外交官,站在两个房间门口,把 A 房间的地址信息汇总后到 B 房间宣布。注意它传的是”某个网段可达、代价多少”,不是原始拓扑——这也是区域化能减小 LSDB 的原因。

Type 4 · ASBR-Summary LSA

  • 功能:告诉其他区域的路由器如何到达 ASBR
  • 通告者:ABR
  • 泛洪范围:跨区域(ASBR 所在区域除外)
  • Link State ID:ASBR 的 Router ID
  • 内容:ASBR 的 Router ID、ABR 到达该 ASBR 的开销

类比:ABR 告诉别的区域:“要去’国际机场’(ASBR)先来找我,距离是多少。”

为什么需要它:Type 5 只告诉你有条外部路由,但没说”怎么去到发布这条路由的 ASBR”。Type 4 补的就是这一环。

Type 5 · AS-External LSA

  • 功能:承载从 OSPF 域外引入的路由
  • 通告者:ASBR(自治系统边界路由器)
  • 泛洪范围:整个 OSPF AS(stub / NSSA 区域除外)
  • Link State ID:外部路由的目标网段
  • 内容:目标网段与掩码、Metric-Type(1 或 2)、Forwarding Address

类比:ASBR 发布”国际航班信息”——有飞往 8.8.8.0/24 的航班,票价 20。

Metric-Type 1 和 2 的差别值得记:Type 1 的开销是”外部开销 + 内部到达 ASBR 的开销”,会随内部路径变化;Type 2 只看外部开销,默认就是 Type 2。选错了会出现”明明有更近的出口却走了远路”。

Type 7 · NSSA External LSA

  • 功能:LSA-5 的 NSSA 专用版本
  • 通告者:NSSA 区域内的 ASBR
  • 泛洪范围:仅在 NSSA 区域内
  • Link State ID:外部路由的目标网段
  • 内容:与 LSA-5 类似

类比:NSSA 是”安检严格的候机厅”,里面的 ASBR 只能发特殊通行证(LSA-7),由 ABR 换成标准国际航班信息(LSA-5)之后再往外广播。

剩下那些类型

日常排障基本遇不到,但知道它们存在有好处:

  • Type 6(Group Membership,MOSPF):组播扩展,几乎无人部署
  • Type 9 / 10 / 11(Opaque):给流量工程(MPLS-TE)等做扩展用
  • OSPFv3(IPv6)另有一套 Type 8(Link)和 Type 9(Intra-Area-Prefix),编号和 OSPFv2 的 Opaque 不是一回事,别看串了

三、横向对比

类型名称通告者泛洪范围Link State ID作用
Type 1Router LSA区域内所有路由器区域内自身 Router ID描述自身链路
Type 2Network LSADR区域内DR 接口 IP描述多路访问网段
Type 3Summary LSAABR区域间目标网段地址传递区域间路由
Type 4ASBR-Summary LSAABR区域间ASBR Router ID告知如何到达 ASBR
Type 5AS-External LSAASBR整个 AS外部网段地址传递外部路由
Type 7NSSA External LSANSSA 内 ASBR仅 NSSA 内外部网段地址NSSA 内传外部路由

四、LSA-7 怎么变成 LSA-5

这是 NSSA 里最常被问的一点。NSSA 区域不允许 Type 5 进来,但区域内的 ASBR 又确实引入了外部路由,于是先用 LSA-7 在区域内传播,再由 ABR 做转换:

graph LR
    ASBR["ASBR"] -->|"引入外部路由"| L5["LSA-5"]
    L5 -->|"全 AS 泛洪(stub / NSSA 除外)"| ALL["各区域"]

    NASBR["NSSA 内 ASBR"] -->|"引入外部路由"| L7["LSA-7"]
    L7 -->|"只在 NSSA 内泛洪"| NSSA["NSSA 区域"]
    L7 -->|"ABR 转换"| L5

转换时有两个关键行为:ABR 会把 LSA-7 里的 Forwarding Address 和 P 位(Propagate 位)一起考虑——P 位没置位的外部路由不会被转换出去;转换后 LSA-5 的通告者变成 ABR 自己。

五、一个多区域拓扑里的流动

graph TD
    subgraph "外部网络"
        ExtNet("8.8.8.0/24")
    end
    subgraph Area1["Area 1 (NSSA)"]
        R3("R3") --- R4("R4<br/>ASBR")
    end
    subgraph Area0["Area 0 (Backbone)"]
        ABR1("ABR1 / R2") --- R1("R1") --- ABR2("ABR2 / R5")
    end
    subgraph Area2["Area 2"]
        R6("R6") --- R7("R7")
    end
    R3 ---|Ethernet| ABR1
    ABR1 ---|P2P| R1
    R1 ---|P2P| ABR2
    ABR2 ---|Ethernet| R6
    R4 ---|重分布| ExtNet

各类 LSA 的动向:

  1. LSA-1 / LSA-2:在各区域内部泛洪,不跨区域
  2. LSA-3:ABR 在区域间传递汇总后的网段信息
  3. LSA-4:ABR 生成并泛洪,指示如何到达 ASBR
  4. LSA-7 → LSA-5:NSSA 内的 ASBR(R4)发 LSA-7,ABR1 转成 LSA-5 后泛洪到整个 AS

六、怎么查

# 数据库总览:一眼看出各类 LSA 各有多少条
show ip ospf database

# 按类型细看
show ip ospf database router          # Type 1
show ip ospf database network         # Type 2
show ip ospf database summary         # Type 3
show ip ospf database asbr-summary    # Type 4
show ip ospf database external        # Type 5
show ip ospf database nssa-external   # Type 7

排障时的对照思路:

现象先看什么
区域间路由缺失Type 3 有没有生成、有没有被过滤
外部路由进不来Type 5 是否存在;NSSA 里看 Type 7 和 P 位
能学到外部路由但不通Type 4 是否存在,ASBR 可达吗
邻居起不来还没到 LSA 这一步,先查 Hello 参数(区域号、掩码、Hello/Dead、认证)
路由频繁翻动看 LS Age 与序列号,判断是否在反复重新生成

最后一条值得展开一句:LSA 频繁重新生成通常不是 LSA 本身的问题,而是它描述的东西在抖——链路 flapping、接口反复 up/down、或者 Router ID 冲突。盯着 LSDB 看不如盯着物理层和接口日志看。