OSPF 协议

OSPF 开放式最短路径优先协议

形容:

  • 无类别链路状态协议

    无类别 ---- 存在掩码

  • IGP 内部网关协议

  • 动态路由协议

一、链路状态协议(LS)

OSPF 协议 隶属于 链路状态协议。

区别:

  1. 距离矢量协议(DV):运行距离矢量协议的路由器会 周期性的泛洪 自己的路由表。通过路由的交互,每台路由器从相邻的路由器学习到路由,并且加载进自己的路由表中;

    对于网络中的所有路由器而言,路由器 并不清楚 网络的拓扑结构,只是简单的知道要去往某个目的地的方向在哪儿,距离多远。这既是距离矢量协议的本质

  2. 链路状态协议(LS):与距离矢量协议不同,链路状态协议通告的是链路状态信息(拓扑信息),而不是路由表

    运行链路状态协议的 路由器之间 会先建立一个协议邻居关系,然后彼此之间开始交互 LSA链路状态通告)。每台路由器都会产生 LSA,路由器将接收到的 LSA 放入自己的 LSDB(链路状态数据库)中。路由器通过 LSDB,掌握了全网所有的拓扑信息。最后,由路由器通过 SPF 算法 计算出 最优路径,随后加载于自己的路由表中。

LS 图解:

1.建立邻居关系

2.互相传递链路状态信息

3.计算最优路径(SPF算法)

4.生成路由表项

OSPF 特征

  1. 支持 等开销负载均衡

  2. 基于 组播地址 进行更新 ---- 224.0.0.5 / 224.0.0.6

  3. 支持 触发更新:每 30min 进行一次 周期更新

  4. 需要 结构化 的部署 ---- 区域划分 地址规划

    相同区域传递拓扑不同区域传递路由

    区域划分的规则

    1. 星型结构0区骨干区域大于0 则为非骨干区域;所有非骨干区域必须接入到骨干区域上。

    2. 必须要有 ABR 域间路由器两个区域相连时必须存在 ABR,ABR 同时工作 在两个区域上。

Router-ID 路由器标识符

作用:

用于一个 OSPF域唯一的标识 一台路由器(取名)。

定义:

缩写RID

  1. Router-ID 的设定可以通过手工配置的方式,或使用系统自动生成的方式。

  2. 定义 RID 值,建议使用 IP地址全网唯一,要是 不进行手工配置 则会 自动生成;优先配置为 环回的最大数值,如果 没有环回,则 自动配置最大物理接口数值

路径计算:
  1. 使用 COST 值 作为 度量值/开销

    COST(开销值) = 参考带宽 / 接口带宽

  2. 默认参考带宽100M,整段路径 COST值之和最小最佳

  3. 弊端:若接口带宽 大于 参考带宽,即 cost 值为小数,则默认 度量值为 1,可能会导致 选路不佳(负载均衡);

    故而在接口带宽大于参考带宽的网络中,可以人为的 修改参考带宽

二、数据包类型

分类:
  1. HELLO 包:用于 邻居间的发现关系建立保活,每 10s 发送一次。

  2. DBD/DD 包数据库描述包,用于携带 本地数据库目录

  3. LSR 包:链路状态请求包,在查看完 对端邻居的 DD 包 后,基于 本地的位置 查询 LSA,随后去 索要未知的 LSA 信息,就通过这个 LSR 包。

  4. LSU 包:链路状态更新包,用于携带 各种 LSA 信息

  5. LSACK 包:链路状态确认包,用于确认 接收到 对端的信息

三、状态机

图解:

  1. Down 状态:表示未激活的状态,一旦 本地发出 hello包,则进入下一个状态,接收到 hello包后,也会 被动进入 Init状态。

  2. Init 状态:表示初始化状态,发出 或者 接收 到 hello 包 都会进入到 Init 状态。

  3. Two-way/2-way 状态双向通信,表示建立了邻居关系;经过 条件匹配,成功则进入下一个状态机,失败则停留在 2-way 状态。

  4. Ex-start 状态预启动状态,发出 空的 DD 包,比较 RID 的大小,进行 主从选举,以 RID 大的为主

  5. Exchange 状态准交换状态,发送 有目录的 DD 包,双方交换 DD 报文,描述自己拥有的 LSA 信息

  6. Loading 状态加载状态,在查看完 对端邻居 的 DD 包 后,使用 LSR 包询问自己位置的 LSA 信息对端 使用 LSU 包 进行回复本地还需要 使用 LSACK 包 进行确认回复

  7. Full 状态邻接关系建立的标识,两者从 邻居关系 变为 邻接关系。

四、工作过程

  1. 启动配置完成后,本地组播 224.0.0.5 发送 hello 包

  2. hello 包将携带 本地的 RID 值已知邻居的 RID 值

  3. 若接收到 对端的 hello 包中自己的RID,则视为 认识 ;双方都认识则代表 邻居关系的建立,生成邻居表,开始进行 条件匹配

  4. 匹配成功,则进入下一个阶段不成功,则永远是邻居,使用 空的DBD包 进行 主从选举

  5. 对比 RID,大为优,且 优先进入 下一个状态,优先共享数据库目录,之后使用 LSR/LSU/LSACK 包获取未知的LSA信息加载于本地的LSDB中

  6. 启用 SPF算法 ,基于 本地 LSDB 生成 有向图,再计算出 最短路径树,再基于 树形结构 算出以本地为起始点 到达 全网各个节点最优路径,最后加载于 本地路由表 中,收敛完成 后,发送 hello 包保活 即可。

  7. 30min 进行一次 周期更新,周期更新即为 对比数据库目录,如果相同,则继续 hello 包 保活,如果不相同,则重新收敛

结构突变

  1. 新增一个网段:直连新增网络设备,直接使用更新包告知邻接关系,需要 ack确认

  2. 断开一个网段:直连断开网络设备,直接使用更新包告知邻接关系,需要ack确认。

  3. 无法沟通: hello time 10s ,dead time 40s,时间到了就会删除邻居信息

五、基础配置

进程区域:

ospf [进程号] router-id [IP地址]

创建 ospf 进程号为1,仅具有本地意义,同时 定义 RID值,建议使用 IP地址,全网需要唯一

如果不定义 RID 值,则会自动生成,建议手动配置

area [区域号]

进入对应区域,只能有一个 骨干区域

宣告:

反掩码:将掩码反过来
network [宣告IP/网段] [反掩码]
  • 0 将 对应的网络位 锁死,主机位 表示 除本来的地址之外 还有的变化

  • IP地址 的反掩码 全部锁死,即为 0.0.0.0

  • 网段 的反掩码 用 255.255.255.255 减去 对应网段掩码 即可。

IP地址 1.1.1.1 反掩码为 0.0.0.0,除 1.1.1.1 外还有 0种 变化。

网段 12.1.1.0 反掩码为 0.0.0.255,除 12.1.1.0 外还有 255种 变化。

参考带宽修改:

首先 进入 ospf 域

bandwidth-reference [网速]

修改参考带宽 为1000Mbits/s

[R1-ospf-1]bandwidth-reference 1000

注意:一旦修改参考带宽,需全网所有设备都修改一致

查询配置表:

display ospf peer

查询 详细邻居关系

display ospf brief

查询 邻居表

display ospf lsdb [router-id] [RID 值]

查询 链路状态数据库

后面跟上 RID 值 可以查询 单独对应的 router 详细信息。

练习一:

 ### 首先进行基础配置 ####创建 ospf 进程,进程号为 1,同时定义 RID 值[R1]ospf 1 router-id 1.1.1.1#进入 区域 0[R1-ospf-1]area 0#宣告 IP地址[R1-ospf-1-area-0.0.0.0]network 1.1.1.1 0.0.0.0#宣告 网段[R1-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255​#R2 配置,R2 为 域间路由器[R2]ospf 1 router-id 2.2.2.2[R2-ospf-1]area 0[R2-ospf-1-area-0.0.0.0]network 12.1.1.2 0.0.0.0#R2 为 域间路由器,还要配置 骨干区域 1[R2-ospf-1]area 1 [R2-ospf-1-area-0.0.0.1]network 23.1.1.1 0.0.0.0​#R3 配置[R3]ospf 1 router-id 3.3.3.3[R3-ospf-1]area 1[R3-ospf-1-area-0.0.0.1]network 23.1.1.2 0.0.0.0[R3-ospf-1-area-0.0.0.1]network 3.3.3.3 0.0.0.0#查看 宣告配置[R3-ospf-1-area-0.0.0.1]display this#查看 ospf 配置[R3]display ip routing-table protocol ospf

 #连接测试,成功 ping通[R1]ping -a 1.1.1.1 3.3.3.3#查询 邻居详细关系[R1]display ospf peer 

 #查询 链路状态数据库[R1]display ospf lsdb

 #查询 数据库中 不同地址的详细信息[R1]display ospf lsdb router 12.1.1.1[R1]display ospf lsdb router 1.1.1.1

练习二:

这里我们选择 R2 作为 域间路由器 ,先进行基础配置。

 #R1 配置[R1]ospf 1 router-id 1.1.1.1#R1 为 1区[R1-ospf-1]area 1#宣告[R1-ospf-1-area-0.0.0.1]network 1.1.1.1 0.0.0.0[R1-ospf-1-area-0.0.0.1]network 12.1.1.1 0.0.0.0​#R3 配置[R3]ospf 1 router-id 4.4.4.4#R3 为 2区[R3-ospf-1]area 2[R3-ospf-1-area-0.0.0.2]network 4.4.4.4 0.0.0.0[R3-ospf-1-area-0.0.0.2]network 24.1.1.2 0.0.0.0​#R4 配置[R4]ospf 1 router-id 3.3.3.3#R4 为 0区[R4-ospf-1]area 0[R4-ospf-1-area-0.0.0.0]network 3.3.3.3 0.0.0.0[R4-ospf-1-area-0.0.0.0]network 23.1.1.2 0.0.0.0​### R2 配置 ###[R2]ospf 1 router-id 2.2.2.2#R2 为 3区[R2-ospf-1]area 3[R2-ospf-1-area-0.0.0.3]network 2.2.2.2 0.0.0.0#连通 0区[R2-ospf-1-area-0.0.0.3]area 0[R2-ospf-1-area-0.0.0.0]network 23.1.1.1 0.0.0.0#连通 1区[R2-ospf-1-area-0.0.0.0]area 1[R2-ospf-1-area-0.0.0.1]network 12.1.1.2 0.0.0.0#连通 2区[R2-ospf-1-area-0.0.0.1]area 2[R2-ospf-1-area-0.0.0.2]network 24.1.1.1 0.0.0.0#检查 ospf 表[R2-ospf-1]display this

 #连接测试,依次 ping R1 R3 R4 的 环回进行检验[R2]ping -a 2.2.2.2 1.1.1.1六、扩展配置

六、扩展配置

1.从邻居关系建立成为邻接关系的条件

分类:
  • DR(指定路由器)

    一个网段上的 其他路由器 都和 指定路由器(DR) 构成 邻接关系,而 不是它们 互相之间 构成邻接关系。

  • BDR(备份指定路由器)

    当 DR 出现问题,由 BDR 接手 DR 的工作,同时会 再选举 出一个BDR。

  • DR Other:其他路由器。

  • ABR :域间路由器

网络类型:
  1. 点到点的网络:在一个网段中,仅支持 存在两个节点 的网络。(在点到点的网络类型中,可以 直接 成为 邻接关系

  2. MA多路访问 ---- 在一个网段内,存在的节点数量不限

在MA网络中,若所有设备 均是邻接关系,则会造成大量的 重复更新,故进行 DR/BDR 的选举,所有 非 DR/BDR 的设备 被称之为DRotherDRother 之间 维持 邻居关系

2.修改接口优先级:

选举规则:
  1. 先比较参选接口的 优先级默认为 1,范围 0~255,大为优

  2. 若参选接口的优先级相同,比较参选设备的 RID,大为优。

  3. 当优先级设置为 0 时,默认 不参加选举,就不会成为 DR/BDR。

首先要进入 对应的接口

ospf dr-priority [优先级]
注意:
  • OSPF 的 DR选举非抢占性 的,故需要 重启 ospf 进程 达到 重新选举的目的。
  • 可以在配置 OSPF 进程 之前 进行 优先级的设置,这样可以省去后续 重启进程 的步骤。

重启 OSPF 进程:
reset ospf process

注意:首先要退至 用户视图 (尖括号)。

3.手工认证

首先进入对应邻居接口

ospf authentication-mode md5 [编号] cipher [密码]

邻居间接口定义安全密钥 ,编号任意。

4.手工汇总 ---- 汇总区域

域间路由器 ABR 上将 A区域 共享到 B区域 时,方可进行 手工汇总。

首先进入到需要汇总的 ospf 区域

abr-summary [汇总网段] [展开式掩码]

在需要汇总的区域 进行 手工汇总

5.被动/沉默接口

仅接受 不发送路由信息 的接口,仅能配置在 路由器 与 PC 之间

首先进入需要设置被动接口的路由器的 ospf 进程

silent-interface g [接口号]

设置该接口为 沉默接口

6.加快收敛-改计时器

  • 修改一台路由器的 hello time,该接口的 dead time 将 自动关闭匹配

  • 邻居间直连接口hello/dead time 时间不一样,则无法建立邻居关系;

  • 修改时,不易修改的过小

7.缺省路由

边界路由器 上配置一条 缺省信息 之后,该设备将向 内部所有设备 发送缺省路由,方向 指向边界路由器

首先要进入 边界路由器 的 ospf 进程。

default-route-advertise always

下发 缺省路由。

练习三:

 ### 先进行基础配置 ####R1 配置[R1]ospf 1 router-id 192.168.0.1[R1-ospf-1]area 0#宣告 网段[R1-ospf-1-area-0.0.0.0]network 192.168.0.0 0.0.0.255#宣告 IP地址[R1-ospf-1-area-0.0.0.0]network 192.168.1.1 0.0.0.0​#R2 配置,R2 为 域间路由器 ABR,同时在 0区 和 1区 工作[R2]ospf 1 router-id 192.168.3.1[R2-ospf-1]area 0[R2-ospf-1-area-0.0.0.0]network 192.168.1.2 0.0.0.0[R2-ospf-1-area-0.0.0.0]network 192.168.2.1 0.0.0.0[R2-ospf-1-area-0.0.0.0]network 192.168.3.1 0.0.0.0[R2-ospf-1]area 1[R2-ospf-1-area-0.0.0.1]network 192.168.4.1 0.0.0.0​#R3 配置[R3]ospf 1 router-id 192.168.5.1[R3-ospf-1]area 1[R3-ospf-1-area-0.0.0.1]network 192.168.4.2 0.0.0.0[R3-ospf-1-area-0.0.0.1]network 192.168.5.1 0.0.0.0
手工汇总:
 #进行 手工汇总,汇总网段为 192.168.0.0 / 22[R2-ospf-1]area 0[R2-ospf-1-area-0.0.0.0]abr-summary 192.168.0.0 255.255.252.0
沉默接口/缺省路由:

给 R1 连接一台 PC;给 R3 新增加一个 外网IP 3.3.3.3/24。

 #配置 沉默/被动接口[R1-ospf-1]silent-interface g 0/0/1​#下发 缺省路由[R3]ospf 1[R3-ospf-1]default-route-advertise always#查表检验[R1]display ip routing-table protocol ospf

七、作业

要求:
  1. R1~R3 为 0 区,R3~R4 为 1 区,其中 R3 环回也在 0 区

  2. R1~R3中,R3 为 DR 设备,没有 BDR

  3. R4 环回地址已固定,其他所有网段基于 192.168.1.0/24 进行合理划分

  4. R4 环回不能宣告全网可达,保障更新安全,避免环路,减少路由条目数量

子网划分:

128 64 32 16 8 4 2 1

借1位 将网段分成两部分:环回链路 0/25 和 骨干链路 128/25;

再将 环回链路 借1位 分成两部分:0/26 和 64/26,后者用于 环回接口

这里为了简便就不再将骨干链路细分成 /30 的网段了。

网段子网
192.168.1.0/25192.168.1.0/26
255.255.255.128192.168.1.64/26
192.168.1.128/25

先进行基础配置。

分区宣告:

R1~R3 为 0 区,R3~R4 为 1 区,R3 是 域间路由器 ABR

 #R1 配置[R1]ospf 1 router-id 192.168.1.1[R1-ospf-1]area 0[R1-ospf-1-area-0.0.0.0]network 192.168.1.1 0.0.0.0​#R2 配置[R2]ospf 1 router-id 192.168.1.2[R2-ospf-1]area 0[R2-ospf-1-area-0.0.0.0]network 192.168.1.2 0.0.0.0​#R3 配置,R3 为 域间路由器 ABR[R3]ospf 1 router-id 192.168.1.3[R3-ospf-1]area 0[R3-ospf-1-area-0.0.0.0]network 192.168.1.3 0.0.0.0​[R3-ospf-1]area 1[R3-ospf-1-area-0.0.0.1]network 192.168.1.129 0.0.0.0#这里选择 宣告网段 1.64/26,掩码为 255.255.255.192[R3-ospf-1-area-0.0.0.1]network 192.168.1.64 0.0.0.63​#R4 配置[R4]ospf 1 router-id 4.4.4.4[R4-ospf-1]area 1[R4-ospf-1-area-0.0.0.1]network 192.168.1.130 0.0.0.0​
优先级:

这里建议在配置 ospf 进程前先将R1 R2 优先级 配置为 0,这样就可以省去 重启进程 的步骤。

 ### 将 R3 设置为 DR,优先级为 0 即 不参加选举#R1 配置 优先级[R1-GigabitEthernet0/0/0]ospf dr-priority 0#R2 配置 优先级[R2-GigabitEthernet0/0/0]ospf dr-priority 0​#重启进程,在 用户视图 进行####注意:等所有 ospf 进程都配置完毕后再进行重启###<R1>reset ospf process<R2>reset ospf process
手工认证:
 #将 相连的 R1 ~ R3 都进行 手工认证,设定编号为 1[R1-GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher 123456[R2-GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher 123456[R3-GigabitEthernet0/0/0]ospf authentication-mode md5 1 cipher 123456
缺省路由:
 #在 边界路由器 R4 上配置 缺省路由[R4-ospf-1]default-route-advertise always#配置完后记得在 其他路由器 进行查表检验#此时已经 全网通<R1>ping 4.4.4.4
手工汇总:
 # 将  R1 ~ R3(0区) 进行 手工汇总,在 ABR 上进行配置[R3]ospf 1[R3-ospf-1]area 0#汇总网段为 192.168.1.0 / 25[R3-ospf-1-area-0.0.0.0]abr-summary 192.168.1.0 255.255.255.128#在 R4 上进行 查表检验<R4>display ip routing-table protocol ospf

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

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

相关文章

Docker 镜像的创建

创建镜像有三种方法&#xff0c;分别为基于已有镜像创建、基于本地模板创建以及基于Dockerfile创建。 一、基于现有镜像创建 创建nginx镜像&#xff1a; 1、首先启动一个容器&#xff0c;在容器里做修改 2、然后将修改后的容器提交为新的镜像&#xff0c;需要使用该容器的 I…

Vue3中实现歌词滚动显示效果

目录 &#x1f389;前言 &#x1f389;整体布局 &#x1f389;处理歌词数据 &#x1f389;处理事件 &#x1f389;完整代码 &#x1f389;总结 &#x1f389;前言 在这篇博客中&#xff0c;我将分享如何在 Vue 3 中实现一个简单的歌词滚动效果。我将从歌词数据的处理开始&…

2024美赛数学建模B题思路分析 - 搜索潜水器

1 赛题 问题B&#xff1a;搜索潜水器 总部位于希腊的小型海上巡航潜艇&#xff08;MCMS&#xff09;公司&#xff0c;制造能够将人类运送到海洋最深处的潜水器。潜水器被移动到该位置&#xff0c;并不受主船的束缚。MCMS现在希望用他们的潜水器带游客在爱奥尼亚海底探险&…

oracle 19c上安装样例数据库

样例schema的分类 HR: Human Resources OE: Order Entry PM: Product Media IX: Information Exchange SH: Sales History BI: Business Intelligence 安装样例数据库 1&#xff1a;HR的安装&#xff0c;通过dbca时候 2&#xff1a;HR的安装&#xff0c;安装完数据库后&#…

基于Go-Kit的Golang整洁架构实践

如何用Golang实现简洁架构&#xff1f;本文介绍了基于Go-Kit实现简洁架构的尝试&#xff0c;通过示例介绍了简洁架构的具体实现。原文: Why is Go-Kit Perfect For Clean Architecture in Golang? 简介 Go是整洁架构(Clean Architecture)的完美选择。整洁架构本身只是一种方法…

MySQL数据库基础第一篇(SQL通用语法与分类)

文章目录 一、SQL通用语法二、SQL分类三、DDL语句四、DML语句1.案例代码2.读出结果 五、DQL语句1.DQL-基本查询2.DQL-条件查询3.DQL-聚合函数4.DQL-分组查询5.DQL-排序查询6.DQL-分页查询7.DQL语句-执行顺序1.案例代码2.读出结果 六、DCL语句1.DCL-管理用户2.DCL-权限控制1.案例…

Kubernetes实战(二十三)-k8s event监控利器kube-eventer对接企微告警

1 背景 监控是保障系统稳定性的重要组成部分&#xff0c;在Kubernetes开源生态中&#xff0c;资源类的监控工具与组件监控比较多。 cAdvisor&#xff1a;kubelet内置的cAdvisor&#xff0c;监控容器资源&#xff0c;如容器cpu、内存&#xff1b;Kube-state-metrics&#xff1…

Maya------创建多边形工具

配合导入图像使用 Tab键可以删除一个点&#xff01; 模型不能超过4边面&#xff01;多切割工具进行连接&#xff01; 15.maya常用命令5.创建多边形工具 反转 双显 挤出_哔哩哔哩_bilibili

kubecolor让kubelet更好看

kubecolor让kubelet更好看 默认情况下kubectl输出都是白色,在列特别多的情况下比较难分清楚具体是哪个对应哪个. 发现kubecolor可以完美解决这样的问题. 1. 安装kubecolor mkdir kubecolor cd kubecolor wget https://github.com/kubecolor/kubecolor/releases/download/v0.…

vue2+html2pdf下载PDF,PDF分页切割

问题&#xff1a; PDF下载下来后&#xff0c;文档内容被暴力分割。 解决方案&#xff1a; HTML <!-- 打印按钮 --> <el-button type"primary" size"small" class"el-icon-download right_btn" click"downloadPDF">PDF&…

three.js CSS3DRenderer、CSS3DObject渲染HTML标签

有空的老铁关注一下我的抖音&#xff1a; 效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red;position: relative;"><…

CSS3的新盒子,选择器等

新增的选择器&#xff1a; 属性选择器&#xff1a; 结构伪类选择选器&#xff1a; nth较为重要&#xff1a;但公式中的字母必须是n 区别&#xff1a; nth-child&#xff1a; 认为父类下的都是儿子&#xff0c;此时就需要有对应的需要&#xff0c;如下&#xff0c;此时即使排1&…

【Bugs】Jmeter报错:NoSuchMethodError: org.apache.jmeter.samplers.

报错情况 Jmeter版本&#xff1a;5.4.3 报错场景&#xff1a;在线程组中添加了jpgc - PerfMon Metrics Collector性能监控组件后出现报错。 Jmeter中无法运行测试&#xff0c;cmd命令行中出现以下报错。 cmd报错详细内容&#xff1a; Uncaught Exception java.lang.NoSuchMe…

废品上门回收小程序搭建全过程

随着人们对环境保护意识的不断增强&#xff0c;废品回收成为了一项重要的社会活动。为了方便废品回收的顾客和回收者之间的联系&#xff0c;废品上门回收小程序成为了一种流行的解决方案。然而&#xff0c;如何选择一款合适的废品上门回收小程序搭建平台呢&#xff1f;下面将为…

数据表的增删改查(上)

这一章的主角是数据表&#xff0c;但因为上篇文章还有一些数据库的知识没解决&#xff0c;因此先写了数据库。 选择数据库 在数据库创建后&#xff0c;不会将当前创建的数据库作为后续操作的默认数据库&#xff0c;如果需要在数据库中创建数据表并插入数据&#xff0c;需要先…

leetcode189.轮转数组|超简单易于理解方法

题目 https://leetcode.cn/problems/rotate-array/description/https://leetcode.cn/problems/rotate-array/description/ 给定一个整数数组 nums&#xff0c;将数组中的元素向右轮转 k 个位置&#xff0c;其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输…

springboot完成一个线上图片存放地址+实现前后端上传图片+回显

1.路径 注意路径 2.代码&#xff1a;&#xff08;那个imagePath没什么用&#xff0c;懒的删了&#xff09;&#xff0c;注意你的本地文件夹要有图片&#xff0c;才可以在线上地址中打开查看 package com.xxx.common.config;import org.springframework.beans.factory.annotat…

深信服技术认证“SCCA-C”划重点:深信服云计算关键技术

为帮助大家更加系统化地学习云计算知识&#xff0c;高效通过云计算工程师认证&#xff0c;深信服特推出“SCCA-C认证备考秘笈”&#xff0c;共十期内容。“考试重点”内容框架&#xff0c;帮助大家快速get重点知识。 划重点来啦 *点击图片放大展示 深信服云计算认证&#xff08…

mermaid使用指南+notion使用实例-持续更新中

最近一个月了吧&#xff0c;发现Notion插入图片的功能坏了&#xff0c;直接paste会404&#xff0c;本地上传也不行。电脑本地版和手机端都插不了图片&#xff0c;很头疼。解决方法也简单&#xff0c;用图床&#xff0c;放链接。 付费版我用的七牛&#xff0c;结合PicGo&#x…

Linux 路由配置与使用

概念 路由信息用于指导数据包从源地址查找到目的地址传输路径的信息&#xff1b; 路由分类 根据路由信息的来源分为静态路由和动态路由 静态路由 由管理员手动配置的路由表项信息&#xff0c;根据路由形式的不同&#xff0c;静态路由又可细分为&#xff1a; 直连路由&#xf…