生成树详解(STP、RSTP、MSTP)
目录
1、STP
1.概述
2.基本概念
3.端口角色及其作用
4.报文结构
5.STP的端口状态
6.三种定时器
7.STP选举步骤
8.配置BPDU的比较原则
9.TCN BPDU
10.临时环路的问题
11.传统STP的不足
拓扑变更处理过程
2、RSTP
1.端口角色
2.端口状态
3.P/A(Proposal/agreement)协商
4.环路的预防
5.STP和RSTP的区别
6.RSTP中MAC地址表的清空
7.RSTP保护功能
(1)UplinkFast:
(2)BackboneFast:
(3)Portfast:
(4)BPDUFilter:
(5)BPDU保护:
(6)BPDU过滤:
(7)Root保护:
(8)环路保护:
(9)TC-BPDU泛洪保护:
8.STP/RSTP缺陷
3、MSTP
1.MSTP对STP和RSTP的改进
2.MSTP与VRRP结合
1、STP
1.概述
背景:
在保证网络冗余性的情况下,消除二层环路。当网络中部署生成树协议时,交换机之间便会开始交互相关协议报文,并经过一系列计算得到一个无环的网络拓扑;当网络存在环路时,会将网络中的一个或多个接口进行阻塞(Block),从而打破二层环路。
生成树协议应用于园区网络的二层网络中,进行链路备份和消除环路。
二层环路带来的问题:
-
广播风暴:广播帧泛洪
-
MAC地址表漂移
在三层IP中有TTL解决环路问题,TTL默认值为64,每经过一个路由器减1。
核心思想:
比较BPDU,打开好的端口,阻塞差的端口,打破环路,建立无环的逻辑拓扑。
2.基本概念
-
桥ID(Bridge ID,BID)=网桥优先级(2字节)+网桥MAC(6字节):
-
缺省优先级32768(0~65535),Cisco:4096的倍数,HUAWEI:1024的倍数,越小越优先。
-
每一台交换机都有一个唯一的BID。
-
BID最小的设备会被选举为根桥(先比较优先级再比较MAC地址)。
-
-
端口ID(Port ID,PID)=端口优先级+端口ID:
-
优先级范围0~240,16的倍数,缺省情况下为128。
-
用来标识每个接口,选举指定接口(DR)。
-
-
开销(Cost):
-
接口的Cost用于计算到达根的开销。
-
接口的缺省Cost除了与其速率、工作模式,还与交换机使用的STP Cost计算方法有关。
-
接口带宽越大,Cost值越小
-
华为使用IEEE 802.1t标准,思科使用IEEE 802.1d-1998标准。
-
-
根路径开销(Root Path Cost,RPC):
-
一台设备的某个接口到根桥的RPC等于从根桥到该设备沿途所有入方向接口的Cost值累加。
-
3.端口角色及其作用
-
根桥(ROOT):
-
每隔Hello Time(2s)周期性发送配置BPDU,用于设备检查链路是否出现故障
-
根桥收到TCN后,在半分钟内按照每隔2秒周期性地发送TC报文(Forward Delay+Max Age)
-
-
根端口(RP):
-
收到根桥发来的配置BPDU报文
-
当拓扑发生变化时,向根桥发送TCN
-
-
指定端口(DP):
-
向下游发送配置BPDU,每经过一台交换机,配置BPDU将会发生变化(BID、PID)(再生式的泛洪)
-
接受来自下游桥的拓扑变化信息
-
-
非指定端口:
-
接受对端配置BPDU信息
-
不转发用户流量
-
4.报文结构
1、STP使用的MAC地址
-
Source MAC:给二层协议使用的MAC地址
-
Destination MAC:以01-80-C2开头的二层组播MAC(专门为二层协议提供的组播MAC)
-
根据三层的组播IP产生的组播MAC地址:以01-00-5E开头
2、BPDU(Bridge protocol data unit)网桥协议数据单元:
分类:
-
配置BPDU(0x00):
-
端口使用STP,则配置BPDU就会按照HelloTime定时器规定的时间间隔从指定端口发出
-
根端口收到配置BPDU时,如果优先级比自己的配置BPDU高,就会根据收到的配置BPDU中携带的信息更新自己的BPDU,并从指定接口向下游发送,否则丢弃该配置BPDU
-
指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU
-
-
TCN BPDU(0x80):当交换机的某个端口出现故障,会通过根端口向根桥发送TCN BPDU告知根桥,根桥收到后,会将拓扑变更发送至网络中的所有交换机,所有的交换机在15秒内刷新MAC地址表
作用:维护整个生成树的生命周期
-
通过Root ID、RPC、Bridge ID、Port ID的一个或者多个参数选举出最好的BPDU来生成树
-
通过定时器来保证生成树的稳定性
-
当拓扑发生改变,通过发送拓扑变更消息(Flag位)告知拓扑的变化
5.STP的端口状态
STP 端口状态迁移机制 :
① :端口初始化或者使能,进入阻塞状态
② :端口被选为根端口或者指定端口,进入侦听状态
③ :端口的临时状态停留时间(一个Forward Delay时间)到,进入下一状态(学习状态或者转发状态),端口被选为根端口或指定端口
④ :端口不再是根端口、指定端口或者指定状态,进入阻塞状态
⑤ :端口被禁用或者链路失效
对端口状态和端口角色的思考
Q:STP使能后端口进入Blocking状态,对BPDU只收不发,如何进行全网BPDU交互的?
A:端口使能STP后进入Blocking后,默认经过20秒后进入Listening,默认经过15秒后进入Learning,此时这个状态会进行全网BPDU的交互,学习到所有SW的BPDU信息,从而选举RB、RP、DP、NDP
Q:上面是只讲了端口状态的转换,而STP是先把端口角色确定下来后才进行端口状态转换,既然使能STP,端口进入Blocking 状态,并没有交互网络中BPDU,那么最开始如何进行端口角色的选举?
A:因为最开始的时候,使能STP的交换机都会把自己当作根桥,这时候就有了本地的BPDU信息,这个时候就直接把端口角色确定下来了,并开始端口状态的迁移,到了之后的Learning状态,才会发生全网BPDU的交互
6.三种定时器
Hello Time | Hello Timer定时器时间的大小控制配置BPDU发送间隔。 |
Forward Delay Timer | Forward Delay Timer定时器时间的大小控制端口在Listening和Learning状态的持续时间。15s |
Max Age | Max Age定时器时间的大小控制存储配置BPDU的超时时间,超时认为根桥连接失败。20s |
-
Hello Time:
-
默认为2s,只能在根桥上进行修改
-
作用:保证生成树的健壮性
-
调整定时器:
-
调大:
-
优点:降低设备的负担
-
缺点:生成树不稳定
-
-
调小:
-
优点:生成树稳定
-
缺点:设备负担过大
-
-
-
-
Message Age:
-
从根桥到当前桥的接受到BPDU的总时间,若从根桥发出,则Message Age为0,每经过一个桥,配置BPDU就会加1
-
调整定时器:
-
调大:
-
优点:不会引起临时环路
-
缺点:收敛性差
-
-
调小:
-
优点:收敛性好
-
缺点:会引起临时环路
-
-
-
-
Max age:
-
BPDU的老化时间,默认为20s
-
调整定时器:
-
调大:
-
优点:不会误判为链路故障
-
缺点:间接故障不能及时发现
-
-
调小:
-
优点:间接故障能被及时发现
-
缺点:会被误判为链路故障
-
-
-
7.STP选举步骤
-
选举根桥:在所有运行STP协议的交换机上选举一个唯一的根桥。
-
BPDU数据帧中BID值最小的交换机将成为根桥
-
-
选举根端口:在所有非根网桥交换机上的不同端口之间选举出一个到根网桥最近的端口作为根端口。
-
端口到根桥RPC最小
-
上行设备BID最小
-
上行设备PID最小
-
本地端口PID最小
-
-
选举指定端口:在每一条链路上选举出一个指定端口。
-
网桥到根桥RPC最小
-
本地BID最小
-
本地PID最小
-
-
阻塞其它端口
8.配置BPDU的比较原则
-
比较根桥ID——RID(优先级+MAC地址) ,越小越优先
-
比较RPC,越小越优先
-
比较发送端的BID(优先级+MAC地址(越小越优先))
-
比较发送端的PID(优先级+端口号(越小越优先))
一般来说,二层优先级越小越优先,三层优先级越大越优先。
第一条原则主要用于在网络中选举根桥,后面的原则主要用于选举根接口及指定接口。
9.TCN BPDU
TCN BPDU的作用:加快mac表的超时以更新转发表项(要与树的形状同步)
-
当网络拓扑发生变化时,交换机会从自己的根端口向外发送TCN BPDU报文
-
接收到TCN BPDU报文的交换机向发送者发送TCA报文标识对TCN的确认
-
根交换机接收到TCN BPDU报文向网络中发送TC BPDU报文标识拓扑变化
-
收到TC BPDU报文的交换机将MAC地址表清空
10.临时环路的问题
11.传统STP的不足
问题一:STP初始化时间过长
设备运行STP初始化场景。STP从初始状态到完全收敛至少需经过30s
初始时,交换机之间会相互发送、监听BPDU,并计算生成树。 STP算法是采用被动等待计时器超时的方式来判断已收集全网所有的 BPDU,进而再进行计算。
从Listening到Forwarding需要30s:
Listening->Learning:STP 为避免临时环路,必须等待足够长的时间(即确保BPDU 能同步发送至全网各节点)确保全网的端口状态全部确定,才能进入转发。
Learning->Forwarding:在 STP 进入转发前还需根据收到的用户流量构建MAC地址表,仍需等待计时器超时才能进入转发。
问题二:端口状态转换时间过长
SWC与SWA的直连链路down掉,其NDP端口切换成RP端口并进入转发状态至少需要经过30s。
问题三:对次优BPDU处理的机制
在STP中,交换机除指定端口外的其他端口收到次优BPDU都不会做处理。
SWB与SWA的直连链路down掉,则SWC的NDP端口切换成DP端口并进入转发状态大约需要50s。
问题四:连接终端的端口仍需要等待超时
交换机连接终端的链路进入转发需要经过30s
STP 中,连接终端的链路也要进行生成树计算且链路进入转发需等待2个Forward Delay时间。
事实上,只要保证该端口下连接的是终端设备就不会出现环路,即没有必要进行STP计算和等待计时器超时
问题五:STP的拓扑变更机制
先由变更点朝根桥方向发送TCN消息,收到该消息的上游交换机就会回复TCA消息进行确认;最后TCN消息到达根桥后,再由根桥发送TC消息通知设备删除桥MAC地址表项,机制复杂,效率低下
拓扑变更处理过程
-
在网络拓扑发生变化后,下游设备会不间断地向上游设备发送TCN BPDU报文。
-
上游设备收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文。其它端口也有可能收到 TCN BPDU报文,但不会处理。
-
上游设备会把配置BPDU报文中的Flags的TCA位设置1,然后发送给下游设备,告知下游设备停止发送TCN BPDU 报文。
-
上游设备复制一份TCN BPDU报文,向根桥方向发送。
-
重复上述步骤,直到根桥收到TCN BPDU报文。
-
根桥把配置BPDU报文中的Flags的TC位置1后发送,通知下游设备直接删除桥MAC地址表项。
2、RSTP
1.端口角色
RSTP 中根端口和指定端口角色的定义和 STP 相同。RSTP 增加了三种端口角色:替换端口 (Alternate Port)、备份端口(Backup Port)和边缘端口(Edge Port)。
-
替换端口为网桥提供一条到达根桥的备用路径,当根端口或主端口被阻塞后,替换端口将成为新的根端口。
-
备份端口为网桥提供了到达同一个物理网段的冗余路径,当指定端口失效后,备份端口将转换为新的指定端口。 当开启了生成树协议的同一台设备上的两个端口互相连接而形成环路时,设备会将其中一个端口阻塞,该端口就是备份端口。
-
边缘端口是不与其他设备或网段连接的端口,边缘端口一般与用户终端设备直接相连。
边缘端口的特点:
边缘端口会节省30S的延时,端口UP后会立即进入转发状态。
边缘端口的UP/DOWN不会触发拓扑改变。
当边缘端口收到TC BPDU时,会触发交换机更新MAC地址表,但不会更改MAC地址老化时间
边缘端口如果收到配置的BPDU报文会马上变为一个普通端口,进行STP的收敛
边缘端口也会发送配置BPDU报文。
PA协商不会阻塞边缘端口。
替换端口和备份端口:
1、 从配置BPDU报文发送角度来看:
a) Alternate Port 就是由于学习到其它网桥发送的配置BPDU报文而阻塞的端口
b) Backup Port 就是由于学习到自己发送的配置BPDU报文而阻塞的端口
2、 从用户流量角度来看:
a) Alternate Port 提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口
b) Backup Port 作为指定端口的备份,提供了另外一条从根节点到叶节点的备份通路
2.端口状态
3.P/A(Proposal/agreement)协商
针对运行STP设备从初始化到完全收敛至少需要30s的问题,RSTP采用P/A协商机制。由于有来回确认机制和同步变量机制,就无需依靠计时器来保障无环。可以让交换机的互联接口快速进入转发模式。
P/A协商的硬件条件:
只能应用在点到点的链路上(全双工的端口),如果是半双工端口会识别为共享(share)链路,在共享链路上不能使用P/A协商。一旦P/A协商不成功,指定端口的选择就需 要等待两个Forward Delay,协商过程与STP一样。
P/A协商的过程:
-
SW1向SW2发送p置位的BPDU包。
-
同步变量(阻塞除边缘端口以外的其他端口,防止出现环路)。
-
SW2向SW1发送A置位的BPDU包。
-
SW1收到A置位的BPDU包后,端口立即进入Forwarding状态。(一般都是秒级)
P/A协商的详细过程:
什么情况下RSTP报文中需要将Proposal位置位?
一个指定端口进入discarding或learning状态,需要将proposal位置位。
RSTP中收敛时间的优化:
P/A协商:可以让交换机的RP和DP的互联接口快速进入转发状态。
直连故障:AP口变为RP并快速进入转发状态,不需要30s延时。
次优场景:AP口收到次优的RST BPDU包后会马上变为DP口,并向该端口发送最优的RST BPDU包。
非直连链路故障:连续丢失3个RST BPDU包,端口角色就需切换,最长时间为6s。
RSTP中TC置位的RST BPDU包所有桥设备都可以发送,连续发送4s(TC while时间)。
在RSTP中什么情况下才会发送TC BPDU包?
指定端口进入到转发状态。
4.环路的预防
-
开启STP协议,防止接入层交换机的发生自环。
-
接入层上联口开启BPDU Filter,防止BPDU被发送到其他端口,实现单端口的关闭。
-
下联口开启产商私有的防环技术,防止下联Hub的自环。
-
下联口起用BPDU Guard,防止下联普通交换机发生环路,环路时收到的BPDU相同,无法比较,BPDU Guard用于过滤BPDU。
-
下联口开启Portfast,设置连接PC的边缘端口。
5.STP和RSTP的区别
-
新增端口角色(alternate port、backup port)
-
STP有五种端口状态(disable、blocking、listening、learning、forwarding) RSTP只有三种端口状态(discarding、learning、forwarding)
-
RSTP只有配置BPDU、无TCN BPDU(取而代之的是TC BPDU)
-
RSTP包含两种链路:点到点链路、共享链路
-
端口的迁移:只要确定无环,立刻切换为forwarding状态(P/A机制)
快速收敛:RSTP具有更快的收敛时间。
灵活性:RSTP引入了替换端口(alternate port)和备份端口(backup port),以及更精细的状态转换过程。使得RSTP在网络拓扑变化时能够更灵活地调整生成树拓扑,减少了端口状态的改变和数据包的丢失。
支持快速端口:RSTP引入了快速端口(fast port)的概念,这些端口在网络拓扑发生变化时能够更快地进入指定状态,从而加速了生成树协议的收敛过程。
兼容性:RSTP与传统的STP兼容
更少的BPDU交换:RSTP通过减少BPDU(Bridge Protocol Data Unit,桥接协议数据单元)的交换次数来降低网络的开销,这样可以减少网络中的冗余信息和带宽占用。
特性 | STP | RSTP |
收敛速度 | 慢 | 快 |
协议复杂度 | 简单 | 复杂 |
兼容性 | 向下兼容所有支持STP的设备 | 向下兼容STP,需要所有设备都支持RSTP才能发挥其快速收敛的优势 |
应用场景 | 小型局域网 | 大型局域网、数据中心等 |
6.RSTP中MAC地址表的清空
-
TC发送者:清除边缘端口以外的其他端口的MAC地址表项
-
TC接收者:清除了接收TC报文和边缘端口以外的MAC地址表项
7.RSTP保护功能
(1)UplinkFast:
-
作用:减少收敛时间
-
上行链路组由根端口和所有提供去往根桥的替代端口组成,当根端口发生故障,则意味主用的上行链路故障,上行链路组内带有最低开销的端口将会被立即选举为新的根端口。
(2)BackboneFast:
-
作用:缩短非RSTP的收敛时间
-
当某条非直连链路发生故障,BackboneFast会检查是否去往根桥的替代路径
(3)Portfast:
-
作用:加快收敛
-
在接入层交换机的access口上使用,portfast端口一旦接了设备,接口可绕过listening和learning直接进入forwarding。
SW(config-if)#spanning-tree portfast [trunk]
//Spanning-tree portfast特性不能直接配置在trunk模式的接口上,否则即使配上去了,CISCO lOS也不生效,除非该接口变成access模式。如果确实需要在 trunk接口上配置,例如该接口连接了一台支持trunk的服务器,那么就在Spanning-tree portfast命令上增加trunk关键字。
注意,虽然配置了portfast的接口在no shutdown或者link一旦up的时候,会jump to forwarding状态,绕过listening和learning ,但是,这个接口建议必须是连接路由器或PC的。如果连的是交换机,这个接口仍然要接受spanning-tree的计算结果,如果计算结果是block,那么这个接口仍然会被block。这就是为什么你在CISCO IOS上敲入该条命令,lOS 会提示你,说可能会造成短暂的桥接环路。
(4)BPDUFilter:
可以在全局模式下配置,也可以在接口模式下配置,区别如下:
全局配置:spanning-tree portfast bpdufilter default
a)启用了portfast的接口将激活bpdufilter特性
b)接口在link up后瞬间会发送BPDU ( a few ),此后不再发送任何BPDU
c)接口在收到BPDU后立即丢失 portfast及bpdufilter特性,成为一个普通的spanning-tree接口
接口配置:spanning-tree bpdufilter enable
该接口将不会发送BPDU,也忽略接收到的BPDU
在接口上配置,不一定必须portfast特性,可独立实施。当然,建议搭配portfast特性使用。
(5)BPDU保护:
-
黑客在边缘端口接入一台运行生成树的交换机,当边缘端口收到BPDU时会切换为非边缘端口,重新开始进行生成树的计算,引起网络震荡
-
在边缘端口处开启BPDU保护,当收到BPDU报文时,该端口立即关闭,可以有效防止网络震荡
(6)BPDU过滤:
-
端口上所有接收到的配置BPDU 都会被丢弃
(7)Root保护:
-
黑客在根桥处接入一台优先级最高的交换机,该交换机可发送更优的BPDU报文,其他交换机收到更优收的BPDU报文后重新进行生成树的计算,从而引起网络拓扑结构的错误变更
-
在根桥处开启root 保护,当该端口收到更优的RST BPDU后,端口进入Discarding状态,不再转发报文。若一段时间内端口未收到更优的配置BPDU,则会自动恢复到正常的Forwarding状态
(8)环路保护:
-
当非指定接口收不到BPDU时,阻止其成为指定接口
(9)TC-BPDU泛洪保护:
-
黑客在边缘端口接入一台计算机不断伪造和发送TC-BPDU,交换机频繁地删除MAC地址表,交换机设备短时间内会收到很多TC-BPDU报文,频繁的删除操作会给设备造成很大的负担,给网络的稳 定带来很多隐患
-
在边缘端口处配置TC-BPDU保护功能,在单位时间内,交换设备处理TC-BPDU报文的次数可配置,设备只会处理阈值指定的次数
8.STP/RSTP缺陷
RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但RSTP和STP还存在同一个缺陷:由于局域网内所有的VLAN共享一棵生成树,因此无法在VLAN间实现数据流量的负载均衡,链路被阻塞后将不承载任何流量,还有可能造成部分VLAN的报文无法转发。
3、MSTP
1.MSTP对STP和RSTP的改进
-
IEEE于2002年发布的802.1S标准定义了MSTP。MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。
-
MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。每棵生成树叫做一个多生成树实例MSTI(Multiple Spanning Tree Instance),每个域叫做一个多生成树域/MST域(MST Region:Multiple Spanning Tree Region)。
-
所谓生成树实例就是多个VLAN的一个集合。通过将多个VLAN捆绑到一个实例,可以节省通信开销和资源占用率。MSTP各个实例拓扑的计算相互独立,在这些实例上可以实现负载均衡。可以把多个相同拓扑结构的VLAN映射到一个实例里,这些VLAN在端口上的转发状态取决于端口在对应MSTP实例的状态。
2.MSTP与VRRP结合
MSTP与VRRP配合使用,达到冗余备份与负载均衡的双重效果,无论是链路出现故障还是设备出现故障都能在极短的时间内恢复网络的连通性,此模型多见于金融网络。
01.VRRP主和MSTP根保持一致
02.规划多个VRRP,MSTP组,实现服务器网关的备份和负载分担。
03.在汇聚交换机上指定根桥,明确的路径使排错和配置网络变得更为容易。
04.汇聚交换机上联的三层接口采用路由口互联,避免采用SVI互联,限制二层网络的范围。
05.汇聚交换机上不需要参与STP的端口关闭STP特性。
06.汇聚交换机(根桥和备份根桥)与接入交换机互联的端口开启“root保护”功能。
07.汇聚交换机与接入层交换机相连的端口避免配置trunk 保持默认值。
08.接入交换机上行端口开启“环路保护”功能。
09.接入交换机连PC的口开“root保护”功能。
10.接入交换机与服务器直连端口设置为“边缘端口”。
11.接入交换机与服务器相连的端开启“BPDU保护”功能。
12.接入交换机与服务器相连的端开启“私有防环”功能。
13.所有交换机上开启“TC-BPDU保护”功能。
相关文章:

生成树详解(STP、RSTP、MSTP)
目录 1、STP 1.概述 2.基本概念 3.端口角色及其作用 4.报文结构 5.STP的端口状态 6.三种定时器 7.STP选举步骤 8.配置BPDU的比较原则 9.TCN BPDU 10.临时环路的问题 11.传统STP的不足 拓扑变更处理过程 2、RSTP 1.端口角色 2.端口状态 3.P/A(Propo…...
【QNX+Android虚拟化方案】128 - QNX 侧触摸屏驱动解析
【QNX+Android虚拟化方案】128 - QNX 侧触摸屏驱动解析 一、QNX 侧触摸屏配置基于原生纯净代码,自学总结 纯技术分享,不会也不敢涉项目、不泄密、不传播代码文档!!! 本文禁止转载分享 !!! 汇总链接:《【QNX+Android虚拟化方案】00 - 系列文章链接汇总》 本文链接:《【…...
C#中的集合初始化器
C#中的集合初始化器是一种简洁的语法,允许在声明集合的同时初始化其元素。这种语法特别适用于初始化实现了IEnumerable接口并具有Add方法的集合类型,如List<T>、Dictionary<TKey, TValue>等。 集合初始化器的基本用法 集合初始化器的基本语…...

cartographer建图与定位应用
文章目录 前言一、安装cartographer1.安装环境2.源码编译2.1 下载2.2 编译 二、gazebo仿真2d建图0.准备仿真环境1.编写lua文件2.编写启动文件3.建图保存 三、cartographer定位 move_base导航3.1 编写启动文件3.2 启动launch 总结 前言 本文介绍cartographer在ubuntu18.04下的…...
专业解析 .bashrc 中 ROS 工作空间的加载顺序及其影响 ubuntu 机器人
专业解析 .bashrc 中 ROS 工作空间的加载顺序及其影响 在使用 ROS(Robot Operating System)进行开发时,通常会涉及多个 Catkin 工作空间(Catkin Workspace)。这些工作空间包含不同的 ROS 包和节点,可能相互…...

Apache Doris 现行版本 Docker-Compose 运行教程
特别注意!Doris On Docker 部署方式仅限于开发环境或者功能测试环境,不建议生产环境部署! 如有生产环境或性能测试集群部署诉求,请使用裸机/虚机部署或K8S Operator部署方案! 原文阅读:Apache Doris 现行版…...

Flink四大基石之窗口(Window)使用详解
目录 一、引言 二、为什么需要 Window 三、Window 的控制属性 窗口的长度(大小) 窗口的间隔 四、Flink 窗口应用代码结构 是否分组 Keyed Window --键控窗 Non-Keyed Window 核心操作流程 五、Window 的生命周期 分配阶段 触发计算 六、Wi…...

NGINX配置https双向认证(自签一级证书)
一 生成自签证书 以下是生成自签证书(包括服务端和客户端的证书)的步骤,以下命令执行两次,分别生成客户端和服务端证书和私钥。具体执行可以先建两个目录client和server,分别进入到这两个目录下执行下面的命令。 生成私钥: 首先&…...

Flink双流Join
在离线 Hive 中,我们经常会使用 Join 进行多表关联。那么在实时中我们应该如何实现两条流的 Join 呢?Flink DataStream API 为我们提供了3个算子来实现双流 join,分别是: join coGroup intervalJoin 下面我们分别详细看一下这…...

【数据结构实战篇】用C语言实现你的私有队列
🏝️专栏:【数据结构实战篇】 🌅主页:f狐o狸x 在前面的文章中我们用C语言实现了栈的数据结构,本期内容我们将实现队列的数据结构 一、队列的概念 队列:只允许在一端进行插入数据操作,在另一端…...

基于web的海贼王动漫介绍 html+css静态网页设计6页+设计文档
📂文章目录 一、📔网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站演示 五、⚙️网站代码 🧱HTML结构代码 💒CSS样式代码 六、🔧完整源码下载 七、📣更多 一、&#…...
2022 年 9 月青少年软编等考 C 语言三级真题解析
目录 T1. 课程冲突T2. 42 点思路分析T3. 最长下坡思路分析T4. 吃糖果思路分析T5. 放苹果思路分析T1. 课程冲突 此题为 2021 年 9 月三级第一题原题,见 2021 年 9 月青少年软编等考 C 语言三级真题解析中的 T1。 T2. 42 点 42 42 42 是: 组合数学上的第 5 5 5 个卡特兰数字…...

机器学习算法(六)---逻辑回归
常见的十大机器学习算法: 机器学习算法(一)—决策树 机器学习算法(二)—支持向量机SVM 机器学习算法(三)—K近邻 机器学习算法(四)—集成算法 机器学习算法(五…...
计算机科学中的主要协议
1、主要应用层协议: HTTP、FTP、SMTP、POP、IMAP、DNS、TELNET和SSH等 应用层协议的主要功能是支持网络应用,定义了不同应用程序之间的通信规则。它们负责将用户操作转换为网络可以理解的数据格式,并通过传输层进行传输。应用层协议直接与用…...

下载maven 3.6.3并校验文件做md5或SHA512校验
一、下载Apache Maven 3.6.3 Apache Maven 3.6.3 官方下载链接: 二进制压缩包(推荐): ZIP格式: https://archive.apache.org/dist/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.zipTAR.GZ格式: https://archive.apache.org/dist/…...

【Android】View工作原理
View 是Android在视觉上的呈现在界面上Android提供了一套GUI库,里面有很多控件,但是很多时候我们并不满足于系统提供的控件,因为这样就意味这应用界面的同类化比较严重。那么怎么才能做出与众不同的效果呢?答案是自定义View&#…...
TIE算法具体求解-为什么是泊松方程和傅里叶变换
二维泊松方程的通俗理解 二维泊松方程 是偏微分方程的一种形式,通常用于描述空间中某个标量场(如位相场、电势场)的分布规律。其一般形式为: ∇ 2 ϕ ( x , y ) f ( x , y ) \nabla^2 \phi(x, y) f(x, y) ∇2ϕ(x,y)f(x,y) 其…...
postman中获取随机数、唯一ID、时间日期(包括当前日期增减)截取指定位数的字符等
在Postman中,您可以使用内置的动态变量和编写脚本的方式来获取随机数、唯一ID、时间日期以及截取指定位数的字符。以下是具体的操作方法: 一、postman中获取随机数、唯一ID、时间日期(包括当前日期增减)截取指定位数的字符等 获取…...

【计算机网络】实验3:集线器和交换器的区别及交换器的自学习算法
实验 3:集线器和交换器的区别及交换器的自学习算法 一、 实验目的 加深对集线器和交换器的区别的理解。 了解交换器的自学习算法。 二、 实验环境 • Cisco Packet Tracer 模拟器 三、 实验内容 1、熟悉集线器和交换器的区别 (1) 第一步:构建网络…...

flink学习(14)—— 双流join
概述 Join:内连接 CoGroup:内连接,左连接,右连接 Interval Join:点对面 Join 1、Join 将有相同 Key 并且位于同一窗口中的两条流的元素进行关联。 2、Join 可以支持处理时间(processing time)和事件时…...

Appium+python自动化(十六)- ADB命令
简介 Android 调试桥(adb)是多种用途的工具,该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具,其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利,如安装和调试…...

工业安全零事故的智能守护者:一体化AI智能安防平台
前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
c# 局部函数 定义、功能与示例
C# 局部函数:定义、功能与示例 1. 定义与功能 局部函数(Local Function)是嵌套在另一个方法内部的私有方法,仅在包含它的方法内可见。 • 作用:封装仅用于当前方法的逻辑,避免污染类作用域,提升…...

如何把工业通信协议转换成http websocket
1.现状 工业通信协议多数工作在边缘设备上,比如:PLC、IOT盒子等。上层业务系统需要根据不同的工业协议做对应开发,当设备上用的是modbus从站时,采集设备数据需要开发modbus主站;当设备上用的是西门子PN协议时…...