一、OSPF邻居建立不成功
1、从理论上判断问题的所在
1.1、检查邻居两端的接口物理和协议状态是否UP,状态是否稳定,接口是否有丢包,两边互ping大包是否能通
若物理接口不Up或是不稳定(有振荡现象),请排查物理链路和链路层协议,确保物理和协议状态都是Up,并且接口无错误计数。可以通过ping测试,长ping测试是否存在丢包现象,ping大包(1500节以上)测试是 否存在大包不通的现象(观察OSPF的邻居状态,如果长时间处于Exstart和Exchange状态,DD报文一般会填满 MTU,如1500能填到1492)
1.2、检查链路两端OSPF进程的Router ID是否一致。
分别在链路两端的设备上执行命令display ospf [ process-id ] brief,查看OSPF进程的Router ID,RouterID尽量保证全网唯一,否则有可能邻居不能正常建立、路由信息不正确的问题。建议在设备上单独为每 个OSPF进程配置全网唯一的Router ID(如果说一样的话,请在系统视图下执行命令ospf [ process-id ] router-id router-id,修改OSPF进程的Router ID以保证不冲突,修改OSPF进程的Router ID之后,必须在用户视图下执行命令reset ospf [ process-id ] process后,新配置的Router ID才会生效)
1.3、检查链路两端OSPF区域ID是否一致。
分别在链路两端的设备上执行命令display ospf [ process-id ] brief,查看OSPF的区域ID(如果链路两 端的OSPF区域ID不一致,请在OSPF视图下执行命令area area-id,修改OSPF区域ID以保证一致)
1.4、检查链接两端OSPF接口的网络类型是否一致。
分别在链路两端的设备上执行命令display ospf [ process-id ] interface,查看OSPF接口的接口类型,一般情况下,链路两端的OSPF接口的网络类型必须一致,否则双方不能正常建立起OSPF邻居关系(如果OSPF接口的网络类型不一致,请在运行OSPF协议的接口视图下执行命令ospf network-type { broadcast | nbma | p2mp | p2p },修改OSPF接口的网络类型以保证一致)
1.5、检查链路两端OSPF接口的IP地址的掩码是否一致,
分别在链路两端的设备上执行命令display current-configuration interface interface-type interface-number,查看OSPF接口的IP地址。一般情况下,链路两端的OSPF接口的IP地址的掩码必须一致,否则双方不能正常建立OSPF邻居关系。但在P2MP网络中,可以通过在运行OSPF协议的接口视图下配置命令ospf p2mp-mask-ignore来使设备忽略对网络掩码的检查,从而正常建立OSPF邻居关系(如果OSPF接口的IP地址的掩码不一致,请在运行OSPF协议的接口视图下执行命令ip address ip-address { mask | mask-length },修改OSPF接口的IP地址以保证掩码一致)
1.6、检查链路两端OSPF接口的IP地址所在网段是否包含在区域内配置的network内,
分别在链路两端的设备上执行命令display current-configuration interface interface-type interface-number,查看OSPF接口的IP地址;执行命令display current-configuration configuration ospf,查看OSPF进程的配置
满足下面两个条件,OSPF协议才能在接口上运行:
- 接口的IP地址掩码长度≥network命令中的掩码长度。OSPF使用反掩码,例如0.0.0.255表示掩码长度24位
- 接口的主IP地址必须在network命令指定的网段范围之内
1.7 检查链路两端OSPF接口的DR优先级是否非零
分别在链路两端的设备上执行命令display ospf [ process-id ] interface,查看OSPF接口的DR优先级,对于广播和NBMA类型网络,链路中至少要有一个OSPF接口的DR优先级不为0,这样才能正常选举出DR。否则两边的邻居状态只能达到2-Way。如果链路两端OSPF接口的DR优先级都为0,请在运行OSPF协议的接口视图下执行命令ospf dr-priority priority,修改OSPF接口的DR优先级以保证至少有一个接口的DR优先级不为
二、从OSPF的报文分析问题
1、dis ospf cumulative(查看hello报文的接收情况)
如果说长期init状态,那基本上就是没有收发hello报文,就可以使用dis ospf cumulative查看hello报文的收发情况
2、DD报文
如果长时间处于Exstart和Exchange状态,检查ping大包能否ping通,DD报文一般会填满MTU,如1500能填到1492,导致这种问题一般可能是接口的物理状态和协议状态不稳定造成的
3、2-way
如果说长期处于2-way状态下,那么就是选举DR的问题了,因为网络类型如果是广播网络的话那么就需要选举DR,这个时候需要判断两端接口的DR的优先级是否为0,如果为0的话那就无法选举DR,无法选举DR就是一直卡在2-way状态下,不过现网的环境一般都是把接口的网络类型改成P2P,这样子减少故障的发生率,还能让OSPF快速的建立起邻居。这里可能会有人认为P2P跟广播网络建立邻居也就差那几秒没必要,但是在现网业务中,双机热备的情况下,如果说主机宕机切换到备份机,这里面因为是广播网络的网络类型,所以建立邻居的时间要比P2P的慢,在网络很严谨的公司,就比如王者荣耀,有人在线然后你就断几秒,对于客户来说肯定是无法接受的,所以这个也很重要
4、Exstart、Exchange
检查ping大包能否ping通
三、OSPF邻居振荡定位
1、邻居振荡日志,关注邻居状态下降的日志
查找日志文件,关键字:NBR_CHG_DOWN、NBR_CHG_E(V3R2)、NBR_CHANGE_E(V3R3)
举例:
NeighborEvent=KillNbr,由于接口DOWN导致主动断开邻居
NeighborEvent=InactivityTimer,由于超时导致断开邻居
NeighborEvent=1-Way,对端断开邻居后触发重建,在未收到本端Hello前发送1-way hello,导致本端触发1-way事件
Neighbor event=SeqNumberMismatch:对端断开邻居后触发重建,在收到本端Hello后发送dd报文,导致本端触发SeqNumberMismatch事件
2、常见邻居震荡原因定位
2.1、邻居超时,OSPF在老化时间表(dead timer)内没有收到邻居发送过来的hello报文,导致OSPF邻居的老化时间超时,导致邻居断掉,造成超时的原因是网络质量差,导致Hello报文无法上送,CPU负载高,导致报文的接受和发送无法获得调度
2.2、ospf router id配置冲突有问题,导致邻居状态频繁发生变化
2.3、注意DR和DR、DR和非DR得地址冲突的问题
2.3、接口震荡,频繁的产生LSA,按照RFC2328会造成全局的路由发生计算,这样会导致CPU的负载较高,导致OSPF的邻居震荡