





查看LSDB


LSA结构

常见LSA类型


一类LSA
广播型的一类LSA比较复杂,先了解点到点的一类LSA,将实验拓扑修改为点到点的网络类型。

现在在R1上查看LSDB

两条一类的,五条三类的,没有二类的LSA了。
下面的是之前的广播型的网络类型的,少了一条二类的LSA。

少了一条二类的LSA:
广播型网络类型是要选举DR和BDR的,二类的LSA是用来描述DR的信息的。
二类LSA,也叫做 Network LSA(网络链路状态通告)
在广播型多路访问网络(如以太网)中,由指定路由器(DR)负责描述:这个网段上有哪些路由器,以及这个网段本身的网络掩码。
二类LSA由DR产生,是因为在广播型多路访问网络中,DR被选为该网络的"代表",负责将该复杂网络的拓扑信息(谁连着谁)简化成一个星型结构并通告出去。
P2P链路中没有二类LSA,是因为它的拓扑结构极度简单(只有两个节点),不需要额外的"代表"和"描述"就能被SPF算法理解。

有两个一类LSA,因为区域12里面就两台路由器。
查看骨干区域的R3的LSDB

为一个区域中有几台路由器,就有几个一类的LSA
一类LSA = Router LSA(路由器链路状态通告)
谁产生的: 每台运行OSPF的路由器,为它所在的每个区域单独产生一个一类LSA。
传播范围: 只在本区域内部洪泛,绝不跨区域。
核心作用: 描述这台路由器在某个区域内的所有链路状态信息。
一句话:一类LSA就是一台路由器在某个区域里的"自拍照"+"自我介绍信"。
每一个运行OSPF的路由器都会在自己所属的区域产生一个一类LSA。
一台区域边界路由器(ABR)会产生 N个 一类LSA(Router LSA)。这个 N 等于这台路由器所连接的区域的数量(包括骨干区域)。
为什么是N个,而不是1个?
要理解这个,必须回到一类LSA的根本定义:一类LSA是路由器在一个区域内的"自我介绍信"。
如果一台路由器只属于一个区域(比如普通内部路由器),它只需要写一封信,介绍自己在这个区域里的情况。
但ABR属于多个区域。它在区域0里有接口,在区域1里也有接口,可能还在区域2里有接口。
问题来了: 它能把所有接口的信息写在同一封信里,然后发到所有区域吗?
绝对不能! 因为一类LSA的传播范围被严格限制在本区域内。区域0的一类LSA绝对不能跑到区域1里去。
所以,ABR的解决方案是:为每一个所属的区域,单独写一封"自我介绍信"。
写给区域0的一类LSA:里面只描述ABR在区域0里的接口和链路。
写给区域1的一类LSA:里面只描述ABR在区域1里的接口和链路。
写给区域2的一类LSA:里面只描述ABR在区域2里的接口和链路。
这三封信,分别在各自对应的区域里洪泛,互不干扰。
OSPF三类路由






为什么一类LSA要把"拓扑信息"和"网段信息"塞在同一份LSA里?
一类LSA里到底有什么?
在一类LSA(Router LSA)里,确实包含了两种不同类型的链路信息:
| 链路类型 | 具体内容 | 属于哪类信息 |
|---|---|---|
| Type 1(P2P) | 我连到了谁(邻居Router ID)、我用哪个IP连的、Cost | 拓扑信息 |
| Type 2(TransNet) | 我连到了哪个广播网(DR的IP)、我用哪个IP连的、Cost | 拓扑信息 |
| Type 3(StubNet) | 我直接管着哪个网段(网段号+掩码)、进入这个网段的Cost | 网段信息 |
从设计意图看:为什么要放在一起?
核心答案:
因为一台路由器的完整描述,必须同时包含"它在拓扑中的位置"和"它身上挂着的网段"。这两者是同一台路由器的两个不可分割的侧面。
打个比方:
想象你要向别人介绍一个人。你会说两件事:
这个人在社会关系中的位置(他是谁的儿子、谁的父亲、谁的朋友)------ 这是"拓扑信息"
这个人拥有什么资产(他有房子、有车子)------ 这是"网段信息"
你不会分开说:"这是张三的社会关系介绍信",另一封是"张三的资产清单"。因为这两者合在一起,才是一个完整的人。
一台路由器也是这样:
拓扑信息告诉别人:我在网络图中连到了谁,我在什么位置
网段信息告诉别人:我直接服务哪些IP网段,你们可以通过我来访问它们
把这两者放在同一封LSA里,是因为它们描述的是同一个实体------这台路由器本身。
从计算逻辑看:为什么要放在一起?
这是更硬核的层面。我们来看看SPF算法是怎么用这些信息的。
步骤1:先用拓扑信息画图
SPF算法首先读取所有一类LSA里的Type 1(P2P)和Type 2(TransNet)链路。这些链路告诉它:
-
节点A连着节点B
-
节点A连着广播网C(由DR代表)
有了这些,SPF算法就能画出一张完整的网络拓扑图,并计算出从自己出发到每个节点的最短路径树。
步骤2:再把网段信息挂上去
最短路径树算好后,SPF算法回头去看每个节点的一类LSA里的Type 3(StubNet)链路。它发现:
-
节点A身上挂着192.168.1.0/24这个网段,Cost=1
-
节点B身上挂着10.0.0.0/8这个网段,Cost=10
于是,它把这些网段作为"叶子",挂到刚才算好的最短路径树上。
关键点:
如果这两类信息分开放在不同的LSA里,会怎样?
-
SPF算法要先收齐所有"拓扑LSA",画好图
-
然后还要再收齐所有"网段LSA",一个个去匹配:这个网段是挂在哪个节点上的?
这会产生两个问题:
-
匹配困难:你怎么知道192.168.1.0/24是挂在R1身上,而不是R2身上?必须在网段LSA里显式指定"我是R1的网段",这就引入了额外的关联机制,更复杂。
-
增加LSA数量:本来一台路由器发1个LSA就够了,现在要发2个(一个拓扑LSA,一个网段LSA),全网LSA数量翻倍,LSDB膨胀。
放在一起,天然解决了关联问题: 因为网段信息就在路由器的"自我介绍信"里,SPF算法在读到这台路由器时,自然就知道它身上挂着哪些网段。
一句话总结:
因为网段信息是附着在路由器上的,就像树叶长在树上。描述一棵树,当然要把"树的枝干"(拓扑)和"树上的叶子"(网段)一起说。分开描述,反而要多费周章去说明"这片叶子是哪棵树的"。
注意 :P2P有对应的StubNet,是因为它没有别的机制来描述网段信息;TransNet没有对应的StubNet,是因为它的网段信息已经由DR通过二类LSA统一描述了
OSPF的设计遵循一个根本原则:每条信息只在一个地方描述,由最合适的那个实体来描述。
一、P2P场景:为什么网段信息必须放在一类LSA里?
在P2P链路上,情况是这样的:
-
只有两台路由器,没有第三方
-
没有DR,没有"代表"
问题: 如果网段信息不放在一类LSA里,能放哪儿?
不能放二类LSA,因为没有DR
不能放三类LSA,因为那是跨区域的
不能放五类LSA,因为那是外部的
唯一能放的地方:每个路由器自己的一类LSA。
所以P2P的设计是别无选择的:既然没有代表,那就每个人都自己说自己这一端的网段。
二、TransNet场景:为什么网段信息不能放在一类LSA里?
在广播网上,情况完全不同:
-
有多台路由器
-
有DR作为代表
问题: 如果每个路由器都在自己的一类LSA里用StubNet描述这个广播网的掩码,会发生什么?
假设以太网上有10台路由器,网段是192.168.1.0/24。
错误的设计(每个路由器都放StubNet):
R1的一类LSA:StubNet,192.168.1.0/24
R2的一类LSA:StubNet,192.168.1.0/24
R3的一类LSA:StubNet,192.168.1.0/24
......
R10的一类LSA:StubNet,192.168.1.0/24
结果: 同一个网段的信息被重复描述了10次!这带来了几个严重问题:
LSA数量膨胀:本来只需要1条信息,现在变成10条
资源浪费:每台路由器都要存储和处理这些重复信息
逻辑混乱:当SPF算法收到10条一模一样的网段信息,它该信谁的?这10条信息其实描述的是同一个网段,但算法无法知道它们是重复的,只能当成10个不同的网段来处理,导致路由计算错误
OSPF的正确设计(只有DR放二类LSA):
DR(比如R2)的二类LSA:Network Mask = 255.255.255.0
其他路由器的一类LSA里只有Type 2链路,没有StubNet
结果: 网段信息只被描述1次,所有人都去读DR的二类LSA。
三、两种设计的对比
| 维度 | P2P链路 | 广播网(TransNet) |
|---|---|---|
| 参与者数量 | 2台 | N台 |
| 是否有DR | 无 | 有 |
| 网段信息放哪 | 每个路由器自己的StubNet | DR的二类LSA |
| 重复次数 | 2次(两端各一次) | 1次(只有DR发一次) |
| 是否浪费 | 无法避免,只有2次 | 避免重复,高效 |
四、为什么P2P不能也用类似"代表"的方式?
你可能会问:P2P为什么不能也选一个"代表"来统一描述网段信息?
因为在P2P链路上:
只有两台路由器,没有机制选代表(选了也没意义,因为只有两个人)
即使选了一个代表,另一台还是要发自己的StubNet(因为代表无法替另一台描述)
最终还是会变成两台各发一次,和现在一样
所以P2P的"两次描述"是最小必要信息量,无法再优化。
五、从信息论的角度看
OSPF的设计遵循一个原则:信息的不重复度 = 网络拓扑的复杂度。
| 网络类型 | 最小必要信息量 | OSPF的实现 |
|---|---|---|
| P2P | 两端各描述一次 | 两类LSA的StubNet各一次 |
| 广播网 | DR统一描述一次 | 二类LSA一次 |
这不是混乱,而是根据不同场景选择最优的信息分布方式。
OSPF的设计原则: 信息放在最该放的地方,由最合适的实体来描述,避免重复,保证效率。这才是真正的"统一"------统一于设计原则,而不是统一于表面形式。
备注:
LSA的三元组:链路状态类型、链路状态ID、通告路由器三元组唯一地标识了一个LSA。
判断LSA新旧:链路状态老化时间、链路状态序列号 、校验和用于判断LSA的新旧

bash
1类LSA解析
类型:Router-LSA
名字:取自生产这条LSA的路由器的Router-id
通告路由器:生产这条LSA的路由器的Router-id
传播范围:区域内
特点:每一台运行OSPF的路由器都会在所属的区域生产1条1类LSA
作用:用来计算域内路由
:如何计算域内路由? 1类LSA是在给路由器做自我介绍
介绍两类信息:拓扑信息 和网段信息
拓扑信息:我是谁,我的邻居是谁,我用那个接口IP连接着我的邻居
网段信息:我的接口IP地址段,我的接口IP的掩码 我接口cost值
查看命令: display ospf lsdb router
: display ospf lsdb router 1.1.1.1
P2P的网络中的1类LSA,可以独立计算域内路由
但是广播型网络中的1类LSA无法独立计算域内路由, 为什么?
因为广播型网络的1类LSA:
1)第一:没有描述DR的IP地址所在网段的掩码信息
2)第二:没有描述DR所在网段的完整的拓扑信息
如何解决:使用2类LSA来辅助1类LSA,计算域内路由

R1有三条链路,第一条链路告诉R1我有个邻居是2.2.2.2;第二条链路告诉R1我有个接口是192.168.12.0,掩码是24;第三条链路告诉R1我有个接口是192.168.1.0,掩码是24。
一共三条链路。

一个邻居,两个接口,正好三条链路。
查看2.2.2.2这一条一类LSA
R2只有两条链路

R2有两个接口,有两个邻居,LSA里面应该有四条链路信息。

这是因为一类LSA只会描述同一个区域的链路信息。
R2在区域12中,只有一个接口,只有一个邻居,所以一类LSA中在区域12中只有两条链路信息。

计算路由
根据R1的一类LSA能画出的

根据R2的LSA继续画

计算路由



路由表只负责选路,选出最优之后,它就把结果告诉FIB表,自己就歇着了。
总结:
P2P网络中的一类LSA可以独立计算域内路由,实现区域内通信。
在P2P网络中,一类LSA提供了构建全网拓扑和生成路由所需的全部"原材料",因此路由器可以仅凭这些LSA独立完成计算。而在广播网中,则必须依赖二类LSA的补充。
二类LSA
修改广播类型为广播型(默认就是广播型)

在R1上查看LSDB

改成广播型网络就有二类LSA了。
查看广播型网络的一类LSA
原来在点到点链路中,R1有三条LSA链路,改成广播型链路之后,R1只有两天LSA链路。
bash
display ospf lsdb router 1.1.1.1

bash
display ospf lsdb router 2.2.2.2

画拓扑

计算路由
问题:TransNet为什么会出现在一类LSA里面
一、TransNet到底是什么?
TransNet = Transit Network = 中转网络
在OSPF的术语里,TransNet特指具有"中转"能力的多路访问网络------最典型的就是以太网。
为什么叫"中转"?因为这种网络的作用不仅仅是连接终端设备,更重要的是可以承载多个路由器之间的流量转发。数据包可以从一台路由器进来,经过这个网络,再转发给另一台路由器。
TransNet的核心特征:
-
可以连接两台以上的路由器
-
所有路由器都能直接通信(多路访问)
-
可以作为"中转站"让流量穿过去
-
典型例子:以太网、帧中继
二、TransNet在一类LSA里长什么样?
先看一个具体例子:
假设R1、R2、R3三台路由器连在同一个以太网上,网段是192.168.1.0/24,DR是R2(接口IP=192.168.1.2)。
R1的一类LSA里会有一条这样的链路信息:
bash
链路类型 = 2 (TransNet)
链路ID = 192.168.1.2 (这是DR的接口IP)
链路数据 = 192.168.1.1 (这是R1自己的接口IP)
度量值 = 10
这条链路信息的意思是:"我(R1)连接到了一个广播型网络,这个网络的代表(DR)是192.168.1.2,我用192.168.1.1这个IP连上去的,开销是10。"
三、为什么TransNet要放在一类LSA里?
这是你问题的核心。要理解这个,必须回到一类LSA的根本作用:描述"我自己"的链路状态。
1. 一类LSA的视角:"我"为中心
一类LSA是从每台路由器自己的视角来描述自己的情况。它回答的问题是:
-
我是谁?
-
我有哪些接口?
-
每个接口连到了哪里?
对于R1来说,它的G0/0/0接口确实连到了一个以太网。这个事实必须告诉别人。所以,这条TransNet链路放在R1的一类LSA里,是天经地义的------因为它描述的是R1自己的接口情况。
2. TransNet链路只描述"我连到了什么",不描述"那个网上有什么"
这是一个关键区分:
| 链路类型 | 描述内容 | 描述的是 | 放在哪 |
|---|---|---|---|
| TransNet | 我连到了某个广播网 | 我自己的连接情况 | 一类LSA |
| Network LSA(二类) | 这个广播网上有谁、掩码是多少 | 广播网本身的情况 | 二类LSA |
TransNet链路的作用很单一: 它只说"我连到了那个网",不负责描述那个网上还有什么。就像一个人只说"我住在某某小区",但不负责说小区里还有谁。
3. 类比帮助理解
想象你要向别人介绍一个公寓楼里的情况:
-
一类LSA的TransNet链路 = 每个住户说:"我住在xx小区"(这是每个人自己的信息)
-
二类LSA = 物业发一个公告:"xx小区里有张三、李四、王五,地址是yy街zz号"(这是小区的整体信息)
如果每个住户不说"我住在xx小区",别人就不知道谁住在这个小区;如果没有物业的公告,别人就不知道这个小区里具体有谁。
两者缺一不可,且各司其职。
四、如果TransNet不在二类LSA里,会怎样?
你可能会想:为什么不把广播网的全部信息都放在二类LSA里,一类LSA里完全不提TransNet?
这样做的后果是:SPF算法无法知道哪些路由器连到了这个广播网。
SPF算法需要知道每个节点(路由器)的连边。R1连到了广播网,这是一条重要的"边"。这条"边"的信息必须由R1自己说出来(在一类LSA里),否则SPF算法画图时就缺了这条连接。
把TransNet放在一类LSA里,保证了每个节点都把自己连到广播网的这个事实告诉了所有人。
五、完整的信息拼图
现在我们把所有碎片拼起来,看SPF算法是怎么用这些信息的:
-
从R1的一类LSA(TransNet链路)知道:R1连到了某个广播网(代表是DR=192.168.1.2)
-
从R2的一类LSA(TransNet链路)知道:R2也连到了这个广播网(因为它的DR也是192.168.1.2)
-
从R3的一类LSA(TransNet链路)知道:R3也连到了这个广播网
-
从R2的二类LSA知道:这个广播网的掩码是255.255.255.0,网上有R1、R2、R3
有了这些,SPF算法就能正确画出拓扑图:
bash
R1
|
| (广播网)
|
R2--- ---R3
如果没有TransNet链路(步骤1-3),SPF算法只知道有R1、R2、R3三台路由器,也知道有一个广播网(从二类LSA),但不知道这三台路由器和这个广播网之间是什么连接关系,拓扑图就画不出来。
六、总结
| 问题 | 答案 |
|---|---|
| TransNet是什么? | 具有"中转"能力的多路访问网络(如以太网),可以连接多台路由器 |
| 为什么在一类LSA里? | 因为它是每台路由器对自己接口连接情况的描述,属于"我自己的信息",必须由每个路由器自己说出来 |
| 和二类LSA什么关系? | TransNet链路说"我连到了这个网"(个体),二类LSA说"这个网上有谁"(整体),两者配合才能完整描述广播网 |
一句话总结:TransNet链路在一类LSA里,是因为它描述的是"我"这个个体和广播网的关系;二类LSA描述的是广播网这个整体的情况。个体信息由个体自己说,整体信息由代表(DR)统一说------这正是OSPF设计的精妙之处。
关于二类LSA的一些思考
P2P的网络中的1类LSA,可以独立计算域内路由
但是广播型网络中的1类LSA无法独立计算域内路由, 为什么?
因为广播型网络的1类LSA:
1)第一:没有描述DR的IP地址所在网段的掩码信息
2)第二:没有描述DR所在网段的完整的拓扑信息
如何解决:使用2类LSA来辅助1类LSA,计算域内路由
2类LSA类型:Network-LSA
名字:取自DR的接口的IP地址
通告路由器:DR接口所在路由器的Router-id
传播范围: 区域内
作用: 辅助1类LSA,计算域内路由
:如何辅助的?
1) 补全了DR所在网段的掩码信息
2) 补全了DR所在网段的完整的拓扑信息
记录了所有和DR建立完全邻接关系的路由器,描述完整的拓扑信息
备注:在广播型网络中,1类和2类LSA,共同计算域内路由
| 问题 | 答案 |
|---|---|
| 为什么广播网的1类LSA没有掩码信息? | 掩码信息由DR统一通过2类LSA发布,避免N次重复 |
| 为什么广播网的1类LSA没有完整拓扑? | 1类LSA是"个体视角",无法描述"群体关系",完整拓扑必须由DR的2类LSA提供 |
| 为什么P2P网络可以独立计算? | P2P的1类LSA同时提供了拓扑信息(P2P链路)和网段信息(StubNet),无需其他LSA补充 |
一、先明确一个根本问题:SPF算法需要什么才能算出路由?
SPF算法要计算路由,需要两类信息:
-
拓扑信息:谁和谁连着?网络图是什么样的?
-
网段信息:每个节点上挂着哪些IP网段?(网段号+掩码)
缺了任何一个,路由都算不出来。
二、P2P网络中:为什么1类LSA就够了?
在P2P网络中,两台路由器R1和R2直连,网段是10.0.12.0/24。
R1的1类LSA里有什么?
bash
链路1(Type 1 - P2P):
- 链路ID = R2的Router ID(拓扑信息:我邻居是R2)
- 链路数据 = 10.0.12.1(拓扑信息:我用这个IP连的)
- 度量值 = 10
链路2(Type 3 - StubNet):
- 链路ID = 10.0.12.0(网段信息:这个链路的网段号)
- 链路数据 = 255.255.255.0(网段信息:掩码)
- 度量值 = 10
R2的1类LSA同理。
现在,SPF算法收到这两份LSA后:
-
拓扑信息完整:从R1的P2P链路知道R1-R2相连,从R2的P2P链路也印证了这一点。拓扑图清晰。
-
网段信息完整:从R1的StubNet知道10.0.12.0/24挂在R1上,从R2的StubNet知道10.0.12.0/24也挂在R2上(其实描述的是同一个网段,但SPF算法能处理)。
所以,P2P网络中的1类LSA确实可以独立计算路由。 因为它同时提供了拓扑信息和网段信息。
三、广播型网络中:为什么1类LSA不够?
现在看广播型网络,以太网上有R1、R2、R3,DR是R2,网段是192.168.1.0/24。
1. 1类LSA里有什么?
R1的1类LSA:
bash
链路类型 = 2(TransNet)
链路ID = 192.168.1.2(DR的接口IP)
链路数据 = 192.168.1.1(R1自己的IP)
度量值 = 10
R2的1类LSA:
bash
链路类型 = 2(TransNet)
链路ID = 192.168.1.2(DR的接口IP)
链路数据 = 192.168.1.2(R2自己的IP)
度量值 = 10
R3的1类LSA:
bash
链路类型 = 2(TransNet)
链路ID = 192.168.1.2(DR的接口IP)
链路数据 = 192.168.1.3(R3自己的IP)
度量值 = 10
2. 现在看缺少了什么
第一:缺少掩码信息
-
在P2P网络中,掩码信息由Type 3(StubNet)链路提供
-
但在广播型网络中,1类LSA里没有任何Type 3链路来描述这个广播网的掩码
-
SPF算法知道R1连到了一个叫"192.168.1.2"的东西,但它不知道这个网络有多大(是/24还是/16?)
第二:缺少完整的拓扑信息
-
从R1的1类LSA,只知道R1连到了"192.168.1.2"
-
从R2的1类LSA,只知道R2也连到了"192.168.1.2"
-
从R3的1类LSA,只知道R3也连到了"192.168.1.2"
-
但SPF算法不知道R1、R2、R3之间是什么关系! 它们是两两相连?还是都连到一个中心节点?拓扑图不完整。
四、为什么广播型网络的1类LSA不能放掩码信息和完整拓扑?
你问到了一个关键:为什么不能像P2P那样,也在1类LSA里加一个StubNet来描述这个广播网的掩码?
这个问题要从两个层面回答。
层面一:为什么不能放掩码?
假设允许每个路由器都在1类LSA里加一个StubNet来描述这个广播网的掩码,会发生什么?
-
R1的1类LSA:StubNet,192.168.1.0/24
-
R2的1类LSA:StubNet,192.168.1.0/24
-
R3的1类LSA:StubNet,192.168.1.0/24
-
......
结果:同一个网段的掩码信息被重复描述了N次!
这带来了几个严重问题:
-
LSA数量膨胀:本来只需要1条信息,现在变成N条
-
资源浪费:每台路由器都要存储和处理这些重复信息
-
逻辑混淆:SPF算法收到N条一模一样的网段信息,它该信谁的?这N条信息其实描述的是同一个网段,但算法无法知道它们是重复的,只能当成N个不同的网段来处理,导致路由计算错误
所以,OSPF的设计原则是:能在一条LSA里说清楚的事,绝不用N条。 广播网的掩码由DR统一发一次就够了。
层面二:为什么不能放完整拓扑?
完整拓扑指的是:R1、R2、R3之间的连接关系。
问题:1类LSA是以"我"为视角的,它无法描述"别人之间的关系"。
-
R1的1类LSA只能说"我连到了DR",但不能说"R2和R3也连到了DR"
-
这是视角限制------每个人只能说自己,不能说别人
要描述"这个网上都有谁",需要一个上帝视角。这个上帝视角就是DR------因为它和所有人都建立了邻接关系,它知道所有人的存在。
所以,完整拓扑信息只能由DR通过2类LSA来提供。
五、完整的拼图
现在把广播型网络的完整信息拼起来:
| LSA类型 | 提供什么信息 | 谁提供 | 类比 |
|---|---|---|---|
| 1类LSA的TransNet链路 | 每个路由器说"我连到了那个网" | 每个路由器自己 | 每个人说"我住在这个小区" |
| 2类LSA(Network LSA) | 这个网的掩码 + 这个网上有谁 | DR | 物业发公告"小区里有张三、李四、王五,地址是xx街" |
SPF算法需要两者结合才能画出完整的拓扑图:
-
从1类LSA的TransNet链路知道:R1、R2、R3都连到了同一个网(通过DR的IP识别)
-
从2类LSA知道:这个网的掩码是/24,这个网上有R1、R2、R3
-
于是SPF算法知道:这个广播网是一个"伪节点",R1、R2、R3都连到这个伪节点上
这就是广播型网络中1类LSA无法独立计算路由的根本原因------它必须依赖2类LSA的补充,才能获得完整的掩码信息和拓扑信息。



2类LSA
类型:Network-LSA
名字:取自DR的接口的IP地址
通告路由器:DR接口所在路由器的Router-id
传播范围: 区域内
作用: 辅助1类LSA,计算域内路由
:如何辅助的?
1) 补全了DR所在网段的掩码信息
2) 补全了DR所在网段的完整的拓扑信息
记录了所有和DR建立完全邻接关系的路由器,描述完整的拓扑信息
备注:在广播型网络中,1类和2类LSA,共同计算域内路由
要让一台网络中同时存在DR和BDR,必须同时满足以下两个条件:
-
网络类型 :必须是广播型多路访问网络 (如以太网)或 NBMA 网络。
-
设备数量 :该网段上必须至少有3台(或更多)运行OSPF的路由器。

三类LSA


类型:sum-net-LSA (network-summary)
名字:取自-区域之间路由网段的名字
通告路由器:本区域的ABR设备的router-id
传递范围:区域内
解析:3类LSA在传播的过程中,每经过一个ABR设备,那个通告路由器就会发送1次变化
变成所经过的那台ABR设备的router-id
判断一个LSA,我们通常看LSA的三元组: 类型,名字,通告路由器
如果一个LSA的三元组发生变化,我们就认为他们不是同一个3类LSA
特点:区域的ABR设备把区域内由1类和2类LSA计算出来的域内路由
变成3类LSA,在相邻的区域内泛洪
区域内的ABR设备还会把从骨干区域学习到的3类LSA泛洪相邻的区域
作用:计算域间路由, 实现区域和区域之间的通信
查询命令:
<R1>dis ospf lsdb summary
<R1>dis ospf lsdb summary 192.168.2.0

查看R1上的OSPF协议路由表

三类LSA跨区域传播

通告路由器已经发生变化了。
三类LSA(Sum-Net LSA)每经过一个ABR(区域边界路由器),Advertising Router 字段一定会变成当前这个ABR的Router ID。

只有修改了通告路由器ID,才能算出下一跳
理解不同LSA的Link State ID
| LSA类型 | 描述对象 | 对象属于哪类概念 | Link State ID是什么 | 为什么这么设计 |
|---|---|---|---|---|
| 一类LSA (Router) | 一台路由器 | 拓扑节点 | Router ID | 路由器自己的身份证号 |
| 二类LSA (Network) | 一个广播网段 | 拓扑节点(伪节点) | DR的接口IP | 广播网本身没有ID,用它的代表(DR)的IP来标识 |
| 三类LSA (Sum-Net) | 一个IP网段 | 地址范围 | 网段号(如192.168.1.0) | 网段号本身就是这个地址范围的ID |
| 四类LSA (Sum-ASBR) | ASBR的位置 | 拓扑节点 | ASBR的Router ID | 描述的是"ASBR这台路由器在哪" |
| 五类LSA (External) | 外部IP网段 | 地址范围 | 外部网段号 | 同三类,描述的是网段本身 |
| 概念 | 本质 | 对应LSA | Link State ID设计 |
|---|---|---|---|
| 广播网段 | 物理/逻辑拓扑实体 | 二类LSA | 借用DR的接口IP作为ID |
| IP网段 | 地址范围 | 三类/五类LSA | 直接用网段号作为ID |
一句话:广播网段是"容器",IP网段是"内容";容器用代表的名字(DR的IP),内容用自己的名字(网段号)。
三类LSA结构


再加上R1出接口的cost=1

不同维度理解OSPF的分类
网络功能角色 (Stub vs Transit)、LSA类型 (一类LSA里的链路类型)、路由范围(域内 vs 域间)
一、先区分三个不同的维度
| 维度 | 包含的概念 | 回答的问题 |
|---|---|---|
| 网络功能角色 | Stub网络、Transit网络 | 这个网络是用来干什么的?(终点还是中转?) |
| LSA类型 | 一类LSA、二类LSA、三类LSA | 用什么数据结构来描述网络信息? |
| 路由范围 | 域内路由、域间路由、域外路由 | 这条路由信息的来源范围是哪里? |
二、维度一:网络功能角色(Stub vs Transit)
这是网络本身的属性,和OSPF协议无关,是网络设计层面的概念。
| 网络类型 | 定义 | 例子 | 特征 |
|---|---|---|---|
| Stub网络(末梢网络) | 只连接终端设备,不承载穿越流量 | 一个只连PC的网段 | 流量只进不出,是"终点" |
| Transit网络(传输网络) | 连接路由器,承载穿越流量 | 路由器之间的互联链路 | 流量可以穿过去,是"路径" |
这个分类是独立于OSPF的------无论你跑什么路由协议,网络本身就有这个属性。
三、维度二:LSA类型(一类LSA怎么描述这些网络)
现在看OSPF的一类LSA是如何描述这两类网络的。
1. 一类LSA如何描述Stub网络?
用 Type 3(StubNet)链路。
例子: R1连着一个终端网段192.168.1.0/24。
R1的一类LSA里会写:
bash
链路类型 = 3 (StubNet)
链路ID = 192.168.1.0 (网段号)
链路数据 = 255.255.255.0 (掩码)
度量值 = 1
含义: "我(R1)身上挂着这么一个Stub网络,你们可以通过我来访问它。"
2. 一类LSA如何描述Transit网络?
用 Type 1(P2P) 或 Type 2(TransNet)链路。
例子1(P2P): R1和R2直连。
R1的一类LSA:
bash
链路类型 = 1 (P2P)
链路ID = R2的Router ID (邻居是谁)
链路数据 = 10.0.12.1 (我的接口IP)
度量值 = 10
例子2(TransNet): R1连到一个以太网,DR是R2。
R1的一类LSA:
bash
链路类型 = 2 (TransNet)
链路ID = 192.168.1.2 (DR的IP)
链路数据 = 192.168.1.1 (我的接口IP)
度量值 = 10
含义: "我(R1)连到了这么一个Transit网络,可以通过它到达其他路由器。"
3. 关键点:一类LSA同时包含Stub和Transit信息
一台路由器的一类LSA里,可能同时有:
-
Type 3(StubNet):描述它直连的终端网段
-
Type 1/2(P2P/TransNet):描述它连到的Transit网络
所以,一类LSA是"路由器自己的自我介绍信",里面既有它身上的Stub网络,也有它连到的Transit网络。
四、维度三:路由范围(域内 vs 域间)
这是路由信息的传播范围。
| 路由类型 | 定义 | 由什么LSA产生 |
|---|---|---|
| 域内路由(Intra-Area) | 同一区域内的路由 | 一类LSA + 二类LSA |
| 域间路由(Inter-Area) | 不同区域间的路由 | 三类LSA(Sum-Net) |
| 域外路由(External) | 从OSPF域外引入的路由 | 五类LSA / 七类LSA |
域内路由的计算:
在区域内,路由器通过:
-
一类LSA:知道每台路由器的连接情况(包括它连到的Transit网络和它身上的Stub网络)
-
二类LSA:知道广播型Transit网络的完整拓扑(谁在这个网上)
结合起来,就能算出整个区域的拓扑,并把Stub网络作为"叶子"挂上去。
域间路由的计算:
当ABR把一个区域的路由通告到另一个区域时,它不会把一类LSA发过去(因为一类LSA不能跨区域)。它会把区域内的网段信息 提取出来,生成三类LSA。
三类LSA只包含:
-
网段号
-
掩码
-
度量值
它不包含拓扑信息------所以其他区域的路由器只知道"有这么个网段,要通过那个ABR过去",但不知道那个区域里面长什么样。
五、现在把三个维度串起来看
用一张表理清:
| 概念 | 属于哪个维度 | 具体内容 | 和一类LSA的关系 |
|---|---|---|---|
| Stub网络 | 网络功能角色 | 连接终端的"终点"网络 | 由一类LSA的Type 3(StubNet)描述 |
| Transit网络 | 网络功能角色 | 连接路由器的"路径"网络 | 由一类LSA的Type 1/2(P2P/TransNet)描述 |
| 域内路由 | 路由范围 | 区域内部的路由 | 基于一类LSA(+二类LSA)计算得出 |
| 域间路由 | 路由范围 | 区域之间的路由 | 由三类LSA承载,一类LSA不参与 |
六、为什么要有这些区别?
OSPF这样设计的根本原因,是为了分层、分类地处理不同信息:
-
区分Stub和Transit:因为它们在网络中的作用不同------Stub是终点,只需要被访问;Transit是路径,需要知道拓扑。所以描述方式也不同。
-
区分域内和域间:因为区域内部需要精确拓扑,区域之间只需要路由方向。这是OSPF可扩展性的核心。
-
一类LSA同时包含Stub和Transit:因为一台路由器同时扮演两个角色------它既是某些网段的"终点",也是通往其他路由器的"路径点"。一份自我介绍信当然要包含这两个方面。
一句话:Stub/Transit是"网络的功能分类",一类LSA是"描述工具",Inter-area是"传播范围"。工具用来描述功能,传播范围决定信息能走多远。
bash
1. 一类LSA:只说自己
只描述"我"这台路由器的情况
说"我"连到了哪些Transit网络(Type 1/2)
说"我"身上挂着哪些Stub网络(Type 3)
绝不描述别人之间的关系
好处: 每个路由器只说自己,LSA数量 = 路由器数量,线性增长。
2. 二类LSA:由代表(DR)说广播网
只由DR发一份,描述这个广播网上的所有路由器
一份LSA,解决一个广播网的完整拓扑
好处: 无论广播网上有多少台路由器,只需要1份二类LSA,O(N²)变O(N)。
3. 三类LSA:由ABR说其他区域
只包含网段信息,不包含拓扑
实现了区域隔离,保证了可扩展性
好处: 区域1的内部拓扑变化,不会影响区域0,只需要更新三类LSA。
4. 五类LSA:由ASBR说外部
只包含外部网段信息
实现了内外隔离
好处: 外部路由震荡,不影响内部OSPF计算。
| 设计目标 | 解决方案 | 对应LSA |
|---|---|---|
| 每个路由器只说自己 | 一类LSA只描述自己 | 一类LSA |
| 广播网拓扑由代表统一说 | DR发二类LSA,避免重复 | 二类LSA |
| 区域间只传路由,不传拓扑 | ABR发三类LSA,实现隔离 | 三类LSA |
| 外部路由单独处理 | ASBR发五类LSA,内外隔离 | 五类LSA |
五类LSA
类型:External-LSA
名字:取自引入外部路由网段的名字
通告路由器:ASBR的Router-id
传播范围: 整个OSPF网络
特点:5类LSA会传播到整个OSPF网络
会在所有运行OSPF协议的路由器中泛洪 (特殊区域除外)
5类LSA不属于任何一个区域
作用:用于通告外部路由(用于计算外部路由)
查询命令:
dis ospf lsdb ase
dis ospf lsdb ase 192.168.3.0




