特殊区域
存在以下两种情况:
- 运行OSPF的部分设备不支持大量的LSA接收和计算。
- 连接终端的设备一般处于末节网络,不需要计算其他网络的路由信息。
随着设备的不断增加,网络规模的不断扩大,OSPF设备计算的内容越来越多,使用区域划分来减少区域内的LSDB规模、LSA的数量。区域划分后,区域内仍要接收区域外的LSA信息和区域间的LSA信息,为进一步的减少区域内的LSDB规模、LSA的数量,使用特殊区域来进行优化。 ::: tip 区域划分只是减少了LSA的拓扑信息数量,但1、2类LSA转换成了3类LSA在区域间,外部信息没有减少。 特殊区域减少了区域间和区域外的信息。 :::
特殊区域类型
STUB区域:末节区域
[AR4-ospf-1-area-0.0.0.1]stub 区域1设置为stub区域
设置完成后邻居建立失败: 在AR2的G0/0/1口抓包AR2发出的hello报文: 在AR2的G0/0/1口抓包AR4发出的hello报文: ::: tip 如上,HELLO报文内option字段中的E bit表示不支持(不存在)5类LSA,置位表示存在5类LSA,没有置位表示没有5类LSA。 ::: 即AR2支持5类LSA,AR4不支持5类LSA,协商失败,无法建立邻居。
STUB区域保留1、2、3类LSA ,不存在5类LSA。 在AR1上引入192.168.1.1/32和环回口1.1.1.1/32的两条路由,AR4中没有收到相应的LSA信息,即没有对应的路由信息,但AR4可以访问AR1的外部路由: STUB区域的设备没有外部路由对应的5类LSA,会通过缺省路由访问: 缺省路由的来源:配置为STUB区域的ABR会下发缺省路由。 如拓扑中的AR2和AR3。 AR2下发缺省路由: ::: warning 如上,STUB区域的ABR会产生缺省的3类LSA,并在STUB区域内泛洪。 :::
Totally STUB区域:完全末节区域
Totally STUB是STUB的升级版,多过滤了3类LSA。 Totally STUB区域保留1、2类LSA和3类缺省LSA,不存在3、4、5类LSA。(不存在的3类LSA是其他区域1、2类LSA转换来的3类明细LSA。)
[AR4-ospf-1-area-0.0.0.1]stub no-summary 建立Totally STUB区域
::: tip Totally STUB区域和STUB区域可以建立邻居关系。 原因是Totally STUB区域和STUB区域都不支持5类LSA,hello报文中的option字段E bit都没有置位,区别是对于3类LSA的支持,而3类LSA没有特殊字段标识,不需要协商,所以可以正常建立邻居关系。 ::: 由于区域内数据库同步,AR4数据库中仍然会有3类SLA: 如果ABR(AR2)的接口是Totally STUB区域,AR4是STUB区域,ABR将其他区域转换来的3类LSA过滤掉,STUB区域内的设备(AR4)的数据库中就不会存在3类LSA。 如果ABR(AR2)的接口是STUB区域,AR4是Totally STUB区域,ABR将其他区域转换来的3类发送给STUB区域,Totally STUB区域内的设备(AR4)的数据库中就会存在3类LSA。 ::: warning 即:链路上一端是STUB,另一端是Totally STUB时,根据ABR的特殊区域类型影响整个特殊区域的LSA学习。 ::: 将AR2和AR3的特殊区域接口都改为stub no-summary,AR4的数据库中就只剩下两条缺省3类LSA:
::: tip 完全STUB区域内的设备通过缺省路由访问其他区域的外部路由信息(如AR1引入的路由信息)。 完全STUB区域内的设备通过缺省路由访问其他区域的区域间路由信息(如AR1-AR2、AR1-AR3的路由信息)。 :::
NSSA区域:非纯末节区域
NSSA区域保留1、2、3、7类LSA,不存在5类LSA。
特殊区域不学习其他区域引入的外部路由信息,但可能存在ASBR设备需要引入外部路由,在NSSA区域引入的外部路由使用7类LSA进行表示。
::: warning 5类和7类LSA本质上都是描述外部路由,内容上没有任何区别,只是名字不同。 其他区域引入的外部路由叫做5类LSA,NSSA区域引入的外部路由叫做7类LSA。 ::: 拓扑中区域1更改为NSSA后AR8的数据库出现7类LSA(需要两端都是NSSA才可以协商成功建立邻居关系): (上图第一条LS id应为10.8.8.8) NSSA区域内的设备想要访问其他区域的外部路由信息,使用7类LSA缺省,计算缺省路由访问。
::: danger OSPF协议分为三类 内部:OSPF(优先级10) 外部:O_ASE(优先级150)、O_NSSA(优先级150)。 ::: import-route direct引入直连路由(会把两个端口IP也引入进来): NSSA区域中引入外部路由的设备成为ASBR: ::: tip 如上,即NSSA区域可以存在ASBR,ASBR引入外部路由出现7类LSA。 :::
AR5访问AR8引入的外部路由:
[AR8]dis ospf lsdb nssa 8.8.8.8 查看7类LSA的明细信息
7类LSA和5类LSA一致:
7类LSA只能在NSSA区域中存在,因为只有NSSA设备的option字段P bit会置位,其他区域的设备不可能根据7类LSA去访问(ABR不会泛洪7类LSA)。 引入外部路由时,在AR6 G0/0/1接口抓包: ::: warning 如上,7类LSA的option字段中,N/P两个字段代表一个bit,0表示N,1表示P。 P含义是支持7类LSA。 :::
7类LSA和5类LSA内容是相同的,所以在ABR泛洪NSSA区域的外部路由时可以把7类LSA转变为5类LSA。
7类LSA转换为5类LSA
在存在多个ABR的场景中,默认情况下由Router id更大的设备执行7类转5类。 否则内部设备会接收到多个ASBR通告相同的路由,增加计算量。 如下区域内设备(AR5)通过RID更大的设备AR7学到ASBR(AR8)引进的外部路由: ABR在执行7类转5类时,会将Adv router变为自己的RID。 如上图中,ABR(AR7)收到ASBR(AR8)泛洪来的7类LSA后,转换成5类LSA在区域内泛洪时,将Adv router改成ABR(AR7)的RID。 ::: tip 区域内设备收到5类LSA后认为ABR(AR7)就是ASBR,原因是5类LSA的通告者是ASBR。 :::
[AR6-ospf-1-area-0.0.0.1]nssa translator-always 指定设备将7类转为5类
可以将NSSA中的多个ABR配置成转换路由器。
管理员手工指定转换路由器后,原有的转换设备会自动撤销自身转换的5类LSA,由手工指定的转换路由器单独进行转换通告。 如上手工指定了AR6作为转换路由器,经过一点时间,原有的转换路由器AR7就不再是转换路由器。 如果手工指定多个ABR配置为转换路由器,就会有多个ABR同时进行5类LSA的通告操作。
ABR在执行7转5时,会将Adv router变换为自己的RID,可能会造成次优路径。 如下: ABR将5类LSA的Adv router替换为自己的RID,隐藏了真正ASBR的位置。其他区域内的设备认为ABR就是ASBR,会将数据发送给通告5类的ABR,ABR收到数据后,会在NSSA区域中寻找真正的ASBR。如果NSSA区域存在路径开销优选的问题,则会形成次优路径。 如上NSSA区域中,AR6达到AR8的开销最小,应该走AR5-AR6-AR8的路径,而AR1根据路由表先将数据发给AR7,就走了AR5-AR7-AR8的次优路径。
让其他区域内的设备得知真正ASBR(NSSA的ASBR)的位置即可。5类LSA中会存在转发地址,其他区域内的设备把转发地址当作外部路由的下一跳,而且会根据转发地址执行区域间的路由计算,得到最优的路径。
5类LSA的转发地址: 5类LSA继承7类LSA的转发地址。
7类LSA的转发地址: NSSA区域的ASBR在执行外部路由引入时会将转发地址置位。 7类LSA的转发地址优选NSSA区域ASBR自身的环回口;再选择自身第一个使能的物理接口地址。 查看ASBR中被引入路由的7类LSA: 上图中环回口8.8.8.8没有在区域1内使能,否则会优先将环回口地址设为FA地址:
[AR8-LoopBack0]ospf enable 1 area 1 环回口在区域1使能
::: warning 有多个环回口时,环回口数字越小,越优先成为FA地址。 新建loop back1:100.8.8.8(不在区域内宣告,否则就是1类LSA学习),再在loop back0区域内使能: ::: 如上,7类转5类是控制平面的内容,只是提供了路由,数据转发根据开销选择了开销更小的AR6。
7类转5类过程总结
AR5查看引入路由的5类LSA: ABR查看引入路由的7类LSA: AR8将外部路由100.8.8.8/32引入后,根据转发地址FA判断是到达8.8.8.8的,通过1类LSA在区域1内泛洪,再通过ABR转为3类LSA(区域间信息),AR1再判断去往8.8.8.8经过AR5还是AR6的路径更优。
如果5类LSA存在转发地址,则根据转发地址进行路径优选(通过3类LSA进行优选)。 如果5类LSA不存在转发地址:
- 5类LSA产生的区域:根据1类LSA进行路径优选。
- 5类LSA泛洪的区域:根据4类LSA找到开销最小的ABR,再根据区域内的1类LSA到ABR。
::: warning 7类转5类时,为了防止出现次优路径,都要携带转发地址。 非缺省7类LSA一定会携带转发地址,同时option中的P bit会置位。 (P bit置位代表ABR收到后需要进行7类转5类。) :::
NSSA区域的扩展:
- NSSA区域可以引入外部路由,引入外部路由的设备成为ASBR。
- ASBR设备在NSSA区域泛洪7类LSA。
Totally NSSA区域
保留1、2、3类缺省LSA、7类LSA,不存在3、5类LSA。 理论上:
- 完全NSSA区域内的设备 通过7类缺省路由 访问其他区域的外部路由信息。
- 完全NSSA区域内的设备 通过3类缺省路由 访问其他区域的区域间路由信息。
实际上: 3类优于5类、7类。其他区域的区域间、区域外路由都会使用3类缺省访问。
特殊区域的特点:
- 配置为特殊区域的设备,要求区域内的所有设备都配置为相同的特殊区域类型。 (如上拓扑中,AR4在区域1做了stub区域,区域1内关联的所有设备接口都需要把区域1设置为stub区域,否则无法建立邻居关系。邻居的建立需要协商hello报文内option字段中的E bit。)
- 骨干区域不能被更改为特殊区域。
- STUB区域和Totally STUB区域不存在ASBR设备,不能引入外部路由。 在AR4配置环回口4.4.4.4/32,import-route direct引入后虽然没有报错,但STUB不存在ASBR,就没有5类LSA,就无法引入外部路由:
特殊区域的问题:
不合理的开销配置容易造成次优路径。 如上,因为缺省路由是ABR产生并泛洪的,所以特殊区域内的设备(AR4)计算缺省路由的开销时计算到ABR为止,不会考虑ABR后的路径,就会容易出现次优路径(AR4-AR3-AR1)。 ::: tip ABR连接其他区域,如果存在开销路径,则特殊区域内的设备不会计算到其他的区域。 ::: 解决方式:在ABR为特殊区域下发缺省路由时,使用命令配置更改缺省路由的开销。 缺省路由的默认开销值是1,继续改小的话只能改成0,后期就无法再做调整。 一般是将开销更大的路径(AR3)下发缺省路由时的cost值改大:
[AR3-ospf-1-area-0.0.0.1]default-cost 10 ABR设置下发的缺省路由开销
修改缺省路由开销后,特殊区域内设备访问外部路由就会优选开销更小的路径: