0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OSPF邻居状态机的详细讲解

电子设计 来源:电子设计 作者:电子设计 2020-12-26 02:12 次阅读

1、背景

我们都知道,任何新技术的诞生,都是有它一定的自然规律的。绝逼不是凭白无故的产生。所以,龙哥希望大家学习一个技术时,学会多关联相关协议,联想他们各自的特点,学会把知识串联起来,这样你就不会觉得学技术好难啊,就不会总是跟龙哥抱怨:总是记不住怎么办呢?

会有链路状态协议的OSPF产生,是因为前面距离矢量路由协议存在两个非常严重的问题:

1、收敛速度缓慢,就是太磨叽了;2、容易产生路由环路。

OSPF,全称Open Shortest Path First,即开放最短路径优先,是由IETF的OSPF工作组在1989年10月开发的,发表的RFC为1131, OSPFv1从此诞生,该协议是基于著名的DijKstra算法。不过版本1一直都是在实验室中使用,未推广成功。版本2才开始被广泛使用,在RFC2328说明。

注:IETF:国际互联网工程任务组(The Internet Engineering Task Force,简称 IETF。1985年年底成立。

2、LSDB

LSDB,全称是Link State DataBase,链路状态数据库。为啥会有它呢?还不是因为距离矢量路由协议RIP,是个“传言”路由协议,在距离矢量路由协议中,邻居说有啥路由,你就信啥,你心中自己都没有一张地图,就很容易经常被骗,所以会导致环路。所以OSPF干脆就给区域内每台路由器都搞一张地图,这样就不会上当受骗了,这个地图就是LSDB,这样就使得OSPF可以保证区域内无环,区域间无环,通过一些规则来限制,这样区域内外都能保证无环。下面,简单介绍一下:

简单说明一些,区域内路由器一旦配置了OSPF,每台路由器就会开始泛洪LSA(包含IP地址、掩码、开销、网络类型等信息),每台都能收到LSA,会构建一张数据库,即LSDB。然后每台路由器都会以自己为根节点,构建一颗最短路径树,然后从这棵树中计算路由,将最优的放进路由表,用于指导业务数据转发。

可能上图小白看着会觉得有点抽象,很难受。行吧,那龙哥动手搭个环境,联系实际场景,可能就会更好理解了。

现在我登录到每台设备给大家演示一下如何查看LSDB(链路状态数据库):

从以上截图来看,相信大家应该发现一个现象了,那就是每台路由器的LSDB是一样的,说明区域内每台路由器的“地图”都是长一个样的。

然后我再每台路由器都创建loopback 0,都宣告到OSPF,目的是验证计算路由。不然上述环境,直连路由优先OSPF路由,所以查看路由表是不会看到OSPF路由的。

创建后随便登录一台路由器就可以了(因为每台路由器LSB都是一样的),去查看1类LSA(1类LSA每台路由器都会产生的)

然后我们在R1查看路由表中的OSPF路由:

我们可以看到只有2条OSPF路由,10.10.10.10没有在里面,是因为它不是最优的,因为它是直连路由,直连路由(优先级0)比OSPF(优先级10)优。

3、报文类型

不管你学什么协议,都绕不开学习报文。报文,就是协议之间互相交付的数据内容。

OSPF在层次模型中,是基于IP层之上的,协议号是89。

上图看完,我们是不是就可以定位出OSPF其实也是跟TCP、UDP同一传输层级别的协议了。

现在,是不是明白了,为啥OSPF报文需要LSAck了吧? 因为OSPF不是基于TCP,TCP有确认机制,所以OSPF如果要确认机制,就需要开发一个报文类型,用来做确认,即LSAck。

现在,我们来总结一下OSPF的报文类型有:

Hello报文:用于发现、建立、维护邻居关系。

DBD报文:链路状态数据库的目录,即摘要信息。

LSR报文:发现自己缺少哪些摘要信息的,就去请求缺少的LSA。

LSU报文:完整的LSA信息。

LSAck报文:确认收到LSA。

本期主题龙哥于大家分享的是OSPF邻居状态机,所以重点介绍一下OSPF的Hello报文。

有些人遇到OSPF邻居不能建立成功,总是不知所措;或者有些考试应付考试,来问龙哥,影响OSPF邻居建立因素好几条,总是记不住怎么办呀?其实,这个问题很简单,就是你没有把Hello报文格式内容给了解透彻。

你细品Hello报文,再去看影响OSPF邻居建立的因素,就清晰多了:(1)router id(2)area id(虚链路的area id可以不一致,什么意思)(3)认证(4)hello/dead(5)区域类型(option位,e=1、n=0为普通/骨干区域,e=0、n=0为stub区域,e=0、n=1为nssa区域)(6)接口的地址掩码(ma网络,LSA2的掩码描述接口的掩码,如果掩码不一致会认为有两台DR,p2p没有问题)不在hello包(7)接口mtu(邻接关系出问题)(8)ospf进程下静默

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据
    +关注

    关注

    8

    文章

    6514

    浏览量

    87609
  • OSPF
    +关注

    关注

    0

    文章

    77

    浏览量

    14826
收藏 人收藏

    评论

    相关推荐

    Verilog状态机+设计实例

    在verilog中状态机的一种很常用的逻辑结构,学习和理解状态机的运行规律能够帮助我们更好地书写代码,同时作为一种思想方法,在别的代码设计中也会有所帮助。 一、简介 在使用过程中我们常说
    的头像 发表于 02-12 19:07 2012次阅读
    Verilog<b class='flag-5'>状态机</b>+设计实例

    Spring状态机的实现原理和使用方法

    说起 Spring 状态机,大家很容易联想到这个状态机和设计模式中状态模式的区别是啥呢?没错,Spring 状态机就是状态模式的一种实现,在
    的头像 发表于 12-26 09:39 977次阅读
    Spring<b class='flag-5'>状态机</b>的实现原理和使用方法

    SaberRD状态机建模工具介绍(一)什么是状态机建模

    状态机建模是使用状态图和方程式的手段,创建基于混合信号的有限状态机模型的一种建模工具。
    的头像 发表于 12-05 09:51 542次阅读
    SaberRD<b class='flag-5'>状态机</b>建模工具介绍(一)什么是<b class='flag-5'>状态机</b>建模

    什么是状态机状态机的种类与实现

    状态机,又称有限状态机(Finite State Machine,FSM)或米利状态机(Mealy Machine),是一种描述系统状态变化的模型。在芯片设计中,
    的头像 发表于 10-19 10:27 5088次阅读

    有限状态机分割设计

    有限状态机分割设计,其实质就是一个状态机分割成多个状态机
    的头像 发表于 10-09 10:47 359次阅读

    什么是有限状态机?有限状态机的四要素介绍

    如果一个对象(系统或机器),由若干个状态构成,在某种条件下触发这些状态,会发生状态相互转移的事件,那么此对象称之为状态机
    的头像 发表于 09-17 16:42 1727次阅读

    如何使用FSME来定制状态机

    定制状态机 目前得到的状态机已经能够响应来自外部的各种事件,并适当地调整自己当前所处的状态,也就是说已经实现了状态机引擎的功能,接下来要做的就是根据应用的具体需求来进行定制,为
    的头像 发表于 09-13 16:57 883次阅读
    如何使用FSME来定制<b class='flag-5'>状态机</b>

    如何生成状态机框架

    生成状态机框架 使用FSME不仅能够进行可视化的状态机建模,更重要的是它还可以根据得到的模型自动生成用C++或者Python实现的状态机框架。首先在FSME界面左边的树形列表中选择"Root
    的头像 发表于 09-13 16:54 653次阅读
    如何生成<b class='flag-5'>状态机</b>框架

    自动生成程序状态机代码状态机建模方法

    首先运行fsme命令来启动状态机编辑器,然后单击工具栏上的“New”按钮来创建一个新的状态机。FSME中用于构建状态机的基本元素一共有五种:事件(Event)、输入(Input)、输出(Output
    的头像 发表于 09-13 16:50 733次阅读
    自动生成程序<b class='flag-5'>状态机</b>代码<b class='flag-5'>状态机</b>建模方法

    基于C语言的状态机实现方案

    关于状态机,基础的知识点可以自行理解。本文主要讲解的是一个有限状态机FSM通用的写法,目的在于更好理解,移植,节省代码阅读与调试时间,体现出编程之美。
    发表于 09-13 09:28 303次阅读
    基于C语言的<b class='flag-5'>状态机</b>实现方案

    如何在FPGA中实现状态机

    状态机往往是FPGA 开发的主力。选择合适的架构和实现方法将确保您获得一款最佳解决方案。 FPGA 常常用于执行基于序列和控制的行动, 比如实现一个简单的通信协议。对于设计人员来说,满足这些行动
    的头像 发表于 07-18 16:05 604次阅读
    如何在FPGA中实现<b class='flag-5'>状态机</b>

    状态机要实现哪些内容

    状态机模式是一种行为模式,通过多态实现不同状态的调转行为的确是一种很好的方法,只可惜在嵌入式环境下,有时只能写纯C代码,并且还需要考虑代码的重入和多任务请求跳转等情形,因此实现起来着实需要一番考虑
    的头像 发表于 06-22 14:26 455次阅读
    <b class='flag-5'>状态机</b>要实现哪些内容

    状态机编程实例-状态表法

    上篇文章,使用嵌套switch-case法的状态机编程,实现了一个炸弹拆除小游戏。本篇,继续介绍状态机编程的第二种方法:状态表法,来实现炸弹拆除小游戏的状态机编程。
    的头像 发表于 06-20 09:05 1263次阅读
    <b class='flag-5'>状态机</b>编程实例-<b class='flag-5'>状态</b>表法

    Verilog状态机的类型

    有限状态机(Finite-State Machine,FSM),简称状态机,是表示有限个状态以及在这些状态之间的转移和动作等行为的数学模型。
    的头像 发表于 06-01 15:23 1324次阅读
    Verilog<b class='flag-5'>状态机</b>的类型

    详细介绍FPGA状态机的设计和应用

    FPGA的特点是并行执行,但如果需要处理一些具有前后顺序的事件,就需要使用状态机
    发表于 05-22 14:24 712次阅读
    <b class='flag-5'>详细</b>介绍FPGA<b class='flag-5'>状态机</b>的设计和应用