二、OSPF_精细的路由控制
1.OSPF数据库上限
简介
OSPF技术要求同一个区域内的路由器保存着相同的LSDB信息。
但随着网络上路由数量不断增加,一些路由器由于系统资源有限,不能再承载如此多的路由信息,这种状态就被称为数据库超限(OSPF Database Overflow)。
对于路由信息不断增加导致路由器系统资源耗尽而失效的问题,可以通过配置Stub或NSSA区域来解决,但Stub或NSSA区域的方案不能解决动态路由增长导致的数据库超限问题。为了解决数据库超限引发的问题,通过设置LSDB中External LSA的最大条目数,可以动态限制链路数据库的规模。
原理
1、当接收到的"外部路由"达到上限之后(不包含缺省外部路由),删除自己产生的外部路由,同时进入Overflow状态。
2、进入该状态时,不再学习外部路由,直到Overflow状态定时器结束。
3、定时器结束之后,如果外部路由数量仍然超过上限,将重新进入Overflow状态。
4、直到外部路由数量恢复到上限内,才结束Overflow状态。
配置命令
# 设置LSDB中External LSA的最大条目数为400000。
ospf 1
lsdb-overflow-limit 400000
2.默认路由的宣告
IGP路由中产生默认路由的方式除了引入之后,还可以通过default-route-advertise
命令进行自主生成一条默认路由加入到IGP路由表中。
但对于这个命令的使用有挺多的讲究,其中以下三条命令使用较多:
default-route-advertise
1、前提条件是,本设备必须拥有一条不是OSPF学习到的缺省路由。
default-route-advertise always
1、配置该命令之后,无论是否有缺省路由,都会下发OSPF缺省路由。
2、使用之后,将无视其它设备的缺省路由。如果本设备上不存在缺省路由那将会可能出现丢包情况。
如:设备开启always之后,本机并没有真正的缺省路由,只有明细路由。
当收到一条设备末知的目的路由时,将由于路由表中没有真正的缺省路由而导致丢包。
default-route-advertise permit-calculate-other
摘取华为手册中对该命令的解释:
本机存在激活的 非本OSPF进程缺省路由,则设备不再计算来自其他设备的缺省路由。
本机不存在激活的 非本OSPF进程缺省路由,则设备仍然计算来自于其他设备的缺省路由。
1、前提条件是,本设备要学习到一条缺省路由,且这条路由不是得是使用该命令的OSPF中的,才可产生缺省路由。
举例:
本设备只有一条缺省路由,且是从OSPF进程1中学到的。如果在OSPF进程1中使用该命令,将没有任何效果。
本设备存在一条静态缺省路由,我于OSPF进程1中使用该命令可以发布缺省路由。
本设备从OSPF进程2中学习到一条缺省路由,我于OSPF进程1中使用该命令,将可以在进程1中发布缺省路由。
2、发布缺省路由的同时,仍允许计算其他设备发布的缺省路由。这是前两者不具备的。
前两者只会接收到LSDB表中,不会进行计算。
而使用该命令之后,可以在路由表中看到其它设备发布的缺省路由,但属于非活动状态(Inactive)
图文举例理解
为了方便,拓扑画的可能有点离谱,注重现象即可。
以下主要针对default-route-advertise permit-calculate-other命令进行展开。
背景:
- AR1创建了静态路由并于OSPF中使用default-route-advertise发布缺省路由。
- AR2创建了静态路由并于OSPF中使用default-route-advertise permit-calculate-other发布缺省路由。
现象1:
- 如下图,AR1/2均发布了缺省路由,同时双方也能学习到对方的缺省路由。
- 如下图,但只能AR2能够去计算对方的缺省路由。
- 此时AR3上所接收和计算的缺省路由情况
现象2:
- 如果将AR2中的静态路由删除,只使用default-route-advertise permit-calculate-other命令的话?
- 如图,AR2删除静态缺省路由之后,将使用AR1发送的缺省路由。
- 如图,此时AR3上只有一条AR1缺省路由。因为AR2的OSPF进程使用了permit-calculate-other命令,同时学习到的缺省路由也是从这个OSPF进程中学习到的,故AR2无法生成缺省路由。
- 如果此时AR3能够从其它地方学习到缺省路由,那AR2才能够继续发布缺省路由。
- 如图,AR2从AR4上学习到缺省路由,那么就能够在AR3上继续看到两条缺省路由。
总结
回到最开始,这三条命令都是生成缺省路由,那它们有哪些应用场景呢?
关于always的灵活应用场景:
应用于多路由协议的设备上,实现不相互引入路由的情况下也能实现网络互通。
如图:
- AR2作为AR1的OSPF邻居,AR3的BGP邻居,需要实现AR1、AR3两者互访。
- 由于AR1设备比较老旧,要求不能直接将AR3的路由引入到AR1中。
- 已知AR2设备上有两者的路由,故可以用always的方式在OSPF进程中生成缺省路由。使得AR1流量到达AR2后再进行流量的中继。
- 于AR2设备的OSPF进程添加default-route-advertise always命令。
- 于AR2设备的BGP进程中引入OSPF路由。
此时AR1、AR2、AR3上的关键路由情况 :
AR1:
0.0.0.0/0 O_ASE 150 1 D 10.1.12.2 GigabitEthernet0/0/1AR2:
172.16.1.1/32 OSPF 10 1 D 10.1.12.1 GigabitEthernet0/0/0
192.168.1.1/32 IBGP 255 0 RD 10.1.23.3 GigabitEthernet0/0/1
192.168.2.1/32 IBGP 255 0 RD 10.1.23.3 GigabitEthernet0/0/1AR3:
172.16.1.1/32 IBGP 255 1 RD 10.1.23.2 GigabitEthernet0/0/0
关于permit-calculate-other的灵活应用场景:
实验场景如下图,内部R1、R2、R4运行OSPF,R3作为外部路由器,R1作为默认出口向内部发送默认路由。
实现在不调整链路OSPF开销的情况下,实现主备默认路由发布以及冗余。
1、正常配置好OSPF之后,R1添加默认路由指向R3,R2添加默认路由指向R3但路由优先级设置为151防止比OSPF开销大从而影响正常流量转发。
R1
[R1]ip route-static 0.0.0.0 0 10.1.13.3
[R1]ospf 1
[R1-ospf-1]default-route-advertise permit-calculate-otherR2
[R2]ip route-static 0.0.0.0 0 10.1.23.3 preference 151
[R2]ospf 1
[R2-ospf-1]default-route-advertise permit-calculate-other2、此时可以在R2上看到默认路由优先走R1,同时R4上则是只能收到1条默认路由。
R2之所以只有R1的默认路由,因为R2自身的静态默认路由优先级为151。
因为R2上唯一生效的默认路由是从配置了permit-calculate-other命令的进程下学习到的。 故R2不会生成默认路由向其它OSPF邻居泛洪,因此R4只能学习到R1这一条默认路由。
【R1出口正常情况下的流量转发路径】
当R1主出口故障之后,R2从OSPF学习到的默认路由消失,静态默认路由则生效,同时会向OSPF邻居泛洪默认路由。
R1上关闭出接口模拟接口故障:
[R1]int g0/0/0
[R1-GigabitEthernet0/0/0]shutdown【R1默认路由指向R2备用出口】
【R2默认路由浮动上来成为主默认路由】
【此时R3默认路由自动切换至R2备用出口】
【R1出口故障后的流量转发路径】
3.OSPF路由控制
参考该篇文章,已涵盖其中:路由 OSPF 优化(FA地址、路由汇总、路由过滤、区域认证、接口认证)