1.1.6 LSDB同步

article/2025/9/21 4:49:46

邻接关系

 

邻接建立过程

 

讲完了报文之后我们具体来看一下是怎么同步的,我们可以看到下图是我们LSDB的过程:

 

注意:

我们要注意,在到达同步过程之前我们先要达到2-way的状态,就是我们首先要有邻居状态的建立,才有可能有下面的这些步骤。

 

 

首先第一个是ExStart状态

 

在Exstart状态中,是用于选举我们的主从的,这里我们可以看到,选举主从主要是用到了DD报文。

对于最前面的这三个DD报文,实际上是不携带任何的路由摘要消息的,此时有人会问不携带路由摘要,那么这个DD报文的作用是什么?

 

现在我们来看一下它是如何去选举主从的,首先对于RTA而言,它会发送一个DD报文。

 

  • 这里有一个Seq,我们可以想象X是一个随机数,它的任意取值都是没有关系的,可以取任意的值。
  • 第二个I代表的是这个是否是我的第一个DD报文,很明显是。
  • 而M代表我是不是Master,此时也就是我是不是主,RTA在这里并不知道RTB的情况肯定以为自己是主,那么同样是置为1,认为自己是MASTER。
  • 而MS是代表后面还没有响应选举的DD报文,这里后面还是要去选举DD的,还是要去发送报文信息,所以也是置为1。

 

对于RTB来说也是一样的,RTB收到了DD报文也是去比较我们的Router ID。

 

这里对于DD报文,Router ID越大则会成为一个Master,此时RTB就知道自己已经是MASTER。

 

回复一个DD报文,Seq=Y,这个就是随机数,我们不用管他。

Y表示是不是我的第一个DD报文。

M表示自己是否为MASTER,现在认为自身是MASTER,所以也置为1。

MS表示后面还有没有相应的选举报文,这里是有的,同样也是置1。

 

此时RTA收到了DD报文之后,发现RTB的Router ID确实是比我大,那么RTB就可以作为一个MASTER。

 

此时路由器就从ExStart变为Exchange状态,也就是说代表主从去选举完毕了。但是这里RTA就会去回复一个DD报文

 

这里的这个DD报文,可以看到它的SEQ就是遵从于我的RTB的SEQ的值了,也就是说之后再去传递任何的DD报文,都是以Y为基础。

 

在Y上面进行加一、加二等等,第一次传输就是加一,第二次传输就是加二。它在这里就是以y为基础去传送我们的路由消息已经传送我们的DD报文了。

 

这里其实就可以去保证我们的可靠性了,这个也是选举出主从的意义,为了保证双方设备的可靠性。

 

这个时候RTA认定RTB是我的DD报文,这个时候SEQ可以理解为一个会话ID,就置为y,它对于I、M、MS这三个参数在我们的报文中还是有的,但是只不过这三个参数都是置0。

 

  • 因为I首先并不是我的第一个报文了,此时置为0。
  • 现在RTA很明显不是Master,是从,所以M也置为0。
  • 现在因为是最后一个参与主从选举的DD报文了,所以也是置为0了。

 

表示去认可RTB主从的地位。肯定RTBRTA的主了,此时RTB收到了这个报文之后,就会从Exstart状态变为Exchange

 

而在Exchange状态中它们就会开始正式的交互相应的摘要信息了,此时RTB将我们相应的DD报文的摘要信息发给RTA。

 

  • 这个时候我们的Seq等于Y+1,这是RTB第一次传输摘要信息的报文。
  • 这个时候它后面跟着一个MS,表示后面还跟着其他的一些MS的报文。

 

然后对于Exchange状态,RTA现在已经从Exchange状态,到达了loading状态

 

同时它也会发送Seq=Y+1的报文,在这里的话也就相应的去发送路由摘要的信息给RTB。

那么RTB假如收到了这个路由的摘要信息之后,发现RTA在这里的路由信息我完全在之前已经都学习完成了,已经对所有的摘要信息在我自己的LSDB链路状态数据库都存放好了。

 

那么这个时候我并没有重新要从RTA中重新获取的信息了,我就会直接从Exchange状态变为Full状态

 

表示我不需要再去学习任何的路由消息了。

 

 

对于RTA来说,假如说RTA在这里有一些路有消息需要去学习,此时就会去发送LSR去请求响应的路由消息

 

比如:

现在我想去学习2.2.2.2这个loopback口,即我去请求2.2.2.2这个32位的路由的消息,同时这里只是一个目的网段和一个掩码的摘要信息。

 

对于RTB就会回复一个详细的路由信息LSU

 

包括Cost值、出接口等。

 

对于RTA。现在我收到了一个信息的话,我就会去回复一些ACK的状态。假如说RTARTB之间,RTA已经完全学习了RTB的全部路由消息之后已经到了Full状态

 

到了Full状态之后就代表了邻接关系的建立,这个就是整体的过程。

 

OSPF邻居状态机

 

 

对于OSPF状态机的描述,我们可以看一下:

 

首先第一个是Down状态,对于Down状态就代表我刚刚去发送Hello报文

 

如果接收到了Hello报文就会进入到Init状态。

这里我们要注意有一个Attempt状态。

 

Attempt状态是在对应的NBMA网络中,如果是NBMA网络就会是Attempt状态,即尝试去建立。

 

然后进入到了Init状态

 

如果收到了对端的Hello报文我们会到达下一个状态,即2-way状态。

 

有部分的路由器邻居关系会卡在2way状态,当然有部分的路由器就可以进入到下一个状态,即ExStart状态

 

Exstart状态会去选举主从,主从选举完成就会进入Exchange状态

 

对于Exchange状态就会去开始交互DD报文。(完整则直接变为Full,不完整则进入Loading状态去请求路由)

 

这里的DD报文就携带了响应的路由摘要信息,知道了对方的路由摘要之后就会开始去互相学习路由。

 

我们要注意,这里的学习路由并不是1s、或者很短的时间内可以学习完成,肯定是需要一个过程的:

 

我想要去发送LSR请求,LSU收到相应的信息,然后我再去确认。

 

此时我们在学习路由的这个过程就是一个Loading状态

 

最后,两边的路由报文已经学习完成之后,我们就进入到了最后的状态,即Full状态


http://chatgpt.dhexx.cn/article/u4NPlIic.shtml

相关文章

网络篇 OSPF的LSDB过载保护-52

目录 一、实验原理 二、实验拓扑 三、实验步骤 四、实验过程 总结 实验难度 2 实验复杂度3 一、实验原理 若没有正确规划网络或配置不好,可能出现大量的LSA,这些LSA会消耗掉本地的CPU和内存资源的。在Cisco IOS 12.3(7)和更晚的版本中&#xff0…

OSPF之链路状态数据库LSDB

OSPF链路状态数据库 原理概述: OSPF是一种基于链路状态的动态路由协议,每台 OSPF 路由器都会生成相关的LSA,并将这些LSA通告出去。路由器收到LSA后,会将它们存放在链路状态数据库LSDB中。 LSA有多种不同的类型,不同类型…

ORACLE生成自增唯一序列值的函数

“F_NEXT_VAL” 函数名 VAL 变量值 PRAGMA AUTONOMOUS_TRANSACTION 声明为自治事务 CREATE OR REPLACE FUNCTION "F_NEXT_VAL" RETURN INTEGER ASpragma autonomous_transaction;VAL INTEGER; BEGINSELECT t."VALUE" INTO VAL FROM SYS_SEQUECE t WHERE t…

Mysql和Oracle实现序列自增

/*ORACLE设置自增序列 oracle本身不支持如mysql的AUTO_INCREMENT自增方式,我们可以用序列加触发器的形式实现, 假如有一个表 T_WORKMATES,我们需要让学号PNO自增*/ --创建序列 SEQ_PNO CREATE SEQUENCE SEQ_PNO minvalue 1 --最小值为1 n…

如何实现 Oracle 的自增序列,两步轻松搞定

在实际项目开发过程中,设计数据库表时经常遇到需要主键自增的场景。那如何实现Oracle的主键自增呢,这里我们记录一种最常用的方式:sequence trigger。 就是利用Oralce的序号和触发器来实现字段的自增,下面直接来看一个完整的例子…

oracle中设置表的主键字段为自增序列(实例)

oracle中设置表的主键字段为自增序列(实例) 1、首先创建一个表(如日志表) //删除库表中存在的日志表 drop table S_LOG_INFO cascade constraints; //新建日志表 create table S_LOG_INFO (PRIMARYKEY NUMBER …

oracle数据库新建表增加表序列,设置id自增

1,oracle数据库增加新表时,设置表id为自增 最小1 最大9999999999 CREATE SEQUENCE “数据库名称”.“SEQ_表名称” MINVALUE 1 MAXVALUE 9999999999 INCREMENT BY 1 START WITH 100000014 NOCACHE NOORDER NOCYCLE 2,向数据库插入数据时&…

Oracle自增序列探秘:一篇文章教你读懂

目录 1:什么是Oracle 自增长序列 2 :创建数据-->实现自增长序列 2.1 创建序列 2.2 使用序列 3 :查询数据-->实现自增长序列 1:什么是Oracle 自增长序列 Oracle自增长序列是一种生成唯一数字的方法,可以用于创…

oracle 序列,程序中实现自增

文章目录 1. 序列作用和含义2. 序列的使用2.1 直接使用序列2.2 配合触发器隐式使用2.3 修改删除序列 1. 序列作用和含义 序列是用于生成唯一、连续序号的对象;可以是升序的,也可以是降序的; 使用create sequence语句创建序列 create sequen…

oracle自增序列

1.创建表TABLESPACETEST -- Create table create table TABLESPACETEST (contract_no VARCHAR2(100) primary key,contract_start_dt DATE,contract_end_dt DATE,loan_amt NUMBER(20,6),loan_bal NUMBER(20,6) ) tablespace SYSTEM;2.创建自增序列&…

【PWA】关于PWA的实操以及使用经验总结

关于PWA的实操以及使用经验总结 什么是PWA如何给项目加上PWA优缺点增强我们的 PWA写在后面 关于标题的说明: 实操: 实际操作 PWA : Progressive Web App 什么是PWA PWA 是渐进式 Web 应用, 类似于原生 App 的体验。 当我们在手机…

为什么 PWA 还没有“干掉”原生应用?

摘要:PWA 即渐进式网页应用,是 Web 应用的一种,具有安全、渐进式、响应式、无需网络、类应用程序、保持最新、可检测、可重新接入、可安装、可分享这 10 个要素,但 PWA 至今仍没有成为应用的默认格式。 原文链接:https…

PWA入门:手把手教你制作一个PWA应用

摘要: PWA图文教程 原文:PWA入门:手把手教你制作一个PWA应用作者:MudOnTire Fundebug经授权转载,版权归原作者所有。 简介 Web前端的同学是否想过学习app开发,以弥补自己移动端能力的不足?但…

PWA 即将终结应用程序商店!

渐进式Web应用很快就会将用户从Google Play和iOS应用商店中解放出来。 作者 | Owen Williams 译者 | 弯月,责编 | 屠敏 出品 | CSDN(ID:CSDNnews) 苹果和Google将产品统统锁在了他们的应用商店,现在就让我们来摧毁这…

【PWA学习】1. 初识 PWA

什么是PWA PWA(Progressive Web Apps,渐进式 Web 应用)运用现代的 Web API 以及传统的渐进式增强策略来创建跨平台 Web 应用程序。这些应用无处不在、功能丰富,使其具有与原生应用相同的用户体验优势 我们需要理解的是,PWA 不是某一项技术&am…

搭建BWAPP靶场(详细过程)

靶场介绍 bwapp是一款非常好用的漏洞演示平台,目的是帮助网络安全爱好者、开发人员和学生发现并防止网络漏洞。包含有100多个漏洞,涵盖了所有主要的已知Web漏洞,包括OWASP Top10安全风险,最重要的是已经包含了OpenSSL和ShellShoc…

PWA的探索与应用

本文由云社区发表 PWA(Progressive Web App)起源背景 传统的Web网页存在以下几个问题: 进入一个页面必须要记住它的url或者加入书签,入口不便捷;没网络就没响应,不具备离线能力;不像APP一样能…

PWA 应用列表及常用工具

引言 在做 PWA 的过程中自己写了一些相关的应用和工具,在这里整合下,方便记录及查找使用。 应用列表 PWA 支持检测工具番茄钟二维码生成新闻应用身体数据统计应用支付宝集福应用田英章书法字典应用抖音无水印下载应用很好用的备忘录精神氮泵 PWA 支持检…

【技术】PWA实践 - 应用激活与安装

文章目录 你能用这项技术做什么?适合人群你可以学到什么 应用激活与安装激活与安装Manifest注意 Service WorkerStorage 管理应用 Demo本章参考资料 你能用这项技术做什么? 使用PWA能让你的web网页在支持使用最新版本Chome浏览器的桌面端(wi…

正确使用PWA

作为一个前端程序员,在没有任何Android/IOS的开发情况下,想想我们有多少种方法来开发一个原生移动应用程序!我们可以有非原生、混合开发,PWA等等手段。类似uniapp,Reactive native为我们提供了更简便的手段&#xff01…