上一篇把邻居建立讲完了:状态爬到 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 Age | LSA 年龄(秒) | 从 0 递增到 3600(MaxAge)就作废;经过路由器时增加,一般不改 |
| LS Type | LSA 类型 | 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 1 | Router LSA | 每台 OSPF 路由器 | 本路由器直连链路的拓扑 + 路由信息 | 本区域内 |
| Type 2 | Network LSA | DR | 本广播网段的子网掩码 + 与 DR 建邻接的路由器列表 | 本区域内 |
| Type 3 | Summary LSA | ABR | 到另一个区域的域间路由(只有路由信息,没有拓扑) | 除 Totally Stub / Totally NSSA 外的区域 |
| Type 4 | ASBR Summary LSA | ABR | 到 ASBR 的路由(一条 /32 主机路由) | ASBR 所在区域的其它相关区域 |
| Type 5 | AS External LSA | ASBR | 到 AS 外部的路由 | 除 Stub / NSSA 外的区域 |
| Type 7 | NSSA External LSA | NSSA 区域内的 ASBR | NSSA 内部的 AS 外部路由 | 只在 NSSA 区域内,出区域时由 ABR 转成 Type 5 |
注意表里没有 Type 6——那是组播 OSPF(MOSPF)用的,实际组网里见不到。Type 8 以后属于 OSPFv3 / 扩展用途,也基本不碰。
Type 1 · Router LSA:我连着谁
每台 OSPF 路由器都会为每个区域产生一条 Type 1(注意:不是每条区域一条,是每个区域一条——同一台路由器在不同区域里的 Type 1 是不同的)。
它的 Link State ID 就是自己的 Router ID,内容是一串链路描述,每条链路的 Link Type 有四种:
| Link Type | 名称 | 描述什么 |
|---|---|---|
| 1 | P2P | 点对点链路,Link ID = 邻居的 Router ID |
| 2 | TransNet | 连接到广播网段,Link ID = DR 的接口 IP(指向 Type 2 LSA) |
| 3 | StubNet | 末梢网段(没跑 OSPF 的直连网段 / 环回口),Link ID = 网络号 + 掩码 |
| 4 | Virtual 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。它包含:
- 本网段的子网掩码;
- 所有与 DR 建立了邻接关系的路由器列表(Router ID 列表)。
其他路由器的 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 3 只带路由信息,不带拓扑信息。所以区域内的路由器只知道"到 10.1.1.0/24 要从 ABR 走",但不知道那个区域内部长什么样;
- ABR 从骨干区域(Area 0)学到的 Type 3,才会正常计算路由;从非骨干区域学到的 Type 3,只会存进 LSDB,不参与路由计算——这就是 OSPF 的区域防环机制;
- Type 3 在穿过不同区域时,通告者会变成新的 ABR(不像 Type 5 那样原样保留)。
一句话记法:Type 1/2 是"我身边的事实",Type 3 是"我听说的别人的事实"。所以区域内的路由计算靠地图,区域间的路由计算靠转述。
DN 位:Type 3 在 MPLS VPN 里的防环
MPLS VPN 场景下,PE 之间会跑 OSPF 多实例。为了防止 Type 3 LSA 在 VPN 实例和公网实例之间来回绕形成环,OSPF 借用了 Options 域里一个原本没用的比特,叫 DN 位(Down Bit):
- 一条路由通过 VPN 实例发布出去时,DN 位置 1;
- 绑定了 VPN 实例的 OSPF 进程,在做 SPF 计算时忽略 DN=1 的 Type 3 LSA;
- 效果:从 PE 回灌进 VPN 的路由不会再被计算一遍,环路被掐断。
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) | 可以 |
# 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 的老化与刷新机制也要记住:
- LS Age 从 0 递增到 3600 秒(MaxAge)→ 该 LSA 作废,从 LSDB 中删除;
- 为了不让 LSA 老化到 3600,产生者每 1800 秒(30 分钟)主动刷新一次,把 Age 重置为 0 并泛洪;
- 删除一条 LSA 不是"删掉",而是提前老化(Age 设为 3600)再泛洪出去,让全网一起删。
验证与排错
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 # 重启进程(慎用)
排错时最有用的两条:
display ospf lsdb router self-originate——看自己产生的 Type 1 里,每条链路的 Link Type 对不对。链路类型错了,SPF 就算错;- 路由表里看 Protocol 字段——
O_ASE是 Type 5、O_NSSA是 Type 7、O_IA是 Type 3、O是 Type 1/2。看到O_ASE但没路由,先查 Type 4 有没有。
一句话总结: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 原样。