OSPF的数据报文格式【复习篇】
OSPF协议是跨层封装的协议(跨四层封装),直接将应用层的数据封装在网络层协议之后,IP协议包中协议号字段对应的数值为89
OSPF的头部信息:
所有的数据共有的信息字段


| 字段名 | 描述 |
|---|---|
| 版本 | 当前OSPF进程使用的版本(IPv4一般使用OSPFv2 ,所以版本呢号一般为2) |
| 类型 | OSPF数据包的类型 hello包:1 DBD包:2 LSR包 :3 LSU包:4 LSACK包:5 |
| 报文长度 | 该数据包的完整长度 |
| 路由器ID | 发送该数据包者的RID |
| 区域ID | 数据包被发出的区域 |
| 校验和 | 验证数据完整性 |
| 验证类型 | OSPF认证时,认证方式 null :不认证 —— 0 simple:明文认证 —— 1 MD5:比对md5摘要值认证 —— 2 |
| 认证数据 | 具体的认证数据(如果验证类型为null,则为空) |
OSPF在进行认证时,需要比对两部分数据:认证类型,认证数据(只有两者都匹配才会通过认证)
HELLO包
周期性的发现,建立和保活邻居关系还会影响保活


| 字段名 | 描述 |
|---|---|
| 网络掩码 | 接口激活后开始发送hello包,这个接口配置的ip地址的掩码信息 华为设备要求:邻居之间hello包中携带的子网掩码必须相同,不同则无法建邻(只针对以太网接口检测,对p2p没有限制) |
| Hello间隔 | 即hello时间 |
| 8位可选项 | 每个比特都表示路由器所携带的某些OSPF特性 可选项中包含了OSPF特殊区域的标记,所以也会影响建邻 |
| 路由优先级 | 发出接口在选举 DR/BDR 时的优先级 |
| 路由失效时间 | 即死亡时间 |
| 指定路由器/备份指定路由器 | 在DR/BDR选举结束后,会将DR/BDR的ip信息携带在此字段(选举之前用0.0.0.0填充) |
| 邻居 | 本地已知的邻居ID(建邻的重要条件) |
hello包限制建邻的条件
- 网络掩码(对以太网接口)
- hello时间
- 死亡时间
- ospf的特殊区域标记
- 认证
DBD包
进行主从关系选举(为携带数据的DBD包),携带LSDB(链路状态数据库)摘要信息
在主从选举中的作用:
- 为主可以优先进行LSA信息的交换
- 为主可以主导DBD包的隐性确认


| 字段 | 描述 |
|---|---|
| 接口最大传输单元(MTU) | 默认为0 (华为设备默认不开启MTU值的检测功能) 如果邻居的该字段不一致,则导致停留在 exstart |
| 8位可选项 | 同hello包的一致,看上文即可 |
| I (init) | 为一 :该数据包是在主从关系选举的数据包 |
| M(more) | 为一:后续还有更多的数据包;为零:该DBD包是最后一个DBD包 |
| MS(master) | 为一:则发送DBD的设备为主 在主从关系还未选出时,邻居双方都会将自己的MS位为1,认为自己是主,选举完成后,只有主置为1 |
| DD的序列号 | 在DBD报文交互过程中,会逐次加一,用于确保DBD包传输的有序性和可靠性 DBD包的确认机制是通过序列号实现隐性确认,而通过LSACK数据包确认的方法称为显性确认 隐性确认:为主的设备发送DBD包,其中包含了一个 ‘序列号’ , “从设备” 收到该数据包后将使用该序列号回复DBD包,起到确认的作用 |
| LSA 头部信息 | 不是完整的LSA,是LSA信息的摘要 |
LSR
基于DBD包中的摘要信息,和本地的LSDB比对,再要求未知的LSA信息


LSA的三元组,可以唯一的标识一条LSA
LSU
链路状态跟新报文,携带LSA的数据包


携带每条LSA的具体信息
LSACK
确认收到LSU包


通过LSA的头部进行确认
相关文章:
OSPF的数据报文格式【复习篇】
OSPF协议是跨层封装的协议(跨四层封装),直接将应用层的数据封装在网络层协议之后,IP协议包中协议号字段对应的数值为89 OSPF的头部信息: 所有的数据共有的信息字段 字段名描述版本当前OSPF进程使用的版本(…...
[leetcode]查询区间内的所有素数
一.暴力求解 #include<iostream> #include<vector> using namespace std; vector<int> result; bool isPrime(int i) { if (i < 2) return false; for (int j 2;j * j < i;j) { if (i % j 0) { …...
【力扣刷题实战】Z字形变换
大家好,我是小卡皮巴拉 文章目录 目录 力扣题目:Z字形变换 题目描述 解题思路 问题理解 算法选择 具体思路 解题要点 完整代码(C) 兄弟们共勉 !!! 每篇前言 博客主页:小卡…...
【RK3588 嵌入式图形编程】-SDL2-扫雷游戏-添加地雷到网格
添加地雷到网格 文章目录 添加地雷到网格1、概述2、更新Globals.h3、在随机单元格中放置地雷4、更新单元格以接收地雷5、渲染地雷图像6、开发助手7、完整代码8、总结在本文中,我们将更新游戏以在网格中随机放置地雷,并在单元格被清除时渲染它们。 1、概述 在我们扫雷游戏教程…...
Fortran 中读取 MATLAB 生成的数据文件
在 Fortran 中读取 MATLAB 生成的数据文件,可以通过以下几种方法实现,包括使用开源工具和手动解析: 1. 使用开源工具:MATFOR MATFOR 是一个商业/开源混合工具(部分功能免费),提供 Fortran 与 M…...
Kubernetes 入门篇之网络插件 calico 部署与安装
在运行kubeadm init 和 join 命令部署好master和node节点后,kubectl get nodes 看到节点都是NotReady状态,这是因为没有安装CNI网络插件。 kubectl get nodes NAME STATUS ROLES AGE VERSION k8s-master Not…...
力扣题解:142. 环形链表 II
在链表学习中,我们已经了解了单链表和双链表,两者的最后一个结点都会指向NULL;今天我们介绍的循环列表则不同,其末尾结点指向的这是链表中的一个结点。 循环链表是一种特殊类型的链表,其尾节点的指针指向头节点&#…...
latex模板文件
LaTeX 是一款广泛应用于学术领域的文档排版系统,尤其以其在数学公式、科学符号和复杂技术文档排版中的强大能力著称。虽然它本身并非专门的“数学软件”,但在处理数学相关内容时表现尤为出色。 1. LaTeX 的核心特点 数学公式支持ÿ…...
BLE 协议栈事件驱动机制详解
在 BlueNRG-LP 等 BLE 系统中,事件驱动是控制状态转移、数据交互和外设协作的基础。本文将深入讲解 BLE 协议栈中事件的来源、分发流程、处理结构与实际工程实践策略,帮助你构建稳定、可维护的 BLE 系统。 📦 一、BLE 事件的来源分类 BLE 协议栈中的事件严格来自协议栈本身…...
Rust 之四 运算符、标量、元组、数组、字符串、结构体、枚举
概述 Rust 的基本语法对于从事底层 C/C 开发的人来说多少有些难以理解,虽然官方有详细的文档来介绍,不过内容是相当的多,看起来也费劲。本文通过将每个知识点简化为 一个 DEMO 每种特性各用一句话描述的形式来简化学习过程,提高学…...
fuse-python使用fuse来挂载fs
winfsp 安装winfsp,https://winfsp.dev/ fusepy python安装fusepy #!/usr/bin/env python3 import os import stat from fuse import FUSE, FuseOSError, Operationsclass Passthrough(Operations):def __init__(self, root):self.root root# 辅助函数:将挂载点…...
基于ueditor编辑器的功能开发之增加自定义一键排版功能
用户有自己的文章格式,要求复制或者粘贴进来的文章能够一键排版,不需要手动调试 这个需求的话咱们就需要自己去注册一个事件啦,这里我没有修改源码,而是在编辑器初始化之后给他注册了一个事件 我的工具列表变量 vue组件中data中…...
内核态切换到用户态
内核态切换到用户态 是操作系统中 CPU 执行模式的一种切换过程,涉及从高权限的内核态(Kernel Mode)切换到低权限的用户态(User Mode)。以下是详细解释: 1. 什么是内核态和用户态? 内核态&#…...
win10离线环境下配置wsl2和vscode远程开发环境
win10离线环境下配置wsl2和vscode远程开发环境 环境文件准备wsl文件准备vscode文件准备 内网环境部署wsl环境部署vscode环境部署 迁移后Ubuntu中的程序无法启动 环境 内网机:win10、wsl1 文件准备 wsl文件准备 在外网机上的wsl安装Ubuntu24.04,直接在…...
AWS弹性容器服务(AWS Elastic Container Service,ECS)概述
李升伟 编译 标签:AWS | ECS | 容器 | Docker AWS弹性容器服务(AWS Elastic Container Service,ECS)简介 AWS弹性容器服务(ECS)是一项完全托管的容器编排服务,支持运行、管理和扩展容器化应用…...
Redis过期key处理、内存淘汰策略与缓存一致性策略实践方案
在现代的高性能应用开发中,Redis作为一款极为热门的内存数据库,其快速的读写性能和丰富的数据结构使其在缓存、消息队列等诸多领域得到了广泛应用。然而,在实际使用过程中,处理好Redis过期key、选择合适的内存淘汰策略以及确保缓存…...
@linux系统SSL证书转换(Openssl转换PFX)
在Linux中,你可以使用OpenSSL工具将PFX/P12格式的证书转换为单独的CRT(证书)、KEY(私钥)文件以及提取证书链 1. 提取私钥文件(.key) openssl pkcs12 -in your_certificate.pfx -nocerts -out private.key -nodes系统会…...
工业制造各个系统术语
简单总结下 文章目录 MES:制造执行系统ERP:企业资源计划PLM:产品生命周期管理MRP:物资需求计划QMS:质量管理系统APS:高级计划与排程SRM:供应商关系管理SCM:供应链管理CRM:客户关系管理WMS:仓库管理系统TMS:运输管理系统PMS:生产管理系统LES:物流执行系统FICO:财务与成本控制模块…...
深入解析:Python爬取Bilibili视频的技术创新与高阶实践
一、技术背景与挑战 Bilibili(B站)作为中国最大的泛二次元文化社区,其视频内容防护机制持续升级,传统爬虫技术面临三大核心挑战:动态加密参数、音视频分离存储、反爬策略多样化。本文提出一套融合AIGC辅助分析的智能爬…...
VS Code Markdown渲染配置
VS code markdown preview enhanced插件渲染配置 mac: commandshiftP命令输入Markdown Preview Enhanced: Customize CSS,并点击在打开的style.less配置文件添加一下配置 /* Please visit the URL below for more information: */ /* https://shd101wyy.github.…...
gcc -Wno-cpp
-Wno-cpp 是一个 GCC(GNU 编译器) 的编译选项,用来控制对 #warning 或 #error 指令中 # 注释的警告显示。 🌟 简单解释: 在 C/C 代码中,有时候我们会看到这样的宏定义或注释: #warning This f…...
数据结构篇:线性表的另一表达—链表之单链表(上篇)
目录 1.链表的引入 1.1 链表的概念 1.2 next的意义 2.链表的分类 3.单链表的实现 3.1 单链表实现接口 3.1.1 插入节点函数封装 3.1.2 尾插 3.1.3 头插 3.1.4 报错的根本问题 3.1.5 头删 3.1.6 尾删 4.小结 1.链表的引入 根据顺序表的一些缺陷…...
SpringBoot企业级开发之【用户模块-获取用户详细信息】
接口文档的要求: 了解一下token令牌头是怎么用的 我们直接放到前端交互的controller类下,在声明的方法中加入参数为String token且加入注解RequestHeader(name"Authorization【你自己设定的token】") 设计思路: 实战开发: control…...
Mockito如何对静态方法进行测试
在 Mockito 中,直接对静态方法进行模拟是困难的,因为 Mockito 的设计理念是优先通过依赖注入(DI)管理对象,而静态方法破坏了这种设计(难以解耦)。不过,从 Mockito 3.4.0 版本开始,通过 mockStatic 方法支持了对静态方法的模拟(需配合 mockito-inline 依赖)。 从 Mo…...
患者根据医生编号完成绑定和解绑接口
医疗系统接口文档 一、Controller 层 1. InstitutionDoctorController 医疗机构和医生相关的控制器,提供机构查询、医生查询、绑定解绑医生等功能。 RestController RequestMapping("/institution-doctor") public class InstitutionDoctorController…...
Navicat 17 for Mac 数据库管理
Navicat 17 for Mac 数据库管理 一、介绍 Navicat Premium 17 for Mac是一款专业的数据库管理工具,适用于开发人员、数据库管理员和分析师等用户。它提供了强大的数据管理功能和丰富的工具,使用户能够轻松地管理和维护数据库,提高数据处理效…...
面试如何应用大模型
在面试中,如果被问及如何应用大模型,尤其是面向政务、国有企业或大型传统企业的数字化转型场景,你可以从以下几个角度进行思考和回答: 1. 确定应用大模型的目标与痛点 首先,明确应用大模型的业务目标,并结合企业的实际需求分析可能面临的痛点。这些企业通常会关注如何提…...
grok 驱动级键盘按键记录器分析
grok是一个驱动模块,其主要功能就行进行键盘按键及剪切板数据的记录,也就是一个键盘记录器。实现原理是通过对shadow-ssdt的相关函数进行hook,和r3对GetUserMessage进行hook的原理差不多。 关键部分如下: 查找csrss.exe进程是否已经启动&…...
MyBatis中特殊符号处理总结
前言 MyBatis 是一款流行的Java持久层框架,广泛应用于各种类型的项目中。因为我们在日常代码 MyBatis 动态拼接语句时,会经常使用到 大于(>,>)、小于(<,<)、不等于(<>、!)操作符号。由于此符号包含了尖括号,而 MyBatis 使用…...
【学Rust写CAD】37 premultiply 函数(argb.rs补充方法)
源码 fn premultiply(self) -> Argb {//预乘// This could be optimized by using SWARlet a self.alpha32();if a < 255 {Argb::new32(a, div255(self.red32() * a), div255(self.green32() * a),div255(self.blue32() * a))}else{self}源码分析 这个函数实现了颜色预…...
