当前位置: 首页 > news >正文

【HCIP学习】OSPF协议基础

一、OSPF基础

1、技术背景(RIP中存在的问题)

RIP中存在最大跳数为15的限制,不能适应大规模组网

周期性发送全部路由信息,占用大量的带宽资源

路由收敛速度慢

以跳数作为度量值

存在路由环路可能性

每隔30秒更新

2、OSPF协议特点

没有跳数限制,适合大规模组网

使用组播更新变化的路由和网络信息 

路由收敛快

以COST作为度量值

采用SPF算法有效避免环路

每隔30分钟更新

在互联网上大量使用,是运用最广泛的路由协议

注意:OSPF传递的是拓扑信息和路由信息,RIP传递的是路由表

3、OSPF三张表

邻居表:记录邻居状态和关系

拓扑表:链路状态数据库(LSDB)

路由表:记录由SPF算法计算的路由,存放在OSPF路由表中

4、OSPF数据包(可抓包)

OSPF报文直接封装在IP报文中,协议号89

头部数据包内容:

版本(Version):对于OSPFv2,该字段值恒为2----使用在IPV4中。对于OSPFv3,该字段值恒为3----使用在IPV6中

类型(Type):该OSPF报文的类型。该字段的值与报文类型的对应关系是:1-Hello;2-DD;3-LSR;4-LSU;5-LSAck。

报文长度(Packet Length):整个OSPF 报文的长度(字节数)。

路由器ID (Router Identification):路由器的OSPF Router-ID。

区域ID (Area Identification):该报文所属的区域ID,这是一个32bit 的数值。

校验和(Checksum):用于校验报文有效性的字段。

认证类型(Authentication Type):指示该报文使用的认证类型。

认证数据(Authentication Data):用于报文认证的内容。

(1)hello:hello包携带自己的router ID、被发现的邻居标识,用来周期保活的,发现,建立邻居关系。

网络掩码(Network Mask):一旦路由器的某个接口激活了OSPF,该接口即开始发送Hello报文,该字段填充的是该接口的网络掩码。两台OSPF 路由器如果通过以太网接口直连,那么双方的直连接口必须配置相同的网络掩码,否则影响邻居关系建立。

Hello间隔(Hello Interval):接口周期性发送Hello报文的时间间隔(单位为s)。两台直连路由器要建立OSPF邻居关系,需确保接口的Hello Interval相同,否则邻居关系无法正常建立。

可选项(Options):该字段一共8bit,每个比特位都用于指示该路由器的某个特定的OSPF 特性。Options字段中的某些比特位会被检查,这有可能会直接影响到OSPF邻接关系的建立。(特殊区域的标记)

路由器优先级(Router Priority):路由器优先级,范围:0-255,默认是1,数字越大,代表路由优先级越高,也叫DR优先级,该字段用于DR、BDR 的选举

路由器失效时间(Router Dead Interval):在邻居路由器被视为无效前,需等待收到对方Hello报文的时间(单位为s)。两台直连路由器要建立OSPF 邻居关系,需确保双方直连接口的Router Dead Interval相同,否则邻居关系无法正常建立。缺省情况下,OSPF路由器接口的Router Dead Interval为该接口的Hello Interval的4倍。

指定路由器(Designated Router):网络中DR的接口IP地址。如果该字段值为0.0.0.0,则表示没有DR,或者DR尚未选举出来。

备份指定路由器(Backup Designated Router):网络中 BDR的接口IP地址。如果该字段值为0.0.0.0,则表示网络中没有BDR,或者BDR尚未选举出来。

邻居(Neighbor)。在直连链路上发现的有效邻居,此处填充的是邻居的Router-iD,如果发现了多个邻居,则包含多个邻居字段。

(2)DBD(数据库描述报文):仅包含LSA摘要

接口最大传输单元(Interface Maximum Transmission Unit):接口的MTU。

可选项(Options):路由器支持的OSPF可选项。

DD报文置位符:

          I:init位,I=1,这是第一个DD报文

          M:more位,M=1表示后续还有DD报文

          MS:master位,MS=1,表示本端为主

DD序列号(DD Sequence Number): DD报文的序列号,在DD报文交互的过程中,DD序列号被逐次加1,用于确保DD报文传输的有序和可靠性。值得注意的是,DD序列号必须是由Master路由器来决定的,而Slave路由器只能使用Master路由器发送的DD序列号来发送自己的DD报文。(route id大的设备会成为master)

LSA头部(LSA Header):当路由器使用DD报文来描述自己的LSDB时,LSA的头部信息被包含在此处。一个DD报文可能包含一条或多条LSA的头部。

二、LSA的头部

LSA是OSPF的一个核心内容,如果没有LSA,OSPF是无法描述网络的拓扑结构及网段信息的,也无法传递路由信息,更加无法正常工作,在OSPFV2中,需要我们掌握的主要有6种。

LSA头部一共20byte,每个字段的含义如下。

链路状态老化时间(Link-State Age):指示该条LSA的老化时间,即它存在了多长时间,单位为秒,

    1800s周期归0,触发当下归0

        MAX age --- 3600S ------ 当一条LSA的老化时间到达最大老化时间时,将被认定失效,将从本地的LSDB中删除掉。

可选项(Options):每一个比特位都对应了OSPF 所支持的某种特性。 ------ 和hello包中的一样,包含特殊区域标记

链路状态类型(Link-State Type): 指示本条LSA的类型。每种 LSA用于描述OSPF 网络的某个部分,所有的LSA类型都定义了相应的类型编号。

链路状态ID(Link-State ID): LSA的标识。不同的LSA类型,对该字段的定义是不同的。

通告路由器(Advertising Router): 始发路由器, 产生该LSA的路由器的Router-ID

链路状态序列号(Link-Sate Sequence Number)

     该LSA的序列号,该字段用于判断LSA的新旧或是否存在重复

链路状态校验和(Link-State Checksum):校验和会参与LSA的新旧比较。当两条LSA三元组相同,并且序列号也相同时,则可以使用校验和比较,和大的认定为新。

长度(Length):一条LSA的总长度

三、6种类型的LSA(课堂演示)

1、type1-LSA:----重要且复杂

(1)定义:router LSA

描述区域内部与路由器直连的链路信息(链路类型、开销值等)

仅在区域内部传输

每台路由器都会产生Type1 LSA

[R1]dis ospf lsdb router  查看Type1 LSA的具体信息

(2)LS ID:发出该LSA的路由器的router-id

(3)Adv Rtr:始发路由器,产生该LSA的路由器的router-id

(4)链路ID:不同的链路类型,对链路ID值的定义是不同的。

(5)链路数据(Link Data):不同的链路类型对链路数据的定义是不同的。

(6)link-type:链路类型,描述该接口的二层类型

transnet:

类型:广播网络或者NBMA

link-id:本网段的DR的IP地址

Date:本路由器在该网段的IP地址

P2P:

类型:ppp

link-id:该网段对端路由器的router-id

Date:本路由器在该网段的与对端路由器相连的接口的IP地址

stubnet(末梢网络):

类型:p2p\环回口

link-id:该网段的网络地址

data:该网段的子网掩码

 Virtual(虚链路):

类型:虚链路

link-id:虚链路邻居的router id

data:去往该虚连接邻居的本地接口的IP地址

(7)VEB标志位(了解):

V位(Virtual Link Endpoint Bit):如果该比特位被设置为1,则表示该路由器为Virtual Link的端点。

E位(External Bit):如果E比特位被设置为1,则表示该路由器为ASBR。在Stub区域中,不允许出现E比特位被设置为1的Type-1 LSA,因此Stub区域内不允许出现ASBR。

B位(Border Bit):如果B比特位被设置为1,则表示该路由器为两个区域的边界路由器,字母B意为Border(边界)。

2、type2-LSA:

(1)定义:

network LSA

描述区域内的MA网络(广播网络、NBMA网络)链路的路由器及掩码信息

仅在区域内部传输

只有DR才会产生type2_LSA

[R1]dis ospf lsdb network  查看Type2 LSA的具体信息

(2)内容:

LS ID:该网段的DR的IP地址

Adv Rtr:该网段DR的router-id

network mask:该网段DR的IP地址的子网掩码信息

3、type3-LSA:

(1)定义:

Summary LSA(聚合LSA)

在整个OSPF区域内,描述其他区域的链路信息

以子网形式传播,类似直接传递路由

只有ABR会产生type3_LSA

[R1]dis ospf lsdb summary  查看Type3 LSA的具体信息

(2)内容:

LS ID:其他区域某个网段的网络地址

SubAdv Rtv:通告该LSA的ABR的router-id

net mask:该网段的子网掩码

注:3类LSA的传递范围在ABR相邻的单区域中进行,跨区域传递时,需要进行通告者的转换,通告者变了,则将不是同一条LSA

4、type4-LSA:

(1)定义:

Asbr-summary LSA

描述ASBR的信息

只有ABR才会产生TYPE4 LSA

(2)内容:

LS ID:ASBR的router-id

Adv Rtv:通告描述该ASBR的ABR的router-id

[R1]dis ospf lsdb asbr  查看Type4 LSA的具体信息

注:在ASBR本区域的内部路由器,不会产生到达该ASBR的4类LSA

5、type5-LSA:

(1)定义:

AS_extenal LSA,传递域外路由信息

描述AS外部引入的路由信息,会传播到所有区域(特殊区域除外)

只有ASBR才会产生type5_LSA

(2)内容:

LS ID:外部路由的目的网络地址

Adv Rtv:引入该网络路由的ASBR的ABR的router-id

net mask:引入的该目标网段的子网掩码

[R1]dis ospf lsdb ase  查看Type5 LSA的具体信息

6、type7-LSA:

(1)定义:

NSSA  LSA

描述在NSSA区域引入的AS外部路由信息

只会出现在NSSA和totolly NASS区域,不能进入area 0

7类LSA生成路由信息的标记位,O_NSSA,优先级150

(2)内容:

LS ID:外部某个网段的网络地址

Adv Rtv:引入该网络路由的ASBR的ABR的router-id

区域内传拓扑,区域间传路由

四、OSPF的网络类型

1、定义:

对于不同的二层链路类型的网段,OSPF会生成不同的网络类型

不同的网络类型,DR\BDR选举,LSA细节,协议报文发送形式等会有所不同

2、类型:

(1)NBMA(非广播多点可达网络)

非广播多点可达网,帧中继默认的网络类型

单播发送协议报文(天生不支持广播和组播),需手动指定邻居

命令:[r2-ospf-1]peer 192.168.1.1 (邻居IP地址)

需要选举DR\BDR,为了减少LSA的泛洪,减少网络负担

hello-time 是30秒,dead-time 是120秒

(2)P2MP(点到多点网络)

点到多点网络,由其他网络类型手动更改:例如在ospf接口下:ospf network-type 网络类型

模拟组播发送协议报文(帧中继建立子接口模拟组播发报文),需要手动指定邻居;

不选举DR\BDR,因为设备少,所以不选举

hello-time 是10秒,dead-time 是40秒

(3)Broadcast(广播网络)

广播网络,以太网默认的网络类型

组播发送协议报文

需要选举DR\BDR,224.0.0.5是所有运行OSPF的接口会监听,224.0.0.6是所有DR/BDR的接口会监听

hello-time 是30秒,dead-time 是120秒

(4)P2P(点到点网络)

点到点网络,ppp默认网络

组播协议发送报文

不选举DR\BDR

hello-time 是10秒,dead-time 是40秒

五、基于OSPF的MGRE实验

基于ospf的MGRE出现问题:ospf的路由表学习不全

问题1:Tunnel接口类型为P2P类型,不选举DR/BDR,使得设备无法正常建立邻接关系,

解决方法:更改网络中tunnel接口类型为广播

[R2]interface Tunnel 0/0/0

[R2-Tunnel0/0/0]ospf network-type broadcast

问题2:DR和BDR选举混乱,无法正常建邻

更改网络类型后,广播网络中中心站点和分支站点处于同一个广播域,此时需要进行DR和BDR的选举,但是在分支站点的世界里只和中心站点认识,分支站点和分支站点不认识,这就会发生多个分支站点和一个中心站点互相竞选DR和BDR,这样会造成选举结果混乱,可在中心站点看到混乱的场景                   

解决方法:将分支站点的dr选举优先级变0,这样就能保证中心站点是整个广播网络中唯一的DR

相关文章:

【HCIP学习】OSPF协议基础

一、OSPF基础 1、技术背景(RIP中存在的问题) RIP中存在最大跳数为15的限制,不能适应大规模组网 周期性发送全部路由信息,占用大量的带宽资源 路由收敛速度慢 以跳数作为度量值 存在路由环路可能性 每隔30秒更新 2、OSPF协议…...

elmentui树形表格使用Sortable拖拽展开行时拖拽bug

1、使用elemntui的el-table使用Sortable进行拖拽,如下 const el this.$el.querySelector(.el-table__body-wrapper tbody) Sortable.create(el, {onEnd: (event) > {const { oldIndex, newIndex } event//拿到更新前后的下标即可完成数据的更新} })2、但是我这…...

【笔试训练】day6

1.大数加法 思路&#xff1a; 高精度板子&#xff0c;停留一下都是罪过&#xff01; 代码&#xff1a; class Solution { public:string solve(string s, string t) {vector<int> a;vector<int> b;for(int is.size()-1;i>0;i--)a.push_back(s[i]-0);for(int …...

标准版uni-app移动端页面添加/开发操作流程

页面简介 uni-app项目中&#xff0c;一个页面就是一个符合Vue SFC规范的.vue文件或.nvue文件。 .vue页面和.nvue页面&#xff0c;均全平台支持&#xff0c;差异在于当uni-app发行到App平台时&#xff0c;.vue文件会使用webview进行渲染&#xff0c;.nvue会使用原生进行渲染。…...

VMware 安装配置 Ubuntu(最新版、超详细)

Linux 系列教程&#xff1a; VMware 安装配置 Ubuntu&#xff08;最新版、超详细&#xff09;FinalShell 远程连接 Linux&#xff08;Ubuntu&#xff09;系统Ubuntu 系统安装 VS Code 并配置 C 环境 文章目录 1. 下载安装 VMware2. 检查网络适配器3. Ubuntu 下载4. 创建虚拟机5…...

clickhouse ttl不生效

现象&#xff1a; 日志保留31天&#xff0c; 但是发现1年前的数据还有。 表结构&#xff1a; CREATE TABLEads_xxxx_metrics_1m_local (static_time String COMMENT 统计时间,......) ENGINE ReplacingMergeTree (process_time) PARTITION BYtoYYYYMMDD (toDate (static_tim…...

前端打包webpack vite

起步 | webpack 中文文档 | webpack中文文档 | webpack中文网 npm run build 1webpack: mkdir webpack-demo cd webpack-demo npm init -y npm install webpack webpack-cli --save-dev vite : 快速上手 | Vue.js...

Cesium之home键开关及相机位置设置

显隐控制 设置代码中的homeButton var TDT_IMG_C "https://{s}.tianditu.gov.cn/img_c/wmts?servicewmts&requestGetTile&version1.0.0" "&LAYERimg&tileMatrixSetc&TileMatrix{TileMatrix}&TileRow{TileRow}&TileCol{TileCol}…...

nginx根据二级目录转发服务以及带/和不带/的区别

在nginx中配置proxy_pass代理转发时&#xff0c;如果在proxy_pass后面的url加/&#xff0c;表示绝对根路径&#xff1b;如果没有/&#xff0c;表示相对路径&#xff0c;把匹配的路径部分也给代理走。具体实例如下 1.配置文件location带/且proxy_pass带/ server {listen 80;se…...

JVM 性能调优命令(jps,jinfo,jstat,jstack,jmap)

常用命令&#xff1a;jps、jinfo、jstat、jstack、jmap jps jps查看java进程及相关信息 jps -l 输出jar包路径&#xff0c;类全名 jps -m 输出main参数 jps -v 输出JVM参数jps命令示例 显示本机的Java虚拟机进程&#xff1a; # jps 15729 jar 92153 Jps 90267 Jstat显示主类…...

探索 IntelliJ IDEA 2024.1最新变化:全面升级助力编码效率

探索 IntelliJ IDEA 2024.1最新变化&#xff1a;全面升级助力编码效率 文章目录 探索 IntelliJ IDEA 2024.1最新变化&#xff1a;全面升级助力编码效率摘要引言 IntelliJ IDEA 2024.1 最新变化关键亮点全行代码补全 Ultimate对 Java 22 功能的支持新终端 Beta编辑器中的粘性行 …...

【Kafka】Zookeeper集群 + Kafka集群

Zookeeper 概述 Zookeeper是一个开源的分布式的&#xff0c;为分布式框架提供协调服务的Apache项目。 Zookeeper 工作机制★★★ Zookeeper从设计模式角度来理解&#xff1a; 1&#xff09;是一个基于观察者模式设计的分布式服务管理框架&#xff1b; 它负责存储和管理大家都关…...

递归 python

↵一、简单理解 解决问题的一种方法&#xff0c;它将问题不断的分成更小的子问题&#xff0c;直到子问题可以用普通的方法解决。通常情况下&#xff0c;递归会使用一个不停调用自己的函数。 【注】&#xff1a;每一次递归调用都是在解决一个更小的问题&#xff0c;如此进行下…...

解读科技智慧公厕改变生活的革命性创新之路

公共厕所&#xff0c;作为城市基础设施的一部分&#xff0c;一直以来都备受人们诟病。脏乱差、设施老旧、管理混乱&#xff0c;成为公共厕所长期存在的问题。然而&#xff0c;随着科技的不断进步&#xff0c;智慧公厕应运而生&#xff0c;为解决公厕难题&#xff0c;智慧公厕源…...

鸿蒙ArkTS小短剧开源项目进行中

鸿蒙小短剧开源项目进行中 短剧项目名称&#xff1a;CCShort-TV 短剧项目名称&#xff1a;CCShort-TV 使用ArtTS语言&#xff0c;API9以上&#xff0c;HarmonyOS系统的短剧开源代码&#xff0c;使用GSYVideoPlayer作为核心播放器的小短剧。主要以ArkTS&#xff0c;ArkUI编写为…...

基于STM32的RFID智能门锁系统

本文针对RFID技术&#xff0c;着重研究了基于单片机的智能门锁系统设计。首先&#xff0c;通过链接4*4按键模块与主控STM32&#xff0c;实现了多种模式&#xff0c;包括刷卡开锁、卡号权限管理、密码开锁、修改密码、显示实时时间等功能。其次&#xff0c;采用RC522模块与主控S…...

消息队列的简介

什么是消息队列? 消息队列就是用于不同系统 不同服务之间异步地传递信息,就是不用生产者和消费者同时在线或者直接连接,消息存储在队列中,直到消费者准备处理 消息队列的核心概念: 生产者:发送消息的一方 消费者:处理消息的一方 队列:存储队列的一方 优点: 1解耦: 生产者和消费…...

一个开箱即用的物联网项目,开源免费可商用

一、平台简介 今天给大家推荐一款开源的物联网项目&#xff0c;简单易用&#xff0c;非常适合中小团队和个人使用&#xff0c;项目代码和文档完全开源&#xff0c;个人和公司都可以应用于商业项目&#xff0c;只需要保留开源协议文件即可。 本项目可应用于智能家居、农业监测…...

成为程序员后你都明白了什么呢?

成为程序员后你都明白了什么&#xff1f; 简介&#xff1a;探讨成为程序员后的收获和体会&#xff0c;以及对未来的展望。 方向一&#xff1a;技术成长 在技术成长方面&#xff0c;我认识到编程不仅仅是一种技能&#xff0c;更是一种思维方式。在不断地学习和实践中&#xf…...

Rust常见陷阱 | 算术溢出导致的 panic

Rust作为一种内存安全性语言,对于算术运算中的溢出处理特别严格。由于Rust默认会在debug模式下进行算术操作的溢出检查,任何溢出行为都会导致panic,这样能够帮助开发者在调试阶段发现潜在的溢出错误。尽管在release模式下,溢出会导致值的截断,并不会引起panic,但忽视这一…...

SRS服务接入华为云CDN

一、srs配置 正常的标准配置即可&#xff0c;需打开hls推流即可&#xff0c;一般配置中默认打开 二、华为云cdn配置 1.登录华为云&#xff0c;找内容分发网络cdn 2.点击域名管理&#xff0c;点击添加域名 3.配置加速域名 4.选择点播加速 5.添加源站 配置源站地址&#xf…...

微信小程序----微信小程序基础

能够知道如何创建小程序项目能够清楚小程序项目的基本组成结构能够知道小程序页面由几部分组成能够知道小程序中常见的组件如何使用能够知道小程序如何进行协同开发和发布 一.小程序简介 1. 小程序与普通网页开发的区别 1. 运行环境不同 网页运行在浏览器环境中小程序运行在…...

牛客周赛 Round 39(A,B,C,D,E,F,G)

比赛链接 官方题解&#xff08;视频&#xff09; B题是个贪心。CD用同余最短路&#xff0c;预处理的完全背包&#xff0c;多重背包都能做&#xff0c;比较典型。E是个诈骗&#xff0c;暴力就完事了。F是个线段树。G是个分类大讨论&#xff0c;出题人钦定的本年度最佳最粪 题目…...

性能优化工具

CPU 优化的各类工具 network netperf 服务端&#xff1a; $ netserver Starting netserver with host IN(6)ADDR_ANY port 12865 and family AF_UNSPEC$ cat netperf.sh #!/bin/bash count$1 for ((i1;i<count;i)) doecho "Instance:$i-------"# 下方命令可以…...

【简单介绍下R-Tree】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…...

比特币叙事大转向

作者&#xff1a;David Lawant 编译&#xff1a;秦晋 要理比特币解减半动态&#xff0c;最关键的图表是下面这张&#xff0c;而不是价格图表。它显示了自 2012 年以来&#xff0c;矿业总收入与比特币现货交易量的比例&#xff0c;并标注了三个减半日期。 虽然矿工仍然是比特币生…...

Spring的事务传播机制有哪些

Spring的事务传播机制有哪些&#xff1f; Spring的事务传播机制用于控制在多个事务方法相互调用时事务的行为。 在复杂的业务场景中&#xff0c;多个事务方法之间的调用可能会导致事务的不一致&#xff0c;如出现数据丢失、重复提交等问题&#xff0c;使用事务传播机制可以避…...

【Linux系统】地址空间 Linux内核进程调度队列

1.进程的地址空间 1.1 直接写代码&#xff0c;看现象 1 #include<stdio.h>2 #include<unistd.h>3 4 int g_val 100;5 6 int main()7 {8 int cnt 0;9 pid_t id fork();10 if(id 0)11 {12 while(1)13 {14 printf(&…...

centos搭建yum源

目录 1.createrepo简介 2.repo搭建思路 3.安装 4.使用 1.createrepo简介 createrepo 是一个用于创建 RPM 包的工具,它可以帮助你创建一个本地的 YUM 仓库。createrepo 并不是用于运行 YUM 仓库服务的软件,而是用来生成仓库的元数据,使得 YUM 可以理解和使用这个仓库。 …...

使用Docker搭建一主二从的redis集群

文章目录 一、根据基础镜像构建三个docker容器二、构建master机三、配置slave机四、测试 本文使用 主机指代 物理机、 master机指代“一主二从”中的 一主&#xff0c; slave机指代“一主二从”中的 二从 一、根据基础镜像构建三个docker容器 根据本文第一章&#xff08…...

华为配置通过流策略实现流量统计

配置通过流策略实现流量统计示例 组网图形 图1 配置流策略实现流量统计组网图 设备 接口 接口所属VLAN 对应的三层接口 IP地址 SwitchA GigabitEthernet1/0/1 VLAN 10 - - GigabitEthernet1/0/2 VLAN 20 - - GigabitEthernet1/0/3 VLAN 10、VLAN 20 - - S…...

vue2和vue3的v-if与v-for优先级对比

Vue.js 中使用最多的两个指令就是 v-if 和 v-for&#xff0c;因此我们可能会想要同时使用它们。虽然官方不建议这样做&#xff0c;但有时确实是必须的&#xff0c;我们来了解下他们的工作方式&#xff1a; 在 vue 2.x 中&#xff0c;在一个元素上同时使用 v-if 和 v-for 时&am…...

ARM之栈与方法

ARM之栈与方法 计算机中的栈是一种线性表&#xff0c;它被限定只能在一端进行插入和删除操作&#xff08;先进后出&#xff09;。通常将可以插入和删除操作的一端称为栈顶&#xff0c;相对的一端为栈底。 通常栈有递增堆栈&#xff08;向高地址方向生长&#xff09;、递减堆栈…...

Winfrom —— GDI画板

定义绘制对象 Graphics g; 起始点坐标 Point start; 画笔颜色 Color c1 Color.Black; 是否开始绘制 当flagtrue开始绘制&#xff0c;结束绘 private void Form1_MouseDown(object sender, MouseEventArgs e) {if (e.Button MouseButtons.Left) //点击了鼠标左键{start …...

【Jenkins】Jenkins自动化工具介绍

目录 技术背景常规的手动打包步骤 Jenkins简介起源与发展Jenkins的核心价值1.自动化1.1代码构建1.2测试自动化1.3自动部署 2.持续集成与持续部署CI/CD的概念如何减少集成问题更快速地发布软件版本 Jenkins优势Jenkins的主要竞争对手Travis CI:CircleCI:GitLab CI: Jenkins与其他…...

鸢尾花数据集的KNN探索与乳腺癌决策树洞察

鸢尾花数据集的KNN探索与乳腺癌决策树洞察 今天博主做了这个KNN和决策树的实验。 一.数据集介绍 介绍一下数据集&#xff1a; 威斯康星州乳腺癌数据集&#xff1a; 威斯康星州乳腺癌数据集&#xff08;Wisconsin Breast Cancer Dataset&#xff09;是一个经典的机器学习数…...

【python】计算水仙花数

【python】计算水仙花数 "水仙花数"是指一个3位数&#xff0c;它的三个位上的数字的3次幂之和等于它本身。例如&#xff0c;"153"就是一个水仙花数&#xff0c;因为1^3 5^3 3^3 153。以下是一个Python代码示例&#xff0c;用于计算并打印出所有的三位数…...

二、Flask会话技术和模板语言

Cookie Session # views.py: 路由 视图函数 import datetimefrom flask import Blueprint, render_template, request, redirect, session from .models import *# 蓝图 blue Blueprint(user, __name__)# 首页 可以写两个路由&#xff0c;都是访问同一个函数 blue.route(/) b…...

qt-C++笔记之QProcess声明在堆上和声明在栈上对进程执行是否异步的影响

qt-C笔记之QProcess声明在堆上和声明在栈上对进程执行是否异步的影响 —— 2024-04-13 code review! 文章目录 qt-C笔记之QProcess声明在堆上和声明在栈上对进程执行是否异步的影响1.结论2.关于异步执行在堆上声明 QProcess在栈上声明 QProcess 3.waitForFinished详解函数原…...

使用go和消息队列优化投票功能

文章目录 1、优化方案与主要实现代码1.1、原系统的技术架构1.2、新系统的技术架构1.3、查看和投票接口实现1.4、数据入库MySQL协程实现1.5、路由配置1.6、启动程序入口实现 2、压测结果2.1、设置Jmeter线程组2.2、Jmeter聚合报告结果&#xff0c;支持11240/秒吞吐量2.3、Jmeter…...

文心一言VSchatGPT4

文心一言和GPT-4各有优势&#xff0c;具体表现在不同的测试场景下。 在某些测试场景中心一言的表现优于GPT-4&#xff0c;例如在故事的完整度和情节吸引力方面&#xff0c;文心一言表现得更加符合指令&#xff0c;情节更吸引人。这可能得益于其模型在训练时对中文语境的深入理…...

Ubuntu无网络标识的解决方法

1.出现的情况的特点 2.解决办法 2.1 进入root并输入密码 sudo su 2.2 更新NetworkManager的配置 得先有gedit或者vim&#xff0c;两个随意一个&#xff0c;这里用的gedit&#xff0c;没有就先弄gedit&#xff0c;有的话直接下一步 apt-get install gedit 或者vim apt-get ins…...

深入挖掘C语言 ---- 文件操作

目录 1. 文件的打开和关闭1.1 流和标准流1.1.1流1.1.2标准流 1.2 文件指针1.3 文件的打开和关闭 2. 顺序读写3. 随机读写3.1 fseek3.2 ftell3.3 rewind 4. 读取结束判定 正文开始 1. 文件的打开和关闭 1.1 流和标准流 1.1.1流 我们程序的数据需要输出到各种外部设备, 也需要…...

【C语言】【数据结构】项目实践——贪吃蛇游戏(超详细)

前言 本篇博客我们来实现一个小游戏项目——贪吃蛇&#xff0c;相信肯定很多人都玩过&#xff0c;那么整个贪吃蛇是怎么实现出来的那&#xff0c;这个项目用到了很多方面的知识&#xff1a;C语言函数、枚举、结构体、动态内存管理、预处理指令、链表、Win32 API等。我们就通过这…...

前端正则表达式js和测试工具

一、校验数字的表达式 1. 数字&#xff1a;^[0-9]*$2. n位的数字&#xff1a;^\d{n}$3. 至少n位的数字&#xff1a;^\d{n,}$4. m-n位的数字&#xff1a;^\d{m,n}$5. 零和非零开头的数字&#xff1a;^(0|[1-9][0-9]*)$6. 非零开头的最多带两位小数的数字&#xff1a;^([1-9][0-9…...

P8715 [蓝桥杯 2020 省 AB2] 子串分值 (双边检测)

# [蓝桥杯 2020 省 AB2] 子串分值 ## 题目描述 对于一个字符串 $S$, 我们定义 $S$ 的分值 $f(S)$ 为 $S$ 中恰好出现一次的字符个数。例如 $f\left({ }^{\prime \prime} \mathrm{aba}{ }^{\prime \prime}\right)1$&#xff0c;$f\left({ }^{\prime \prime} \mathrm{abc}{ }^{…...

Scala 03 —— Scala Puzzle 拓展

Scala 03 —— Scala Puzzle 拓展 文章目录 Scala 03 —— Scala Puzzle 拓展一、占位符二、模式匹配的变量和常量模式三、继承 成员声明的位置结果初始化顺序分析BMember 类BConstructor 类 四、缺省初始值与重载五、Scala的集合操作和集合类型保持一致性第一部分代码解释第二…...

springboot+vue全栈开发【3.前端篇之Vue基础语法1】

目录 前言Vue基础语法1.内容渲染指令2.属性绑定指令3.使用JavaScript表达式 前言 hi&#xff0c;这个系列是我自学开发的笔记&#xff0c;适合具有一定编程基础&#xff08;html、css那些基础知识要会&#xff01;&#xff09;的同学&#xff0c;有问题及时指正&#xff01; …...

武汉星起航:上海股权中心成功挂牌,创始人张振邦领航跨境新纪元

在金秋十月的尾声&#xff0c;上海股权托管交易中心迎来了一场备受瞩目的盛事。2023年10月30日&#xff0c;武汉星起航电子商务有限公司成功挂牌展示&#xff0c;正式登录资本市场&#xff0c;开启了一段崭新的发展篇章。这一里程碑式的跨越&#xff0c;不仅标志着武汉星起航在…...

find和grep查找搜索命令常用的一些使用方式

目录 find和grep查找搜索命令常用的一些使用方式 一、find命令 二、grep命令 find和grep查找搜索命令常用的一些使用方式 一、find命令 我们知道在Windows系统中想要搜索查找文件&#xff0c;一般需要满足两个条件&#xff1a; 1、知道在哪些目录中查找 2、知道查找的内容&…...

zero123 转 diffusers 的 base model

zero123 转 diffusers 的 base model Q1Q2 Q1 ModuleNotFoundError: No module named pipeline_zero1to3将pipeline_zero1to3.py放到convert_zero123_to_diffusers.py同级目录下 pip install kornia pip install pytorch_lightningQ2 $ python ./diffusers/scripts/convert…...

Visual Studio Code 扩展程序Text Edits

需求 比如把Scarzombie_Monster全部转换为大写或者小写 安装 Text Edits 直接搜索安装即可 使用 假如要把Scarzombie_Monster全部转为大写&#xff0c;选中右键选中 To Upper Case或者直接快捷键shiftAltU即可...

Linux进程(三) --- 状态和优先级

运行&#xff0c;阻塞&#xff0c;挂起 运行 (Running) 当一个进程处于运行状态时&#xff0c;它正在使用CPU执行指令。进程在以下两种情况下可能被认为是运行状态&#xff1a; 实际运行&#xff08;Running on CPU&#xff09;&#xff1a; 进程当前正在CPU上执行。可运行&…...

VUE格式探究记录

1.背景 vue格式为鹰图Intergraph SP3D格式&#xff0c;是私有格式。博主对vue格式的直接解析可行性进行了初步的探究&#xff0c;记录如下。 2.探究 目前能够解析vue格式的软件有3类&#xff08;其背后路线有可能有相同的&#xff09;&#xff0c; 鹰图Intergraph系列软件&…...

桥接模式(合成/聚合复用原则)

桥接模式 文章目录 桥接模式合成/聚合复用原则桥接模式通过示例了解桥接模式 合成/聚合复用原则 合成/聚合复用原则(CARP),尽量使用合成/聚合&#xff0c;尽量不要使用类继承 ​ 合成(Composition),也有翻译成组合)和**聚合(Aggregation)**都是关联的特殊种类。聚合表示一种弱的…...

【算法】完成所有任务需要的最少轮数

题目 给你一个下标从 0 开始的整数数组 tasks &#xff0c;其中 tasks[i] 表示任务的难度级别。在每一轮中&#xff0c;你可以完成 2 个或者 3 个 相同难度级别 的任务。 返回完成所有任务需要的 最少 轮数&#xff0c;如果无法完成所有任务&#xff0c;返回 -1 。 解析 思…...

Mac SourceTree配置ssh git仓库

一、准备条件 1、Mac系统电脑 2、安装好SourceTree 3、获取ssh git仓库地址 二、配置步骤 1、打开终端命令行 ssh -t rsa -C "xxx""xxx"代表注册git仓库时&#xff0c;使用的用户名&#xff0c;可以是字符串也可以是邮箱地址。 如果遇到输入密码&#xf…...

在win10折腾Flowise:部署和尝试

Flowise 是一种低代码/无代码拖放工具&#xff0c;旨在让人们轻松可视化和构建 LLM 应用程序。 本地部署 操作系统&#xff1a; win10 由于网络、操作系统等各种未知问题&#xff0c;使用npm install -g flowise的方式&#xff0c;尝试了很多次&#xff0c;都没有部署成功&am…...

CET6级(笔试备考)

CET6笔试 做题技巧 备考注意 感觉考前一个月还是要多刷几套真题啊&#xff0c;刷个10套吧。 参考链接&#xff1a;https://blog.csdn.net/m0_57656758/article/details/130707582...

simlink 初步了解

1.simlink概要 Simulink是基于MATLAB的框图设计环境&#xff0c;它提供了一个动态系统建模、仿真和分析的集成环境。Simulink是一个模块图环境&#xff0c;用于多域仿真以及基于模型的设计。它支持系统设计、仿真、自动代码生成以及嵌入式系统的连续测试和验证。 Simulink的特…...

电子邮箱是什么?付费电子邮箱和免费电子邮箱有什么区别?

注册电子邮箱前&#xff0c;有付费电子邮箱和免费电子邮箱两类选择。付费的电子邮箱和免费的电子邮箱有什么区别呢&#xff1f;区别主要在于存储空间、功能丰富度和售后服务等方面&#xff0c;本文将为您详细介绍。 一、电子邮箱是什么&#xff1f; 电子邮箱就是线上的邮局&a…...

5.15_操作符详解

1、操作符分类&#xff1a; 算术操作符 - * / % 移位操作符 << >> 位操作符 & | ^ 赋值操作符 - ...... 单目操作符 关系操作符 逻辑操作符 条件操作符 逗号表达式 下标引用、函数调用和结构成员 2、算术操作符 - * / …...