故障排错篇之OSPF协议

news2024/11/28 22:36:58

一、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的邻居震荡

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

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

相关文章

NodeJS 文件操作封装 ②①

文章目录 前言导入模块创建文件递归删除文件&文件夹下载写入图片根据URL路劲返回Base64图片链接根据URL路劲异步返回Base64图片链接封装代码暴露模块总结 ⡖⠒⠒⠒⠤⢄⠀⠀⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢸ ⠀⠀⠀⡼⠀⠀⠀⠀ ⠀ ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢶⣲⡴⣗⣲⡦…

【java爬虫】使用selenium获取某宝联盟淘口令

上一篇文章我们已经介绍过使用selenium获取优惠券基本信息的方法 (15条消息) 【java爬虫】使用selenium爬取优惠券_haohulala的博客-CSDN博客 本文将在上一篇文章的基础上更进一步,获取每个优惠券的淘口令,毕竟我们只有复制淘口令才能在APP里面获取优惠…

Appium python 框架

目录 前言 流程 结构 具体说说 run.py 思路 其他模块 前言 Appium是一个开源的移动应用自动化测试框架,它允许开发人员使用多种编程语言(包括Python)来编写自动化测试脚本。Appium框架提供了一套API和工具,可以与移动设备进…

C语言——指针详解(初阶)

轻松学会C语言指针 前言:一、指针是什么?1.1 指针是什么?1.2 指针变量1.3 总结 二、指针和指针类型2.1指针-整数2.2 指针的解引用 三、野指针3.1野指针的成因3.2如何避免野指针 四、指针运算4.1 指针-整数4.2指针-指针4.3指针的关系运算 五、…

【学会动态规划】不同路径(5)

目录 动态规划怎么学? 1. 题目解析 2. 算法原理 1. 状态表示 2. 状态转移方程 3. 初始化 4. 填表顺序 5. 返回值 3. 代码编写 写在最后: 动态规划怎么学? 学习一个算法没有捷径,更何况是学习动态规划, 跟我…

Delete `␍`eslint(prettier/prettier)报错的终极解决方案

1.背景 在进行代码仓库clone打开后,vscode报错全屏的 Delete ␍eslint(prettier/prettier)问题 2. 解决方案: 1.vscode直接转化 好处:直接转化当前页面的报错 坏处:每个界面都需要来一遍 2.设置git配置 好处:一…

竞赛信息管理系统——SSM

目录 一、项目简介 二、前置配置 1、创建数据库 2、编写application.yml文件 三、公共基础类 1、自定义登录拦截器类 2、自定义拦截规则 3、统一数据返回类 4、统一异常处理类 5、工具类 a、密码工具类 b、时间工具类 6、全局变量 四、用户模块 1、定义…

echarts环形图两层

1、实现效果 环形图&#xff0c;有两层环形&#xff0c;扇形之间有间隔&#xff0c;中间是标题&#xff0c;图例是自定义图片 2、实现 在template里写一个盒子放图表 <div class"chartMachineStyle" ref"chartMachine"></div>在style里设置盒…

状态模式:游戏、工作流引擎中常用的状态机是如何实现的?

从今天起&#xff0c;我们开始学习状态模式。在实际的软件开发中&#xff0c;状态模式并不是很常用&#xff0c;但是在能够用到的场景里&#xff0c;它可以发挥很大的作用。从这一点上来看&#xff0c;它有点像我们之前讲到的组合模式。 可以简短的回顾一下组合模式&#xff1a…

Windows cmd窗口下的代码页

查看当前的活动代码页 在cmd窗口下执行命令chcp可以查看当前的活动代码页&#xff1a; 临时修改活动代码页 在cmd窗口下执行命令chcp [nnn]&#xff0c;可以临时修改活动代码页&#xff08;窗口关闭后修改就失效了&#xff09;&#xff0c;其中[nnn]表示具体的代码页标识符…

Java 中的反射是什么?如何使用它?

Java 中的反射是什么&#xff1f;如何使用它&#xff1f; 在 Java 编程中&#xff0c;反射是一种高级的编程技术&#xff0c;可以在运行时动态地获取和操作类的信息。反射使得程序可以在运行时对类进行检查和操作&#xff0c;而不需要在编译时知道类的完整信息。这使得程序可以…

flstudio怎么保存工程文件?详解FL Studio 21保存文件的方法

FL Studio 21全称Fruity Loops Studio2023&#xff0c;这款软件也被人们亲切的称之为水果&#xff0c;它是一款功能强大的音乐创作编辑软件&#xff0c;拥有全功能的录音室&#xff0c;大混音盘以及先进的音乐制作工具&#xff0c;用户通过使用该软件&#xff0c;就可以轻松制作…

Ubuntu下搭建Redis分片集群

目录 准备实例和配置 启动分片集群 测试分片集群 分片集群需要的节点数量较多&#xff0c;搭建一个最小的分片集群&#xff0c;包含3个master节点&#xff0c;每个master包含一个slave节点&#xff0c;并且master之间通过心跳机制互相监听&#xff0c;此模式下不需要哨兵监听…

js高级进阶:promise同步编程技巧

promise是ES6引进的异步编程解决方案&#xff0c;是一个构造函数&#xff0c;可以实例化对象&#xff0c;可以解决回调地狱的问题。 首先我们看一下promise的实例化对象是什么&#xff1a; let P new Promise(function(){});//new一个promise传入一个函数console.log(P);打印结…

读发布!设计与部署稳定的分布式系统(第2版)笔记23_互联层之DNS

1. 互连层是可以真正构建高可用性的地方 1.1. 流量管理 1.2. 负载均衡 1.3. 服务发现 2. 不同规模的解决方案 2.1. 在小公司中 2.1.1. 只有少数开发人员的小企业可以直接使用DNS条目 2.1.2. 生成变更的开发人员较少&#xff0c;变更频度变低 2.1.3. 可能根本就没有独立…

高阶C语言|指针的进阶

指针的主题&#xff0c;在指针初阶阶段&#xff0c;我们知道了指针的概念&#xff1a; 1.指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识一块内存空间。 2.指针的大小是固定4/8个字节&#xff08;32为平台/64位平台&#xff09;。 3.指针是有类型&#xff0c…

java+springboot基于云的学习笔记系统设计与开发 _44va6

学习笔记系统按照权限的类型进行划分&#xff0c;分为管理员和用户共两个模块。系统实现登录、个人信息修改&#xff0c;还可以对个人中心&#xff0c;用户管理&#xff0c;笔记本管理&#xff0c;笔记分享管理&#xff0c;分享类型管理&#xff0c;学习资料管理&#xff0c;购…

Makefile:10分钟带你了解makefile

1、Makefile是什么 在Linux系统中&#xff0c;Makefile是一个脚本文件&#xff0c;通常名为Makefile或者makefile&#xff0c;它使得程序员能够快速便捷地完成调用程序、编译代码、定位故障等工作。 Makefile是一个用于自动化构建和编译程序的脚本文件。它包含了程序的所有源…

Ubuntu下配置Redis哨兵集群

目录 准备实例和配置 启动哨兵集群 测试配置 搭建一个三节点形成的Sentinel集群&#xff0c;来监管Redis主从集群。 三个sentinel哨兵实例信息如下&#xff1a; 节点IPPORTs1192.168.22.13527001s2192.168.22.13527002s3192.168.22.13527003 准备实例和配置 要在同一台虚…