动态路由协议 OSPF 工作过程 之 状态机维度

news2024/12/26 20:44:59

状态机  

             #   什么是状态机呢 ?

                  状态机  : 就是 OSPF 路由间的邻居关系所在的不同阶段

                  不同的关系 就是 不同的状态机

OSPF 的状态机  :

                   #   我们用 思科 的PPT 来介绍 OSPF 的状态机 

                    

                      里面所有黄颜色方框里 标定的就是 状态机 

                         有 :  Down State,     Init  State        Two-Way  State  

                     #  有两台路由器 A,B 。

                         最一开始,就谁还不认识谁,互相不认识( 此时的状态就是 Down State )

                       

                         A 先发了消息( 可以看到,是以组播的形式--- 224.0.0.5 ) 发了一个 Hello 包

                         包里的内容是  我是 172.16.5.1 ( RID )并且 我谁都不认识 !!

                         目的就是,当别人收到自己的 Hello 包,能和自己联系下,交个朋友 !!

                       

                          A,一发完 Hello 包后,它的状态就不一样了,就发生变化了 :

                         从 Down State变为了 Init State   

                         接着, B 给 A 回了个 Hello 包,包里是 : 我是 172.16.5.2 并且我见过 172.16.5.1

                         这几说明,B 之前认识我( A ),

                         那 A 收到了 B 的 Hello 包,A 就知道了 B 是谁了 ( 是 172.16.5.2 ) 

                         那意味着什么呢 ??

                               ===>>>

                                      意味着  A 认识了 B ,  B 也认识了 A ( 即 相互认识了 )

                         这时,互相认识了,状态就又变化了,从陌生人变为了 相互认识

                         互相认识的状态就为 Two-Way State (  双向通讯 )

                         双向通讯就标志着 邻居关系的建立 

                        

                          :   我们当时在学习 RIP 协议时,也提过 邻居关系,是说 只要是相邻的两个路

                                    由器,并且能够正常通讯就能被称为 邻居关系 !

                                    而在 OSPF 里,所谓的邻居关系是不太一样的不是仅仅相邻正常通讯就可

                                    以的,是需要建立的,两个都需要相互收到对方的 Hello 包达到 Two-Way

                                   状态才可以被称为 邻居关系的建立!!

                                    所以,这也是前面在介绍 数据包类型的时候 说 HELLO 包的作用 : 发现和

                                    建立邻居关系!!! 

                                    整个建立 邻居关系的过程就是 使用 HELLO 包,建立方法也很简单就是 发

                                    送自己的  RID , 对方收到后,也会发送给你它自己的RID ,只要你发现

                                    对方发的 HELLO 包里有自己的 RID 这不就说明它收到过你的RID ,这不就

                                    相互认识达到 Two-Way State 状态!!

        #    那现在邻居关系已经建立了,那关系(状态机)想要更进一步的发展,肯定也是不容易的

              是需要经过筛选的,是需要经过 条件匹配的!! 

              那条件匹配肯定也就意味着  要么成功要么失败,

              若成功就进入下一个状态!

              要失败,就维持邻居关系( 依靠 HELLO 包 进行 10 S 一次的周期保活!! )

              具体的 条件匹配是怎样的条件 现在先不透漏,后面会讲!!

      

              假设,现在条件匹配成功,那就进入下一个状态 :

              

                 当条件匹配成功后便来到了 Exstart State 状态机 ( 预启动 状态

                 这个时候 A 给 B 发了 DBD 包 ,包里说 : 他(A) 要进入下一个状态,因为它的RID

                 是172.16.5.1 , 而 B 收到 A 发的 DBD 包后,再给 A 回了 DBD 包,说 : 不行,我得

                 先进入下一个状态,因为我的 RID 更大 ( B 的 RID 是 172.16.5.2 )

                 这时的 预启动 状态 好像是 :

                                A  和  B  在争抢谁能先进入下一个状态 

                                A 和 B 在比谁的 RID 大,谁的 RID 大就能进入到下一个状态 !!              

                               

                               那我们就很好奇,那就不能携手一起进入下一个状态嘛?? 非得争??

                  那我们就一起先看看下一个状态是要干嘛 ?

                  ===>>>

                          Exstart State  预启动 的下一个状态是 Exchange State   

                          B 给 A 发了一个 DBD 包 ,包里说 :这是我的 LSDB 

                          LSDB  :  链路状态数据库    ( 是存放链路信息的)     

                         B 给 A 发 DBD 包,传输了 B 自己的 链路信息摘要 !!  

                        而后, A 给 B 发了 DBD 包 传输的也是 A 自己的 链路信息摘要 !!   

                 那现在,我们了解了 Exchange State准交换 这个状态是干嘛的,那现在就能解释

                上面的问题了

                问题 :  为什么 在上一个状态 ( Exstart State )   A   和 B 是争着 进入下一个状态

                                     为什么 A 和 B 不能一起进入下一个状态,而是错开进入的 ??

                        ====>>>

                                      其实,也很简单,它们错开进入下一个状态,也是为了避免同一时间里,

                                      数据占用资源量过大  ----   这也是 为了减少更新量过大的措施 !!

                                      因为, OSPF 里最大的问题不也就是 占用资源量过大嘛~!!

                                      和我们 前面讲的 同步周期 还是异步周期 是一个道理,为什么选择异步周

                                       期呢? 就是为了 避免同一时间 占用资源量过大从而导致 网络瘫痪嘛!!

                   也就是说  Exstart State  预启动 )这个状态就是做一件事儿,就是看谁先进入下一

                   个状态; 方法也很直接就是看 谁的 RID 更大!!!  

                    我们就把  Exstart State  预启动 )这个状态干的活叫做 --- 主从关系选举

                   通过 RID 来判断,谁大谁为主,谁就能先进入 下一个状态 --- Exchange State

                   

                   那此时就有一个小问题了 :

                   那既然我们 Exstart  State 就只是为了通过 RID 来看 谁能够进入下一个状态,而上面

                   展示的时候是使用的 DBD 包来进行的主从关系选举 ( 本质上就是 RID 比大小),

                   那既然只是为了 RID 比大小,那 HELLO 包 不也可以嘛,HELLO 包也可以携带 RID

                   那为啥要用 DBD 包, 而不用 HELLO 包呢 ??

                   ===>>>

                                    其实,只是为了 和 邻居关系进行一个区分, 没错,你 HELLO 包是可以携

                                    带 RID , 也能起到  Exstart  State 状态的作用,但是,此时我们的关系已经

                                    更进一步了,我们已经不是 邻居关系了,形象的讲,关系更近一步了,我

                                    们就不用 HELLO 包了,HELLO 包显得关系没有那么亲切!!

                                    我们用 DBD 包就可以和上一阶段的关系进行区分~!!!

                      Exchange State准交换)状态,

                                发送了携带数据的 DBD 包,携带的是链路状态信息摘要

                                

                    

                      刚才   Exchange State 准交换状态 )  发送了 DBD 包后,收到的那一方则 给回

                      个  LSACK 包,来以示确认 ~!!

                       然后,就进入到了  Loading State ( 加载状态 ) , 此状态,  A 向 B 发了 LSR

                       包,包里说 : 我需要 172.16.6.0 / 24 这个网段的信息 !!

                        B 收到 A 发的 LSR 包后( 知道这是 A 的请求),B 就知道了,这是 A 向自己要

                        6.0 网段的信息;  那么, B 就会给  A 回一个 LSU包,包里即是 6.0 网段 的信息

                        A 收到 B 发的 LSU 包后,就会给 B 再回个 LSACK包 来确认 ~!!  

                        也就是说 :  Loading State加载状态 主要就是进行  具体的链路信息 交换 

                        当 具体的链路信息 交换完成后,就来到了  Full State Full 状态 )

                        Full 状态 就标志着 邻接关系 的建立  !!

                        邻接关系 ( 真正意义上的能够 进行 数据传输的关系 )

                       

                     #    那什么叫邻接关系?  为什么不继续接着 邻居关系 称呼呢 ?

                            ===>>>

                                       最主要就是恰恰为了 邻居关系 进行区分!!

                                       之前的 邻居关系 只能通过 HELLO 包进行保活 ,邻居之间是不能进行 具

                                       体数据的交换的,而  只有邻接关系之间才能进行 LSA 的数据交换 !!

                        

                      #   介绍 OSPF 的状态机,一共有 7 个状态机 : 

                                  down 状态,      Init 状态, Two-Way  状态  exstart 状态,

                                  exchange 状态          loading 状态          Full 状态

                             

                               总结下这 7 个状态机

                                down : 当启动 OSPF ,便开始发送  HELLO 包,发送后即进入下一个状

                                               态,进入 Init 初始化 状态 

                                Init    :     收到的  HELLO 包中 只要包含了 本地的 RID 信息,则进入下一个

                                                状态,进入 Two-way ( 双向通信 ) 状态 !

                         Two - way :    标志着邻居关系的建立; 就是我们互相认识了!

                                                 要想进入下一个状态则需要进行条件匹配;

                                                 若匹配失败,就仅需要 使用 HELLO 进行 10 S 一次周期保活邻居

                                                 关系,匹配成功则进入下一个状态 ,进入 Exstart  预启动 状态

                              Exstart  :    使用未携带数据的 DBD 包进行 主从关系选举,RID 大的为主,

                                                  则优先进入下一个状态 Exchange ( 准交换 ) 状态 

                           Exchange :    使用携带具体数据的 DBD 包进行 目录信息共享,需要ACK确认

                                                   ACK 确认后,进入 Loading 加载状态 

                              Loading  :    通过对比 DBD 包 和 本地数据库中的信息,基于本地未知的LSA

                                                   信息( 就是 本地没有的 信息 ) 发送 LSR 请求,对端收到后,使

                                                   用  LSU 包回复 ( 回复的就是 你本地没有的 那些信息 ),收到

                                                   LSU 包后,回个 ACK 来确认! 

                                                   ACK 确认后,进入 FULL 状态 

                                      Full  :   标志邻接关系的建立  

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

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

相关文章

Json格式API调试,taobao1688pinduoduo商品详情测试接口

Json常用类型 任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。 对象:对象在 JS 中是使用花括号包裹 {} 起来的内容,数据结构为 {key1:value1, key2&#xf…

JavaScript:生成器函数

在介绍生成器函数之前先了解一下ES6的一个关键字,名为yield yield关键字,可以让代码在其出现的地方暂停执行,它只能在生成器函数内部使用。 生成器函数 生成器函数的语法比较简单在普通函数声明的时候在函数名前面添加一个*即可&#xff0…

openxr runtime Monado 源码解析 源码分析:Prober设备发现和管理 system device HMD target instance

monado系列文章索引汇总:openxr runtime Monado 源码解析 源码分析:源码编译 准备工作说明 hello_xr解读openxr runtime Monado 源码解析 源码分析:整体介绍 模块架构 模块作用 进程 线程模型 整体流程openxr runtime Monado 源码解析 源码分…

计算机网络4小时速成:物理层,功能特性,通信系统模型,分类,调制,曼彻斯特编码,信噪比,香农定理,复用技术,同轴电缆,中继器

计算机网络4小时速成:物理层,功能特性,通信系统模型,分类,调制,曼彻斯特编码,信噪比,香农定理,复用技术,同轴电缆,中继器 2022找工作是学历、能力…

[附源码]计算机毕业设计JAVA基于jsp的网上点餐系统

[附源码]计算机毕业设计JAVA基于jsp的网上点餐系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM m…

Proxy 代理对象使用详解即原理总结

Proxy 代理对象使用详解即原理总结 Proxy简单介绍 ECMAscript 6新增的代理可以给目标对象定义一个关联的代理对象,而这个代理对象可以作为抽象的目标对象来使用,在对目标对象的各种操作影响目标对象之前,可以在代理对象中对这些操作加以控制…

【python与数据分析】Matplotlib数据可视化

目录 前言 一、数据可视化库matplotlib 1.综述 2.pyplot基础语法 (1)创建画布与创建子图 (2)添加画布内容 (3)保存与展示图形 (4)设置pyplot的动态rc参数 二、绘制折线图 …

Python面向对象总结一

还记得第一次接触Python是在刚刚进入大学的第一个学期,之后就没有再使用过python。虽然基本语法,内置函数等没有忘记,但最近的学习中,一直在用python、matlab混合编程,零零散散的知识点、模模糊糊的记忆,有…

5G无线技术基础自学系列 | 传统无线网络架构

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 在4G网络中, 无线侧基本完成…

Anaconda配置镜像源

目录 一、首先生成 Anaconda的 .condarc配置文件: 二、命令行方式配置镜像源 三、可视化界面的方式配置镜像源 一、首先生成 Anaconda的 .condarc配置文件: 打开 Anaconda prompt,敲命令: conda config 查看 .condarc 中的源…

MySQL 增删改查进阶 — 数据库约束

文章目录数据库约束1.约束类型1.1 not null1.2 unique 唯一约束1.3 主键约束 primary key1.4 default 默认值1.5 外键约束 foreign key数据库约束 约束就是让数据库帮助程序猿更好的检查数据是否正确。 1.约束类型 not null - 提示某列不能存储 NULL 值。 允许为空&#xff…

wav to image concat 版

🍿*★,*:.☆欢迎您/$:*.★* 🍿 目录 背景 正文 总结 背景描述

STM32矩阵按键

矩阵按键原理 本实验使用STM32F103单片机,主题代码通用的。 如果每个按键占用一个GPIO引脚,对于使用多个按键来说就是一种资源的浪费,因此当我们在设计时,可以考虑矩阵这种方式。本实验使用4*4也就是16个按键。 矩阵按键相对于独立…

Go 语言搭建个人博客(qiucode.cn 重构篇 三)

1、读取配置文件 项目中如数据库连接、邮箱配置等这些信息一般会被写入一个文件,而通过编码在程序中读取想要的配置信息。 本项目使用yaml文件作为配置文件,配合第三方库viper来读取yaml配置文件。 go get -u github.com/spf13/viper在项目根目录新建一个yaml文件,内容如…

数学杂谈:限制条件下的均匀分布考察

数学杂谈:限制条件下的均匀分布考察 1. 问题描述2. 问题解答 1. 答案2. 解析3. 蒙特卡洛模拟 3. 离散情况延拓 1. 正整数的情况2. 整数的情况3. N→∞N \to \inftyN→∞的情况 4. 误区分析 1. 问题描述 假设x1,...,xnx_1, ..., x_nx1​,...,xn​均为0∼10 \sim 10…

思科防火墙解析(ASA)

♥️作者:小刘在C站 ♥️每天分享云计算网络运维课堂笔记,一起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放。 目录 一. 防火墙的分类, 二. 发展史, 三. 思科防火墙技术应用的…

[附源码]java毕业设计铁东社区新冠病毒疫苗接种管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

山东大学线性代数-4-线性方程组

目录 4.1 齐次线性方程组 4.1.1 齐次线性方程组的定义 4.1.2 方程组的三种形式 4.1.3 齐次线性方程组解的性质 4.1.4 行最简形矩阵 4.1.5 两个例题 4.2 基础解系的求法 4.2.1 求解步骤 4.2.2 例题 4.3 非齐次线性方程组 4.3.1 相关概念 4.3.2 非齐次线性方程组的有…

编译安装php扩展

1. 切换到要安装的扩展的目录下 2. 执行phpize(在扩展目录里 可以写自己电脑里的绝对路径) ../../bin/phpize 3. 然后执行 ./configure ./configure 4. 没问题的话 make 然后 make install make 运行之后出现下图就说明可以下一步了 运行 make install make install 出现…

GitHub使用教程

目录概要一. 下载git二. 初始化本地仓库设置签名查看状态,三大分区,添加,提交操作查看状态,三大分区添加查看提交历史查看提交历史的其他指令如何进行版本切换基于索引值基于^符号进行版本切换基于~符号进行版本切换reset指令的参…