今日目标

OSPF特殊区域


模拟路由并且引入


假设在R6上引入50万条路由,50万条路由会生成50万条LSA,50万条LSA会全域泛洪,每一个运行了OSPF的路由器都会收到这50万条五类LSA。
对于一些骨干区域的路由器而言,他们都是高端的路由器。骨干区域可能连接很多个非骨干区域。所以骨干区域的路由器接收转发的数据量是非常大的。但是一般区域的低端的路由器承载不了这么多的路由。
Stub区域
一、为什么需要Stub区域?(问题背景)
在标准OSPF区域中,路由器需要维护三类路由信息:
| 信息类型 | 来源LSA | 内容 |
|---|---|---|
| 区域内路由 | 一类、二类LSA | 本区域的详细拓扑 |
| 区域间路由 | 三类LSA | 其他区域的网段 |
| 外部路由 | 四类、五类LSA | ASBR位置 + 外部网段 |
问题在于: 对于末梢区域(比如一个分支机构、一个只有一条出口的部门),内部路由器真的需要知道所有外部网段和所有ASBR的位置吗?
-
五类LSA:可能成千上万条(如果引入了BGP全路由)
-
四类LSA:数量等于ASBR的数量,也需要维护
-
结果:末梢区域的低端路由器被迫维护大量根本用不上的路由信息,消耗内存和CPU
核心矛盾 :这些路由器只需要知道一件事------"要出去,找ABR",但标准OSPF却把全世界的路由细节都塞给了它们。
二、Stub区域是什么?(解决方案)
Stub区域是一种特殊区域,它对进入该区域的LSA进行严格过滤:
| LSA类型 | 是否允许进入Stub区域 | 原因 |
|---|---|---|
| 一类、二类LSA | ✅ 允许 | 区域内拓扑必须完整 |
| 三类LSA(区域间) | ✅ 允许 | 让内部知道其他区域的网段(除非完全Stub) |
| 四类LSA(ASBR位置) | ❌ 禁止 | 内部不需要知道ASBR在哪 |
| 五类LSA(外部网段) | ❌ 禁止 | 内部不需要知道外部网段细节 |
但问题来了: 如果禁止了四类和五类,内部路由器怎么访问外部网络?
答案是: ABR会自动生成一条默认路由(0.0.0.0/0) ,以三类LSA的形式注入到Stub区域内。这条默认路由告诉内部路由器:"所有外部目的地,都从我这里走。"
三、Stub区域的具体设计
1. LSA过滤机制
-
ABR的行为:连接Stub区域到骨干区域的ABR,会拦截所有四类和五类LSA,不让它们进入Stub区域。
-
替代方案 :ABR自己生成一条默认路由的三类LSA,通告到Stub区域内。
-
默认路由的Cost :可以由管理员配置(
area area-id default-cost cost),默认为1。
2. 区域内路由器的视角
Stub区域内的路由器:
-
只收到一类、二类、三类LSA(以及ABR注入的默认路由)
-
完全看不到四类和五类LSA
-
路由表包含:
-
本区域的内部路由(O)
-
其他区域的区域间路由(O IA)(除非是完全Stub)
-
一条指向ABR的默认路由(O*IA)
-
3. 配置要求
-
区域内所有路由器(包括ABR)必须配置为Stub区域,否则邻居关系无法建立(因为Hello报文中的Stub标志不一致)。
-
区域内不能有ASBR ,因为ASBR需要产生五类LSA,而这些LSA被禁止进入Stub区域。如果需要引入外部路由,必须使用NSSA。
4. 完全Stub区域(Totally Stubby)
在某些厂商实现中,可以进一步过滤三类LSA(区域间路由),仅保留:
-
区域内路由(一/二类)
-
ABR注入的默认路由(三类)
此时,区域内的路由器只知道本区域和一条默认路由 ,对外部世界完全"盲视",配置为在ABR上加 stub no-summary。
一句话总结:Stub区域是OSPF为了让末梢网络"轻装上阵"而设计的------它把外部世界的复杂性(四类和五类LSA)挡在门外,只留给内部路由器一条"出去找ABR"的默认路由。



查看未配置Stub区域时的LSDB


一共有19条LSA
查看ospf路由表

现在如果把R6的g0/0/0口down掉,然后查看R1的LSDB数据库

区域12里面没有五类LSA了。
如果链路又恢复了,又要重新学习五类LSA。
配置Stub
查看R1上LSDB数据库

这条默认的三类LSA会计算一条默认的路由

这是一条域间路由,去往外部网络就走这天默认的路由。

未配置Stub的时候,走的是外部路由,优先级是150


查看ospf路由表
未配置Stub一共有19条LSA,算出来一共有17条路由。
一类、二类LSA是共同算域内路由的,两个一类LSA,一个二类LSA。这三个LSA算出了两天域内路由。
| 路由类型 | 路由标记 | 来源LSA | 默认优先级(华为) | 可信程度 |
|---|---|---|---|---|
| 直连路由 | Direct | 接口配置 | 0 | 最高 |
| OSPF内部路由 | O / O IA | 一、二、三类LSA | 10 | 很高 |
| 静态路由 | Static | 手工配置 | 60 | 中等 |
| OSPF外部路由 | O E1/E2 / O N1/N2 | 五、七类LSA | 150 | 较低 |
| 问题 | 原理核心 | 一句话答案 |
|---|---|---|
| 为什么Stub区域无法引入外部路由? | Stub区域禁止四类和五类LSA,而引入外部路由必须由ASBR产生五类LSA。 | 因为引入外部路由需要五类LSA,而五类LSA在Stub区域被禁止,所以无法引入。 |
| 为什么骨干区域不能设置为Stub? | 骨干区域是所有区域路由的交换中心,必须拥有完整信息(包括外部路由)才能正确转发。 | 因为骨干区域需要向其他区域传递外部路由,而Stub区域禁止外部路由进入,两者功能完全冲突。 |
配置Stub区域时需要注意什么?
-
一致性 :Stub区域内的所有路由器(包括ABR)都必须配置为Stub区域,否则邻居关系无法建立(Hello报文中的Stub标志位不匹配)。
-
默认Cost :可以在ABR上通过
default-cost调整默认路由的度量值。 -
不能配置虚链路:Stub区域不能配置虚链路。
如果Stub区域内的一台路由器没有配置stub,会发生什么?
-
现象 :该路由器无法与邻居建立Full状态,邻居状态卡在Init 或2-Way。
-
原因 :OSPF Hello报文中有一个Stub标志位,区域内所有路由器必须一致。不匹配则无法建立邻居关系。
如何验证Stub区域的配置和状态?
-
查看OSPF进程 :
display ospf brief------可以看到区域类型标记为Stub。 -
查看LSDB :
display ospf lsdb------确认没有4类和5类LSA,但有一条默认路由(0.0.0.0/0)的三类LSA。 -
查看路由表 :
display ip routing-table------能看到一条O IA的默认路由。
Stub区域如何在"隔离复杂性"和"保证基本连通"之间找到完美的平衡点。
一、如何做到"不让这个区域受外界影响"?
所谓"外界影响",主要是指OSPF网络外部的变化(比如新增一条外部路由、外部路由震荡)对这个区域内部路由器的冲击。
1. 物理层面的隔离:过滤4类和5类LSA
这是最直接的手段。Stub区域的ABR会像一个严格的"海关",执行以下操作:
-
禁止五类LSA(AS External LSA)进入 :外部网段的信息(可能成千上万条)被完全挡在区域之外。无论外部网络如何震荡(比如外部路由频繁up/down),这些震荡产生的LSA更新根本进不了Stub区域。区域内的路由器连这些LSA都看不到,自然不受影响。
-
禁止四类LSA(ASBR Summary LSA)进入:同样,通告这些外部路由的"人"(ASBR)的位置信息也被挡在外面。区域内路由器不需要知道谁是ASBR,也不需要维护任何关于ASBR的条目。
2. 逻辑层面的隔离:避免参与外部路由计算
由于看不到4类和5类LSA,Stub区域内的路由器不需要运行SPF算法去计算外部路由,也不需要为成千上万条外部路由维护庞大的路由表。
-
CPU负担减轻:它们只需要计算本区域的拓扑和少量区域间路由(3类LSA)。外部世界的任何拓扑变化,都与它们无关。
-
内存占用减少:LSDB中只有1、2、3类LSA,大小可控。
小结: "不受外界影响"的本质,就是通过LSA过滤,把Stub区域变成一个"信息黑盒"------外部的复杂性进不来,内部的路由器也就不需要为外部世界的风吹草动买单。
二、如何保证"互联互通"?
如果把外部信息都挡住了,那区域内的设备要访问外部网络(比如上互联网)该怎么办?这就是Stub区域设计的第二个精妙之处:"代理"机制。
1. ABR作为"唯一出口代理"
ABR是连接Stub区域和骨干区域的"大门"。它知道如何到达外部世界(因为它有完整的LSDB,能看到4类和5类LSA)。
2. 注入"万能钥匙":默认路由
为了让区域内的设备也能访问外部,ABR会主动做一件事:向Stub区域内注入一条默认路由(0.0.0.0/0)。
这条默认路由是以3类LSA(Summary LSA) 的形式注入的,因此可以被Stub区域内的所有路由器接收。
3. 区域内部路由器的行为
现在,看Stub区域内的一台路由器R1:
-
去往内部:R1有本区域的精确路由(通过1、2类LSA算出来的O路由)。
-
去往其他区域:R1有ABR发来的3类LSA,知道去往其他区域怎么走(O IA路由)。
-
去往外部(AS外部) :R1没有4/5类LSA,但它有ABR发来的默认路由(0.0.0.0/0)。当它要去访问一个不在内部路由表里的地址(比如一个外网IP)时,它会匹配这条默认路由,把流量全部扔给ABR。
小结: "互联互通"的实现,是用一条"万能钥匙"(默认路由)替代了成千上万条"具体钥匙"(外部路由) 。内部路由器不需要知道外部世界的复杂路径,它只需要知道:"出门左转,找ABR,它能带你去任何地方。"
总结
| 目标 | 实现手段 | 原理 |
|---|---|---|
| 不受外界影响 | 过滤4/5类LSA | 将外部世界的复杂性(路由震荡、大量LSA)物理隔离在区域之外,内部路由器不感知、不处理 |
| 保证互联互通 | ABR注入默认路由(3类LSA) | 用一条"万能"默认路由,替代所有具体的外部路由,内部设备只需将外部流量指向ABR即可 |
一句话总结:Stub区域通过"挡住复杂性、代理简单性",实现了让末端网络既能"独善其身"(不受外部震荡干扰),又能"兼济天下"(访问外部网络)的完美平衡。
完全Stub区域(Totally Stubby Area)
完全Stub区域(Totally Stubby Area)是OSPF中一种特殊的区域类型,它在标准Stub区域的基础上进一步限制了LSA的传播,旨在最大化减少末端区域的路由条目和LSDB大小,提升网络稳定性和资源利用率。
Stub区域虽然能挡住外部(AS外部)的震荡,但它无法隔离其他区域(区域间)的链路震荡。
关键点:3类LSA(区域间路由)是允许进入Stub区域的。
这意味着什么?意味着如果其他区域(比如Area 1、Area 2)的内部拓扑发生变化,这些变化会通过3类LSA的更新,传播到你的Stub区域。
为什么会有这个"漏洞"?
这是OSPF区域间路由的本质决定的。
1. 3类LSA是"区域间的生命线"
为了让每个区域都能知道其他区域的网段,3类LSA必须跨区域传播。这是OSPF实现全网互联的基础。
2. Stub区域的设计目标是"简化",不是"完全隔离"
Stub区域的设计初衷是:让末端路由器不用关心外部世界的复杂性(4/5类LSA) 。但它没有承诺让末端路由器不关心其他区域的内部变化。
因为其他区域的内部变化,确实会影响到"如何到达那些区域"。如果完全隔离3类LSA,Stub区域内的路由器就会失去对其他区域的认知,无法正确选路。
3. 如果连3类都想隔离怎么办?
你其实已经猜到了------这就是完全Stub区域(Totally Stubby Area) 的设计目标。
| 区域类型 | 允许的LSA | 对区域间震荡的隔离程度 |
|---|---|---|
| Stub区域 | 1、2、3 | 只能隔离4/5类,区域间3类变化仍会进入 |
| 完全Stub区域 | 1、2 | 连3类都隔离,只有ABR注入的一条默认路由 |
在完全Stub区域里:
-
ABR会过滤掉所有3类LSA(区域间路由)
-
只向区域内注入一条默认路由(0.0.0.0/0)
-
区域内路由器只知道:
-
本区域内部怎么走
-
去任何其他地方,都走ABR
-
这样,其他区域的任何链路震荡,都不会以3类LSA更新的形式进入你的区域。你完全不知道外面发生了什么,只需要相信ABR。






完全Stub区域的作用
极致简化路由表:区域内路由器只保留本区域内部路由(O)和一条由ABR注入的默认路由(0.0.0.0/0),不再学习任何其他区域的具体网段路由(即3类LSA被过滤)。
屏蔽所有外部干扰:由于3类LSA也被禁止进入,其他区域的链路震荡(如Cost变化、链路up/down)不会触发区域内路由器的LSA更新和SPF重新计算,区域稳定性最高。
节省设备资源:区域内路由器无需存储和处理区域间(3类)及外部(4/5类)LSA,CPU和内存消耗极低,适合性能较弱的末端设备。
一句话总结 :完全Stub区域在Stub区域的基础上额外过滤了3类LSA,使末端路由器彻底"盲视"其他区域,只依赖ABR的默认路由,以牺牲最优路径为代价换取极致稳定。
说明 :完全Stub区域本质是Stub区域的一种,因此区域内所有路由器必须统一配置stub(Hello报文中的Stub标志位一致),非ABR无需加no-summary。

验证



NSSA区域

增加了园区3

需求
PC1可以跟PC4互通
PC2可以跟PC4互通
PC3可以跟PC4互通
R1跟R8都配置静态路由

现在PC1跟PC4能够互联互通的。
现在还想让B园区的所有设备都能跟PC4互通,也想让A园区的PC3跟PC4能够互联互通。
思考:之前R6把去往R7的静态路由引入到了OSPF,现在R1能否把去往R8的路由引入到OSPF?

尝试引入,但是引入不了,因为是特殊区域,是不能引入外部路由的。
把引入的路由删掉



查看ospf配置信息

NSSA区域的作用:
保护一个区域不受来自外部链路的影响
缩减LSDB数据库,缩减路由表,降低设备负载,提高转发效率
NSSA区域可以引入外部路由
NSSA区域的实现:
只学习1类,2类,3类,7类的LSA
不学习,4类,5类LSA

NSSA区域的ABR会自动产生一条-默认的7类的LSA(0.0.0.0)用于访问外部网络
这条默认的7类LSA计算出来的是OSPF外部路由与外部网络通信
外部路由:优先级为150 ,路由类型:O_NSSA
NSSA区域的特点
nssa区域的ASBR设备,可以生成一条明细的7类LSA引入外部路由
7类的LSA只能在特殊区域NSSA内部传播,所以其他区域的路由器无法学习7类LSA,怎么办?
NSSA区域的ABR 会把这条7类 的明细LSA转成5类的LSA,传播给其他区域泛洪。
骨干区域不能设置为nssa区域
备注:
Stub区域生产的是一条默认的3类LSA,计算出来的是ospf内部路由,优先级为10
NSSA区域生产的是一条默认的7类LSA,计算出来的是ospf外部路由,优先级为150
O_NSSA:代表外部路由,由7类LSA计算出来的外部路由,优先级:150
O_ASE 也表示外部路由,由5类的LSA计算出的外部路由:优先级:150
OSPF表示内部路由,优先级:10
NSSA(Not-So-Stubby Area,不那么末梢的区域)的出现,是为了解决标准Stub区域的一个核心痛点 :Stub区域虽然能简化路由表,但它完全无法引入外部路由。
简单来说,NSSA是在保留Stub区域"简化、稳定"优点的同时,允许区域内引入少量外部路由的一种折中设计。
一、为什么需要NSSA?------ Stub区域的局限性
回顾一下标准Stub区域的特点:
-
优点:禁止4/5类LSA,由ABR注入默认路由,区域内部路由器极简。
-
缺点 :区域内不能有任何ASBR,即不能引入任何外部路由(静态、直连、其他协议的路由)。
但在实际组网中,我们经常会遇到这样的场景:
某分公司(作为一个OSPF区域)内部有一台服务器,需要对外发布一条静态路由(比如 10.10.10.0/24)。同时,这个分公司又希望享受Stub区域带来的"不受外部震荡影响"的好处。
矛盾出现了:
-
如果把这个分公司配置为Stub区域,它无法引入那条静态路由。
-
如果把它配置为普通区域,它又会收到来自总部的成千上万条外部路由,设备压力大。
NSSA就是专门为解决这个矛盾而设计的。
二、NSSA是什么?
NSSA(Not-So-Stubby Area)是一种OSPF特殊区域,它像Stub区域一样不接收来自其他区域的4类和5类LSA ,但它允许自己区域内的ASBR引入外部路由 ,并以一种新的LSA类型------7类LSA来承载这些外部信息。
NSSA的核心特征:
| 特性 | 说明 |
|---|---|
| 禁止进入 | 不接收来自其他区域的4类和5类LSA(像Stub一样) |
| 允许产生 | 允许本区域的ASBR引入外部路由,并产生7类LSA |
| 默认路由 | 可以手动配置ABR向NSSA内注入默认路由(可选,不是自动的) |
| 转换机制 | NSSA的ABR会将7类LSA转换成5类LSA,注入到骨干区域 |
三、NSSA的核心机制:7类LSA
NSSA引入了一种新的LSA类型------7类LSA,它是理解NSSA的关键。
| 对比项 | 5类LSA | 7类LSA |
|---|---|---|
| 产生者 | 普通区域的ASBR | NSSA区域内的ASBR |
| 传播范围 | 整个OSPF域 | 只能在NSSA区域内泛洪 |
| 内容 | 外部网段信息 | 同5类,包含外部网段、掩码、度量等 |
| 是否可转换 | 不需要 | 在ABR上会被转换成5类LSA |
| 标记 | 无 | 带有一个特殊标志,表示它来自NSSA |
7类LSA的转换过程:
-
产生 :NSSA区域内的ASBR引入一条外部路由(如静态路由),产生7类LSA。
-
泛洪:这条7类LSA只在NSSA区域内泛洪,区域内路由器都能学习到。
-
转换 :连接NSSA到骨干区域的ABR 收到这条7类LSA后,会把它转换成5类LSA。
-
传播:转换后的5类LSA被注入到骨干区域,进而传播到整个OSPF域(除其他特殊区域)。
这样设计的好处是:
-
NSSA区域内部实现了外部路由引入。
-
骨干区域和其他区域仍然通过标准的5类LSA学习到这条外部路由,完全不知道NSSA内部有7类LSA的存在。
配置NSSA区域

R1上查看LSDB数据库

NSSA 区域本身不接收来自骨干区域的 4 类和 5 类 LSA(像 Stub 一样),因此区域内路由器无法自动知道如何去往区域外的网络(包括其他区域和外部网络)。为了让这些路由器能够访问外部,作为区域出口的 ABR 自动承担起"默认网关"的角色,主动向区域内注入一条 7 类默认路由。
bash
产生的 LSA 细节:
LSA 类型:7 类 LSA(NSSA 外部 LSA)
Link State ID:0.0.0.0(代表默认路由)
Advertising Router:ABR 的 Router ID
传播范围:仅在 NSSA 区域内泛洪
所以,你看到的这条 LSA 正是 ABR 自动"赠送"给 NSSA 区域内部路由器的"万能钥匙",让它们不需要知道外部具体路由,只需把所有出区域流量都交给 ABR 处理即可。
R1上查看OSPF路由表

查看去外部的路由

引入外部路由


NAAS区域的R2上查看

R3上看路由,是五类的LSA

注意:七类LSA不会跨区域传播。转换成五类LS---可以全域泛洪。

R8写一条默认路由或者聚合路由


七类LSA的解析

Totally NSSA区域
Totally NSSA区域的作用:
保护一个区域不受来自外部链路的影响 、也不受链区域间链路的影响
缩减LSDB数据库,缩减路由表,降低设备负载,提高转发效率
Totally NSSA区域可以引入外部路由
Totally NSSA区域的实现:
只学习1类,2类,7类的LSA
不学习,3类、4类,5类LSA
出现问题:
不学习4类和5类LSA,怎么计算外部路由
没有外部路由如何与外部网络通信
不学习3类LSA,怎么计算域间路由
怎么和其他区域的网段通信
解决方案:
Totally NSSA区域的ABR会自动产生2条-默认的LSA
一个是默认的7类,一个是默认的3类
Totally NSSA区域会使用默认的3类LSA计算出来的默认路由与其他区域通信,与外部网络通信

为什么? 因为:
默认的7类计算的是OSPF外部的默认路由:优先级150
默认的3类计算的是ospf内部的默认路由:优先级10
当两个默认的LSA都存在的时候,默认的3类优于默认的7类
Totally NSSA区域的特点
如何引入外部路由
Totally nssa区域的ASBR设备,可以生成一条明细的7类LSA引入外部路由
7类的LSA只能在特殊区域Totally NSSA内部传播,所以其他区域的路由器无法学习7类LSA,怎么办?
Totally NSSA区域的ABR会把7类的明细LSA转成5类的LSA,传播给其他区域泛洪。
骨干区域不能设置为Totally NSSA区域




两条默认:一条三类、一条七类。
三类的优于七类,所以去3.1网段的走的是域间的路由。
