关于OSPF报文学习

目录

一.OSPF学习补充

(1)OSPF报文头部

(2)ospf建立邻居关系

1.Hello报文——建立邻居关系

2.hello报文头部

(3)OSPF建立邻接关系

1.发送DD报文

2.DD报文头部

(4)关于DR,BDR

二.OSPF计算路由

(1).OSPF协议有以下4个步骤

2.router LSA

(1)一类LSA报文头部

(2)一类报文中类型

3.network LSA

三.路由计算

(1).SPF树计算

(2)根据开销计算出最佳路由


在动态路由协议——OSPF_ospf主从选举-CSDN博客中我们学习了OSPF路由协议基础,这里就以有基础来进行讲解

一.OSPF学习补充

(1)OSPF报文头部

version——OSPF的版本号,IP v4是v2,IP v6是v3 

Type——传输报文的类型

router id ———路由器的唯一标识

area id ——OSPF的区域号,0是骨干区域,非0是非骨干区域

checksum——校验报文完整性

auth type 和 authentication——都是认证

(橘色是对邻居关系建立影响大的字段)

(2)ospf建立邻居关系

1.Hello报文——建立邻居关系

1.R1先发出Hello报文,此时他的邻居是空的,并没有学习到任何邻居状态,是Down状态

2.R2发出Hello报文,邻居为空,R1知道有R2这个邻居,但R2不知道R1,现在的状态是Init

3.R2发出Hello报文,邻居已经有R1的地址,此时R1和R2知道彼此的存在,并且知道对方知道自己,邻居关系建立完成,为2-WAY

2.hello报文头部

network mask——掩码

hello interval ——hello报文以10S为周期发送,表示周期发送时间

options——8bit位,现在需要学习的只有3位——

E  ------是否支持外部路由  MC——是否支持组播(OSPF是以组播形式发送)   NIP ——是否为特殊区域(stub ,nssa,后面会学习)

routerdead interval——死亡时间(一般40s没有收到hello报文就认为邻居关系结束)

DR——表示谁是DR

BDR——表示谁是备份DR(关于BDR,DR在之前的文章有)

neighbor——邻居表

自此,邻居关系建立成功

(3)OSPF建立邻接关系

1.发送DD报文

1.从设备发出DD报文,刚开始都认为自己是主设备,M=1表示是主设备,MS=1表示后面还有DD报文。

2.双方都发出DD报文,现在是ExStart状态。

3.现在已经选举出主从,由从设备R1率先发出LSDB摘要。

4.R2后发LSDB摘要,此时是exchange(交换)状态

5.确定交换LSDB报文,此时是Loading 状态

2.DD报文头部

MTU——不分片下能接收的最大报文长度,要求建立邻接关系两边一样,否则就丢弃

I——I=1,表示传输的是第一个DD报文

M——M=1 ,就是主设备

MS—MS=1表示还有DD报文要传输

3.同步LSDB

在之前的OSPF基础的文章中有关于LSR,LSU,LSACK的介绍,我门要知道这三个报文是一组的,一条一条请求LSDB表中的LSA信息。

(4)关于DR,BDR

1.DR,BDR是非抢占式的,新添一条设备优先级高也不改变DR 设备

2DR,BDR是基于接口

二.OSPF计算路由

(1).OSPF协议有以下4个步骤

1.建立邻居关系

2,建立邻接关系

3.计算路由——数据核心补充内容

4.生成路由——数据核心补充内容

(2)LSA类型

1.LAS报文头部

这里我们着重学习三元组——包括

LS Type——LSA类型

LINK State id——链路状态IP地址

advertising  router——通告路由器的IP地址

2.router LSA

一类LSA,记录链路状态和开销,包含路由信息和拓扑信息。在区域内防洪

(1)一类LSA报文头部

V——表示虚连接,为了使没有和DR连接的设备也能加入到OSPF学习当中

E——表示外部路由引入,ASBR,是外部路由就设为1

B——区域间路由器,为ABR,是的话设为1

(2)一类报文中类型

不同连接状态(type )有不同的id 和data

这里要了解到P2P与STUBNET是一起出现,STUBNET是关于网段信息,P2P是物理连接,

transnet只有拓扑信息,没有掩码信息,不完整,就有了二类LSA

3.network LSA

计算DR网段

1.报文头部

包含接口IP地址,掩码,和与之连接的邻居路由器的IP地址,与transnet一起组成拓扑和路由信息

三.路由计算

(1).SPF树计算

1.以自己为根,查找一类LSA,找出除网段信息的IP地址加入候选表,比较开销和优先级选出地址,就是DR设备,加入SPF树

2,根据选出的DR设备查找二类LSA,找出IP地址信息加入候选列表,比较开销和优先级选出地址,加入SPF树

3.根据新选出的设备查找一类LSA表,IP地址加候选列表,选出最佳的。

4.根据选出的DR查二类LSA表,一样的步骤选出下一个节点

。。。。。

5.直到候选列表没有信息,如果有还没有添加的router id就加到对应的节点上。

6.加叶子,将网段信息加入树的节点中。

(2)根据开销计算出最佳路由

这里要注意一点,OSPF的最佳路由不是都会出现在最终的路由表中,例如:OSPF  的路由与直连都可以到达一个目的IP,那么一定会选择优先级高的直连,那么opsF就不会出现在最终的路由表里。

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

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

相关文章

pyqt QSplitter控件

pyqt QSplitter控件 QSplitter控件效果代码 QSplitter控件 PyQt中的QSplitter控件是一个强大的布局管理器,它允许用户通过拖动边界来动态调整子控件的大小。这个控件对于创建灵活的、用户可定制的用户界面非常有用。 QSplitter控件可以水平或垂直地分割其包含的子…

Bytebase 2.16.0 - 支持 Oracle 和 SQL Server DML 变更的事前备份

🚀 新功能 支持 Oracle 和 SQL Server DML 变更的事前备份。 支持在 SQL 编辑器中显示存储过程和函数。 支持兼容 TDSQL 的 MySQL 和 PostgreSQL 版本。 支持把数据库密码存储在 AWS Secrets Manager 和 GCP Secret Manager。 支持通过 IAM 连接到 Google Clou…

目标检测与追踪AI算法模型及边缘计算智能分析网关V4的算法应用

目标检测与追踪是计算机视觉领域中的一个重要任务,主要用于识别图像或视频中的目标,并跟踪它们的运动轨迹。针对这一任务,有许多先进的AI算法模型,例如: YOLO(You Only Look Once):…

分布式版本控制系统——Git

分布式版本控制系统——Git 一、Git安装二、创建版本库三、将文件交给Git管理四、Git的工作区和暂存区1.工作区(Working Directory)2.版本库 五、版本回退和撤销修改1.版本回退2.撤销修改 六、删除文件七、常用基础命令总结八、参考 分布式版本控制系统&…

Qt应用程序直接在没有环境的windows系统电脑上运行

参考:QT 发布应用程序 在没有安装QT的电脑上运行程序 文章目录 创建一个空的文件夹test将可执行程序exe拷贝到test打开对应qt命令行输入 windeployqt e:\test\exename.exe 创建一个空的文件夹test 将可执行程序exe拷贝到test 打开对应qt命令行 输入 windeployqt e:…

Docker共享Nginx配置文件

先去一个容器中,找到Nginx.conf配置文件的目录 去创建一个容器,将容器中存放nginx.conf的目录挂载到宿主机存放nginx.conf目录上 去宿主机中找到nginx/html/index.html目录位置 进入宿主机的index.html中修改页面内容 curl 192.168.91.106访问一下 进入…

小项目-词法分析器

小项目-词法分析器 1.理论 一个完整的编译器,大致会经历如下几个阶段 各个阶段的职责,简单描述如下: 词法分析:对源文件进行扫描,将源文件的字符划分为一个一个的记号(token) (注:类似中文中的分词)。 语…

Eagle for Mac:强大的图片管理工具

Eagle for Mac是一款专为Mac用户设计的图片管理工具,旨在帮助用户更高效、有序地管理和查找图片资源。 Eagle for Mac v1.9.2中文版下载 Eagle支持多种图片格式,包括JPG、PNG、GIF、SVG、PSD、AI等,无论是矢量图还是位图,都能以清…

EasyRecovery数据恢复软件2025激活码及下载使用步骤教程

EasyRecovery数据恢复软件是一款功能强大且用户友好的数据恢复工具,专为帮助用户找回因各种原因丢失的数据而设计。该软件由全球知名的数据恢复技术公司开发,经过多年的技术积累和更新迭代,已经成为行业内备受推崇的数据恢复解决方案。 EasyR…

【定制化体验:使用Spring Boot自动配置,打造个性化Starter】

项目结构 Pom <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4…

SpringBoot---------整合Redis

目录 第一步&#xff1a;引入依赖 第二步&#xff1a;配置Redis信息 第三步&#xff1a;选择Spring Data Redis进行操作Redis数据库 ①操作String类型数据&#xff08;用的少&#xff09; ②操作Object类型数据&#xff08;重要&#xff01;&#xff01;&#xff01;&#x…

[iOS]使用CocoaPods发布私有库

1.创建私有 Spec 仓库 首先&#xff0c;需要一个私有的 Git 仓库来存放你的 Podspec 文件&#xff0c;这个仓库用于索引你所有的私有 Pods。 在 GitHub 或其他 Git 服务上创建一个新的私有仓库&#xff0c;例如&#xff0c;名为 PrivatePodSpecs。克隆这个仓库到本地&#xf…

AI大模型探索之路-训练篇2:大语言模型预训练基础认知

文章目录 前言一、预训练流程分析二、预训练两大挑战三、预训练网络通信四、预训练数据并行五、预训练模型并行六、预训练3D并行七、预训练代码示例总结 前言 在人工智能的宏伟蓝图中&#xff0c;大语言模型&#xff08;LLM&#xff09;的预训练是构筑智慧之塔的基石。预训练过…

Docker基本操作 容器相关命令

docker run:运行镜像; docker pause:暂停容器&#xff0c;会让该容器暂时挂起&#xff1b; docker unpauser:从暂停到运行; docker stop:停止容器&#xff0c;杀死进程; docker start:重新创建进程。 docker ps&#xff1a;查看所有运行的容器及其状态&#xff0c;默认只展…

JavaScript创建和填充数组的更多方法

空数组fill()方法创建并填充数组 ● 我们之前创建数组的方式都是手动去创建去一个数据&#xff0c;例如 console.log([1, 2, 3, 4, 5, 6, 7]);● 当然我们也可以使用Array对象来构造数组 console.log([1, 2, 3, 4, 5, 6, 7]); console.log(new Array(1, 2, 3, 4, 5, 6, 7));…

python生成二维码及进度条源代码

一、进度条 1、利用time模块实现 import time for i in range(0, 101, 2):time.sleep(0.3)num i // 2if i 100:process "\r[%3s%% ]: |%-50s|\n" % (i, # * num)else:process "\r[%3s%% ]: |%-50s|" % (i, # * num)print(process, end, flushTrue)2、使…

tcp服务器端与多个客户端连接

如果希望Tcp服务器端可以与多个客户端连接&#xff0c;可以这样写&#xff1a; tcpServernew QTcpServer(this);connect(tcpServer,SIGNAL(newConnection()),this,SLOT(onNewConnection())); void MainWindow::onNewConnection() {QTcpSocket *tcpSocket;//TCP通讯的Sockettcp…

陪丨玩丨系丨统前后端开发流程,APP小程序H5前后端源码交付支持二开!多人语音,开黑,线上线下两套操作可在一个系统完成!

100%全部源码出售 官网源码APP源码 管理系统源码 终身免费售后 产品免费更新 产品更新频率高 让您时刻立足于行业前沿 软件开发流程步骤及其作用&#xff1a; 软件开发是一个复杂而系统的过程&#xff0c;涉及多个环节&#xff0c;以下是软件开发的主要流程步骤及其作用…

leetCode60. 排列序列

leetCode60. 排列序列 方法一:语法版&#xff0c;面试官不认可的方法&#xff1a;next_permutation函数 // 方法一&#xff1a;使用next_permutation函数&#xff0c;将某容器设置为当前按照字典序 // 的下一个全排列的内容 class Solution { public:string getPermutation(in…