HCIP——OSPF基础

news2024/10/9 14:20:16

OSPF基础

  • 一、OSPF基础
  • 二、OSPF的区域划分
  • 三、OSPF的数据包
    • hello包
    • 数据库描述包DBD包
    • 链路状态请求包LSR包
    • 链路状态更新包LSU包
    • 链路状态确认包LSAck包
  • 四、OSPF的状态机
  • 五、OSPF的工作过程
  • 六、链路状态型的路由生成过程
  • 七、条件匹配
  • 五、OSPF数据包头部
  • 八、OSPF的接口网络类型

一、OSPF基础

OSPF(Open Shortest Path First,开放式最短路径优先)是IEIF定义的一种基于链路状态(LS)的内部网关协议(IGP)目前针对IPV4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用OSPF Version 3(RFC2740).

  • 基于SPF算法,以”累计链路开销“作为选路参考值
  • 采用组播的形式收发部分协议报文
  • 支持区域划分
  • 支持对等价路由进行负载分担
  • 支持报文认证

二、OSPF的区域划分

  • OSPF为了适应中大型的网络环境,需要进行结构化部署 — 区域划分
  • 我们把只有一个区域的OSPF网络成为单区域OSPF网络
    在这里插入图片描述
    我们把存在多个区域的OSPF网络成为多区域OSPF网络
    在这里插入图片描述
  • 区域划分的目的:
    • 区域内部传递拓扑信息,区域之间传递路由信息
    • 链路状态型协议的距离矢量特征
  • 区域边界路由器 — ABR
    • 同时属于多个区域,一个接口对应一个区域,且至少有一个接口属于区域0(骨干区域)
    • 区域间可以存在多个ABR,一个ABR也可以对应多个区域
  • 区域划分的要求:
    • 1、区域之间必须存在ABR
    • 2、区域划分必须按照星型拓扑结构划分 — 星型结构中间区域 — 骨干区域
  • 为了方便管理,我们给每个区域增加一个ID作为标识
    • 区域ID — area ID由32位2进制构成
      • 表示方法有两种
        • 十进制表达
        • 点分十进制表达
    • 骨干区域的area ID为0。

三、OSPF的数据包

在这里插入图片描述

  • hello报文:(Hello Packet)
    • 用来周期保活的,发现,建立,周期保活邻居关系。(更新量很小,打个招呼。通过组播发出去的)
    • HELLO包设计的是默认10S发送一个
  • 既然是保活,如果对面不回包,我们也会设置一个计时器来判断他是否还存在。这个计时器叫DEAD TIME。这个时间是4倍的hello time的时间,也就是默认40s。
  • RID — 为了标识网络中的每一个路由器
    • 要求:
      • 全网唯一
      • 格式统一 — 都按照IP地址格式
    • 配置方法
      • 手工配置,只要满足两点要求即可
      • 自动配置
        • 默认的就是优先在环回中选最大的IP(这里的最大就是单纯的IP数值最大),要是没有环回就选择接口IP中最大的。
          在这里插入图片描述

hello包

hello包用于周期发现、建立和保活邻居关系。当路由器启动ospf进程后,默认每10秒(hello时间,可以修改)发送一个hello包,hello中携带自己的RID和已知邻居的RID,当路由器收到的hello包中包含自己的RID,建立邻居关系。建立邻居关系之后通过hello包告诉邻居我还在,即保活作用。如果过了40秒(dead-time 4倍的hello时间)任没有收到邻居的hello包,即认为该邻居消失。
在这里插入图片描述
注:RID:因为ospf传递的是拓扑信息,需要一个参数对所有路由器进行区分和标定,所以ospf引入RID来完成这个工作,RID在ospf网路内具有唯一性,且由32位二进制构成,采用IP地址的格式。RID可以手工配置或自动获取,如果是自动获取,设备将会在自己环回接口的IP地址中选择最大的作为自己的RID。如果没有环回接口,则将在自己的物理接口上选择IP地址最大的作为RID。

数据库描述包DBD包

DBD报文(Database Description Packet)

  • 数据库描述报文
  • 里面携带的是路径信息的摘要(为了减少更新量,不会直接给邻居发TOPO,会把TOPO先做个目录,让邻居看看有哪些没有的。这个目录就是DBD数据库描述表)
  • 免重复更新,减少更新量的一个做法

在这里插入图片描述
由于ospf传递的拓扑信息庞大,所以ospf在互相传递LSA时,先将本地lsa信息的目录传给对方,对方在根据目录选择自己没有的LSA信息,这个目录信息就是DBD包。

链路状态请求包LSR包

LSR报文:(Link-state Request Packet)

  • 链路状态请求报文
  • 请求获取链路信息
  • 基于未知的LSA信息查询。LSA叫做链路状态通告,简单理解就是链路状态信息的主要载体。

在这里插入图片描述
通过DBD包获取邻居的lsa信息目录后,将收到的lsa信息目录和本地数据库进行对比,然后通过LSR包向邻居请求本地所没有的lsa信息

链路状态更新包LSU包

  • LSU报文:(Link-state Update Packet)
  • 链路状态更新报文
  • 携带LSA信息的数据包。(真正提供更新的数据包)
    收到邻居的LSR包后,通过LSU包将lsa信息传递给邻居,是真正携带LSA信息的数据包。

链路状态确认包LSAck包

  • LSack报文:(Link-state Acknowledgement Packet)
  • 链路状态确认报文
  • 确认包
    收到LSU包需恢复LSAck包确认收到。

四、OSPF的状态机

在这里插入图片描述

  • TWO-WAY — 双向通讯 — 标志这邻居关系的建立
  • 条件匹配 — 条件匹配成功,则进入下一个阶段;条件匹配失败,则i仅维持邻居关系,10s一次通过hello包保活。
    在这里插入图片描述
    在这里插入图片描述
  • 通过不携带数据的DBD包(为了和之前的邻居关系进行划分)进行主从关系选举,RID大的为主,优先进入下一个状态。
  • LSDB — 链路状态信息数据库
    在这里插入图片描述
    在这里插入图片描述
  • FULL状态 — 标志这邻接关系的建立 — 只有邻接关系之间可以交换LSA信息,而邻居关系仅使用hello包进行保活。

状态机总结:

  • down — 一旦启动OSPF协议,发出hello包,进入下一个状态
  • init(初始化) — 收到hello包钟存在本地的RID,进入下一个状态
  • 2 - way(双向通信) — 邻居关系尽力的标志
  • (进行条件匹配,匹配成功进入下一个阶段,匹配不成功停留在邻居状态)
  • exstart(预启动) — 使用未携带信息的DBD包进行主从关系的选举,RID大的为主,优先进入下一个阶段;
  • exchenge(准交换) — 使用携带目录信息的DBD包进行目录共享,需要ACK确认。
  • loading(加载) — 查看完对端的DBD信息后,基于本地未知的信息,使用LSR来到邻居处查询,邻居使用LSU将信息回复。需要ACK确认。
  • FULL(转发) — 交换完成后进入的章台,标志着邻接关系的建立。

在这里插入图片描述

五、OSPF的工作过程

在这里插入图片描述

  • 启动配置完成后,OSPF将向本地所有运行协议的接口组播224.0.0.5发出hello包;hello包中携带本地的RID以及本地已知邻居的RID;(通过接收其他邻居的hello包来获取本地邻居,建立邻居关系);之后会生成一张表叫邻居表
  • 邻居关系建立后,进行条件匹配;匹配失败将停留于邻居关系,仅hello包保活即可;
  • 匹配成功的邻居将可以i建立邻接关系。首先使用未携带数据的DBD包进行主从关系选举;之后使用携带信息的DBD包来共享数据库目录;之后本地使用LSR/LSU/LSACK来获取未知的LSA信息(链路状态通告);完成本地数据库的建立。(LSDB — 链路状态数据库) — 生成数据库表
  • 之后本地基于数据库生成有向图和最短路径树,之后计算本地到达拓扑中所有未知网段的最短路径,然后将其添加到路由表中。
  • 收敛完成,hello包周期保活。每30分进行一次周期更新
  • 结构突变:
    • 1、新增网段
    • 直连新增网段的设备,直接使用更新包告知邻接关系接口;需要ack
    • 2、断开网段
    • 直连断开网段的设备,直接使用更新包告知邻接关系接口;需要ack
    • 3、无法沟通
    • hello time 10s,dead time 40s;超时断邻,删除信息。

六、链路状态型的路由生成过程

1、运行链路状态路由信息的路由器之间首先会建立一个协议的邻居关系,然后彼此之间开始交互LSA(Link State Advertisement,链路状态通告)。
在这里插入图片描述

  • 不再通告路由i信息,而是LSA。
  • LSA描述了路由器接口的状态信息,例如接口的开销,连接的对象等。

2、每台路由器都会产生LSA,路由器将接收到的LSA放入自己的LSDB(Link State DataBase,链路状态数据库)。路由器通过LSDB,掌握了全网的拓扑。
在这里插入图片描述

  • 路由器将LSA存放在LSDB中
  • LSDB汇总了网络中路由器对于自己接口的描述
  • LSDB包含全网拓扑的描述

3、每台路由器基于LSDB,使用SPF(Shortest Path First,最短路径优先)算法进行计算,每台路由器都计算出一颗以自己为根的、无环的、拥有最短路径的“树”。有了这棵”树“,路由器就已经知道了到达网络各个角落的优选路径。
在这里插入图片描述
4、最后,路由器将计算出来的优选路径,加载进自己的路由表(Routing Table)。
在这里插入图片描述
四步:
在这里插入图片描述

七、条件匹配

指定路由器 — DR
备份指定路由器 — BDR

  • 条件匹配:在MA网络中,若所有的设备都建立邻接关系,则将出现大量的重复更新;故需要进行DR与BDR的选举,所有非DR/BDR设备之间保持邻居关系即可。DR/BDR和其他设备之间建立邻接关系。

在这里插入图片描述

  • 注意两点:

    • 在一个MA网络中,DR与BDR都存在的情况下,至少需要4台路由器才能看到邻居关系
    • DR/BDR实际是一个接口的概念。
  • DR/BDR的选举:

  • 选举规则:

  • 1、先比较优先级。优先级最大的为DR,优先级次大的为BDR。
    优先级的取值方位是0-255,优先级的默认值是1.
    优先级
    在这里插入图片描述若一个接口的优先级设置为0,则代表该接口放弃DR/BDR选举。

  • 若优先级相同,则比较RID,RID大的路由器对应的接口为DR,次大的为BDR。

选举模式:

  • 非抢占模式
  • 即一旦选举成功,不因为新加入的设备而重新选举
  • DR/BDR的选举时间为40s
  • 若选举完成,需要重新选举DR/BDR则需要重启OSPF进程
  • reset ospf 1 process — 重启OSPF进程,可以重新进行DR/BDR的选举

五、OSPF数据包头部

OSPF头部指的是所有五种OSPF数据包都包含的公共参数部分。头部长度为24个字节。
在这里插入图片描述

  • 版本(Version):对于OSPFv2,该字段值恒为2。
  • 类型(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):用于报文认证的内容。

HELLO — 周期性发现,建立,保活邻居关系。DR/BDR选举。

在这里插入图片描述
网络掩码发出该数据包接口所配置的IP地址掩码信息。 — 华为体系中这个参数邻居双方所携带的值不一致将无法正常建立邻居关系。 — 这个限制条件仅针对MA网络,P2P网络不受限制。

hello时间,死亡时间如果邻居双方这两时间参数不同,则将限制邻居关系的建立。

可选项 — 8位 — 每一位代表路由器遵从某个OSPF特性OSPF特殊区域的标记在其中,如果邻居双方特殊区域的标记不一致,则将限制邻居关系的建立。

路由器的优先级发出hello包接口所配置的DR/BDR选举的优先级

DR/BDR网络中DR和BDR所对应接口的IP地址。在没有选出DR和BDR之前,将使用0.0.0.0进行填充。

Hello包中限制邻居关系建立的因素:

  • 1,网络掩码
  • 2,hello时间
  • 3,dead time
  • 4,OSPF特殊区域的标记
  • 5,认证

网络掩码(Network Mask):一旦路由器的某个接口激活了OSPF,该接口即开始发送Hello报文,该字段填充的是该接口的网络掩码。两台OSPF 路由器如果通过以太网接口直连,那么双方的直连接口必须配置相同的网络掩码,如果一方在接口上收到的Hello报文中“网络掩码”字段与本地接口不同,则忽略该Hello报文,此时邻居关系无法正确建立。
Hello间隔(Hello lnterval):接口周期性发送Hello报文的时间间隔(单位为s)。两台直连路由器要建立OSPF邻居关系,需确保接口的Hello lnterval相同,否则邻居关系无法正常建立。缺省情况下,OSPF路由器在P2P或Broadcast类型的接口上的 Hello间隔为10s,在NBMA及P2MP类型的接口上的Hello间隔为30s.
可选项(Options):该字段一共8bit,每个比特位都用于指示该路由器的某个特定的OSPF 特性。路由器通过设置相应的Options比特位来通告自己支持某种特性或者拥有某种能力。OSPF 邻接关系建立过程中,Options字段中的某些比特位会被检查,这有可能会直接影响到OSPF邻接关系的建立。 (特殊区域的标记)
路由器优先级(Router Priority:路由器优先级,也叫DR优先级,该字段用于DR、BDR 的选举。在华为的数通产品上,缺省时OSPF接口的DR优先级为1,这个值是可以通过命令修改的。OSPF在多路访问网络(MA)中会进行DR(Designated Router,指定路由器)和BDR(Backup Designated Router,备用指定路由器)选举,而该字段的值将对选举结果产生影响
路由器失效时间(Router Dead nterval):在邻居路由器被视为无效前,需等待收到对方Hello报文的时间(单位为s)。两台直连路由器要建立OSPF 邻居关系,需确保双方直连接口的Router Dead lnterval相同,否则邻居关系无法正常建立。缺省情况下,OSPF路由器接口的Router Dead nterval为该接口的Hello lnterval的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,如果发现了多个邻居,则包含多个邻居字段。

DBD包数据库描述报文

  • 1,使用未携带数据的DBD包进行主从关系选举;
  • 2,使用携带数据的DBD包进行目录共享;

DBD包还存在第三种形态,即仅完成确认的确认包状态。

在这里插入图片描述
MTU设备默认没有开启接口MTU值的检测,所以将携带0。
[r1-Serial4/0/0]ospf mtu-enable如果邻居双方都开启了MTU值的检测,但是,双方携带的MTU值不同,则邻居状态将停留在Exstart状态。

Iinit如果这个标记位置1,则这个DBD包是进行主从关系选举的数据包。
MMORE该位置1,则代表后面还有更多的DBD包。
MSMaster该位置1,则代表发送该数据包的路由器为主。在主从关系选举出来之前,双方都将认为自己是主,所以,都会将字节的MS置1;当主从关系选举结束后,将只有主会置1,从置0。

DBD序列号在DBD报文交互中,会逐次加1,用于确保DBD包传输的有序性及可靠性。

接口最大传输单元(interface Maximum Transmission Unit):接口的MTL。以华为AR2200路由器为例,缺省时授口发送的DD报文中,无论该接口实际的MTU值是多少,i该字段的值都为0.
可选项(Options):路由器支持的OSPF可选项
I位(lnitial Bit):也即初始化位,当该DD报文用于协商Master/Slave路由器时,该比特位被置1,Master/Slave选举完成后,该比特位被置0
M位(More Bit);该比特位如果设置为1,则表示后续还有更多的DD报文;如果被设置为0,则表示这是最后一个DD报文。
MS位(Master Bit):Master路由器在自己发送的DD报文中将该比特位设置为1,slave路由器贝修其设置为0.
DD序列号(DDSequence Number):DD报文的序列号,在DD报文交互的过程中,DD序列号被逐次加1,用于确保DD报文传输的有序和可靠性。值得注意的是,DD序列号必须是由Master路由器来决定的,而Slave路由器只能使用Master路由器发送的DD序列号来发送自己的DD报文。** (这个做法就是隐性确认,通过对方发送的数据包中的序列号,起到确认的效果。DBD包的主从关系选举就是为了完成隐性确认的)**

  • Master/Slave确定后,双方就开始使用DD报文描述各自的LSDB在这种DD报文中包含着LSDB里的LSA的头部。路由器可以使用多个DD报文来描述LSDB,为了确保DD报文传输的有序和可靠,“DD序列号(DDSequence Number"字段就是关键。在OSPF路由器双方交与DD报文的过程中,Master路由器发送DD报文给对端,对端的Slave路由器在发送自己的DD报文时需在该报文的“DD序列号”字段中使用前者的序列号,也就是Master路由器主导整个LSDB描述过程。假设Master路由器发送一个DD序列号为1111的DD报文,则 slave路由器在收到这个DD报文后开始发送自己的DD报文,而且DD序列号使用1111,而它在准备再次发送DD报文之前,必须先收到Master路由器发送的下一个DD报文(DD序列号为1112)。这个过程会一直持续,直到LSDB描述完。

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

LSR链路状态请求报文基于DBD包请求未知的LSA信息。
在这里插入图片描述
链路状态类型,链路状态ID,通告路由器LSA三元组 — 这三个参数可以唯一的标识出来一条LSA信息。

LSU包链路状态更新报文真正携带LSA信息的数据包
在这里插入图片描述

路由器收到邻居发送过来的LSR后,会以LSU报文进行回应,在LSU报文中就包含了对方请求的LSA的完整信息,一个LSU报文可以包含多个LSA。另外,当路由器感知到网络发生变化时,也可以触发LSU报文的泛洪,以便将该变化通知给网络中的其他OSPF 路由器。在多路访问网络中,非 DR、BDR路由器向224.0.0.6这个组播地址发送LSU报文,而DR及BDR会侦听这个组播地址,DR在接收LSU报文后向224.0.0.5发送LSU报文,从而将更新信息泛洪到整个OSPF区域,所有的OSPF 路由器都会侦听224.0.0.5这个组播地址。

LSACK链路状态确认报文确认包
在这里插入图片描述
为了确保LSA 能够可靠送达,当一台路由器收到邻居发送过来的LSU报文时,需要对报文中包合的 LSA进行比对,心训后个ISA斗部的长度为20byte)。图3-9展报文中包含着路由器所确认的LSA的头部(每个LSA头部的长度为20byte)。

八、OSPF的接口网络类型

OSPF的许多功能或特性都是基于接口实现的,当一个按口派泊代RN民矶表、会维护许多OSPF变重,例如只从汝八rTrne)也是其中之一,而且是一个非常重要的认证类型等,接口的网络类型(Network-Type) 也是其中之一,而且是一个非常重要的变量。OSPF 接口的网络类型与该接口采用的数据链路层封装有关,在不同网络类型的接口上OSPE的操作有所不同。
OSPF的接口网络类型:

P2P
MA
BMA
NBMA

OSPF接口网络类型指的是OSPF接口在不同的网络类型默认下的不同工作方式。
在这里插入图片描述
[r2]display ospf interface GigabitEthernet 0/0/0查看OSPF接口工作方式
在华为体系中,将环回接口在OSPF中的开销值定义为0,不会受到外界变化的影响。(修改参考带宽不会影响该值。)
[r2-LoopBack0]ospf network-type broadcast修改OSPF接口网络类型

华为体系将tunnel接口的传输速率定义为64K,实际上虚拟接口不存在传输速率。这样设定的目的是为了让隧道接口的开销值变的很大,导致在存在其他路径时,尽可能的避免走隧道接口,因为隧道接口需要进行复杂的封装和解封装过程,导致效率降低。

全连的MGRE环境MESH所有节点即使中心,也是分支。
[r1-ospf-1]peer 12.0.0.2指定单播邻居一定需要双向指定。
Attempt尝试过度状态,只有在需要手工指定邻居关系的状态下出现,在指定对方后等待对方指定时将处于该状态,一旦对方指定,则将进行后续状态。

  • 1、点对点美型(Point-to-Point.P2P)
    点到点网络指的是在一段链路上只能连接两台路由器的环境。一个典型的例子是PPP链路,当两台路由器通过PPP链路直连时,设备接口上采用的封装协议就是PPP,当这个接口激活OSPF后,OSPF会自动根据该接口的数据链路层封装将其网络类型设置为P2P。另外,当接口采用HDLC 封装时,其OSPF 网络类型缺省也为P2P。OSPF在网络类型为P2P的接口上以组播的方式(相应的组播P地址为224.0.0.5)发送协议报文(Hello报文、DD报文、LSR报文、LSU报文以及LSAck报文)。缺省情况下,P2P类型的接口以10s 为间隔周期性地发送Hello报文
    OSPF在P2P类型的网络中不会选举DR及BDR。
  • 2.广播型多路访问类型(Broadcast Multi-AccessBMA)
    BMA(或者称为 Broadcast)是一个支持广播的网络环境,该网络允许多台路由器接入,任意两台路由器之间都能直接进行二层通信,一台路由器发送出去的广播数据会被所有其他的路由器收到。以太网(Ethernet)是典型的广播型多路访问网络。
    OSPF在BMA类型的接口上通常以组播的方式发送Hello报文、LSU报文及LSAck报文,以单播的形式发送DD报文及LSR报文。当使用组播的方式发送协议报文时,有两个组播地址可能会被使用到–224.0.0.5及224.0,0.6当路由器需要向DR以及BDR发送OSPF 报文时,使用224,0,0.6这个组地址作为报文的目的P地址;当需要向所有的OSPF路由器发送报文时,使用224.0.0.5。缺省情况下,Broadcast类型的接口以10s为间喝周期性地发送Hello报文。
  • 3.非广播型多路访问类型(Non-Broadcast Multi-Access,NBMA)
    NBMA 网络也允许多台路由器接入,但是该网络不具备广播能力,正因为如此,基于组播发送的Hello报文在NBMA网络中可能就会遇到问题。在这种场景中,为了让OSPF路由器之间能够顺利地发现彼此并且正确地建立邻接关系,还需要进一步的配置,例如使用单播的方式来发送OSPF报文等。NBMA网络的一个最为大家熟知的代表是帧中继(Frame-Relay),另一个例子是X25。OSPF在NBMA网络中,也会进行DR及BDR的选举缺省情况下,NBMA类型的接口以30s为间隔周期性地发送Hello报文。
  • 4、点对多点类型(Point-to-Multipoint,P2MP)
    与前面介绍的几种网络类型不同,P2MP并非路由器根据接口的数据链路层封装自动设置的,而是必须通过网络管理员手工指定的。P2MP有点类似于将多条P2P链路的一端进行绑得到的网络。在P2MP网络中无需选举DR、BDR。OSPF在P2MP类型的接口上通常以组播的方式发送Hello报文,以单播的方式发送其他报文缺省情况下,Hel1o报立的发送间隔为30s。

注意:两个路由器的直连接口即使网络类型不匹配,也能够建立起OSPF邻接关系,但是OSPF路由的计算却是极有可能出现问题的,这是因为接口的网络类型会影响到路由器产生的LSA中对该接口的描述,而这将关系到路由器对网络拓扑的理解以及路由的计算。因此,OSPF邻居的互联接口网络类型必须一致
在这里插入图片描述

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

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

相关文章

C++的六大“天选之子“之“构造“与“析构“

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔🍟🌯C语言进阶 🔑个人信条: 🌵知行合一 &#x1f…

【LeetCode】64.最小路径和

题目 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 说明:每次只能向下或者向右移动一步。 示例 1: 输入:grid [[1,3,1],[1,5,1],[4,2,1]] 输出&#…

离多态更近一步

在面向对象的语言里面,封装,继承,多态可谓是在熟悉不过了,当我们每次再去重新认识它们的时候总会有新的发现,为此我也经常感到疑惑,所以在这里和大家一起探讨三个问题,让我们在向多态靠近一点点。 虚表是否真的存在静态区 经常我们都会看见一个问题,虚表到底是存放…

使用show effective grants查看权限

1、问题描述 用户 show grants 显示只有连接权限,但该用户却能执行 sbtest.*下的所有操作 GreatSQL> \s ... Server version: 8.0.32-24 GreatSQL, Release 24, Revision 3714067bc8c ... GreatSQL> show grants; ---------------------------------------…

哪些在线工具能免费转换MP3格式?分享两个方法!

哪些在线工具能免费转换MP3格式?通常来说,MP3格式转换器都具备简洁的界面、便捷的操作以及强大的功能,它们可以将各种流行的视频或音频格式转换成MP3文件,甚至可以制作手机铃声。用户只需要在设置中设定录制时间,即可轻…

MIT 6.830数据库系统 -- lab four

MIT 6.830数据库系统 -- lab four 项目拉取引言事务、锁 & 并发控制事务ACID特性两阶段锁 Recovery and Buffer ManagementGranting Locks(授予锁)练习1 Lock Lifetime练习2 Implementing NO STEAL练习3 事务练习4 死锁和中止练习5 项目拉取 原项目使用ant进行项目构建&am…

勘探开发人工智能应用:初至波拾取

AI在油田主营业务即勘探开发运销和经营管理领域的落地场景,需要的算法、模型及关键技术。 1 初至波拾取 在地震数据采集过程中,由人工震源激发后检波器最先接收到地震波的起跳位置,得到这一位置的过程就是初至拾取。“初至拾取在构建精细近…

AI生成写真照 妙鸭能取代海马体?

只要9.9元和21张照片,就能生成各种风格的个人写真照,界面简洁、卖点吸睛的妙鸭相机突然火了。采用AI技术,它以更低的成本和更高的效率,让用户足不出户“拍写真”,有人直呼,它要抢海马体这类实体照相馆的饭碗…

基于51单片机和proteus的模拟楼道灯系统

此系统是基于51单片机和proteus的仿真设计,功能如下: 1. 系统实时检测楼道光照强度。 2. 光照弱情况下,触摸或声音可开启楼道灯。 3. 光照强情况下,触摸或声音都不能开启楼道灯。 4. 楼道灯开启一段时间(3S&#x…

数据库应用:MySQL MHA高可用集群

目录 一、理论 1.MHA 2.MySQL MHA部署准备 3.MySQL MHA部署 二、实验 1.MHA部署 三、问题 1.中英文符兼容报错 2.MHA测试 ssh 无密码认证语法报错 3.MHA测试 ssh 无密码认证log-bin报错 4.MHA测试 mysql 主从连接情况报错slave replication 5.MHA测试 mysql 主从连…

高质量代码究竟依赖设计还是重构而来?

👉导读 一个有所追求的程序员一定都希望自己能够写出高质量的代码,但高质量代码从何而来呢?有人认为是设计出来的,就像一栋稳固的大厦,如果没有前期优秀的设计那么肯定难逃豆腐渣工程的命运;也有人认为是重…

什么是NQA?

一、什么是NQA? 网络质量分析NQA(Network Quality Analysis)是一种实时的网络性能探测和统计技术,可以对响应时间、网络抖动、丢包率等网络指标进行统计。NQA能够实时监视网络服务质量,在网络发生故障时进行有效的故障…

年内实现全面自动驾驶?快来恶补一下自动驾驶技术吧

在7月6日召开的2023世界人工智能大会上,特斯拉CEO斯克预测,随着人工智能技术的快速发展,大约在今年年末,就会实现全面自动驾驶。 他说,“我之前也做过许多类似的预测,我承认之前的预测也不完全准确&#x…

《中国大学生计算机设计大赛》应用与开发组 “国二省一“ 备赛心得,万字干货 (建议收藏)

💧 《中国大学生计算机设计大赛》备赛心得 \color{#FF1493}{《中国大学生计算机设计大赛》备赛心得} 《中国大学生计算机设计大赛》备赛心得💧 🌷 仰望天空,妳我亦是行人.✨ 🦄 个人主页——微风撞见云的博客…

Python编译过程和执行原理

hello,这里是Token_w的文章,主要讲解python的基础学习,希望对大家有所帮助 整理不易,感觉还不错的可以点赞收藏评论支持,感谢! 目录 一. Python执行原理二. Python内部执行过程2.1 编译过程概述2.2 过程图解…

8.6 PowerBI系列之DAX函数专题-非日期类型的累计聚合

需求 需求1: 需求2: 实现 1.需求1实现: (1)在power query中添加列-添加索引列; (2)根据索引列进行累加计算。 度量值 累计聚合销售额 var current_pro_type selectedvalue(…

iTOP-RK3588开发板编译Buildroot

Buildroot 是一款集成的编译集合包,解决了以前交叉编译麻烦的问题,本小节将介绍 buildroot 镜像的编译流程,分为单独编译和完整全自动编译。 首先输入以下命令,选择 buildroot 系统的配置文件 source buildroot/build/envsetup…

办公楼管理高手:一起来学烟雾监测实用技能!

在现代社会中,安全意识和防患意识越来越受到重视。特别是在大型办公楼等人员密集的场所,火灾的风险不容忽视。 为了保障员工和资产的安全,烟感监控成为一项至关重要的安全措施。烟感监控系统作为火灾预警的关键组成部分,能够及早发…

Ubuntu18.04未安装Qt报qt.qpa.plugin could not load the Qt platform plugin xcb问题的解决方法

在Ubuntu 18.04开发机上安装了Qt 5.14.2,当将其可执行程序拷贝到另一台未安装Qt的Ubuntu 18.04上报错:拷贝可执行程序前,使用ldd将此执行程序依赖的动态库也一起拷贝过去,包括Qt5.14.2/5.14.2/gcc_64/plugins目录系的platforms目录…

实现基于UDP简易的英汉词典

文章目录 实现目标认识相关接口socketbzerobindrecvfromsendto 实现思路和注意事项完整代码Server.hppServer.ccClient.hppClient.cc 运行效果END 实现目标 实现一个服务端和一个客户端,客户端负责发送一个单词,服务端接收到后将翻译后的结果返回发送到…