上一篇把邻居建立讲完了:状态爬到 Full,LSDB 也就同步了。但同步的到底是什么?答案是 LSA。

OSPF 最反直觉的一点就在这里:它不传路由,它传"我连着谁"。每台路由器把自己的链路状态写成 LSA 泛洪出去,所有人攒出一张完整地图(LSDB),然后各自用 SPF 算路。所以搞懂 LSA,才算真正搞懂 OSPF。

LSA 是什么,为什么不能直接传路由

距离矢量协议(RIP)是"道听途说":邻居说"我到 10.1.1.0/24 要 3 跳",我就记下来。问题是它不知道邻居说的对不对,容易出环,收敛也慢。

链路状态协议换了个思路:每个人只描述自己身边的事实——"我的 GE0/0/1 连着 192.168.1.0/24,开销 1"。这种"事实"不会骗人,收集齐了就能画出一张完整的地图。这张地图就是 LSDB。

思路对比
距离矢量(RIP):  "我听说 10.1.1.0/24 离你 3 跳"      ← 转述,可能失真
链路状态(OSPF): "我的 GE0/0/1 直连 10.1.1.0/24"     ← 事实,可验证

结果:OSPF 每台路由器都有【同一份地图】,各自算路,结果必然一致

LSA 头部:七种 LSA 共用

所有 LSA 都以一个 20 字节的公共头部开头,靠它来唯一标识一条 LSA:

字段含义关键点
LS AgeLSA 年龄(秒)从 0 递增到 3600(MaxAge)就作废;经过路由器时增加,一般不改
LS TypeLSA 类型1~7,决定后面长什么样
Link State ID链路状态 ID不同类型含义不同(Router ID / DR 接口 IP / 网络号…)
Advertising Router通告路由器谁产生的,通常就是它的 Router ID
LS Sequence Number序列号初始 0x80000001,越大越新;到 0x7FFFFFFF 就要提前老化
LS Checksum校验和不含 LS Age,用于判断 LSA 是否损坏
Length总长度含头部

三元组(LS Type + Link State ID + Advertising Router)唯一标识一条 LSA。判断"谁的更新"则看序列号、校验和、Age 这三者。

七种 LSA,一张表看懂

类型名称谁产生装了什么传播范围
Type 1Router LSA每台 OSPF 路由器本路由器直连链路的拓扑 + 路由信息本区域内
Type 2Network LSADR本广播网段的子网掩码 + 与 DR 建邻接的路由器列表本区域内
Type 3Summary LSAABR到另一个区域的域间路由(只有路由信息,没有拓扑)除 Totally Stub / Totally NSSA 外的区域
Type 4ASBR Summary LSAABR到 ASBR 的路由(一条 /32 主机路由)ASBR 所在区域的其它相关区域
Type 5AS External LSAASBR到 AS 外部的路由除 Stub / NSSA 外的区域
Type 7NSSA External LSANSSA 区域内的 ASBRNSSA 内部的 AS 外部路由只在 NSSA 区域内,出区域时由 ABR 转成 Type 5

注意表里没有 Type 6——那是组播 OSPF(MOSPF)用的,实际组网里见不到。Type 8 以后属于 OSPFv3 / 扩展用途,也基本不碰。

各类 LSA 的传播范围:1/2 类在区域内,3 类跨区域,4/5 类到 AS 外部,7 类只在 NSSA 内
▲ 七种 LSA 的产生者与传播范围

Type 1 · Router LSA:我连着谁

每台 OSPF 路由器都会为每个区域产生一条 Type 1(注意:不是每条区域一条,是每个区域一条——同一台路由器在不同区域里的 Type 1 是不同的)。

它的 Link State ID 就是自己的 Router ID,内容是一串链路描述,每条链路的 Link Type 有四种:

Link Type名称描述什么
1P2P点对点链路,Link ID = 邻居的 Router ID
2TransNet连接到广播网段,Link ID = DR 的接口 IP(指向 Type 2 LSA)
3StubNet末梢网段(没跑 OSPF 的直连网段 / 环回口),Link ID = 网络号 + 掩码
4Virtual Link虚链路,Link ID = 虚链路对端的 Router ID

关键点:只有 P2P 和 TransNet 参与 SPF 拓扑计算,StubNet 只提供路由前缀。这就是为什么 OSPF 的 SPF 分两个阶段——先算拓扑(Phase 1),再挂前缀(Phase 2)。

Type 2 · Network LSA:DR 替广播网段说话

广播网段(一个以太网 VLAN)上,路由器之间是"多点接入"的网状关系,如果每台都在 Type 1 里描述所有邻居,LSA 会爆炸。

所以 OSPF 引入伪节点(Pseudonode):让 DR 代表这个网段,产生一条 Type 2 LSA。它包含:

其他路由器的 Type 1 里,指向这个网段的那条链路就写成 TransNet,Link ID = DR 的接口 IP。这样 N 台路由器只需要 N 条 Type 1 + 1 条 Type 2,而不是 N² 条链路描述。

Type 3 · Summary LSA:ABR 的"转述"

ABR 把一个区域的网段转述给另一个区域,产生的就是 Type 3。它的 Link State ID 是网络号,通告者是 ABR 自己。

几个必须记住的点:

一句话记法:Type 1/2 是"我身边的事实",Type 3 是"我听说的别人的事实"。所以区域内的路由计算靠地图,区域间的路由计算靠转述。

DN 位:Type 3 在 MPLS VPN 里的防环

MPLS VPN 场景下,PE 之间会跑 OSPF 多实例。为了防止 Type 3 LSA 在 VPN 实例和公网实例之间来回绕形成环,OSPF 借用了 Options 域里一个原本没用的比特,叫 DN 位(Down Bit):

Type 4 · ASBR Summary LSA:找到 ASBR 在哪

Type 5 说的是"某条外部路由存在",但怎么走到那个 ASBR 呢?Type 5 里只有 ASBR 的 Router ID,没有它的位置。

所以 ABR 再产生一条 Type 4,内容是一条指向 ASBR 的 /32 主机路由——告诉其他区域"要去找 ASBR 1.1.1.1,从我这儿走"。

Type 4 的通告者是 ABR,Link State ID 是 ASBR 的 Router ID。所以一台路由器要能算出外部路由,必须同时有 Type 5 和 Type 4(如果 ASBR 就在自己区域内,则不需要 Type 4)。

Type 5 · AS External LSA:外部路由

ASBR 做了路由引入(import-route)后,把外部路由(直连、静态、其他协议)写成 Type 5 泛洪到整个 OSPF 域。

Type 5 的关键字段是 E 标志(Metric Type),决定外部路由的度量方式:

E1(第一类外部路由)E2(第二类外部路由)
度量计算外部开销 + 内部开销只算外部开销(内部开销忽略)
是否会随路径变化会,越远开销越大不会,全网看到的开销都一样
默认值—华为默认是 E2
适用希望路径选优(多出口时按实际距离选)希望所有出口等价,稳定不抖动

还有两个相关概念:Forwarding Address(FA)——如果 Type 5 里带了 FA,则外部路由的下一跳指向 FA 而不是 ASBR,用来优化路径(避免绕到 ASBR 再出去);Tag——给外部路由打标签,方便在 ABR/ASBR 上用路由策略过滤或改属性。

Type 7 · NSSA External LSA:NSSA 专用

NSSA(Not-So-Stubby Area)是个矛盾体:它不想接收 Type 5(所以要像 Stub 一样精简),但自己又想引入外部路由。

解法是造一种新 LSA:Type 7,只在 NSSA 区域内泛洪。NSSA 里的 ASBR 用 Type 7 通告外部路由,出区域时由 ABR 把 Type 7 翻译成 Type 5。

翻译时有个细节:Type 7 里有 P 位(Propagate),只有 P=1 的 Type 7 才会被翻译成 Type 5。翻译后的 Type 5 会带上转发地址(FA)——通常是 ABR 的地址,这样其他区域就知道要绕到那个 ABR 出去,避免次优路径。

特殊区域:靠裁剪 LSA 来减负

网络一大,LSDB 就大。OSPF 用特殊区域把不必要的 LSA 挡在门外:

区域类型允许 Type 1/2允许 Type 3允许 Type 4/5能引入外部路由吗
普通区域✅✅✅可以
Stub✅✅❌(用默认路由代替)不可以
Totally Stub✅❌(只留一条默认路由)❌不可以
NSSA✅✅❌(但允许 Type 7)可以
Totally NSSA✅❌(只留默认路由)❌(但允许 Type 7)可以
huawei · 配置特殊区域
# Stub 区域(区域内所有路由器都要配)
ospf 1
 area 1
  stub

# Totally Stub(只在 ABR 上配 no-summary)
ospf 1
 area 1
  stub no-summary

# NSSA
ospf 1
 area 1
  nssa

# Totally NSSA
ospf 1
 area 1
  nssa no-summary

LSDB 同步:LSA 是怎么被要过来的

邻居状态爬到 Exchange 时,双方只交换 LSA 的头部摘要(相当于交换目录)。发现对方有的自己没有,就用 LSR 索要:

同步流程
ExStart   协商主从(Router ID 大的当 Master,决定序列号)
   │
Exchange  互发 DBD,交换【LSA 头部摘要】——相当于对目录
   │
Loading   对不上的条目:我发 LSR 要,你用 LSU 给
   │       (LSAck 确认收到,保证可靠)
   │
Full      LSDB 完全一致

★ 关键:传输是【可靠的】。LSU 收到后必须回 LSAck;
  没收到确认就重传,最多重传几次后拆邻居。

LSA 的老化与刷新机制也要记住:

验证与排错

huawei
display ospf lsdb                    # 整个 LSDB
display ospf lsdb router 1.1.1.1     # 看某台路由器的 Type 1
display ospf lsdb network             # 所有 Type 2
display ospf lsdb summary             # 所有 Type 3
display ospf lsdb asbr                # 所有 Type 4
display ospf lsdb ase                 # 所有 Type 5
display ospf lsdb nssa                # 所有 Type 7

display ospf lsdb router self-originate   # ★ 我自己产生的 LSA
display ospf brief                        # 区域、SPF 次数、LSA 统计
display ospf routing                      # OSPF 算出来的路由(区分 Intra/Inter/External)

reset ospf process                    # 重启进程(慎用)

排错时最有用的两条:

一句话总结:1/2 类画地图(区域内),3 类转述网段(区域间),4 类指出 ASBR 在哪,5 类说外面有什么,7 类是 NSSA 的内部货。特殊区域就是"按需裁剪 LSA 清单"。把这张表和传播范围背下来,OSPF 的 LSDB 就再也不是黑盒了。

📌 本篇整理自 2024–2025 的「数通」学习笔记(HCIE-Datacom 方向)

合并了原始笔记中「OSPF LSA总结 / 1类LSA / 2类LSA / 3类LSA / 4类LSA / 5类LSA / 类型概括 / 外部路由 / 外部路由类型 / LSDB同步」等页。
原笔记里的 LSA 对照表来自华为胶片截图,OCR 后 Type 与字段名有损耗,本文按标准 OSPFv2 重新校对并补齐了 Link Type、E1/E2、DN 位、P 位等细节。
配置命令保留华为 VRP 原样。