一文搞懂STP(从原理到配置)

news2025/2/14 6:14:28

一、STP出现的背景

1. 单点故障

如图9-1所示,PC1和PC2通过LSW1相互通信,如果LSW1出现了故障,那么PC1和PC2将不能相互通信,这种现象我们称之为单点故障。为了解决这个问题,我们提出了冗余的拓扑结构。

图9-1单点故障

2. 冗余

如图9-2所示,PC1和PC2相互通信可以通过LSW1也可以通过LSW2,比如PC1和PC2相互通信通过LSW1,如果LSW1出了问题,那么PC1和PC2通信可以通过LSW2相互通信,通过这种冗余的拓扑结构解决了单点故障的问题,但是它又带来了新的问题。

图9-2 冗余的拓扑结构

3. 冗余带来新的问题

首先,假设所有的交换机的MAC地址表都为空,PC1和PC2通信,PC1发送一个广播的数据帧其转发流程如图9-3所示,它会形成一个顺时钟的环路。

① 从PC1发送给HUB1。

② HUB1收到的是一个广播帧,复制和放大,分别发送的LSW1和LSW2(注:我们只分析发送给LSW1的数据帧)。

③ LSW1收到数据帧以后,基于源MAC地址学习(G0/0/1-A),因为收到的是一个广播帧,除源端口以外所有端口转发,所以数据帧发送给了HUB2。

④ HUB2收到数据帧以后,复制和放大,把数据帧发送给PC2和LSW2。

⑤ LSW2收到数据帧以后,基于源MAC地址学习(G0/0/3-A),因为收到的是一个广播帧,除源端口以外所有端口转发,数据帧发送给HUB1

⑥ HUB1收到数据帧以后,复制和放大,把数据帧发送给PC1和LSW1,这样就形成了一个顺时钟的环路。

图9-3 顺时针的环路

接下来我们再看HUB1发送给LSW2的数据帧怎么转发,它的转发流程如图9-4所示,它会形成一个逆时钟的环路。

① HUB1收到这个数据帧,复制和放大,把数据帧转发给LSW2。

② LSW2收到数据帧以后,基于源MAC地址学习(G0/0/4-A),因为收到的是一个广播帧,所以会除源端口以外所有端口转发。这个数据帧会发达给HUB2。

③ HUB2收到数据帧以后,复制和放大,把数据帧发送给PC2和LSW1。

④ LSW1收到数据帧以后,基于源MAC地址学习(G0/0/2-A),因为收到的是一个广播帧,所以会除源端口以外所有端口转发,它会把数据帧转发给HUB1。

⑤ HUB1收到数据帧以后,复制和放大,它会把数据帧转发给PC1和LSW2。

图9-4 逆时钟的环路

通过以上分析我们可以得出,冗余的网络拓扑可以带来以下问题:

环路产生广播风暴,广播风暴会导致网络瘫痪。

MAC地址表震荡导致MAC地址表项被破坏。

多帧复制,PC2会收到N个广播帧。

4. STP

以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路,但是这也带来了网络环路的问题。网络环路会引发广播风暴和MAC地址表震荡等问题,导致用户通信质量差,甚至通信中断。为了解决交换网络中的环路问题,IEEE提出了基于802.1D标准的生成树协议STP(Spanning Tree Protocol)。STP是局域网中的破环协议,运行该协议的设备通过彼此交互信息来发现网络中的环路,并有选择地对某些端口进行阻塞,最终将环形网络结构修剪成无环路的树形网络结构,达到破除环路的目的。另外,如果当前活动的路径发生故障,STP还可以激活冗余备份链路,恢复网络连通性。

二、 STP的选举

STP 是通过把整个存在环路的交换网络计算出一棵无环路的交换树来实现环路消除的

基本原则如下。

① 整个交换网络中选举一个交换机担当根桥,其他的交换机均为非根桥。

② 每个非根桥交换机选举一个根端口。

③ 每个物理网段选举一个指定端口。

④ 阻塞非根桥上的非根端口和非指定端口。

虽然STP 中有3种端口角色,但实际只有根端口和指定端口这两种是可转发用户数

据且呈转发状态的,其他均为预备端口,呈阻塞状态。

1.选择根桥

网络初始化时,网络中所有的STP设备都认为自己是”根桥”,根桥ID为自身的设备ID。通过交换配置消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。

桥ID=bridge ID+MAC地址,bridge ID的取值范围为0-65535(必须是4096的倍数)。

读者可以这样理解:

第一步:比较bridge ID,越小越优,如图9-5所示,SW1的bridge ID为4096,SW2的bridge ID为4096,SW3的bridge ID为0,通过比较可以看到SW3的bridge ID最小,所以SW3成为了根网桥。SW2与SW3我们称之为非根网桥。

9-5 比较bridge ID

第二步:如果bridge ID相同,我们再比较MAC地址,越小越优,如图9-6所示,三台交换机的bridge ID都为4096,通过比较bridge ID我们不能确认哪台交换机是根桥,所以我们要比较它们的MAC地址,SW1的MAC地址为4c1f-aabc-102a,SW2的MAC地址为4c1f-aabc-102b,SW3的MAC地址为4c1f-aabc-102c,我们可以看出SW1的MAC最小,所以SW1为根桥,SW2与SW2我们称之为非根网桥。

9-6 比较MAC地址

【说明】

u 网络中拥有最小桥ID的交换机成为根桥。

u 在一个连续的STP交换网络中只会存在一个根桥。

u 根桥的角色是可抢占的。

u 为了确保交换网络的稳定,建议提前规划STP组网,并将规划为根桥的交换机的桥优先级设置为最小值0。

2.选择根端口

我们选出了根桥之后,剩下的交换机我们把它叫做非根网桥,每一个非根网桥有且仅有一个根端口,接下来我们来看一下,根端口的选举原则:

第一步:到根网桥的开销最小

华为在其交换设备上定义了3种端口成本的计算方法,见表9-1,默认是IEEE802.1t标准,并可使用stp pathcost-standard命令来修改默认的端口成本的计算方法。

stp pathcost-standard{dot1d-1998|dot1t|legacy}

表9-1 三种方法的默认成本值

带宽802.1d-1998标准802.1t华为
10M1002000000200000
100M19200000200
1000M42000020
10G220002
40G15001

如图9-7所示,SW3为根桥,SW1和SW2为非根桥,SW1和SW2上有且仅有一个根端口,所以本网络中有两个根端口,以SW1为例,在SW1上要选一个根端口出来,SW1的G0/0/1到根桥的开销为2000,SW1的G0/0/2到达根桥的开销为4000,所以SW1的G0/0/1成为了根端口。

9-7 根端口的选举1

第二步:直连网桥的bridge-id最小。

如图9-8所示,SW1为根网桥,SW2、SW2、SW3有且仅有一个根端口,所以本网络中有三个根端口,以SW4为例,在SW4上要选出一个根端口,但是SW4上的G0/0/1和G0/0/2到根网桥的开销相同,所以比较不出来,SW4上的G0/0/1的直连网桥为SW2,它的bridge-id为32768.4c1f-aabc-102a,SW4上的G0/0/2的直连网桥为SW3,它的bridge-id为32768.4c1f-aabc-102b,SW3的bridge-id最小,所以G0/0/2成为了根端口。

图9-8 根端口的选举2

第三步:比较对方的端口ID。

端口ID是2个字节,其中,端口优先级占一个字节,端口号占1个字节。但是配置时端口优先级仅能配置高4位,后12位当成端口号(端口号系统自己分配,不可调)。默认下,端口优先级为128。

如图9-9所示,SW1为根桥,SW4为非根网桥,本网络中只有一个根端口,在SW4上要选一个根端口,第一步:到根桥的开销最小,比较不出来。第二步:直连网桥的bridge-id最小,也比较不出来。第三步:比较对方的端口ID,SW4上的G0/0/1对方的端口号为SW1上的G0/0/1,它的端口ID=128.2,SW4上的G0/0/2对方的端口号为SW1的G0/0/2,它的端口ID=128.3,128.2<128.3,所以G0/0/1被选举成为根端口。

图9-9 根端口的选举3

【说明】

u 每一台非根桥交换机都会在自己的接口中选举出一个接口。

u 非根桥交换机上有且只会有一个根接口。

u 当非根桥交换机有多个接口接入网络中时,根接口是其收到最优配置BPDU的接口。

u 可以形象地理解为,根接口是每台非根桥上”朝向”根桥的接口。

3.选择指定端口

选好了根桥和根端口,接下我我们要选择指定端口,每一个网段有且仅有一个指定端口,下面我们来看一下指定端口的选举原则:

第一步:到根网桥的开销最小

如图9-10所示,SW1为根桥,在本网络中有一共有三个指定端口,以SW1和SW3之间线网段为例,SW1的G0/0/1到达根网桥的开销为20000,SW3的G0/0/2到根网桥的开销为0,所以G0/0/2为指定端口。

图9-10 指定端口的选举1

第二步:所在网桥的bridge-id最小

如图9-10所示,SW1与SW2所在的网段要有一个指定端口,SW1的G0/0/1和SW2的G0/0/2到达根网桥的开销是一样的,所以比较第二步,SW1的G0/0/1所在网桥的bridge-id为32768.4c1f-aabc-102a,SW2的G0/0/2所在网桥的bridge-id为32768.4c1f-aabc-102b,所以G0/0/1成为了指定端口。

第三步:比较本端口的端口ID

如图9-11所示,在这个网络里面一定有一个指定端口,通过指定端口的比较原则第一条和第二条都比较不出来,G0/0/1的端口ID=128.2,G0/0/2的端口ID=128.3,所以G0/0/1成为了指定端口。

图9-11 指定端口选举2

4.阻塞端口

非根非指定端口,在STP协议中将会被阻塞

如图9-12所示,第一步:选根桥,三台交换机的优先级都为4096,通过比较MAC地址,SW1被选举为根桥。第二步:选根端口,在SW2上,通过比较到达根网桥的开销,可以选出G0/0/1为根端口,在SW3上,通过比较到达根网桥的开销,可以选出G0/0/1为根端口。第三步:选择指定端口,在SW1上G0/0/0和G0/0/1都是指定端口,SW2的G0/0/2和SW3的G0/0/2通过比较自己的BID,可以选出SW2的G0/0/2为指定端口,SW3的G0/0/2是非根非指定端口,所以会被阻塞。

9-12阻塞端口

5.STP的端口状态

运行STP协议的设备的端口存在5种端口状态,分别为Disabled、Listening、Learning、Forwarding、Blocking,见表9-3。

表9-3 STP端口状态

端口状态说明
Disabled端口状态为Down,不处理BPDU报文,也不转发用户流量。
Blocking端口仅仅接收并处理BPDU,不转发用户流量。
Listening过渡状态,开始生成树计算,端口可以接收和发送BPDU,但不转发用户流量。
Learning过渡状态,建立无环的MAC地址转发表,不转发用户流量。
Forwarding端口可以接收和发送BPDU,也转发用户流量。只有根端口或指定端口才能进入Forwarding状态。

STP的端口状态迁移如图9-13所示,STP的端口状态章的转换条件如下:

① 接口初始化或激活,自动进入阻塞状态

② 接口被选举为根接口或指定接口,自动进入侦听状态

③ 转发延迟计时器超时且接口依然为根接口或指定接口

④ 接口不再是根接口或指定接口或指定状态

⑤ 接口被禁用或者链路失效

图9-13 STP的端口状态转换

三、STP的报文

在前面的章节中介绍了桥ID、路径开销和端口ID等信息,所有这些信息都是通过BPDU协议报文传输。BPDU有两种类型分别为配置BPDU和TCN BPDU:

u 配置BPDU是一种心跳报文,只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。

u TCN BPDU是在设备检测到网络拓扑发生变化时才发出。

BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00,Length/Type字段为MAC数据长度,后面是LLC头,LLC之后是BPDU报文头。以太网数据帧格式

1.STP报文格式

生成树协议通过交互BPDU报文来计算一棵无环树,BPDU报文格式如图9-14所示,

图9-14 BPDU报文格式

表9-4 BPDU报文格式说明

字节字段描述
2PID协议ID ,对于STP而言,该字段的值总为0
1PVI协议版本ID,对于STP而言,该字段的值总为0
1BPDU
Type
指示本BPDU的类型,若值为0x00,则表示本报文为配置BPDU;若值为0x80,则为TCN BPDU
1Flags标志,STP只使用了该字段的最高及最低两个比特位,最低位是TC(Topology Change,拓扑变更)标志,最高位是TCA(Topology Change Acknowledgment,拓扑变更确认)标志
8Root ID根网桥的桥ID
4RPC根路径开销,到达根桥的STP Cost
8Bridge IDBPDU发送桥的ID
2Port IDBPDU发送网桥的接口ID(优先级+接口号)
2Message
Age
消息寿命,从根网桥发出BPDU之后的秒数,每经过一个网桥都加1,所以它本质上是到达根桥的跳数
2Max Age最大寿命,当一段时间未收到任何BPDU,生存期到达最大寿命时,网桥认为该接口连接的链路发生故障。默认20s
2Hello Time根网桥连续发送的BPDU之间的时间间隔,默认2s
2Forward Delay转发延迟,在侦听和学习状态所停留的时间间隔,默认15s

【说明】BPDU记忆口决(4个标识、4个参数、4个计时器)

  1. 4个标识:BPDU对自身的标识

协议、版本、类型、标记。

  1. 4个参数:STP计算的参数

发送该BPDU的交换机ID,当前根桥的BID,发送该BPDU的端口的PID,RFC。

  1. 4个计时器:

① Hello Time:默认为2s,要改的话一定要在根桥上改。

② Forward Delay:默认为15s,因为STP的生成要一定的时间,每一台交换机的端口状态变化不是同步的,如果新先出来的端口马上转发数据可能造成临时

的环路,所以STP引入了Forward Delay机制:新选出的RP和DP需要30S才能转发数据,以此来保证无环路。

③ Message Age:从根交换机发出的配置BPDU为0,每经过一个桥加1。

④ Max Age:交换机收到配置BPDU后,会对其中的Message Age和Max Age进行对比:Message Age小于等于Max Age时会触发它产生新的配置BPDU,否则被丢弃。

2.STP报文类型

STP有2种报文结构,一种是配置BPDU(configuration BPDU),另一种是拓扑变更提示BPDU(TCN BPDU)。

1. 配置BPDU

① STP刚启动时,各交换机周期性发送

② STP稳定期,只有根桥才会周期性发送,非根交换机会从自己的根端口周期性的接收配置BPDU,并立即被触发而产生自己的配置BPDU,且从自己的指定端口发送出去。

2. TCN BPDU

TCN BPDU的结构只有协议标识、版本号、类型其值为0X80,它的工作机制如下:

①. 网络中的一条链路发生了故障,只有故障点的交换机可以感知到,其它的交换机感觉不到。

②. 这时故障点交换机会周期性(2S)通过根端口向上游交换机发送TCN BPDU,直到上游交换机发来了TCA

③. 上游交换机收到TCN BPDU后,向下游发送TCA,向上游周期性(2S)通过根端口向上游交换机发送TCN BPDU

④. 此过程一直重复,直到根收到TCN BPDU后,发送TC

⑤. 交换机收到TC后意识到网络拓扑发生了变化,说前MAC地址表可能不再是正确的了,会将MAC地址表的老化时间从300S变成15S,加速老化。

四、STP的收敛时间

在稳定的 STP 拓扑里,非根桥会定期收到根桥的配置 BPDU。如果根桥发生了故障,停止发送配置 BPDU,则下游交换机就无法收到根桥的配置 BPDU。如果下游交换机一直收不到新的配置 BPDU,则原来收到的配置 BPDU 中的 Max Age 定时器就会超时(默认为20秒),从而导致已经收到的配置 BPDU 失效。STP Max Age定时器可用于链路故障检测。

1. 根桥故障

如图所示,根桥的故障恢复过程如下:

① SW1根桥发生故障,停止发送BPDU报文。

② SW2等待Max Age计时器(20 s)超时,从而导致已经收到的BPDU报文失效,又接收不到根桥发送的新的BPDU报文,从而得知上游出现故障。

③ 非根桥会互相发送配置BPDU,重新选举新的根桥。

④ 经过重新选举后,SW3的A端口经过两个Forward Delay(15 s)时间恢复转发状态。

u 非根桥会在BPDU老化之后开始根桥的重新选举。

u 根桥故障会导致50 s左右的恢复时间。

2. 直连链路故障

如图所示,直连链路故障恢复过程如下:

当交换机SW2网络稳定时检测到根端口的链路发生故障,则其备用端口会经过两倍的Forward Delay(15s)时间进入用户流量转发状态。

SW2检测到直连链路物理故障后,会将预备端口转换为根端口。

直连链路故障,备用端口会经过30s后恢复转发状态。

3. 非直连链路故障

非直连链路故障后,SW3的备用端口恢复到转发状态,非直连故障会导致50s左右的恢复时间。

五、RSTP对STP的改进

IEEE于2001年发布的802.1w标准定义了快速生成树协议RSTP(Rapid Spanning Tree Protocol),该协议基于STP协议,对原有的STP协议进行了更加细致的修改和补充。

1.STP的不足

STP协议虽然能够解决环路问题,但是由于网络拓扑收敛慢,影响了用户通信质量。如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断,这是用户无法忍受的。

STP的不足之处如下:

1. STP没有细致区分端口状态和端口角色,不利于初学者学习及部署。

网络协议的优劣往往取决于协议是否对各种情况加以细致区分。从用户角度来讲,Listening、Learning和Blocking状态并没有区别,都同样不转发用户流量。从使用和配置角度来讲,端口之间最本质的区别并不在于端口状态,而是在于端口扮演的角色。根端口和指定端口可以都处于Listening状态,也可能都处于Forwarding状态。

2. STP算法是被动的算法,依赖定时器等待的方式判断拓扑变化,收敛速度慢。

STP算法要求在稳定的拓扑中,根桥主动发出配置BPDU报文,而其他设备进行处理,传遍整个STP网络。这也是导致拓扑收敛慢的主要原因之一。

2.RSTP对STP的改进

根据STP的不足,RSTP删除了3种端口状态,新增加了2种端口角色,并且把端口属性充分的按照状态和角色解耦;此外,RSTP还增加了相应的一些增强特性和保护措施,实现网络的稳定和快速收敛。

1. 通过端口角色的增补,简化了生成树协议的理解及部署。

STP的接口角色共3种:根端口、指定端口、阻塞端口,RSTP的接口角色有4种:根端口、指定端口、预备接口和备份接口,RSTP中与终端设备相连的接口被定义为边缘端口。见表

STPRSTPRSTP端口说明
端口角色
根端口根端口交换机离根最近的端口,稳定时处于转发状态
指定端口指定端口转发所连接的网段发往根交换机方向的数据和从交换机方向发往所连接的网段数据,稳定时处于转发状态
阻塞端口预备端口处于Discarding状态,所属交换机不是端口所连接网段的指定交换机。是RP端口的备份端口
备份端口处于Discarding状态,所属交换机为端口所连网段的指定交换机。是DP端口的备份端口
边缘端口在RSTP里面,如果某一个指定端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口叫做边缘端口。边缘端口不接收处理配置BPDU,不参与RSTP运算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用。但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。

2. 端口状态的重新划分。

STPRSTPRSTP端口状态说明
端口状态
DisabledDiscarding不转发用户流量也不学习MAC地址
BlockingDiscarding
ListeningDiscarding
LearningLearning不转发用户流量但是学习MAC地址
ForwardingForwarding既转发用户流量又学习MAC地址

3. 配置BPDU格式的改变,充分利用了STP协议报文中的Flag字段,明确了端口角色。

4. 快速收敛。

5. Proposal/Agreement机制

6. 拓扑变更机制。

7. 保护功能。

六、STP的配置

视频实验讲解:华为HCIA-Datacom全套学习视频课-学习视频教程-腾讯课堂

1、 实验目的

在交换机中开启STP协议并通过网桥优先级修改STP的根网桥。

2、 实验拓扑

图 STP的配置

3、 实验步骤

(1) 步骤1 开启STP

配置LSW1

system-view

[Huawei]undo info-center enable

[Huawei]sysname LSW1

[LSW1]stp mode stp // STP的模式为STP,默认是MSTP。

配置LSW2

system-view

[Huawei]undo info-center enable

[Huawei]sysname LSW2

[LSW2]stp mode stp

配置LSW3

system-view

[Huawei]undo info-center enable

[Huawei]sysname LSW3

[LSW3]stp mode stp

(2) 步骤2 查看STP

查看生成树的状态,以LSW1为例

[LSW1]display stp

-------[CIST Global Info][Mode STP]-------

CIST Bridge :32768.4c1f-ccea-2663 //自身的桥ID

Config Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20

Active Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20

CIST Root/ERPC :32768.4c1f-cc06-69ba / 20000 //当前的根桥ID,与根路径开销

CIST RegRoot/IRPC :32768.4c1f-ccea-2663 / 0

CIST RootPortId :128.1

BPDU-Protection :Disabled

TC or TCN received :110

TC count per hello :0

STP Converge Mode :Normal

Time since last TC :0 days 0h:2m:41s

Number of TC :12

Last TC occurred :GigabitEthernet0/0/1

【技术要点】显示信息还包括各个接口的状态,在上述输出中已经按ctrl+c结束显示。

查看各交换机上生成树的状态信息摘要

[LSW1]display stp brief

MSTID Port Role STP State Protection

0 GigabitEthernet0/0/1 ROOT FORWARDING NONE

0 GigabitEthernet0/0/6 ALTE DISCARDING NONE

[LSW2]display stp brief

MSTID Port Role STP State Protection

0 GigabitEthernet0/0/2 DESI FORWARDING NONE

0 GigabitEthernet0/0/3 DESI FORWARDING NONE

[LSW3]display stp brief

MSTID Port Role STP State Protection

0 GigabitEthernet0/0/4 ROOT FORWARDING NONE

0 GigabitEthernet0/0/5 DESI FORWARDING NONE

综合根桥ID信息以及各个交换机上的端口信息,可得当前拓扑如下:

4、实验调试

把LSW1的优先级改成0,把LSW3的优先级改成4096,看LSW2的g0/0/3口是否阻塞

LSW1的配置

[LSW1]stp root primary //把LSW1变成主根网桥

相当于命令:

[LSW1]stp priority 0

LSW3的配置

[LSW3]stp root secondary //把SW1变成备用根网桥

相当于命令:

[LSW3]stp priority 4096

查看交换机LSW2上生成树的状态信息摘要

[LSW2]display stp brief

MSTID Port Role STP State Protection

0 GigabitEthernet0/0/2 ROOT FORWARDING NONE

0 GigabitEthernet0/0/3 ALTE DISCARDING NONE

综合根桥ID信息以及各个交换机上的端口信息,可得当前拓扑如下

最后就是习题

1. STP协议的配置BPDU报文不包含以下哪个参数?( )

A、Port ID

B、VLAN ID

C、Bridge ID

D、Root ID

2. 缺省情况下,STP协议Forward Delay时间是多少秒?( )

A、5

B、10

C、15

D、20

3. STP协议中端口处于哪个工作状态时可以不经过其它状态转为Forwarding状态?( )

A、BIocking

B、Learning

C、Listening

D、Disabled

4. 在存在冗余链路的二层网络中,可以使用下列哪种协议避免出现环路?( )

A、VRRP

B、ARP

C、UDP

D、STP

5. 运行STP协议的设备端口处于Forwarding状态、下列说法正确的有?( )

A、该端口既转发用户流是也处理BPDU报文

B、该端口仅仅接收并处理BPDU、不转发用户流量

C、该端口会根据收到的用户流量构建MAC 、地址表、但不转发用户流量

D、该端口不仅不处理BPDU报文、也不转发用户流量确认

习题答案:搜索VX小程序【卓应教育joinlabs】在手机上查看

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

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

相关文章

【数据结构】单链表OJ题(一)

&#x1f525;博客主页&#xff1a;小王又困了 &#x1f4da;系列专栏&#xff1a;数据结构 &#x1f31f;人之为学&#xff0c;不日近则日退 ❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、移除链表元素 &#x1f4a1;方法一&#xff1a; &#x1f4a1;方法二…

安卓如何快速定位native内存泄露。

步骤1&#xff09;cat /proc/pid/status,观察下面俩个指标 RssAnon: 5300 kB //一直增大说明匿名映射的内存增大&#xff0c;malloc本质就是调用匿名映射分 配内存 RssFile: 26884 kB //文件句柄泄露&#…

JMeter 的并发设置教程

JMeter 是一个功能强大的性能测试工具&#xff0c;可以模拟许多用户同时访问应用程序的情况。在使用 JMeter 进行性能测试时&#xff0c;设置并发是非常重要的。本文将介绍如何在 JMeter 中设置并发和查看报告。 设置并发 并发是在线程组下的线程属性中设置的。 线程数&#…

谈一谈在两个商业项目中使用MVI架构后的感悟

作者&#xff1a;leobertlan 前言 当时项目采用MVP分层设计&#xff0c;组员的代码风格差异也较大&#xff0c;代码中类职责赋予与封装风格各成一套&#xff0c;随着业务急速膨胀&#xff0c;代码越发混乱。试图用 MVI架构 单向流 形成 掣肘 带来一致风格。 但这种做法不够以…

一文带你快速掌握如何在Windows系统和Linux系统中安装部署MongoDB

文章目录 前言一、 Windows系统中的安装启动1. 下载安装包2. 解压安装启动3. Shell连接(mongo命令)4. Compass-图形化界面客户端 二、 Linux系统中的安装启动和连接1. 下载安装包2. 解压安装3. 新建并修改配置文件4. 启动MongoDB服务5. 关闭MongoDB服务 总结 前言 为了巩固所学…

Spring Boot对接Oracle数据库

Spring Boot对接Oracle数据库 最近学习了Oracle数据库&#xff0c;那么如何使用Spring Boot和MyBatis Plus对接Oracle数据库呢&#xff1f; 这就有了这篇随记&#xff0c;具体流程如下 1、创建Maven工程 创建一个空的Maven工程&#xff0c;导入如下依赖&#xff1a; <?…

Dubbo1-架构的演变

分布式系统上的相关概念 项目&#xff1a;传统项目、互联网项目 传统项目&#xff1a; 一般为公司内部使用&#xff0c;或者小群体小范围的使用&#xff0c;一般不要求性能&#xff0c;美观&#xff0c;并发等 互联网项目的特点&#xff1a; 1.用户多 2.流量大&#xff0c;并…

第二章:CSS基础进阶-part2:CSS过渡与动画

文章目录 CSS3 过渡动画一、transition属性二、transform属性-2D变换2.1 tanslate &#xff1a; 移动2.2 rotate-旋转2.3 scale-变形2.4 skew-斜切2.5 transform-origin: 变换中心点设置 三、CSS3关键帧动画四、CSS3-3D变换4.1 perspective 定义3D元素距视图距离4.2 transform-…

@Autowired和@Resource注解超详细总结(附代码)

区别 1、来源不同 Autowired 和 Resource 注解来自不同的“父类”&#xff0c;其中Autowired注解是 Spring 定义的注解&#xff0c;而Resource 注解是 Java 定义的注解&#xff0c;它来自于 JSR-250&#xff08;Java 250 规范提案&#xff09;。 2、支持的参数不同 Autowir…

openeuler服务器 ls 和ll 命令报错 command not found...

在openeuler服务器执行 ls 和ll 命令报错 command not found... 大概是系统环境变量导致的问题。 我在安装redis是否没有安装成功后就出现了这样的情况。编辑profile文件没有写正确&#xff0c;导致在命令行下ls 和 ll 等命令不能够识别。 重新设置一下环境变量。 export PAT…

Dynamo_关于参数赋值

写写关于Dynamo参数赋值 为单个对象赋单个参数值 最容易理解&#xff0c;SetParameterByName需要输入三个参数&#xff0c;元素对象&#xff08;数据类型&#xff1a;Element&#xff09;&#xff0c;参数名称&#xff08;数据类型&#xff1a;String&#xff09;&#xff0c;…

Glide 的超时控制相关处理

作者&#xff1a;newki 前言 Glide 相信大家都不陌生&#xff0c;各种源码分析&#xff0c;使用介绍大家应该都是烂熟于心。但是设置 Glide 的超时问题大家遇到过没有。 我遇到了&#xff0c;并且掉坑里了&#xff0c;情况是这样的。 调用接口从网络拉取用户头像&#xff0c…

SSH隧道搭建简单使用

参考&#xff1a; https://www.zsythink.net/archives/2450 https://luckyfuture.top/ssh-tunnel#SSH%E9%9A%A7%E9%81%93 https://zhuanlan.zhihu.com/p/561589204?utm_id0 SSH隧道&#xff08;搭建SSH隧道绕过防火墙&#xff09;&#xff1a; ssh命令除了登陆外还有代理转发…

ASL国产CS5212规格书 DP转VGA 替代RTD2166低成本方案 兼容IT6516设计原理图

CS5212可替代兼容瑞昱RTD2166和联阳T6516&#xff0c;ASL集睿致远这款芯片是一种高性能的DP显示端口到VGA转换器芯片。它结合了DisplayPort输入接口和模拟RGB DAC输出接口&#xff0c;嵌入式单片机基于工业标准8051核心。 CS5212适用于多个细分市场和显示器应用程序&#xff1…

YOLOv8 : TAL与Loss计算

YOLOv8 : TAL与Loss计算 1. YOLOv8 Loss计算 YOLOv8从Anchor-Based换成了Anchor-Free&#xff0c;检测头也换成了Decoupled Head&#xff0c;论文和网络资源中有大量的介绍&#xff0c;本文不做过多的概述。 Decoupled Head具有提高收敛速度的好处&#xff0c;但另一方面讲&am…

华为OD机试真题 Java 实现【城市聚集度】【2023 B卷 200分】,附详细解题思路

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

Linux网络服务之DNS域名解析

重要的DNS域名解析 一、DNS概述1.1 DNS简介1.2 本地hosts文件1.3 DNS架构1.4 查询方式 二、DNS域名解析原理2.1 解析类型2.2 原理详解2.3 举例 三、bind服务端程序3.1 什么是bind&#xff1f;3.2 配置文件详解3.2.1 主配置文件概述及内容主要格式3.2.2 域名文件概述及内容主要格…

leetcode118. 119.杨辉三角

118 题目&#xff1a; 给定一个非负整数 numRows&#xff0c;生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 思路&#xff1a; 可以发现从第三行开始&#xff0c;从第二个元素到倒数第二个元素&#xff0c;每个元素都…

电视盒子什么品牌好?实测20天后分享电视盒子推荐

电视盒子可以让老旧电视机重生&#xff0c;解决卡顿、资源少等问题&#xff0c;只需要联网就能观看海量视频资源。不过对于电视盒子如何选购很多人并不了解&#xff0c;我通过对比十几款主流电视盒子后整理了这份电视盒子推荐清单&#xff0c;跟着我一起看看电视盒子什么品牌好…

记一件异常访问记录

一、问题描述 某安全护网期间&#xff0c;web日志中大量出现异常账户请求&#xff0c;虽然报404错误&#xff0c;但是不同异常账号的连续尝试在特殊时期&#xff0c;还是令人担忧. 进程如下&#xff1a;/usr/bin/python2 -Es /usr/sbin/tuned -l -P 二、处理及说明 1&#x…