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 边缘检测介绍 图像边缘检测技术是图像处理和计算机视觉等领域最基本的问题,也是经典的技术难题之一。如何快速、精确地提取图像边缘信息,一直是国内外的研究热点,同时边缘的检测也是图像处理中的一个难题。早期的经典算法包括边缘算子方法…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
多模态图像修复系统:基于深度学习的图片修复实现
多模态图像修复系统:基于深度学习的图片修复实现 1. 系统概述 本系统使用多模态大模型(Stable Diffusion Inpainting)实现图像修复功能,结合文本描述和图片输入,对指定区域进行内容修复。系统包含完整的数据处理、模型训练、推理部署流程。 import torch import numpy …...
【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!
本文介绍了一种名为AnomalyAny的创新框架,该方法利用Stable Diffusion的强大生成能力,仅需单个正常样本和文本描述,即可生成逼真且多样化的异常样本,有效解决了视觉异常检测中异常样本稀缺的难题,为工业质检、医疗影像…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
ubuntu清理垃圾
windows和ubuntu 双系统,ubuntu 150GB,开发用,基本不装太多软件。但是磁盘基本用完。 1、查看home目录 sudo du -h -d 1 $HOME | grep -v K 上面的命令查看$HOME一级目录大小,发现 .cache 有26GB,.local 有几个GB&am…...
