OSPF 的 LSA 到底在传什么:六类 LSA 的通告者、泛洪范围与转换
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 Type | LSA 类型,最关键的一个字段 |
| Link State ID | 标识符,含义随类型变化 |
| Advertising Router | 产生该 LSA 的路由器 Router ID |
| LS Sequence Number | 32 位序列号,用于判断新旧 |
| LS Checksum | 校验和,保证完整性 |
| Length | LSA 总长度(含头部) |
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 1 | Router LSA | 区域内所有路由器 | 区域内 | 自身 Router ID | 描述自身链路 |
| Type 2 | Network LSA | DR | 区域内 | DR 接口 IP | 描述多路访问网段 |
| Type 3 | Summary LSA | ABR | 区域间 | 目标网段地址 | 传递区域间路由 |
| Type 4 | ASBR-Summary LSA | ABR | 区域间 | ASBR Router ID | 告知如何到达 ASBR |
| Type 5 | AS-External LSA | ASBR | 整个 AS | 外部网段地址 | 传递外部路由 |
| Type 7 | NSSA External LSA | NSSA 内 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 的动向:
- LSA-1 / LSA-2:在各区域内部泛洪,不跨区域
- LSA-3:ABR 在区域间传递汇总后的网段信息
- LSA-4:ABR 生成并泛洪,指示如何到达 ASBR
- 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 看不如盯着物理层和接口日志看。
