STP介绍

news2024/11/27 20:58:42

目录

STP概述

二层环路带来的问题

1.广播风暴

2.MAC地址漂移问题

3.多帧复制---这个好理解,同一个数据帧被重复收到多次,被称为多帧复制。

802.1D生成树

STP的BPDU

BPDU主要分为两大类

配置BPDU

RPC

COST

配置BPDU的工作过程

TCN BPDU

TCN BPDU的工作原理

STP的角色

STP角色选举

1.根网桥选举

2.根端口选举

3.指定端口选举

4.非指定端口选举

STP的接口状态

接口状态的迁移

STP的收敛时间

首次收敛

结构突变

1.根桥故障

2.直连链路故障

STP基本配置

RSTP

802.1D生成树的缺点

RSTP的改进点改进点

改进点1:端口角色

改进点2:端口状态

改进点3: RST BPDU

改进点4:配置BPDU的处理

改进点5:快速收敛机制

PIA机制详解

改进点6:拓扑变更机制

改进点7:保护功能

MSYP

MSTP概述

MST Region

MSTP的基本配置


STP概述

以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP (Spanning Tree Protocol)。

1.随着局域网规模的不断扩大,越来越多的交换机被用来实现主机之间的互连。如图,接入层交换机单链路上联,则存在单链路故障,也就是如果这根上联链路发生故障,交换机下联用户就断网了。另一个问题的单点故障,也就是交换机如果宕机,交换机下联用户也就断网了。

2.为了解决此类问题,交换机在互连时一般都会使用冗余链路来实现备份。冗余链路虽然增强了网络的可靠性但是也会产生环路,而环路会带来一系列的问题,继而导致通信质量下降和通信业务中断等问题。

BCMSN三层架构

三层架构:

接入层:提供端口的密度,用于用户终端的接入—二层交换机、AP

汇聚层(分布层):流量的集合,DHCP/VLAN/STP/HSRP/VRRP/channel…

QOS/ACL

核心层:nat、高速路由转发

冗余—备份 线路、设备、网关、UPS(电源)

二层环路带来的问题

1.广播风暴

(1)根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧,或者是一个目的MAC地址未知的单播帧,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧。

(2)本例中,SW3收到了一个广播帧将其进行泛洪,SW1和SW2也会将此帧转发到除了接收此帧的其他所有端口,结果此帧又会被再次转发给SW3,这种循环会一直持续,于是便产生了广播风暴。交换机性能会因此急速下降,并会导致业务中断。

2.MAC地址漂移问题

(1)交换机是根据所接收到的数据帧的源地址和接收端口生成MAC地址表项的。

(2)本例中,SW3收到一个广播帧泛洪,SW1从GEO/0/1接口接收到广播帧后学习且泛洪,形成MAC地址5489-98EE-788A与GEO/0/1的映射;SW2收到广播帧后学习且泛洪,SW1再次从GEO/0/2收到源MAC地址为5489-98EE-788A的广播帧并进行学习,5489-98EE-788A会不断地在GEO/0/1与GEO/0/2接口之间来回切换,这被称为MAC地址漂移现象。

3.多帧复制---这个好理解,同一个数据帧被重复收到多次,被称为多帧复制。

为了保证备份链路的存在,并且不会出现二层环路,所以,我们设计了STP协议。

(1)STP通过构造—棵树来消除交换网络中的环路。

(2)运行STP算法,判断网络中存在环路的地方并阻断冗余链路,将环路网络修剪成无环路的树型网络,从而避免了数据帧在环路网络中的增生和无穷循环。

(1)交换机上运行的生成树协议会持续监控网络的拓扑结构,当网络拓扑结构发生变化时,生成树能感知到这些变化,并且自动做出调整。

(如图,交换机上运行STP协议,会通过报文监控网络的拓扑结构,正常情况下是将SW3上的一个接口进行阻塞(Block),从而打破环路,当监控到SW1与SW3之间出现链路故障,则恢复阻塞端口进入转发状态。)

(2)因此,生成树既能解决二层环路问题,也能为网络的冗余性提供一种方案。

生成树协议原理:在二层交换网络中,逻辑的阻塞部分的接口,实现从根交换机到所有节点唯一的路径且为最佳路径,生成一个没有环路的拓扑。当最佳路径出现故障时,个别被阻塞的接口将打开,形成备份链路。

802.1D生成树

生成树是相对比较早的一个协议了,所以,也经历了多种版本的更替。我们现在常见的主要是802.1D生成树(最早期的生成树种类),RSTP(快速生成树协议---定义在802.1W中,也被称为802.1W生成树),MSTP(多生成树协议---定义在802.1S中,也被称为802.1S生成树。)

我们首先需要关注的是最基本的802.1D生成树协议,其他版本都是在802.1D的基础上改进的本质原理相同。

STP的BPDU

所谓BPDU --- Bridge Protocol Data Unit,网桥协议数据单元---其实就是STP生成树需要发送的数据包的叫法。

1.BPDU是STP能够正常工作的根本。BPDU是STP的协议报文。

2.STP交换机之间会交互BPDU报文,这些BPDU报文携带着一些重要信息,正是基于这些信息,STP才能够顺利工作。

BPDU主要分为两大类

1.配置BPDU

2.TCN BPDU

其中,配置BPDU是STP进行拓扑计算的关键;TCN BPDU只在网络拓扑发生变更时才会被触发

配置BPDU

配置BPDU的报文格式

1.配置BPDU是STP进行拓扑计算的关键

2.只有根网桥主动发送配置BPDU,其他非根网桥都只是转发根网桥发送的配置BPDU。

RPC

COST

接口cost是已经激活了STP的接口所维护的一个开销值,该值存在默认值,与接口的速率有关联,并且设备使用不同的算法时,相同的接口速率对应不同的Cost值。

(华为设备默认采用的是802.1t标准;华三设备默认使用的是自定义标准)

配置BPDU的工作过程

所有交换机刚启动,所有接口都激活STP,一开始,并不知道谁是根,则所有设备都将判定自己为根网桥,从字节的所有激活了STP的接口发送配置BPDU,则其中将包含本机参数。之后,所有设备都交换参数后,将根据参数数值进行选举,之后,将选举出一个真正的根网桥。之后,只有根网桥将周期的发送配置BPDU,而其他非根网桥只能在接受到根网桥发送的BPDU后进行转发。(转发时可以修改其中的参数。)--发送周期为2S,MAX AGE --- 20S。

TCN BPDU

TCN BPDU的报文格式

仅拥有配置BPDU的前三个参数,其中BPDU类型字段为Ox80。

TCN BPDU的工作原理

TCN BPDU ---本地交换链路故障后,STP将重新收敛,为了加快刷新交互机的MAC地址表,将向本地所有STP接口发出TCN BPDU,邻居交换机收到TCN BPDU后将回复一个TCA位置1的配置BPDU,用于可靠性传出,之后将TCN BPDU逐级转发到根网桥处,由根网桥下发TC标记位置1的配置BPDU,逐级下发给所有的交换机,所有交换机在收到后将临时的将300S的MAC地址老化时间改为15S。

STP的角色

1.STP中一共存在四种角色

1.根网桥(也叫根桥)--- RB

(1)STP的主要作用之一是在整个交换网络中计算出一棵无环的“树”(STP树)。

(2)根桥是一个STP交换网络中的“树根"。

(3)STP开始工作后,会在交换网络中选举一个根桥,根桥是生成树进行拓扑计算的重要“参考点”,是STP计算得出的无环拓扑的“树根"。

2.根端口--- RP

(1)每台非根网桥有且仅有一个接口将被选择为根端口,用来接受根网桥的BPDU

(2)一个非根桥设备上会有多个端口与网络相连,为了保证从某台非根桥设备到根桥设备的工作路径是最优且唯一的,就必须从该非根桥设备的端口中确定出一个被称为“根端口"的端口,由根端口来作为该非根桥设备与根桥设备之间进行报文交互的端口。

(3)在选举出根桥后,根桥仍然持续发送BPDU,而非根桥将持续不断的收到根桥发送的BPDU。因此,在所有非根桥上选举一个距离根桥"最近"的端口(根端口),在网络收敛后,根端口将不断的收到来自根桥的BPDU。

(4)即:根端口保证了交换机与根桥之间工作路径的唯一性和最优性。

3.指定端口--- DP

(1)每条链路存在一个接口为指定接口,用来发送或者转发根网桥的BPDU

(2)网络中的每个链路与根桥之间的工作路径必须是唯一的且最优的。当一个链路有两条及以上的路径通往根桥时(该链路连接了不同的交换机,或者该链路连接了同一台交换机的不同端口),与该链路相连的交换机(可能不止一台)就必须确定出一个唯一的指定端口。

(3)因此,每个链路(Link)选举一个指定端口,用于向这个链路发送BPDU。

4.非指定端口--- NDP

(1)所有剩余接口,没有任何角色,都属于非指定接口,非指定接口将被阻塞。

STP角色选举

1.根网桥选举

如图:根桥的选举先比较优先级,交换机SW1、2、3的优先级相等,则比较MAC地址,也优选最小的,所以SW1的BID最小,因此sw1为根桥,SW2和SW3为非根桥。

2.根端口选举

选举过程:

1.交换机有多个端口接入网络,各个端口都会收到BPDU报文,报文中会携带"RootID、RPC.BID、PID"等关键字段,端口会针对这些字段进行PK。

⒉.首先比较根路径开销(RPC),STP协议把根路径开销作为确定根端口的重要依据。RPC值越小,越优选,因此交换机会选RPC最小的端口作为根端口。

3.当RPC相同时,比较上行交换机的BID,即比较交换机各个端口收到的BPDU中的BID,值越小,越优选,因此交换机会选上行设备BID最小的端口作为根端口。

4.当上行交换机BID相同时,比较上行交换机的PID,即比较交换机各个端口收到的BPDU中的PID,值越小,越优先,因此交换机会选上行设备PID最小的端口作为根端口。

5.当上行交换机的PID相同时,则比较本地交换机的PID,即比较本端交换机各个端口各自的PID,值越小,越优先,因此交换机会选端口PID最小的端口作为根端口。

3.指定端口选举

指定端口也是通过比较RPC来确定的,选择RPC最小的作为指定端口,如果RPC相同,则比较BID和PID

1.首先比较根路径开销(RPC),值越小,越优选,因此交换机会选RPC最小的端口作为指定端口。

2.若RPC相等,则比较链路两端交换机的BID,值越小,越优选,因此交换机会选BID最小的交换机的端口作为指定端口。

3.若BID相等,则比较链路两端端口的PID,值越小,越优选,因此交换机会选PID最小的交换机的端口作为指定端口。

4.非指定端口选举

1.STP会对这些非指定端口进行逻辑阻塞,即这些端口不能转发由终端计算机产生并发送的帧用户数据帧)。

2.—旦非指定端口被逻辑阻塞后,STP树(无环路工作拓扑)就生成了。

3.注意:非指定端口可以接收并处理BPDU。

STP的接口状态

接口状态的迁移

图中所示为STP的端口状态迁移机制,运行STP协议的设备上端口状态有5种:

1.Forwarding:转发状态。端口既可转发用户流量也可转发BPDU报文,只有根端口或指定端口才能进入Forwarding状态。

2.Learning:学习状态。端口可根据收到的用户流量构建MAC地址表,但不转发用户流量。增加Learning状态是为了防止临时环路。

3.Listening:侦听状态。端口可以转发BPDU报文,但不能转发用户流量。

4.Blocking:阻塞状态。端口仅仅能接收并处理BPDU,不能转发BPDU,也不能转发用户流量。此状态是预备端口的最终状态。

5.Disabled:禁用状态。端口既不处理和转发BPDU报文,也不转发用户流量。

STP的收敛时间

802.1D生成树在收敛时主要是基于计时器收敛的。

首次收敛

首次收敛,所有设备最先进入的是阻塞状态,需要先停留20S(最大寿命时间)之后进入侦听,此状态停留15秒选举角色,之后进入学习状态,再停留15S,总共50S

结构突变

1.根桥故障

根桥故障

(1)在稳定的STP网络,非根桥会定期收到来自根桥的BPDU报文。

(2)如果根桥发生了故障,停止发送BPDU,下游交换机就无法收到来自根桥的BPDU报文。

(3)如果下游交换机一直收不到BPDU报文,Max Age计时器(缺省:20s)就会超时,从而导致已经收到的BPDU报文失效,此时,非根桥会互相发送配置BPDU,重新选举新的根桥。

端口状态:

(1)SW3的预备端口,20s后会从Blocking状态进入到Listening状态,再进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发。

收敛时间:

(1)根桥故障会导致50s左右的恢复时间,等于Max Age加上2倍的Forward Delay收敛时间。

2.直连链路故障

直连链路故障:

(1)当两台交换机间用两条链路互连时,其中一条是主用链路,另一条为备用链路。

(2)当网络稳定时,交换机SWB检测到根端口的链路发生故障,则其备用端口会进入用户流量转发状态。

端口状态:

(1)备用端口会从Blocking状态,迁移到Listening-Learning-Forwarding状态。

收敛时间:

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

3.非直连链路故障

非直连故障

(1)在稳定的STP网络,非根桥会定期收到来自根桥的BPDU报文。

(2)若SW1与SW2之间的链路发生了某种故障(非物理故障),因此SW2一直收不到来自根桥SW1的BPDU报文,Max Age计时器(缺省:20 s)就会超时,从而导致已经收到的BPDU报文失效。

(3)此时,非根桥SW2会认为根桥失效,并且认为自己是根桥,从而发送自己的配置BPDU给SW3,通知SW3自己是新的根桥。

(4)在此期间,SW3的预备端口一直收不到包含根桥ID的BPDU,Max Age计时器超时后,端口进入到Listening状态,开始向SW2“转发"从上游发来的包含根桥ID的BPDU。

(5)因此,Max Age定时器超时后,SW2和SW3几乎同时收到对方发来的BPDU,再进行STP重新计算,SW2发现SW3发来的BPDU更优,就放弃宣称自己是根桥并重新确定端口角色。

端口状态:

(1)SW3预备端口20s后会从Blocking状态进入到Listening状态,再进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发。

收敛时间:

(1)非直连故障会导致50s左右的恢复时间,等于Max Age加上2倍的Forward Delay收敛时间。

STP基本配置

1.配置生成树工作模式

R是根端口,D是指定端口,A是阻塞端口

RSTP

802.1D生成树的缺点

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

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

3.网络协议的优劣往往取决于协议是否对各种情况加以细致区分。

(1)从用户角度来讲,Listening、Learning和Blocking状态并没有区别,都同样不转发用户流量。

(2)从使用和配置角度来讲,接口之间最本质的区别并不在于接口状态,而是在于接口扮演的角色。

(3)根接口和指定接口可以都处于Listening状态,也可能都处于Forwarding状态。

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

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

RSTP的改进点改进点

改进点1:端口角色

通过端口的增补,简化了生成树协议的理解于部署。

1.RSTP的端口角色共有4种:根端口、指定端口、Alternate端口和Backup端口。

2.根端口和指定端口的作用同STP中定义,Alternate端口和Backup端口的描述如下:

(1)从配置BPDU报文发送角度来看:

Alternate端口就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口。

Backup端口就是由于学习到自己发送的配置BPDU报文而阻塞的端口。

(2)从用户流量角度来看:

Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。

Backup端口作为指定端口的备份,提供}另一条从根桥到相应网段的备份通路。

3.给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程。

改进点2:端口状态

RSTP的状态规范缩减为3种,根据端口是否转发用户流量和学习MAC地址来划分:

1.Discarding状态:不转发用户流量也不学习MAC地址;

2.Learning状态:不转发用户流量但是学习MAC地址;。

3.Forwarding状态:既转发用户流量又学习MAC地址。

改进点3: RST BPDU

1.RSTP的配置BPDU充分利用了STP报文中的Flag字段,明确了端口角色。

2.除了保证和STP格式基本一致之外,RSTP作了如下变化:

(1)Type字段:配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃。

(2)Flag字段:使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU。

3.RST BPDU报文格式:

4.RST BPDU与STP配置BPDU报文格式不同点,包括:BPDU类型和Flag字段。

(1)BPDU类型,1 Byte,RST BPDU的类型值为Ox02。

(2)标志,1 Byte,包括:

bit 7: TCA,表示拓扑变化确认;

bit 6: Agreement,表示同意,用于P/A机制;.bit 5: Forwarding,表示转发状态;

bit 4: Learning,表示学习状态;

bit 3和bit2:表示端口角色,00表示未知端口,01表示替代或备份端口,10表示根端口,11表示指定端口;

bit 1 : Proposal,表示提议,用于P/A机制;. bit 0:TC,表示拓扑变化。

改进点4:配置BPDU的处理

改进点5:快速收敛机制

边缘接口的UP和Down不会引起拓扑的变动

注意:这个PIA机制是RSTP快速收敛的核心手段,因为他改变了STP依照计时器收敛的方法,可以理解为完成选举后立即切换状态,完成收敛。

1.事实上对于STP,指定端口的选择可以很快完成,主要的速度瓶颈在于:为了避免环路,必须等待足够长的时间,使全网的端口状态全部确定,也就是说必须要等待至少一个ForwardDelay所有端口才能进行转发。

2.而RSTP的主要目的就是消除这个瓶颈,通过阻塞自己的非根端口来保证不会出现环路。而使用P/A机制加快了上游端口进入Forwarding状态的速度。

PIA机制详解

改进点6:拓扑变更机制

1.在STP中,如果拓扑发生了变化,需要先向根桥传递TCN BPDU,再由根桥来通知拓扑变更,泛洪TC置位的配置BPDU。

2.在RSTP中,通过新的拓扑变更机制,TC置位的RST BPDU会快速的在网络中泛洪。·如上图所示:

(1)SW3的根端口收不到从根桥发来的RST BPDU后,Alternate端口会快速切换为新的根端口,启动TC WhileTimer,并清空状态发生变化的端口学习到的MAC地址。然后向外发出TC置位的RST BPDU。

(2)SW2接收到RST BPDU后,会清空接收口以外所有端口学习到的MAC地址,同时开启计时器,并向外发送TC置位的RST BPDU。

2.最终,RST BPDU会在全网泛洪。

改进点7:保护功能

BPDU保护

根保护

环路保护

MSYP

1.RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但在划分VLAN的网络中运行RSTP/STP,局域网内所有的VLAN共享一棵生成树,被阻塞后的链路将不承载任何流量,无法在VLAN间实现数据流量的负载均衡,导致链路带宽利用率、设备资源利用率较低

2.为了弥补RSTP/STP的缺陷,IEEE于2002年发布的802.1S标准定义了MSTP ( MultipleSpanning Tree Protocol,多生成树协议)。MSTP兼容STP和RSTP,通过建立多棵无环路的树,解决广播风暴并实现冗余备份。

MSTP概述

1.MSTP是IEEE 802.1S中定义的生成树协议,MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。

2.MSTP可以将一个或多个VLAN映射到一个Instance (实例),再基于Instance计算生成树,映射到同一个lnstance的VLAN共享同一棵生成树。

3.如图中例子,经计算,最终生成两棵生成树:

(1)lnstance1对应的生成树以SW1为根交换设备,转发VLAN1~VLAN10的报文。

(2)lnstance2对应的生成树以SW2为根交换设备,转发VLAN11~VLAN20的报文。

(3)不同VLAN的报文沿不同的路径转发,实现了负载分担。

注意:生成树不是基于VLAN运行的,而是基于Instance运行的

MST Region

1.同一个MST域的设备具有下列特点:

(1)都启动了MSTP。

(2)具有相同的域名。

(3)具有相同的VLAN到生成树实例映射配置。

(4)具有相同的MSTP修订级别配置。

2.Instance0是缺省存在的,而且缺省时,华为交换机上所有的VLAN都映射到了Instance0。

3.通过设置VLAN映射表(即VLAN和MSTI的对应关系表),把VLAN和MSTIl联系起来。

(1)每个VLAN只能对应一个MSTI,即同一VLAN的数据只能在一个MSTI中传输,而一个MSTI可能对应多个VLAN

MSTP的基本配置

[r1]stp mode mstp

默认存在组0,且所有vlan默认处于该组;优先级= 32768+0

分组

[sw1]stp enable

[sw1]stp region-configuration

[sw1-mst-region]region-name a 所有设备应在一个组内

[sw1-mst-region]instance 1 vlan 1 to 5

[sw1-mst-region]instance 2 vlan 6 to 10

[sw1-mst-region]active region-configuration 激活当前配置(必须配置该指令)

切记:若将创建某个组,但该组内的vlan,在本交换机上没有创建,同时没有为该vlan服务的接口;该组将没有任何信息;整个交换网络中所有设备的分组信息必须完全一致;

定义本地为组1 的主根,组2 的备份根

stp instance 1 root primary 优先级修改为0

stp instance 2 root secondary 优先级修改为4096

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

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

相关文章

【python爬虫】——历史天气信息爬取

文章目录 1、任务描述1.1、需求分析1.2 页面分析 2、获取网页源码、解析、保存数据3、结果展示 1、任务描述 1.1、需求分析 在2345天气信息网2345天气网依据地点和时间对相关城市的历史天气信息进行爬取。 1.2 页面分析 网页使用get方式发送请求,所需参数包括a…

c语言练习63:用malloc开辟二维数组的三种办法

用malloc开辟二维数组的三种办法 使用malloc函数模拟开辟一个3*5的整型二维数组&#xff0c;开辟好后&#xff0c;使用二维数组的下标访问形式&#xff0c;访问空间。 第一种办法&#xff1a;用指针数组&#xff1a; #include<stdio.h> int main() {int** p (int**)m…

2023-09-19 LeetCode每日一题(打家劫舍 IV)

2023-09-19每日一题 一、题目编号 2560. 打家劫舍 IV二、题目链接 点击跳转到题目位置 三、题目描述 沿街有一排连续的房屋。每间房屋内都藏有一定的现金。现在有一位小偷计划从这些房屋中窃取现金。 由于相邻的房屋装有相互连通的防盗系统&#xff0c;所以小偷 不会窃取…

【C++代码】二叉树的最大深度,二叉树的最小深度,完全二叉树的节点个数--代码随想录

题目&#xff1a;二叉树的最大深度 给定一个二叉树 root &#xff0c;返回其最大深度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 题解 如果我们知道了左子树和右子树的最大深度 l 和 r&#xff0c;那么该二叉树的最大深度即为 m a x ( l , r ) …

令人惊艳的AI项目,这也太猛了...

大家好&#xff0c;我是 Jack。 这两天&#xff0c;我在网上冲浪&#xff0c;发现了一款神器&#xff01; 我在使用 AI 绘画 Stable Diffsuion 和 Midjourney 的时候&#xff0c;花费时间最多的就是写 prompt 描述词了&#xff0c;绞尽脑汁地调试 prompt。 同样&#xff0c;…

pdf怎么转换成word?推荐这几种方法

pdf怎么转换成word&#xff1f;pdf转换成Word是一项常见的需求&#xff0c;首先&#xff0c;Word文档是一种常用的文档格式&#xff0c;几乎在任何计算机上都可以打开和编辑。与PDF相比&#xff0c;Word文档更加灵活和可编辑&#xff0c;可以轻松地修改和更新文档内容。在使用这…

macOS文件差异比较最佳工具:Beyond Compare 4

Beyond Compare for mac是一款Scooter Software研发的文件同步对比工具。你可以选择针对多字节的文本、文件夹、源代码&#xff0c;甚至是支持比对adobe文件、pdf文件或是整个驱动器&#xff0c;检查其文件大小、名称、日期等信息。你也可以选择使用Beyond Compare合并两个不同…

《数据结构、算法与应用C++语言描述》使用C++语言实现二维数组下三角矩阵

《数据结构、算法与应用C语言描述》使用C语言实现二维数组下三角矩阵 下三角矩阵定义 如下图所示&#xff1a; 代码实现 _11lowerTriangularMatrix.h 模板类 /* Project name : allAlgorithmsTest Last modified Date: 2022年8月13日17点38分 Last Version: V1.0 D…

Linux-文件和目录权限

文章目录 权限的作用普通文本文件的权限作用 权限的作用 权限对于普通文件和目录文件的作用是不一样的。 普通文本文件的权限作用 drwxr-xr-x第二个字母开始是文件的权限表示9列权限&#xff0c;前三列表示文件的"拥有者"对该文件具有的权限&#xff0c;中三列表…

235. 二叉搜索树的最近公共祖先 Python

文章目录 一、题目描述示例 1示例 2 二、代码三、解题思路 一、题目描述 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足…

C++:string的模拟实现

目录 1.string的四大默认函数 1.1构造函数 1.2析构函数 1.3拷贝构造 1.4赋值运算符重载 2.访问string的三种方式 2.1[]访问 2.2迭代器访问 2.3范围for(本质是迭代器) 3.string相关功能的实现 3.1modify 3.2capacity 3.3access 3.4relations 3.5补充 4.补充 1.s…

基于Appium的UI自动化测试

为什么需要UI自动化测试 移动端APP是一个复杂的系统&#xff0c;不同功能之间耦合性很强&#xff0c;很难仅通过单元测试保障整体功能。UI测试是移动应用开发中重要的一环&#xff0c;但是执行速度较慢&#xff0c;有很多重复工作量&#xff0c;为了减少这些工作负担&#xff…

八大排序(二)--------冒泡排序

本专栏内容为&#xff1a;八大排序汇总 通过本专栏的深入学习&#xff0c;你可以了解并掌握八大排序以及相关的排序算法。 &#x1f493;博主csdn个人主页&#xff1a;小小unicorn ⏩专栏分类&#xff1a;八大排序汇总 &#x1f69a;代码仓库&#xff1a;小小unicorn的代码仓库…

高端知识竞赛中用到的软件和硬件有哪些

现在单位搞知识竞赛&#xff0c;已不满足于用PPT放题&#xff0c;找几个简单的抢答器、计分牌弄一下了&#xff0c;而是对现场效果和科技感要求更高了。大屏要分主屏侧屏&#xff0c;显示内容要求丰富炫酷&#xff1b;选手和评委也要用到平板等设备&#xff1b;计分要大气些&am…

QT在安装后添加新组件【QT基础入门 环境搭建】

一、Qt的安装目录下找到MaintenanceTool工具 二、双击该exe文件运行该工具(界面可能不相同但功能一样) 登录账号,进入以下界面,点击下一步 选择更新组件,出现以下提示 三、此时需要手动添加储存库 1.进入下面网站,选择一个国内镜像 Qt Downloads 点击后面的HTTP可进入…

java CAS详解(深入源码剖析)

CAS是什么 CAS是compare and swap的缩写&#xff0c;即我们所说的比较交换。该操作的作用就是保证数据一致性、操作原子性。 cas是一种基于锁的操作&#xff0c;而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住&#xff0c;等之前获得锁的线程释放锁之后&am…

如何才能实现批量抠图?一键批量抠图的办法

批量抠图是在处理大量图片时非常实用的技术&#xff0c;它可以帮助您快速准确地去除图片的背景或选择特定的对象。在编辑图片和设计时是一项必不可少的技能。 今天分享一款简单方便的抠图工具&#xff0c;智能识别并抠取图片中的各种物体、人物、动物等&#xff0c;效果不错&a…

简单聊聊G1垃圾回收算法整个流程 --- 理论篇 -- 下

简单聊聊G1垃圾回收算法整个流程 --- 理论篇 -- 下 软实时性预测转移时间预测可信度GC 暂停处理的调度并发标记中的暂停处理 分代 G1 GC 模式不同点新生代区域分代对象转移具体转移流程分代选择回收集合设置最大新生代区域数 GC的切换GC执行的时机 总结 上一篇 文章我们简单看了…

JDK新特性-Stream流

Stream流是用来操作集合或者数组中的数据的&#xff0c;Stream流提供了一种更加强大的&#xff0c;更加简单的方式来操作集合或者数组中的数据&#xff0c;代码更加简洁&#xff0c;可读性更好。下面是一个简单的例子&#xff1a; public class S1 {public static void main(S…

12万条中法常见词语对照ACCESS数据库

法文是全球通用的语言之一&#xff0c;要拥有国际视野&#xff0c;学懂全球通用语言是您的必然选择。走向成功之门&#xff0c;尽快学会法文吧。《12万条中法常见词语对照ACCESS数据库》收集了汉语常用词语的法文对照翻译。 本数据库是由 Microsoft Access 2000 创建的 MDB 数据…