中午好,我的网工朋友。
OSPF这个名词网工们都不陌生吧。
OSPF,即开放式最短路径优先(Open Shortest Path First,OSPF)是广泛使用的一种动态路由协议。
它属于链路状态路由协议,具有路由变化收敛速度快、无路由环路、支持变长子网掩码(VLSM)和汇总、层次区域划分等优点。
在网络中使用OSPF协议后,大部分路由将由OSPF协议自行计算和生成,无须网络管理员人工配置,而当网络拓扑发生变化时,协议可以自动计算、更正路由,极大地方便了网络管理。
但如果有些网工朋友在使用时不结合具体网络应用环境,不做好细致的规划,OSPF协议的使用效果会大打折扣,甚至引发故障。
OSPF路由问题,需要排查的地方较多,今天就帮大家梳理一个清晰的OSPF排查思路,以后可以直接用起来。
今日文章阅读福利:《 OSPF经典学习笔记(62页) 》
私信我,发送暗号“学习笔记”,即可获得老网工珍藏的OSPF经典学习笔记一份。
01 为什么需要OSPF?
在OSPF出现前,网络上广泛使用RIP(Routing Information Protocol)作为内部网关协议。
由于RIP是基于距离矢量算法的路由协议,存在着收敛慢、路由环路、可扩展性差等问题,所以逐渐被OSPF取代。
OSPF作为基于链路状态的协议,能够解决RIP所面临的诸多问题。此外, OSPF还有以下优点:
✔ OSPF采用组播形式收发报文,这样可以减少对其它不运行OSPF路由器的影响。
✔ OSPF支持无类型域间选路(CIDR)。
✔ OSPF支持对等价路由进行负载分担。
✔ OSPF支持报文加密。
由于OSPF具有以上优势,使得OSPF作为优秀的内部网关协议被快速接收并广泛使用。
02 原理及处理过程
01 路由器类型
先讲一下OSPF协议中常用到的路由器类型,如图所示
表 路由器类型
路由器类型 | 含义 |
区域内路由器(Internal Router) | 该类设备的所有接口都属于同一个OSPF区域。 |
区域边界路由器ABR(Area Border Router) | 该类设备可以同时属于两个以上的区域,但其中一个必须是骨干区域。ABR用来连接骨干区域和非骨干区域,它与骨干区域之间既可以是物理连接,也可以是逻辑上的连接。 |
骨干路由器(Backbone Router) | 该类设备至少有一个接口属于骨干区域。所有的ABR和位于Area0的内部设备都是骨干路由器。 |
自治系统边界路由器ASBR(AS Boundary Router) | 与其他AS交换路由信息的设备称为ASBR。ASBR并不一定位于AS的边界,它可能是区域内设备,也可能是ABR。只要一台OSPF设备引入了外部路由的信息,它就成为ASBR。 |
02 路由类型
AS区域内和区域间路由描述的是AS内部的网络结构,AS外部路由则描述了应该如何选择到AS以外目的地址的路由。
OSPF将引入的AS外部路由分为Type1和Type2两类。
如下表中按优先级从高到低顺序列出了路由类型。
表 路由类型
路由类型 | 含义 |
Intra Area | 区域内路由。 |
Inter Area | 区域间路由。 |
第一类外部路由(Type1 External) | 这类路由的可信程度高一些,所以计算出的外部路由的开销与自治系统内部的路由开销是相当的,并且和OSPF自身路由的开销具有可比性。到第一类外部路由的开销=本设备到相应的ASBR的开销+ASBR到该路由目的地址的开销。 |
第二类外部路由(Type2 External) | 这类路由的可信度比较低,所以OSPF协议认为从ASBR到自治系统之外的开销远远大于在自治系统之内到达ASBR的开销。所以,OSPF计算路由开销时只考虑ASBR到自治系统之外的开销,即到第二类外部路由的开销=ASBR到该路由目的地址的开销。 |
03 OSPF是如何工作的?
OSPF协议路由的计算过程可简单描述如下:建立邻接关系和路由计算。
1.建立邻接关系
它的过程如下:
本端设备通过接口向外发送Hello报文与对端设备建立邻居关系。
两端设备进行主/从关系协商和DD报文交换。
两端设备通过更新LSA完成链路数据库LSDB的同步。
此时,邻接关系建立成功。
2.路由计算
OSPF采用SPF(Shortest Path First)算法计算路由,可以达到路由快速收敛的目的。
好了,了解完这些基础技术后,我们回到OSPF的故障处理来,首先根据多年工作经验,整理出如下故障排查流程图 :
由于OSPF路由正确的加入到全局路由表,依赖于正确的OSPF路由计算,而OSPF计算路由依赖于正确的OSPF LSDB数据库信息,要建立正确的OSPF LSDB数据库则首先要确保邻居之间能够形成正确的邻接关系。
因此OSPF路由问题的排查整体思路技巧为 :
- 首先检查OSPF邻居关系
- 然后检查OSPF LSDB数据库信息
- 最后检查全局路由表
03 10大解决方案
具体排查如下:
01 OSPF邻居状态
查看两端OSPF邻居状态是否正常,正常情况下DRother之间的邻居关系应该稳定在2-way状态,非DRother之间的邻居关系应该稳定在Full状态
命令:display ospf peer x.x.x.x
例如:通过命令查看,可以确认OSPF的邻居状态是否正常。
02 是否加入OSPF路由表
查看OSPF路由表中是否存在相应路由。
命令:display ospf routing x.x.x.x
例如:查看外部路由9.9.9.9是否加入ospf路由表
03 接口使能OSPF及邻居参数是否匹配
1.操作步骤
第一步 确认接口启动OSPF
OSPF的运行是基于设备接口的,如果OSPF没有在接口启动,那么邻居关系肯定无法形成。
在接口上启用OSPF是通过Area视图下的network命令实现的,必须确保network中的网络范围包括需要启动OSPF的接口地址。
命令:display ospf interface
例如:通过命令查看接口是否启动OSPF
第二步 确认邻居两端OSPF参数匹配
命令:display ospf error
例如:通过命令查看邻居两端OSPF参数匹配
2.反复使用以上命令显示,对应错误数增加则存在问题相应的参数匹配问题。
常见几种错误如下:
(1)OSPF区域配置是否匹配
启动OSPF的接口属于某个区域,同时区域有多种类型,区域依靠区域ID进行标识,如果两边的区域类型或区域ID不匹配,则不会形成邻居关系。
(2)OSPF验证配置是否匹配
OSPF支持报文验证功能,验证分为简单验证和MD5验证两种类型,如果两边验证类型或密钥配置不同,则OSPF无法通过验证,邻居关系无法形成。
(3)两端OSPF接口上计时器设定值是否匹配
OSPF通过周期性的交互Hello报文维系邻居关系,Hello报文中携带了Hello报文的发送间隔计时器及邻居失效计时器。
如果这些计时器的值在两边的Hello报文中不匹配,那么OSPF的邻居关系无法形成。注意dead timer的值至少应为hello timer值的4倍。
(4)两端OSPF接口类型是否匹配
OSPF邻居关系的正常建立需要确保邻居两端接口的OSPF网络类型一致,否则将无法形成邻居关系。
需要说明的是若邻居双方一端设置为P2P类型另一端设置为广播类型,那么邻居状态可以达到FULL状态,但此时无法计算出路由信息。
(5)广播网络中两端接口子网掩码是否相同
OSPF Hello报文中携带子网掩码信息。在广播网络中,如果两端接口属于不同的IP子网,那么邻居关系无法形成。
(6)NBMA网络是否指定邻居
OSPF网络类型为NBMA时必须手工指定邻居的IP地址,否则端口无法发送Hello报文,无法形成邻居关系。
命令:
display current-configuration interface
display current-configuration configuration ospf
例如:通过命令查看接口下的OSPF参数设置是否一致。
04 是否使能静默端口
当接口在OSPF协议视图中被设置为静默端口时,它将不能发送OSPF Hello报文,因此OSPF邻居关系无法形成
命令:
display current-configuration configuration ospf
例如:通过命令查看接口正确启动OSPF并设置为非静默端口,下例中配置了静默端口
05 全局路由表是否正确
查看OSPF路由是否正确加入到全局路由表内,只有加入到全局路由表的路由才能指导数据包的转发。
如果相同的路由信息同时也从其他路由协议学到,为了确保OSPF学习的路由能够最终加入全局路由表,需要确保其优先级为最优
命令:
display ip routing-table x.x.x.x verbose
06 路由信息是否正确发布
若查看OSPF路由表未发现相应路由信息,请首先确认路由信息是否在OSPF中正确发布,对于未进行发布的路由请修改配置将路由正确发布
命令:
display current-configuration configuration ospf
例如:查看10.1.145.4/24的路由信息是否在OSPF中发布
07 确认LSA信息正确
确认OSPF LSDB数据库中是否存在路由计算所需的正确LSA信息。
对于区域内的路由需要检查是否存在该路由始发者的Router LSA,DR的Network LSA(广播网络);
对于区域间的路由需要首先检查是否存在LS ID为该网段的Summary LSA,然后检查是否存在该Summary LSA所对应Adv Rtr的Router LSA;
如果外部路由是通过区域内学习到的,需要首先检查是否存在LS ID为该网段的ASE LSA,然后检查是否存在该ASE LSA中所对应Adv Rtr的Router LSA;
如果外部路由是通过区域间学到的那么首先检查对应的ASE LSA,然后检查是否存在该ASE LSA所对应Adv Rtr的Asbr Sumarry LSA,最后检查该Asbr Summary LSA所对应Adv Rtr的Router LSA。
命令:
display ospf lsdb router
display ospf lsdb network
display ospf lsdb summary
display ospf lsdb asbr
display ospf lsdb ase
例如:通过命令查看外部路由9.9.9.9相关的LSA信息。
例如:通过命令查看区域内路由10.1.145.0/24相关的LSA信息
例如:通过命令查看区域间路由10.1.35.0/24相关的LSA信息
导致OSPF数据库中LSA异常或缺失的原因主要包括如下几种情况,需要从相关的配置或规划角度进行修正:
1. 骨干区域被分割,导致LSA缺失
2. 虚连接配置错误,导致LSA缺失
3. RouterID冲突,导致LSA震荡
08 外部路由FA地址确认
若外部路由携带FA地址确认FA路由为有效路由。
OSPF必须能够通过区域内或区域间路由到达该FA地址,否则该外部路由不会加入OSPF路由表。
例如:外部路由172.1.40.0携带了FA地址为10.1.4.4,通过OSPF内部路由能够学习到10.1.4.4的路由,外部路由172.1.40.0正确加入路由表
09 确认路由过滤策略
排查路由策略过滤路由的配置是否正确。
<HUAWEI> display route-policy policy1Route-policy : policy1 permit : 10 (matched counts: 0) Match clauses : if-match acl 2000 Apply clauses : apply cost 100 apply tag 100
10 确认OSPF路由优先级
查看OSPF的路由优先级
整理:老杨丨10年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部