OSPF理论总结与实验
第1章 OSPF[1]
本章阐述了OSPF协议的特征、术语,OSPF的路由器类型、网络类型、区域类型、LSA类型,OSPF报文的具体内容及作用,描述了OSPF的邻居关系,通过实例让读者掌握OSPF在各种场景中的配置。
本章包含以下内容:
- OSPF的基本概念
- 配置单区域的OSPF
- 配置OSPF的网络类型
- 配置多区域OSPF
1.1 OSPF概述
开放式最短路径优先(Open Shortest Path First,OSPF)是IETF(The Internet Engineering Task Force, 国际互联网工程任务组)开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。目前,针对IPv4协议使用的是OSPF Version 2(RFC2328);针对IPv6协议使用的是OSPF Version 3(RFC2740)。如无特殊说明,本文中所指的OSPF均为OSPF Version 2。[2]
1.1.1 OSPF特征
- OSPF把自治系统(Autonomous System,AS)[3] 划分成逻辑意义上的一个或多个区域。
- OSPF通过LSA(Link State Advertisement)[4] 的形式发布路由。
- OSPF依靠在OSPF区域内各设备间交互OSPF报文来达到路由信息的统一。
- OSPF报文封装在IP报文内,可以采用单播或组播的形式发送。
1.1.2 OSPF术语
- Router ID:用于在自治系统中唯一标识一台运行OSPF的路由器,每台运行OSPF的路由器都有一个Router ID。
- 链路:路由器的接口。
- 链路状态:对接口及接口与相邻路由器的关系的描述。例如接口的信息包括接口的IP地址、掩码、所连接的网络的类型、连接的邻居等。所有这些链路状态的集合形成链路状态数据库。
- COST:OSPF使用COST作为路由器的度量值,
- 每一个激活OSPF的接口都有一个COST值。OSPF接口COST=100M/接口带宽[5] ,其中100M为OSPF的参考带宽(reference-bandwidth[6] )。
- 一条OSPF路由的cost由该路由从路由的起源一路到达本地的所有入接口cost值的总和。
- 区域:共享链路状态信息的一组路由器。在同一个区域内的路由器有相同的链路状态数据库。
- 自治系统:采用同一种路由协议交换路由信息的路由器及其网络构成一个自治系统
- LSA:用来描述路由器和链路的状态,LSA包含的信息有路由器接口的状态和所形成的邻接状态,不同类型的LSA的功能不同。
- 邻居:如果两台路由器共享一条公共数据链路,并且能够协商Hello数据包中所指定的一些参数,它们就开成邻居关系。
- 邻接:相互交换LSA的OSPF邻居关系建立的关系。
- DR[7] (Designated Router):指定路由器。
- BDR(Backup Designated Router):备份指定路由器。
1.1.3 OSPF路由器类型
OSPF的路由器类型如图1-1所示。
图1-1路由器类型
- Backbone Router(骨干路由器)[8] :至少有一个接口属于骨干区域。
- Internal Router(区域内路由器):所有接口都属于同一个OSPF区域
- ABR(Area Border Router,区域边界路由器)[9] :可以同时属于两个以上的区域,但其中一个必须是骨干区域。
- ASBR(AS Boundary Router,自治系统边界路由器):只要一台OSPF设备引入了外部路由的信息,它就成为ASBR。
1.1.4 OSPF网络类型
OSPF的网络类型见表1-1
表1-1 OSPF的网络类型
网络类型 | 链路层协议 | 选择DR | Hello间隔/s | Dead间隔[10] /s | 邻居 |
P2P | PPP、HDLC | 否 | 10 | 40 | 自动发现 |
广播 | Ethernet | 是 | 10 | 40 | 自动发现 |
NBMA | 帧中继 | 是 | 30 | 120 | 管理员配置 |
P2MP | 管理员配置 | 否 | 30 | 120 | 自动发现 |
1.1.5 OSPF区域类型
OSPF的区域类型包括普通区域、Stub区域、NSSA区域,见表2-1所示。
表1-2 OSPF的区域类型
区域类型 | 作用 |
骨干区域 | 骨干区域是连接所有其他OSPF区域的中央区域,通常用area 0表示 |
标准区域 | 标准区域是最通用的区域,它传输区域内、区域间路由和外部路由 |
STUB区域 | 拒绝4、5类LSA 自动下发一条3类的LSA的默认路由[11] |
Totally STUB区域 | 拒绝3、4、5类LSA 自动下发一条3类的LSA的默认路由 |
NSSA | 拒绝4、5类LSA,引入7类LSA 自动下发一条7类的LSA的默认路由 |
Totally NSSA | 拒绝3、4、5类LSA,引入7类LSA 自动下发一条3类和7类的LSA的默认路由 |
1.1.6 OSPF LSA类型
LSA是OSPF进行路由计算的关键依据,OSPF的LSU报文可以携带多种不同类型的LSA,各种类型的LSA拥有相同的报文头部。报文格式见表1-3。
表1-3 LSA的报文头部格式
LS Age | Options | LS type |
Link State ID | ||
Advertising Router | ||
LS sequence number[12] | ||
LS checksum[13] | length[14] |
以下是对报文头部的解释。
- LS Age(链路状态老化时间):此字段表示LSA已经生存的时间,单位是秒。LSA的最大年龄是3600s,每隔1800s更新一次。[15]
- Options(可选项):每一个bit都对应了OSPF所支持的某种特性。
- LS type(链路状态类型):指示本LSA的类型。
- Link State ID(链路状态ID):不同的LSA,对该字段的定义不同。
- Advertising Router(通告路由器):产生该LSA的路由器的Router ID。
- LS Sequence Number(链路状态序列号):当LSA每次有新的实例产生时,序列号就会增加。序列号范围是从0X80000001至0X7FFFFFFF,序列号越大代表越新。[16]
- LS Checksum(校验和):用于保证数据的完整性和准确性。
- Length:是一个包含LSA头部在内的LSA的总长度值。
OSPF中对路由信息的描述都是封装在链路状态通告LSA(Link State Advertisement)中发布出去的,常用的LSA见表1-4。
表1-4 LSA的类型
LSA类型 | LSA作用 |
Router | 每个设备都会产生,描述了设备的链路状态和开销,在所属的区域内传播。 |
Network | 由DR产生,描述本网段的链路状态,在所属的区域内传播。 |
Network-summary | 由ABR产生,描述区域内某个网段的路由,并通告给其它区域 |
ASBR-summary | 由ABR产生,描述到ASBR的路由,通告给除ASBR所在区域的其他相关区域。 |
AS-external | 由ASBR产生,描述到AS外部的路由,通告到所有的区域 |
NSSA | 由ASBR产生,描述到AS外部的路由,仅在NSSA区域内传播。 |
1.1.7 OSPF数据报文类型
OSPF用IP报文直接封装协议报文,协议号为89。OSPF分为5种报文:Hello报文、DD报文、LSR报文、LSU报文和LSAck报文,见表1-5。
表1-5 OSPF报文类型
报文类型 | 作用 |
Hello | 周期性发送,用来发现和维持OSPF邻居关系 |
DD | 描述本地LSDB(Link State Database)的摘要信息,用于两台设备进行数据库同步。 |
LSR | 用于向对方请求所需的LSA。 设备只有在OSPF邻居双方成功交换DD报文后才会向对方发出LSR报文。 |
LSU | 用于向对方发送其所需要的LSA。 |
LSA | 用来对收到的LSA进行确认。 |
1.1.8 路由类型
AS区域内和区域间路由描述的是AS内部的网络结构,AS外部路由则描述了应该如何选择到AS以外目的地址的路由。OSPF将引入的AS外部路由分为Type1和Type2两类。见表1-6
表1-6 OSPF路由类型
路由类型 | 含义 |
Intra Area | 区域内路由。 |
Inter Area | 区域间路由。 |
Type1 |
|
Type2 |
|
1.1.9 OSPF 邻居关系
- Down:邻居会话的初始阶段,表明没有在邻居失效时间间隔内收到来自邻居路由器的Hello数据包。
- Attempt:该状态仅发生在NBMA网络中,表明对端在邻居失效时间间隔(dead interval)超时前仍然没有回复Hello报文。此时路由器依然每发送轮询Hello报文的时间间隔(poll interval)向对端发送Hello报文。
- Init:收到Hello报文后状态为Init。
- 2-way:收到的Hello报文中包含有自己的Router ID,则状态为2-way;如果不需要形成邻接关系则邻居状态机就停留在此状态,否则进入Exstart状态。
- Exstart:开始协商主从关系,并确定DD的序列号,此时状态为Exstart。
- Exchange:主从关系协商完毕后开始交换DD报文,此时状态为Exchange。
- Loading:DD报文交换完成即Exchange done,此时状态为Loading。
- Full:LSR重传列表为空,此时状态为Full。
1.2 OSPF的基本配置
1.2.1实验1:配置单区域OSPF[17]
1.实验目的
- 实现单区域OSPF的配置
- 描述OSPF在多路访问网络中邻居关系建立的过程
2.实验拓扑
单区域的OSPF实验拓扑如图1-2所示。
图1-2 配置单区域OSPF
3.实验步骤
- IP地址的配置[18]
R1的配置
<Huawei>system-view
[Huawei]undo info-center enable
[Huawei]sysname R1
[R1]interface g0/0/0
[R1-GigabitEthernet0/0/0]ip address 12.1.1.1 24
[R1-GigabitEthernet0/0/0]quit
[R1]interface LoopBack 0
[R1-LoopBack0]ip address 1.1.1.1 24
[R1-LoopBack0]quit
R2的配置
<Huawei>system-view
[Huawei]undo info-center enable
[Huawei]sysname R2
[R2]interface g0/0/1
[R2-GigabitEthernet0/0/1]ip address 12.1.1.2 24
[R2-GigabitEthernet0/0/1]quit
[R2]interface g0/0/0
[R2-GigabitEthernet0/0/0]ip address 23.1.1.2 24
[R2-GigabitEthernet0/0/0]quit
[R2]interface LoopBack 0
[R2-LoopBack0]ip address 2.2.2.2 24
[R2-LoopBack0]quit
R3的配置
<Huawei>system-view
[Huawei]undo info-center enable
[Huawei]sysname R3
[R3]interface g0/0/1
[R3-GigabitEthernet0/0/1]ip address 23.1.1.3 24
[R3-GigabitEthernet0/0/1]quit
[R3]interface LoopBack 0
[R3-LoopBack0]ip address 3.3.3.3 32
[R3-LoopBack0]quit
- 运行OSPF[19]
R1的配置
[R1]ospf router-id 1.1.1.1 //启用OSPF,设置它的ROUTER-ID 1.1.1.1
[R1-ospf-1]area 0 //区域0
[R1-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255 //宣告网络12.1.1.0
[R1-ospf-1-area-0.0.0.0]network 1.1.1.0 0.0.0.255 //宣告网络1.1.1.0
[R1-ospf-1-area-0.0.0.0]quit
R2的配置
[R2]ospf router-id 2.2.2.2
[R2-ospf-1]area 0
[R2-ospf-1-area-0.0.0.0]network 12.1.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]network 23.1.1.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]network 2.2.2.0 0.0.0.255
[R2-ospf-1-area-0.0.0.0]quit
R3的配置
[R3]ospf router-id 3.3.3.3
[R3-ospf-1]are
[R3-ospf-1]area 0
[R3-ospf-1-area-0.0.0.0]net
[R3-ospf-1-area-0.0.0.0]network 23.1.1.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]net
[R3-ospf-1-area-0.0.0.0]network 3.3.3.0 0.0.0.255
[R3-ospf-1-area-0.0.0.0]quit
【技术要点1】进程ID
OSPF的进程ID的编号范围为1-65535,只在本地有效,不同路由器的进程ID号可以不同
【技术要点2】Router ID
- Router ID用于在自治系统中唯一标识一台运行OSPF的路由器,它是一个32位的无符号整数。
- Router ID选举规则如下:[20]
- 手动配置OSPF路由器的Router ID(建议手动配置)
- 如果没有手动配置Router ID,则路由器使用Loopback接口中最大的IP地址作为Router ID
- 如果没有配置Loopback接口,则路由器使用物理接口中最大的IP地址作为Router ID
4.实验调试
- [21] 在R1上查看当前设备所有激活OSPF的接口信息
<R1>display ospf interface all
OSPF Process 1 with Router ID 1.1.1.1 //OSPF的进程为1,router-id为1.1.1.1
Interfaces
Area: 0.0.0.0 (MPLS TE not enabled) //OSPF的区域为0
Interface: 12.1.1.1 (GigabitEthernet0/0/0)
Cost: 1 State: DR Type: Broadcast MTU: 1500
Priority: 1 //g0/0/0的开销为1,它是DR,网络类型为广播,MTU为1500,优选级为1
Designated Router: 12.1.1.1 //DR为12.1.1.1
Backup Designated Router: 12.1.1.2 //BDR为12.1.1.2
Timers: Hello 10 , Dead 40 , Poll 120 , Retransmit 5 , Transmit Delay 1
Interface: 1.1.1.1 (LoopBack0)
Cost: 0 State: P-2-P Type: P2P MTU: 1500
Timers: Hello 10 , Dead 40 , Poll 120 , Retransmit 5 , Transmit Delay 1
- [22] 在R1上查看当前设备的邻居状态
<R1>display ospf peer
OSPF Process 1 with Router ID 1.1.1.1
Neighbors
Area 0.0.0.0 interface 12.1.1.1(GigabitEthernet0/0/0)'s neighbors
Router ID: 2.2.2.2 Address: 12.1.1.2
State: Full Mode:Nbr is Master Priority: 1 //邻居状态为full,邻居为Master
DR: 12.1.1.1 BDR: 12.1.1.2 MTU: 0
Dead timer due in 34 sec
Retrans timer interval: 5
Neighbor is up for 00:29:56
Authentication Sequence: [ 0 ]
- 在R1上查看当前设备的LSDB
<R1>display ospf lsdb
OSPF Process 1 with Router ID 1.1.1.1
Link State Database
Area: 0.0.0.0
Type LinkState ID AdvRouter Age Len Sequence Metric
Router 2.2.2.2 2.2.2.2 109 60 8000000A 1
Router 1.1.1.1 1.1.1.1 169 48 80000007 1
Router 3.3.3.3 3.3.3.3 114 48 80000005 1
Network 23.1.1.2 2.2.2.2 109 32 80000003 0
Network 12.1.1.1 1.1.1.1 169 32 80000003 0
- 在R1上查看当前设备的OSPF路由表
<R1>display ospf routing
OSPF Process 1 with Router ID 1.1.1.1
Routing Tables
Routing for Network
Destination Cost Type NextHop AdvRouter Area
1.1.1.1/32 0 Stub 1.1.1.1 1.1.1.1 0.0.0.0
12.1.1.0/24 1 Transit 12.1.1.1 1.1.1.1 0.0.0.0
2.2.2.2/32 1 Stub 12.1.1.2 2.2.2.2 0.0.0.0
3.3.3.3/32 2 Stub 12.1.1.2 3.3.3.3 0.0.0.0
23.1.1.0/24 2 Transit 12.1.1.2 2.2.2.2 0.0.0.0
Total Nets: 5
Intra Area: 5 Inter Area: 0 ASE: 0 NSSA: 0
- 在R1上开启以下命令,观察OSPF的状态机
<R1>terminal debugging //使能终端显示Debug信息功能
<R1>terminal monitor //使能终端显示信息中心发送信息的功能
<R1>debugging ospf event //用来查看OSPF协议工作过程中的所有事件
<R1>debugging ospf packet //用来查看OSPF协议工作过程中的所有的报文
<R1>system-view
[R1]interface g0/0/0
[R1-GigabitEthernet0/0/0]shutdown
[R1-GigabitEthernet0/0/0]quit
[R1]interface g0/0/0
[R1-GigabitEthernet0/0/0]undo shutdown
[R1-GigabitEthernet0/0/0]quit
[R1]info-center enable
Sep 2 2022 15:13:00-08:00 R1 %%01IFPDT/4/IF_STATE(l)[0]:Interface GigabitEthernet0/0/0 has turned into UP state.
[R1]
Sep 2 2022 15:13:00-08:00 R1 %%01IFNET/4/LINK_STATE(l)[1]:The line protocol IP on the interface GigabitEthernet0/0/0 has entered the UP state.
[R1]
[R1]
Sep 2 2022 15:13:00.191.7-08:00 R1 RM/6/RMDEBUG:
FileID: 0xd017802c Line: 1295 Level: 0x20
OSPF 1: Intf 12.1.1.1 Rcv InterfaceUp State Down -> Waiting.
//接口UP后,OSPF状态从Down进入到Waiting状态。[23]
[R1]
Sep 2 2022 15:13:00.191.8-08:00 R1 RM/6/RMDEBUG:
FileID: 0xd0178025 Line: 559 Level: 0x20
OSPF 1: SEND Packet. Interface: GigabitEthernet0/0/0
[R1]
Sep 2 2022 15:13:00.191.9-08:00 R1 RM/6/RMDEBUG: Source Address: 12.1.1.1
[R1]
Sep 2 2022 15:13:00.191.10-08:00 R1 RM/6/RMDEBUG: Destination Address: 224.0.0.5
[R1]
[R1]
Sep 2 2022 15:13:00.191.11-08:00 R1 RM/6/RMDEBUG: Ver# 2, Type: 1 (Hello)
[R1]
Sep 2 2022 15:13:00.191.12-08:00 R1 RM/6/RMDEBUG: Length: 44, Router: 1.1.1.1
[R1]
Sep 2 2022 15:13:00.191.13-08:00 R1 RM/6/RMDEBUG: Area: 0.0.0.0, Chksum: fa9c
[R1]
Sep 2 2022 15:13:00.191.14-08:00 R1 RM/6/RMDEBUG: AuType: 00
[R1]
Sep 2 2022 15:13:00.191.15-08:00 R1 RM/6/RMDEBUG: Key(ascii): * * * * * * * *
[R1]
Sep 2 2022 15:13:00.191.16-08:00 R1 RM/6/RMDEBUG: Net Mask: 255.255.255.0
[R1]
Sep 2 2022 15:13:00.191.17-08:00 R1 RM/6/RMDEBUG: Hello Int: 10, Option: _E_
[R1]
Sep 2 2022 15:13:00.191.18-08:00 R1 RM/6/RMDEBUG: Rtr Priority: 1, Dead Int: 40
[R1]
Sep 2 2022 15:13:00.191.19-08:00 R1 RM/6/RMDEBUG: DR: 0.0.0.0
[R1]
Sep 2 2022 15:13:00.191.20-08:00 R1 RM/6/RMDEBUG: BDR: 0.0.0.0
[R1]
Sep 2 2022 15:13:00.191.21-08:00 R1 RM/6/RMDEBUG: # Attached Neighbors: 0
[R1]
Sep 2 2022 15:13:00.191.22-08:00 R1 RM/6/RMDEBUG:
[R1]
Sep 2 2022 15:13:00.191.23-08:00 R1 RM/6/RMDEBUG:
FileID: 0xd017802c Line: 1409 Level: 0x20
OSPF 1 Send Hello Interface Up on 12.1.1.1 //R1在接口上发送Hello包
[R1]
Sep 2 2022 15:13:00.641.1-08:00 R1 RM/6/RMDEBUG:
FileID: 0xd0178024 Line: 2236 Level: 0x20
OSPF 1: RECV Packet. Interface: GigabitEthernet0/0/0
[R1]
Sep 2 2022 15:13:00.641.2-08:00 R1 RM/6/RMDEBUG: Source Address: 12.1.1.2
[R1]
Sep 2 2022 15:13:00.641.3-08:00 R1 RM/6/RMDEBUG: Destination Address: 224.0.0.5
[R1]
Sep 2 2022 15:13:00-08:00 R1 %%01OSPF/4/NBR_CHANGE_E(l)[2]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=2.1.1.12, NeighborEvent=HelloReceived, NeighborPreviousState=Down, NeighborCurrentState=Init)
//从邻居收到Hello包,状态从Down进入到Init
[R1]
Sep 2 2022 15:13:00.641.5-08:00 R1 RM/6/RMDEBUG: Ver# 2, Type: 1 (Hello)
[R1]
Sep 2 2022 15:13:00.641.6-08:00 R1 RM/6/RMDEBUG: Length: 44, Router: 2.2.2.2
[R1]
Sep 2 2022 15:13:00.641.7-08:00 R1 RM/6/RMDEBUG: Area: 0.0.0.0, Chksum: f89a
[R1]
Sep 2 2022 15:13:00.641.8-08:00 R1 RM/6/RMDEBUG: AuType: 00
[R1]
Sep 2 2022 15:13:00.641.9-08:00 R1 RM/6/RMDEBUG: Key(ascii): * * * * * * * *
[R1]
Sep 2 2022 15:13:00.641.10-08:00 R1 RM/6/RMDEBUG: Net Mask: 255.255.255.0
[R1]
Sep 2 2022 15:13:00.641.11-08:00 R1 RM/6/RMDEBUG: Hello Int: 10, Option: _E_
[R1]
Sep 2 2022 15:13:00.641.12-08:00 R1 RM/6/RMDEBUG: Rtr Priority: 1, Dead Int: 40
[R1]
Sep 2 2022 15:13:00.641.13-08:00 R1 RM/6/RMDEBUG: DR: 0.0.0.0
[R1]
Sep 2 2022 15:13:00.641.14-08:00 R1 RM/6/RMDEBUG: BDR: 0.0.0.0
[R1]
Sep 2 2022 15:13:00.641.15-08:00 R1 RM/6/RMDEBUG: # Attached Neighbors: 0
[R1]
Sep 2 2022 15:13:00.641.16-08:00 R1 RM/6/RMDEBUG:
[R1]
Sep 2 2022 15:13:00.641.17-08:00 R1 RM/6/RMDEBUG:
FileID: 0xd017802d Line: 1136 Level: 0x20
OSPF 1: Nbr 12.1.1.2 Rcv HelloReceived State Down -> Init.
[R1]
Sep 2 2022 15:13:10-08:00 R1 %%01OSPF/4/NBR_CHANGE_E(l)[3]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=2.1.1.12, NeighborEvent=2WayReceived, NeighborPreviousState=Init, NeighborCurrentState=2Way)
//从邻居收到的Hello包,并在Hello包中看到了自己的ROUTER-ID[24] ,状态从Init进到2way
[R1]
Sep 2 2022 15:13:39-08:00 R1 %%01OSPF/4/NBR_CHANGE_E(l)[4]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=2.1.1.12, NeighborEvent=AdjOk?, NeighborPreviousState=2Way, NeighborCurrentState=ExStart)
//发送DD报文,进入到ExStart状态
[R1]
Sep 2 2022 15:13:44-08:00 R1 %%01OSPF/4/NBR_CHANGE_E(l)[5]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=2.1.1.12, NeighborEvent=NegotiationDone,NeighborPreviousState=ExStart,NeighborCurrentState=Exchange) //交互DD报文并发送LSR、LSU进入到Exchange
[R1]
Sep 2 2022 15:13:44-08:00 R1 %%01OSPF/4/NBR_CHANGE_E(l)[6]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=2.1.1.12, NeighborEvent=ExchangeDone,NeighborPreviousState=Exchange,NeighborCurrentState=Loading) //交互完毕进入到Loading状态
[R1]
Sep 2 2022 15:13:44-08:00 R1 %%01OSPF/4/NBR_CHANGE_E(l)[7]:Neighbor changes event: neighbor status changed. (ProcessId=256, NeighborAddress=2.1.1.12, NeighborEvent=LoadingDone, NeighborPreviousState=Loading, NeighborCurrentState=Full
)
//LSA同步完成进入Full状态
本文出自作者的华为HCIA-DATACOM认证实验指南
相关文章:

OSPF理论总结与实验
第1章 OSPF[1] 本章阐述了OSPF协议的特征、术语,OSPF的路由器类型、网络类型、区域类型、LSA类型,OSPF报文的具体内容及作用,描述了OSPF的邻居关系,通过实例让读者掌握OSPF在各种场景中的配置。 本章包含以下内容: …...

浅谈安科瑞无线测温产品在巴西某工厂的应用
摘 要:高压开关设备是变电站和配电站中保证电力系统安全运行的重要设备之一,因此,开关柜的稳定运行对于整个电力系统有非常重要的意义。设备老化、长期高负荷运行都可能使设备局部温度过高而发生火灾,因此,对变电站内的敏感设备进行温度检测变得尤为重要…...
RabbitMQ 命令
Docker # 进入容器 > docker exec -it rabbitmq /bin/bash# 帮助 > rabbitmq-service help# 查看所有队列 > rabbitmqctl list_queues Windows 进入安装目录【D:\Program Files\RabbitMQ Server\rabbitmq_server-3.9.10\sbin】输入cmd # 帮助 > rabbitmq-servic…...

数据库系列之简要对比下GaussDB和OpenGauss数据库
GaussDB作为一款企业级的数据库产品,和开源数据库OpenGauss之间又是什么样的关系,刚开始接触的时候是一头雾水,因此本文简要对比下二者的区别,以加深了解。 1、GaussDB和OpenGauss数据库简要对比 GaussDB是华为基于PostgreSQL数据…...
FFmpeg的AVInputFormat
文章目录 结构体定义操作函数支持的AVOutputFormat 通过上面的分析,基本可以看到ffmpeg的套路了,首先一个context上下文,上下文里面一个priv_data 指针,然后再插件结构体中有一个priv_data_size,然后回调函数。 结构体…...

SQL命令---删除字段
介绍 使用sql语句删除表字段。 命令 alter table 表名 drop 字段名;例子 删除a表中的name字段。 alter table a drop name;下面是执行删除后的表结构:...
深入探讨 Python 中的装饰器和上下文管理器
Python 作为一门灵活而强大的语言,提供了许多高级特性,其中装饰器(Decorators)和上下文管理器(Context Managers)是其中两个非常有用的概念。这两个功能性特性提供了对代码结构和行为进行修改和控制的强大工…...
比whatsapp效果好---Google Messages RCS协议消息推送
这段时间由于使用谷歌手机Pixel 7 ( Android13)研究改机room,看了很多相关的资料,测试研究了谷歌生态很多软件功能。结果就是改机Room还没编译成功,反而是测试出Google Messages群发功能的bug,算是一个惊喜…...

HBuilder X
选择一款编程软件有以下几个好处: (1)提高效率:编程软件通常强调代码编辑和自动完成,可以帮助程序员更快速、更准确地输入代码。 (2)降低错误率:编程软件还可以检测代码中的错误&a…...

异地现场工控设备,如何实现远程配置、调试?
南京某企业专注于工业物联领域,在相关项目中往往会在各个点位部署基于Linux系统的中控主机,实现各类物联设备信息的采集、汇总。但是,由于各点位分散多地,且数量达到了上百个,虽然中控主机具备4G物联网接入能力&#x…...

C++报错:error C2238: 意外的标记位于“;”之前
报错信息如下: 编译遇见这样的错误信息主要有一下几种: 情况一: 多数情况下出现这种问题的原因是因为头文件重复包含:即头文件A包含了B,头文件B又包含了A,导致编译器在加载头文件时陷入死循环。 解决办法…...

五、Microsoft群集服务(MSCS)环境的搭建
一、【目的】 学会利用Windows Server布置群集环境。 二、【设备】 FreeNAS11.2,Windows Server 2019 三、【要求】 学会利用Windows Server布置群集环境,掌握处理问题的能力。 配置表: 节点公网IP(public)内网IP(private)群集IP(clust…...

通义千问 Qwen-72B-Chat在PAI-DSW的微调推理实践
01 引言 通义千问-72B(Qwen-72B)是阿里云研发的通义千问大模型系列的720亿参数规模模型。Qwen-72B的预训练数据类型多样、覆盖广泛,包括大量网络文本、专业书籍、代码等。Qwen-72B-Chat是在Qwen-72B的基础上,使用对齐机制打造的…...

web应用体系以及windows网络常见操作应用
本课程目标 1.Dos命令(必须掌握) 2.网络体系(笔试选择填空题) 3.搭建windows测试环境 一、Dos命令 1.DOS窗口启动 启动方式1.进入DOS页面:win+R,键入cmd 启动方式2.开始-运行--输入cmd-回车,此时将出现一个显示命令提示符的窗口,如下图 2、常见的Dos命令: 1、cd…...
FFmpeg 安装配置
FFmpeg 安装配置 依赖包 sudo apt-get install -y autoconf automake bzip2 cmake freetype-devel gcc gcc-c git libtool make mercurial pkgconfig zlib-devel x264-develsudo apt-get install yasm -y安装 wget https://ffmpeg.org/releases/ffmpeg-4.2.3.tar.bz2tar -…...

14:00面试,14:08就出来了,问的问题有点变态。。。。。。
从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到5月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%…...

vue3 添加编辑页使用 cron 表达式生成
示例效果图 1、添加组件 <template><div class"v3c"><ul class"v3c-tab"><li class"v3c-tab-item" :class"{ v3c-active: tabActive 1 }" click"onHandleTab(1)">秒</li><li class&qu…...

洛谷P1722 矩阵Ⅱ——卡特兰数
传送门: P1722 矩阵 II - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)https://www.luogu.com.cn/problem/P1722 用不需要除任何数的公式来求。 #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstdio> #include<cmath> #includ…...

Unity | Shader基础知识(第六集:语法<如何加入外部颜色资源>)
目录 一、本节介绍 1 上集回顾 2 本节介绍 二、语法结构 1 复习 2 理论知识 3 Shader里声明的写法 4 Properties和SubShader毕竟不是一家人 三、 片元着色器中使用资源 四、代码实现 五、全部代码 六、下集介绍 相关阅读 Unity - Manual: Writing Surface Shaders…...

使用opencv的Laplacian算子实现图像边缘检测
1 边缘检测介绍 图像边缘检测技术是图像处理和计算机视觉等领域最基本的问题,也是经典的技术难题之一。如何快速、精确地提取图像边缘信息,一直是国内外的研究热点,同时边缘的检测也是图像处理中的一个难题。早期的经典算法包括边缘算子方法…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
测试markdown--肇兴
day1: 1、去程:7:04 --11:32高铁 高铁右转上售票大厅2楼,穿过候车厅下一楼,上大巴车 ¥10/人 **2、到达:**12点多到达寨子,买门票,美团/抖音:¥78人 3、中饭&a…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
2023赣州旅游投资集团
单选题 1.“不登高山,不知天之高也;不临深溪,不知地之厚也。”这句话说明_____。 A、人的意识具有创造性 B、人的认识是独立于实践之外的 C、实践在认识过程中具有决定作用 D、人的一切知识都是从直接经验中获得的 参考答案: C 本题解…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
JavaScript基础-API 和 Web API
在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...