OSPF故障定位没思路?照这篇抄就行

news2024/11/19 17:33:53

我的网工朋友大家好。

好久没聊OSPF技术了,相关基础且经典的内容,公众号陆陆续续分享过一些,趣味科普,面试考题,实验操作,都有涉及。

按照惯例,先给你整一波优质的往期内容:

《 5个超经典实验,老杨带你高效进阶OSPF 》

《 不懂OSPF,你就千万别点开这篇文章 》

《图解OSPF,看这70张图已经足够(一)》

《图解OSPF,看这70张图已经足够(二)》

今天主要想给你分享点OSPF故障的相关干货。

引起OSPF故障的原因很多,不同的问题会导致不同的故障,但你真的会排查吗?

怎么做OSPF故障定位,码住这6个实用案例

今日文章阅读福利:《OSPF网络设计解决方案》

作为网络基础,了解它是你入门精进的第一步。私信我,备注“方案”,前30名私信的小友即可获得此份OSPF经典读物。

如果想从0到1系统学习网络,也可以和我聊聊,告知学习意向,我会为你推荐最适合你学习网络的方式。

01 OSPF邻居关系无法建立定位

01 确认配置及底层情况是否能转发报文

  • 确认配置是否都正确。
  • 检查接口是否都UP。
  • 两台设备能否ping通?要求带源地址ping直连接口。
  • 两端设备MTU是否一致?

02 检查报文是否发送接收正常?

display ospf cumulative查看收包和发包数量:

03 隐藏模式打开

隐藏模式打开enableospf-lsa-dbg后。

display ospfinterface <接口名>查看接口收包和发包数量(V3R3及以后的版本)。

如果长时间处于init,基本上是没有发出hello包或没有收到hello包。

如果长时间处于Exstart和Exchange状态,检查ping大包能否ping通?

DD报文一般会填满MTU,如1500能填到1492。

04 debug逐层排查

上述简单检查都OK的话,需要debug来逐层排查了。

如果一端处于Init状态,一端没有显示状态,在两端debughello报文:

<Quidway>debugging ospf packet hello

如果一端处于Exstart状态,一端处于Exchange状态,在两端debugdd报文:

<Quidway>debugging ospf packet dd

如果一端处于Loading状态,一端处于其它状态,在两端debugrequeset 和update报文。

<Quidway>debugging ospf packetrequest

<Quidway>debugging ospf packet update

除hello以外其他报文可能比较长,建议用brief看报文头部

debug ip packet acl IP报文比较多,建议使用acl过滤。

02 OSPF邻居振荡定位

01 邻居振荡日志,关注邻居状态下降的日志

查找日志文件,关键字:NBR_CHG_DOWN、NBR_CHG_E(V3R2)、NBR_CHANGE_E(V3R3)。

举例:

Aug 28 2010 10:27:32 RTA %%01OSPF/3/NBR_CHG_DOWN(l): Neighbor event:neighbor statechanged  to  Down. (ProcessId=1,NeighborAddress=11.11.11.2, NeighborEvent=KillNbr,  NeighborPreviousState=Full,  NeighborCurrentState=Down)

由于接口DOWN导致主动断开邻居。

Aug 28 2010 10:31:29 RTA %%01OSPF/3/NBR_CHG_DOWN(l): Neighbor event:neighbor statechanged  to   Down. (ProcessId=1,NeighborAddress=11.11.11.2,  NeighborEvent=InactivityTimer,NeighborPreviousState=Full,NeighborCurrentState=Down)

由于超时导致断开邻居。

Aug 28 2010 10:34:51 RTA %%01OSPF/6/NBR_CHANGE_E(l): Neighbor changes event: neighborstatus  changed. (ProcessId=1,NeighborAddress=11.11.11.2, NeighborEvent=1-Way,NeighborPreviousState=Full,  NeighborCurrentState=Init)

对端断开邻居后触发重建,在未收到本端Hello前发送1-way hello,导致本端触发1-way事件。

Aug 28 2010 10:38:52 RTA %%01OSPF/6/NBR_CHANGE_E(l): Neighbor changes event: neighborstatus changed. (Process ID=1, Neighbor address=11.11.11.2, Neighbor event=SeqNumberMismatch, Neighbor previous state=Full,Neighbor current state=ExStart)

对端断开邻居后触发重建,在收到本端Hello后发送dd报文,导致本端触发SeqNumberMismatch事件。

02 最常见的原因:超时断连

现网使用中,最常见的OSPF邻居振荡的原因是超时断连。

也就是说,OSPF在dead timer间隔内没有收到一个Hello报文,出现该情况有如下可能性:

1、有丢包现象,导致OSPF hello报文无法上送;

2、CPU高,导致路由任务无法获得调度,报文无法发送和接受。

因此,出现超时断连的现象,除了要查看日志、诊断日志外,还需要查看底层丢包计数。

另外,在现网中,经常有用户提出疑问,为什么只有邻居DOWN的日志,没有邻居UP的日志?

首先明确,邻居DOWN和UP都是记录日志的,但一般巡检或用户查看的时候都是displaylogbuffer查看。

Aug 28 2010 10:31:29 RTA %%01OSPF/3/NBR_CHG_DOWN(l):Neighbor event:neighbor state changed to Down. (ProcessId=1, NeighborAddress=11.11.11.2, NeighborEvent=InactivityTimer,NeighborPreviousState=Full, NeighborCurrentState=Down)

OSPF邻居Down的日志级别比较高是Error级别的,在logbuffer中记录。

Aug 28 2010 10:33:41 RTA %%01OSPF/6/NBR_CHANGE_E(l):Neighbor changes event: neighbor status changed. (ProcessId=1,NeighborAddress=11.11.11.2, NeighborEvent=HelloReceived,NeighborPreviousState=Down, NeighborCurrentState=Init) 

OSPF邻居状态改变日志级别是Info级别的,在日志中有记录,但不会记录在logbuffer中。

logbuffer中的日志并不是全部的日志,logbuffer设计的初衷就是使用户便于查看用户关注的信息。

在不对其配置的默认情况下,logbuffer中记录的使warning(4)级别 以及以上的日志信息。

可以使用该命令查看对logbuffer的设置情况。

<Quidway>display channel

…
channel number:4, channel name:logbuffer
MODU_ID NAME ENABLE LOG_LEVEL ENABLE TRAP_LEVEL ENABLE DEBUG_LEVEL 
ffff0000 default  Y      warning      N      debugging     N     debugging   

03 OSPF Router ID冲突故障定位

现网中时常会出现OSPFRouter ID配置冲突的问题。

由于Router ID是标识OSPF设备的重要依据,一旦冲突会导致OSPF的LSA频繁的老化和产生,进而导致网络不稳定。

01 区域内Router id冲突判断方法

如下拓扑:

RTA、RTB和RTC、RTD在区域0建立OSPF邻居关系,RTA和RTC的router id都是1.1.1.1,发生了冲突。

判断方法:

1、在任意一台路由器上每隔一秒输入display ospf lsdb,查看是否有Router LSA的Age字段频繁变化,同时查看Sequence字段是否增加的很快。

上例中router id为1.1.1.1的Router LSA Age频繁变化,Sequenc增加得也很快。

每隔一秒在RTB上输入display ospf routing,可以看到有路由在振荡,如果区域内路由频繁振荡,在没有邻居振荡的情况下,可以判断为RouterID冲突。

02 区域间RouterID冲突判断方法

有如下拓扑:

如上图所示,其中RTA和RTC的Router ID是冲突的,但RTA和RTC不在同一个区域。

判断方法:

在任意一台路由器上每隔一秒输入display ospf lsdb。

如果发现大量的AS External LSA频繁刷新,且都来自于某一台路由器,可以初步推测出不同区域的Router ID存在冲突。

总的来说,在现网中,RouterID配置冲突的现象时有发生。

如果掌握了一些常用的判断方法,可以比较方便的找到问题的原因,然后逐个排查,找出冲突的RouterID。

解决办法:

更改冲突的RouterID后通过reset ospf process可以修正该配置错误。(需要注意的是,reset ospf process会导致邻居重新建立,业务会有中断)。

示例:

04 OSPF 接口IP地址冲突故障定位

有如下拓扑:

01 DR与非DR冲突

RTA上IP地址为112.1.1.2的接口状态为DR,RTC上IP地址为112.1.1.2的接口状态不是DR,这两个接口的IP地址发生了冲突。

判断方法:

在RTC上每隔一秒输入display ospf lsdb,发现冲突网段的Network LSA的Age一直为3600或者偶尔没有这条LSA,而且Sequence字段增加很快。

在其他路由器上每隔一秒输入displayospf lsdb,发现冲突网段Network LSA的Age不断在3600和其他较小值之间切换,而且Sequence字段增加很快。

02 两个DR IP地址冲突

RTA上IP地址为112.1.1.2的接口状态为DR,RTC上IP地址为112.1.1.2的接口状态也为DR,这两个接口的IP地址发生了冲突。

判断方法:

在任一台路由器上每隔一秒输入displayospf lsdb。

会发现存在两个LinkState Id为112.1.1.2的Network LSA,并且这两个LSA的Age字段一直都很小,Sequence字段增加比较快。

总的来说,在现网中,IP地址配置冲突的现象时有发生。

如果掌握了一些常用的判断方法,可以比较方便的找到问题的原因,然后逐个排查。

找出冲突的IP地址,更改冲突的IP地址后就可以修正该配置错误。

03 区域内IP地址冲突设备判断方法

一、DR与非DR冲突时:

首先根据这条振荡Network LSA(具体判断方法见上)的LinkStateID可以知道冲突的IP地址。

然后根据AdvRouter找到其中的一台设备进而定位出是哪个接口。

注意,与其冲突的设备只能够通过网络IP地址规划找到,很难通过OSPF自身携带的信息找到冲突设备。

如上例中,可以首先判断出冲突的IP地址为112.1.1.2。

其中一台冲突设备的Router ID为1.1.1.1,与其冲突的另外一台设备(3.3.3.3)无法通过OSPF自身携带的信息找到。

二、DR与DR冲突时:

可以根据这两个LinkState Id相同的Network LSA(具体判断方法见上)的LinkState Id和AdvRouter判断出是哪台设备的哪个接口IP地址冲突了。

如上例中,很容易定位出是RouterId为3.3.3.3和1.1.1.1的两台设备上存在IP地址冲突的接口。

然后在根据LinkState Id(112.1.1.2---冲突IP地址)很容易就找到对应的接口。

05 OSPF 链路接口频繁振荡故障定位

01 接口振荡

实际应用中,由于接口振荡导致CPU高的问题也经常出现,接口振荡,会导致Router LSA频繁产生。

按照协议RFC2328, Router LSA改变,会触发完全路由计算,频繁的路由计算导致CPU会一直比较高。

这类问题的排查还是需要从LSA着手。

存在如下拓扑:

Router-A和Router-B建立OSPF邻居关系。

Router-B上一个接口2.2.2.2/24在OSPF中使能,并频繁up/down,在Router-A和Router-B上都会进行频繁路由计算,导致CPU高。

判断方法:

一、在任意一台设备上每隔一秒输入display ospf lsdb。

查看是否存在Age一直很小的Router LSA,而且Sequence number增加很快:

二、在任意一台设备上输入display ospf brief。

查看完全路由计算的次数增长是否很快:

如果存在上述两种情况都符合,在结合日志,可以快速找到频繁振荡的接口。

02 LSA振荡

LSA振荡导致OSPF路由频繁计算,导致CPU高的场景排查起来比较困难,需要找到该LSA的发布路由器,然后再从源头控制这些振荡的LSA,排查如下:

一、输入display iprouting-table verbose命令。

找到频繁振荡的路由:

如上表所示,如果该路由频繁振荡,其Age值很小,基本上是秒级的。

二、输入displayospf lsdb命令。

查看该LSA的产生源。

如上表所示,找到该LSA的产生源是Router id为2.2.2.2的设备,需要登录到这台设备上查看频繁产生该LSA的具体原因。

总的来说,由于OSPF路由计算导致CPU高的问题,排查方法重要是查看LSA的变化,根据LSA的变化找到导致振荡的原因,最终解决问题。

06 OSPF无法计算路由故障定位

01 故障概述

PE-CE间,OSPF与BGP间路由相互学习和发布,有可能导致路由环路问题。

OSPF VPN特性专门针对这种情况提供了解决方案。

一、VPN场景中PE通过引入私网BGP路由通过OSPF向CE发布。

如图所示,PE1和PE2将BGP发送过来的远端路由10.1.1.1/32通过OSPF发布给CE1。

CE1产生了目的地址为10.1.1.1/32的路由,下一跳分别指向PE1和PE2。

二、PE1收到了PE2发布的路由,产生了一条10.1.1.1/32的OSPF路由,下一跳指向CE1。

三、同理PE2收到了PE1发布的路由,也产生一条10.1.1.1/32的OSPF路由,下一跳指向CE1。

四、如上过程所描述的,到达目的地址10.1.1.1/32的路由,CE1-->PE1,PE2-->CE1,一个环路就产生了。

五、由于OSPF路由的优先级高于BGP路由,所以PE1和PE2上的BGP路由会被OSPF路由所替代。

没有了BGP路由,PE1和PE2也不会在向CE1发布路由。同时PE1和PE2也学不到对方发布的路由,刚才产生的OSPF路由也被撤消了。

此时没有了OSPF路由,BGP路由又被优选了。又开始重复刚才的循环。这会导致路由震荡。

为此,OSPF使用DN-Bit和Router-tag防止环路:

02 DN-Bit抑制

如上图所示,PE1和MCE设备都绑定了VPN,属于私网进程,在PE1上引入BGP路由,产生了LSA,但MCE设备上却没有计算出来路由。

判断方法如下:

一、在MCE上输入display ospf lsdb ase<Link id>查看该LSA是否带DN-Bit:

二、在MCE上输入displaycurrent-configuration configuration ospf查看OSPF进程是否绑定了VPN:

如果绑定了VPN,由于前面所述,由于DN-Bit的抑制,即使有LSA,路由也无法计算出来。

三、解决办法

如果该设备不承担PE角色,在MCE上输入vpn-instance-capabilitysimple即可取消环路检查。

03 Route Tag一致

同样如上图所示,PE1和MCE设备都绑定了VPN,属于私网进程。

在PE1上引入BGP路由,产生了LSA,但MCE设备上却没有计算出来路由。

判断方法如下:

一、在MCE上输入displayospf lsdb ase <Link id>查看该LSA的Route Tag值:

二、在MCE上输入displayospf brief命令查看OSPF本地Tag值是否和收到的LSATag值是否一致:

如果LSA的RouteTag和本地Tag一致,由于防止环路的需要,该LSA无法计算出路由。

三、解决办法

如果该设备不承担PE角色,在MCE上输入vpn-instance-capabilitysimple即可取消环路检查。

另外,更改本地Route Tag值,和LSA的Tag值不一致也可以解决该问题。

整理:老杨丨10年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/694325.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

考研算法30天:堆排序 【堆排序】

原先自己写过这道题的题解&#xff0c;但是当时水平有限所以这次重写一次。 (1条消息) 堆的创建&#xff08;题目&#xff1a;堆排序&#xff09;_空が笑っています的博客-CSDN博客 算法介绍 我在上陈越姥姥的课程之后我学会了如何用数组表示一个堆(堆其实就是根节点大于或者…

本地已安装Git。 但是VSCode提示:未找到 Git。点击Git侧边栏选项,按钮都是灰的

问题&#xff1a; 解决方案&#xff1a; 1、点击设置 2、在输入框中输入git.path&#xff0c;然后点击“在settings.json中编辑”&#xff0c; 打开settings.json文件&#xff0c;进行git.path配置&#xff1b; 3、配置git.path&#xff0c;下面两种格式都可以&#xff0c;设…

Google Hacking爬虫修改版

这里是个演示 项目是根据这个项目进行修改的 修改了哪些东西&#xff1a; 新增个模式&#xff0c;一个Request&#xff0c;一个Selenium原版只能读第一页&#xff0c;修改成可以自动判断添加了更多的搜索摸板输出csv&#xff0c;url标题域名 针对第三点&#xff1a; 添加了一…

自学黑客(网络安全),一般人我劝你还是算了吧(自学网络安全学习路线--第十三章 网络应用安全上)【建议收藏】

文章目录 一、自学网络安全学习的误区和陷阱二、学习网络安全的一些前期准备三、自学网络安全学习路线一、网络攻击的步骤1、搜集初始信息2、搜确定攻击目标的IP地址范围3、扫描存活主机开放的端口4、分析目标系统 二、口令安全1、口令破解2、口令破解方法3、设置安全的口令4、…

【pycharm】 Anaconda3 和 pycharm 安装配置1

anaconda3 下载地址 Anaconda3-2023.03-1-Windows-x86_64.exeC:\ProgramData\anaconda3 安装路径解释器默认是从online下载 或者3.10 实际上我在tbuild下有python3.9

python spider 爬虫 之 解析 xpath 、jsonpath、BeautifulSoup (二)

Jsonpath 安装&#xff1a; pip install -i https://pypi.tuna.tsinghua.edu.cn/simple jsonpath 使用&#xff1a;jsonpath 只能解析本地文件&#xff0c;跟xpath不一样 objjson.load(open(‘json文件’&#xff0c;‘r’, encoding‘utf-8’)) json.load(是文件&#xff0c;…

关于云服务器CentOS7.6版本安装宝塔面板后,点击终端无响应解决方案

问题再现: 下面是我沟通宝塔客服后&#xff0c;给的解决方案。 我在百般无奈的情况下、卸载了宝塔后&#xff0c;最终躺平&#xff0c;选择了问宝塔官方客服 1、从华为提供的远程登录方式选一种 二、输入服务器密码通过ssh远程登录 服务器 二、执行宝塔官方提供的 命令执…

centos7 配置jenkins run docker

本机环境已有jdk11 一、安装配置maven环境 1、下载maven wget https://dlcdn.apache.org/maven/maven-3/3.9.3/binaries/apache-maven-3.9.3-bin.tar.gz 2、解压 tar -zxvf apache-maven-3.9.3-bin.tar.gz 3、移动位置 mv apache-maven-3.9.3 /usr/local/ 4、加入环境变…

Nvidia官方视频编解码性能

NVIDIA VIDEO CODEC SDK | NVIDIA Developer 1080P解码性能&#xff1a; 720P解码性能&#xff1a; 详细的参见官方的链接地址&#xff0c;对于GPU的解码fps能力&#xff0c;可以作为评估参照&#xff01;

Intellij IDEA 插件开发 | 京东云技术团队

写在前面 很多idea插件文档更多的是介绍如何创建一个简单的idea插件&#xff0c;本篇文章从开发环境、demo、生态组件、添加依赖包、源码解读、网络请求、渲染数据、页面交互等方面介绍&#xff0c;是一篇能够满足基本的插件开发工程要求的文章。 如有疏漏欢迎指正&#xff0…

汇编端口

输出年月日 时分秒 assume cs:code , ds:data data segmentdb 0 data ends code segment start:mov ax,datamov ds,axmov cx,3mov di,100mov bl,0mov ah,0mov byte ptr ds:[0],0 st1:mov al,blout 70h,alin al,71hcall showptrsub di,2add bl,2add byte ptr ds:[0],1loop st1mo…

STM32 标准库 任意长度收发

void UART5_IRQHandler(void) //串口1中断服务程序 {u8 Res;if(USART_GetITStatus(UART5, USART_IT_RXNE) ! RESET) //接收中断(接收到的数据必须是0x0d 0x0a结尾){Res USART_ReceiveData(UART5);//(USART1->DR); //读取接收到的数据USART_RX_BUF[USART_RX…

记一次PHP的laravel框架数据库查询报错500

错误的原因 是有个给第三方回调的接口&#xff0c;由于第三方接口是不需要传token的因此在本地测试的时候&#xff0c;我们是将Header加入token的字段&#xff0c;测试一切正常&#xff0c;但是到显示调试过程中一直出现500。 经过不断地定位&#xff0c;发现是在通过订单号到…

almalinux下卸载并升级安装10.9的mariadb(实操)

MariaDB 简介 MariaDB Server 是一个通用的开源关系数据库管理系统。 它是世界上最受欢迎的数据库服务器之一&#xff0c;拥有包括 Wikipedia、WordPress.com 和 Google 在内的知名用户。 MariaDB Server 在 GPLv2 开源许可下发布&#xff0c;并保证保持开源。 它可用于高可用…

一、枚举类型——用枚举实现职责链模式

职责链&#xff08;Chain of Responsibility&#xff09;设计模式先创建了一批用于解决目标问题的不同方法&#xff0c;然后将它们连成一条“链”。当一个请求到达时&#xff0c;会顺着这条链传递下去&#xff0c;直到遇到链上某个可以处理该请求的方法。 可以很容易地用常量特…

魔兽世界自己架设私人服登录不了服务器

要在自己的计算机上架设魔兽世界私人服服务器需要进行如下步骤&#xff1a; 1. 下载和安装魔兽世界服务器文件 首先需要去官网下载和安装魔兽世界服务器文件并进行配置。这一步很关键&#xff0c;因为要确保服务器安装和配置正确&#xff0c;才能保证能够顺利地登录服务器。 …

怎么将pdf A3版转换为A4版

借助WPS进行分割(需开通会员) 步骤一&#xff1a;在WPS中打开PDF文件&#xff0c;点击菜单栏中的“编辑”——“分割页面”功能&#xff0c;进入分割界面&#xff0c;设置分割线的数量和位置&#xff0c;接着点击“立即分割”就能快速将PDF分割成两页了 步骤二&#xff1a;点击…

Flink-SQL 写入PostgreSQL 问题汇总

​ 1.主键字段为空问题 错误信息 org.apache.flink.table.api.TableException: Column bus_no is NOT NULL, however, a null value is being written into it. You can set job configuration table.exec.sink.not-null-enforcerDROP to suppress this exception and drop …

用Excel生成Sql:

用Excel生成Sql: 以如图为例&#xff1a;点击一行数据的后面一个单元格&#xff0c;在上面的fx部分输入&#xff0c;以等号开头证明这是一个公式。在等号的后面写上想要添加的数据&#xff0c;书写规范是这样&#xff1a;“&A2&”表示varchar类型&#xff1b;"&am…

你知道什么是生成对抗网络吗

生成对抗网络&#xff08;GANs&#xff09;是一种深度学习模型&#xff0c;已经显示出在许多生成相关任务中的卓越性能。最近几年&#xff0c;越来越多的研究人员将注意力集中于 GAN 的隐空间属性&#xff0c;并提出了许多利用这些属性进行语义图像编辑的方法。然而&#xff0c…