HCIA(11)OSPF 数据包构成(Hello、DBD、LSR、LSU、LSAck包)、状态机、工作流程(建立邻居关系、主从关系协商、LSDB同步)

OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。
目前针对IPv4协议使用OSPF Version 2,针对IPv6协议使用OSPF Version 3。
在OSPF出现前,网络上广泛使用RIP(Routing Information Protocol)作为内部网关协议。由于RIP是基于距离矢量算法的路由协议,存在着收敛慢、路由环路、可扩展性差等问题,所以逐渐被OSPF取代。

OSPF数据包

OSPF中对路由信息的描述都是封装在链路状态通告LSA(Link State Advertisement)中发布出去的.

OSPF用IP报文直接封装协议报文,协议号为89。

  • Hello包:周期性发送(10s),用来发现、建立、保活邻居关系。
  • DBD包(Database Description packet):描述本地的LSDB摘要信息(本地数据库目录),用于两个设备的数据库同步。
  • LSR包(Link State Request packet):用于向对方请求所需(未知的)的LSA,设备只有在邻居双方成功交换DBD包后都会发送LSR包。
  • LSU包(Link State Update packet):用于共享具体的LSA信息。
  • LSAck包(Link State Acknowledgment packet):用于确认收到的LSA。

OSPF路由计算

OSPF协议路由的计算过程可简单描述如下:
1.建立邻接关系。两端设备通过以下步骤建立邻接关系:
本端设备通过接口向外发送Hello报文与对端设备建立邻居关系。
两端设备进行主/从关系协商和DD报文交换。
两端设备通过更新LSA完成链路数据库LSDB的同步。

2.路由计算。OSPF采用SPF(Shortest Path First)算法计算路由,可以达到路由快速收敛的目的。

状态机

在OSPF网络中,为了交换路由信息,邻居设备之间首先要建立邻接关系,邻居(Neighbors)关系和邻接(Adjacencies)关系是两个不同的概念:
- 邻居关系:OSPF设备启动后,会通过OSPF接口向外发送Hello报文,收到Hello报文的OSPF设备会检查报文中所定义的参数,如果双方一致就会形成邻居关系,两端设备互为邻居。
- 邻接关系:形成邻居关系后,如果两端设备成功交换DD报文和LSA,才建立邻接关系。

邻居和邻接状态是通过OSPF状态机表现的:
OSPF路由计算

状态机含义
Down初始阶段,一旦接收到其它设备发出的Hello包则立即进入下一阶段。
Attempt尝试阶段,这个状态只在NBMA网络中出现。(一般不存在)在此状态下,路由器主动尝试与其它路由器建立邻居关系。
Init初始化,一旦接收到RID,我方RID则进入到下一阶段。
2-way双向通讯,邻居关系建立的标志
ExStart预启动,使用不携带数据库目录的DBD包,进行评价关系的选举。如果DR优先级相等,则Router ID大者胜出。
目的在于对DBD包进行排序,避免更新量在同一时间内激增。
Exchange准交换,使用DBD包进行数据库目录信息的交换
Loading加载,基于接收的数据库目录和本地对比,然后基于本地未知的LSA信息,使用LSR来进行查询,对端使用LSU来应答,需要本地最后LSAck确认。
目的在于获取本地未知的LSA信息。
Full转发,邻接关系建立的标志

OSPF工作流程

建立邻居关系

Init

  1. R1的一个连接到广播类型网络的接口上激活了OSPF协议,并发送了一个Hello报文。
    此时,R1不确定DR是哪台路由器(DR=0.0.0.0),也不确定邻居是哪台设备(Neighbors Seen=0)。
  2. R2收到R1发送的Hello报文后,发送一个Hello报文回应给R1,并且在报文中的Neighbors Seen字段中填入R1的Router ID(Neighbors Seen=1.1.1.1),表示已收到DeviceA的Hello报文,并且宣告DR路由器是R2(DR=2.2.2.2),然后R2的邻居状态机置为Init。
  3. R1收到R2回应的Hello报文后,将邻居状态机置为2-way状态。

主/从关系协商、DD报文交换

2-way

  1. 邻居状态机从2-way转为Exstart状态后开始主从关系选举:
    • R1向R2发送的第一个DD报文内容为空,其Seq序列号假设为X。
    • R2也向R1发出第一个DD报文,其Seq序列号假设为Y。
    • 选举主从关系的规则是比较Router ID,越大越优。R2的Router ID比R1大,因此R2成为真正的主设备。主从关系比较结束后,R1的状态从Exstart转变为Exchange。
  2. R1邻居状态变为Exchange后,R1发送一个新的DD报文,包含自己LSDB的描述信息,其序列号采用主设备R2的序列号。R2收到后邻居状态从Exstart转变为Exchange。
  3. R2向R1发送一个新的DD报文,包含自己LSDB的描述信息,序列号为Y+1。
  4. R1作为从路由器需要对主路由R2发送的每个DD报文进行确认,回复报文的序列号与主路由R2一致。
  5. 发送完最后一个DD报文后,R1将邻居状态切换为Loading

LSDB同步

full

  1. R1收到最后一个DD报文后,发现R2的数据库中有许多LSA是自己没有的,将邻居状态机改为Loading状态。
    此时R2也收到了R1的最后一个DD报文,但R1的LSA,R2都已经有了,不需要再请求,所以直接将R1的邻居状态机改为Full状态。
  2. R1发送LSR报文向R2请求更新LSA。DeviceB用LSU报文来回应R1的请求。R1收到后,发送LSAck报文确认。
    当设备交换完DD报文并更新所有的LSA后,此时邻接关系建立完成(Full)。

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

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

相关文章

C++的list容器->基本概念、构造函数、赋值和交换、大小操作、插入和删除、数据存取、反转和排序、排序案例

#include<iostream> using namespace std; #include <list> //list容器构造函数 void printList(const list<int>& L) { for (list<int>::const_iterator it L.begin(); it ! L.end(); it) { cout << *it << "…

Unix与Linux区别

目录 历史和所有权 内核 发行版 开源性质 用户群体 命令行界面 历史和所有权 Unix&#xff1a; Unix是一个操作系统家族的名称&#xff0c;最早由贝尔实验室&#xff08;Bell Labs&#xff09;的肖像电机公司&#xff08;AT&T&#xff09;开发。最早的Unix版本是在19…

如何在MATLAB中创建一个矩阵?如何在MATLAB中执行矩阵运算?如何在MATLAB中绘制图形?

如何在MATLAB中创建一个矩阵&#xff1f; 在MATLAB中创建一个矩阵有多种方法。以下是一些常见的方法&#xff1a; 直接输入矩阵元素&#xff1a; 你可以直接在MATLAB命令窗口中输入矩阵的元素&#xff0c;每个元素之间用空格或逗号分隔&#xff0c;不同行之间用分号分隔。 A …

研究生摆烂摆烂的一个寒假

寒假&#xff1a;27-24&#xff0c;不到一个月 刚回家&#xff0c;不想学习&#xff0c;摆烂 想学了&#xff0c;又过年了&#xff0c;于是又开摆 又想学了&#xff0c;家里面有有点小事&#xff0c;于是又开摆 摆完&#xff0c;没想到就返校啦 期末作业没完成&#xff08…

C++ sort函数中自定义比较函数并传入变量、类的成员变量

在vector排序时候&#xff0c;有时候需要自定义排序&#xff0c;这个教程网上也很多&#xff0c;但是一般都是只使用了vector元素内部的变量&#xff0c;这里给出传入变量的实例代码 float camera_param_cx camera_param_cx_;float same_traffic_light_max_area same_traffic…

【深入理解设计模式】原型设计模式

原型设计模式 原型设计模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许通过复制已有对象来创建新对象&#xff0c;而无需直接依赖它们的具体类。这种模式通常用于需要频繁创建相似对象的场景&#xff0c;以避免昂贵的创建操作或初始化过…

【办公类-16-10-02】“2023下学期 6个中班 自主游戏观察记录(python 排班表系列)

背景需求&#xff1a; 已经制作了本学期的中4班自主游戏观察记录表 【办公类-16-10-01】“2023下学期 中4班 自主游戏观察记录&#xff08;python 排班表系列&#xff09;-CSDN博客文章浏览阅读398次&#xff0c;点赞10次&#xff0c;收藏3次。【办公类-16-10-01】“2023下学…

Stable Diffusion 3的到来巩固了 AI 图像对抗 Sora 和 Gemini 的早期领先优势

Stability AI 将其更改为 Stable Diffusion 3。VentureBeat 报道称&#xff0c;Stability AI 的下一代旗舰 AI 图像生成模型将使用类似于 OpenAI 的 Sora 的扩散变压器框架。其当前模型仅依赖于扩散架构。虽然尚未发布&#xff0c;但您可以在等候名单中注册。 官方网址链接&am…

编程笔记 Golang基础 022 数组

编程笔记 Golang基础 022 数组 一、数组定义和初始化二、访问数组元素三、遍历数组四、数组作为参数六、特点七、注意事项 在Go语言中&#xff0c;数组是一种基本的数据结构&#xff0c;用于存储相同类型且长度固定的元素序列。 一、数组定义和初始化 // 声明并初始化一个整数…

Vue源码系列讲解——生命周期篇【三】(initLifecycle)

目录 1. 前言 2. initLifecycle函数分析 3. 总结 1. 前言 在上篇文章中&#xff0c;我们介绍了生命周期初始化阶段的整体工作流程&#xff0c;以及在该阶段都做了哪些事情。我们知道了&#xff0c;在该阶段会调用一些初始化函数&#xff0c;对Vue实例的属性、数据等进行初始…

Linux:Jenkins:GitLab+Maven+Jenkins的部署

1.环境 我这里准备了三台centos7 1.用于部署gitlab 运行内存&#xff1a;6G 名字&#xff1a;Jenkins-GitLab 192.168.6.1 2.用于部署jenkins 运行内存&#xff1a;2G 名字&#xff1a;Jenkins-server 192.168.6.2 3.用于打包测试…

【YOLO系列算法人员摔倒检测】

YOLO系列算法人员摔倒检测 模型和数据集下载YOLO系列算法的人员摔倒检测数据集可视化数据集图像示例&#xff1a; 模型和数据集下载 yolo行人跌倒检测一&#xff1a; 1、训练好的行人跌倒检测权重以及PR曲线&#xff0c;loss曲线等等&#xff0c;map达90%多&#xff0c;在行人跌…

招联金融VS兴业消金:洞察排头兵背后的秘密

来源 | 镭射财经&#xff08;leishecaijing&#xff09; 持牌消金历经十年浮沉&#xff0c;行业座次结构化调整加剧&#xff0c;但排头兵始终稳固如初。其中&#xff0c;招联金融和兴业消金长期位居榜首&#xff0c;以风向标姿态引领消金行业发展趋势。 从基因来看&#xff0…

【每日前端面经】2023-02-23

题目来源: 牛客 企业级开发整体流程有哪些 项目启动需求调研->需求文档系统设计->设计文档程序开发->开发文档BUG测试->测试文档验收维护 遇到技术难题怎么办 分析可能出现的原因查找搜索引擎寻问文心一言等对话模型打断点&#xff0c;寻找问题复现再一次归纳分…

.net6 webapi log4net完整配置使用流程

前置&#xff1a;为项目安装如下两个依赖 1.创建文件夹cfgFile 2.创建log4net.Config <?xml version"1.0" encoding"utf-8" ?> <log4net><appender name"ConsoleAppender" type"log4net.Appender.ConsoleAppender"…

月之暗面:Moonshot AI接口总结

前言&#xff1a; 开发者们只需访问 platform.moonshot.cn&#xff0c;便能创建自己的 API Key&#xff0c;进而将 Kimi 智能助手背后的同款 moonshot 模型能力&#xff0c;如长文本处理和出色的指令遵循等&#xff0c;集成至自己的产品中。这不仅增强了现有产品的功能&#x…

OkHttp 相关问题

1、OkHttp请求整体流程是怎么样? ​ Request-》OkHttpClient-》RealCall 同步 -》 在调用线程 执行五大拦截器 异步 -》 使用分发器将任务在线程池执行 五大拦截器 ---首先AsyncCall --加到等待队列readyAsyncCalls--》判断host有没有 已经存在。有,就赋值原来的。(reuseC…

docker安装及使用说明

docker安装及使用说明 Docker安装Windows版本Linux版本 Docker 使用 如果已经正确安装了docker&#xff0c;在日常使用中&#xff0c;关于常用命令和一些使用技巧可参考文章 [docker常用命令] Docker安装 Windows版本 微软要求 Windows 10 版本 2004 及更高版本&#xff08;内…

大离谱!AI写作竟让孔子遗体现身巴厘岛,看完笑不活了

大家好&#xff0c;我是二狗。 这两天我在知乎上看到了一个AI写作大翻车的案例&#xff0c;看完简直笑不活了&#xff0c;特地分享给大家一起 happy happy&#xff5e; 知乎网友“打开盒子吓一跳”一上来就抛出来了一个“孔子去世”的王炸。 首先&#xff0c;下面是一条真实新…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的犬种识别系统(附完整代码资源+UI界面+PyTorch代码)

摘要&#xff1a;本文介绍了一种基于深度学习的犬种识别系统系统的代码&#xff0c;采用最先进的YOLOv8算法并对比YOLOv7、YOLOv6、YOLOv5等算法的结果&#xff0c;能够准确识别图像、视频、实时视频流以及批量文件中的犬种。文章详细解释了YOLOv8算法的原理&#xff0c;并提供…