当前位置: 首页 > news >正文

STP笔记总结

STP --- 生成树协议

STP(Spanning Tree Protocol,生成树协议)是根据 IEEE802.1D标准建立的,用于在局域网中消除数据链路层环路的协议。运行STP协议的设备通过彼此交互信息发现网络中的环路,并有选择地对某些端口进行阻塞,以最终实现将环路网络结构修剪成无环路的树型网络结构,从而防止报文在环路网络中不断增生和无限循环,避免设备由于重复接收相同的报文所造成的报文处理能力下降的问题发生。

冗余链路产生的问题

  • 广播风暴导致网络不可用;

    • 如果HostA发出广播请求,交换机S1和S2的端口port1都将收到这个广播报文,然后从所有其他同网段的端口(如 port2)广播出去,这时对端交换机与之相连的端口又收到相同的广播报文,这台交换机再从它的其他端口(如 port1)转发出去,对端交换机又会收到相同的广播报文,如此反复,最终导致整个网络资源被耗尽,网络瘫痪不可用。

  • MAC地址表的翻摆:MAC地址表震荡导致MAC地址表项被破坏;

    • 假设图所示的网络中没有广播风暴,HostA发送一个单播报文给HostB,如果此时HostB临时从网络中移去,那么交换机上有关HostB的MAC地址表项也将被删除。此时HostA发给HostB的单播报文,将被交换机S1和S2上的端口port1接收,由于S1上没有相应的MAC地址转发表项了,因此该单播报文将被同时泛洪转发到其他端口(如port2)上,交换机S2的端口port2在收到从对端port2端口发来的单播报文后,然后又以泛洪方式从其他端口(如 port1)发出去,使交换机 S1 的 port1 端口又会收到这个单播报文。如此反复,在两台交换机上,由于不间断地从端口 port2、port1 收到主机A 发来的单播文,交换机会不停地修改自己的MAC地址表项,从而引起了MAC地址表的抖动。如此下去,最终导致MAC地址表项被破坏。

  • 多重复数据帧。

    • 假设图所示的网络中没有广播风暴,HostA发送一个报文给HostB。S1和S2同时接收到报文,两个都要发送给HostB,这样HostB接收到两个相同的报文,消耗了链路资源。

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

802.1D生成树

802.1D ---- 由IEEE组成颁布的公有协议 ---- 标准的STP协议

RSTP --- 802.1W

MSTP --- 802.1S

STP基本概念

  • 桥ID

    • 每一台运行STP协议的交换机都拥有的唯一的BID

    • 桥ID一共8字节,包含16bit的桥优先级和48bit的桥MAC地址,其中桥优先级占据桥ID的高16bit位。

  • 根桥(RootBridge)

    • 根桥是整个网络的逻辑中心,但不一定是物理中心,且会根据网络拓扑的变化而动态变化。一般是需要将环路中所有交换机当中性能最好的一台设置为根桥交换机,以保证能够提供最好的网络性能和可靠性。网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备仅对该报文进行转发,传达拓扑变化记录,从而保证拓扑的稳定。

    • 对于一个运行STP协议的网络,根桥在全网中只有一个,就像一棵树只有一个树根一样,那就是网络中具有最小桥ID(BID)的桥。网络中除根桥外的其他桥统称为非根桥。

    • 缺省情况下,桥优先级为32768。 --- 可以修改,但是修改范围为0-61440,且必须是4096的倍数。

  • 开销cost与根路径开销RPC

    • 每一个激活了STP的接口都维护着一个cost值,接口的cost主要用于计算RPC,也就是计算到达根的开销

    • 在一个运行STP协议的交换网络中,某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的路径开销累加值,这个值叫做根路径开销(Root Path Cost)。根桥上所有端口的根路径开销,以及同交换机上不同端口间的路径开销值均为零。

    • 默认使用IEEE802.1T标准

  • 接口ID --- PID

    • 每一个运行了STP协议的交换机的接口会存在一个PID值,来标识该接口信息。

    • 接口ID长度是16bit,高4bit是接口优先级,低12bit是接口编号

    • 接口优先级默认为128,可以修改,取值范围0-240,必须为16的倍数

STP报文 --- BPDU

STP协议采用的是BPDU(Bridge Protocol Data Unit,桥协议数据单元)类型报文,也称为配置消息。STP就是通过在设备之间传递BPDU来确定最终修剪完成的网络拓扑结构。

  • 配置BPDU:用来进行生成树计算和维护生成树拓扑的报文,是初始阶段中各交换机发送的BPDU消息。

  • TCN BPDU:当拓扑结构发生变化时,下游设备用来通知上游设备网络拓扑结构发生变化的报文。它是当拓扑稳定后,网络中出现了链路故障,网络拓扑发生改变时所发送的BPDU消息。

BPDU载荷被直接封装在以太网数据帧中,数据帧的目的MAC地址是组播MAC地址:0180-c200-0000

配置BPDU报文

  • 在交换网络初始化过程中,每台交换机都从自己激活了STP的接口向外发送配置BPDU。

  • 当STP收敛完成后,只有根网桥才会周期性发送配置BPDU,缺省为2秒。非根网桥会在自己接收到根网桥发送的配置BPDU以后,使用触发更新方式,将自己的配置BPDU发送出去。

  • 配置BPDU的长度至少要35个字节,包含了桥ID、路径开销和端口ID等参数

  • 只有当“发送者BID”或“发送端口PID”两个字段中至少有一个和本桥接收端口不同,所收到的这个BPDU报文才会被处理,否则丢弃。这样避免了处理和本端口信息一致的BPDU报文。

  • 协议版本 --- PVI

    • stp ·········> 0;

    • rstp ·········> 2;

    • mstp ·········> 3

  • 标志字段 ---STP仅仅使用了最高位(TCA---拓扑变 更确认标记)和最低位(TC--->拓扑变更标记)

  • 消息寿命

    • 与TTL值相同,但是为设备数量,代表BPDU从发出到现在经过的时间。

    • 初始值为0,没经过一台交换机,数值加1。

    • Max Hop参数----最大消息寿命,默认值为20

  • 生存时间

    • 缺省20秒

TCN BPDU报文

该报文用于在网络拓扑发生变化时,向根桥通知变化的发生。该报文是为了修改全网交换机的MAC地址表信息而存在的,而非是为了改变STP的生成树结构。

  1. 本地交换链路发生故障后,STP将重新收敛,为了加快刷新全网交换机的MAC地址表,故障交换机会向本地其余运行了STP的接口发送TCN BPDU报文

  2. 邻居交换机收到TCN BPDU报文后,将回复一个TCA标记为1的配置BPDU报文,用于可靠性传输。

    1. 该过程会一直持续到根网桥接收到TCN BPDU报文。

    2. 注意:非根网桥不能主动发送配置BPDU,故需要等待接收到根网桥的BPDU后,将TCA标记位置为1,转发给故障设备。

  3. 之后该TCN BPDU会一直转发到根网桥处,由根网桥下发TC标记位为1的配置BPDU(只有根可以设置该标记位),逐级下发给所有交换机。

  4. 所有交换机在收到TC标记位为1的配置BPDU后,会立即将MAC地址表的老化时间临时性修改为15秒(转发延迟),使得MAC地址表能够提前刷新。

STP的角色选举

  • 根桥选举 --- RB <········ 交换机角色

    • 选举范围:整个交换网络

    • 一个交换网络有且只有一个根网桥

    • 选择最小BID ---- 在进行BID比较时,先比较桥优先级,优先级值小的为根桥;当桥优先级值相等时,再比较桥MAC地址,MAC地址小的为根桥。

    • 根网桥是具有可抢占性的。

  • 根接口 <········ 接口角色

    • 选举范围:每一个非根网桥设备上,有且只有一个跟接口。

    • 所谓根接口 ---- 是非根网桥上所有接口中收到最优BPDU报文的接口。

  • 指定接口 <········ 接口角色

    • 选举范围:两台交换机之间的物理链路上选举一个指定接口。有且只有一个。

    • 该接口是该物理链路内达到网桥最优的接口,也就是接收到最优的BPDU报文的接口。

    • 对于非根桥而言,其所有接口中收到最优BPDU的接口将成为该设备的跟接口,随后,该非根桥使用自己接收到的最优BPDU,为本设备上的其他接口各自计算一个BPDU报文。

      • 然后使用计算出的BPDU报文与该接口上所接收到的BPDU报文进行对比,最优的BPDU报文,那么该BPDU所在的接口为指定接口

    • 一般而言,根网桥的所有接口都是指定接口;在存在跟接口的链路上,对端必然是指定接口

  • 非指定接口

    • 所有的不是跟端口和指定端口都被称为非指定端口。而**非指定端口会被交换机进行

    • 被阻塞的接口既不会接收也不会转发业务数据,且该接口不会发送BPDU报文,但是可以接收BPDU报文。

最优BPDU的比较原则
  1. 选择具有最小桥ID的BPDU。

    • 这一步,实际上是在选举根网桥。通过对比BID参数。

  2. 比较入向BPDU的RPC数值,选择最小的接口作为最优BPDU报文

  3. 如果交换机接收到的多个BPDU报文的RPC相同,则比较对端设备的BID,选择具有较小BID参数的设备所对应的接口作为最优BPDU报文

  4. 如果存在对端设备的BID相同,则比较对端的PID值,选择较小的PID所在接口的对应接口作为最优BPDU报文

  5. 若对端PID相同,则比较本端接收到BPDU报文的接口的PID值,选择较小的作为最优BPDU报文

STP工作过程

  1. STP交换机初始化启动后,都会认为自己是根网桥,并在发送给其他交换机的配置BPDU中宣告自己为根桥。因此,此时的BPDU中的根桥ID为各自设备的网桥ID数值。

    1. 当交换机收到网络中其他设备发来的BPDU后,会对比BPDU报文中的根桥ID字段和自己的BID。

    2. 交换机不断交互BPDU报文,同时对BID进行对比,最终选举一台BID最小的交换机作为根网桥,其他为非根网桥。

    3. 根网桥的角色是可抢占的

  2. 选举完根网桥后,根网桥仍然会持续性发送配置BPDU报文,起到保活的效果。而其他非根网桥将持续不断的收到根网桥发送的BPDU,并计算自己的BPDU报文从其他指定端口发送出去。

  3. 每个交换机根据从自己不同接口收到的BPDU报文中选择出最优的BPDU,从而选举根端口。

    1. RPC

    2. 比较对端BID

    3. 比较对端PID

    4. 比较本地PID

  4. 每台交换机的每一条链路选举指定端口

    1. RPC

    2. BID

    3. 链路两端的PID

  5. 在确定了根端口和指定端口之后,交换机上所有剩余的端口都被称为非指定端口。并且会在逻辑上阻塞所有的非指定端口。

    1. 当非指定端口被阻塞后,生成STP树。

    2. 被阻塞的接口既不会接收也不会转发业务数据,且该接口不会发送BPDU报文,但是可以接收BPDU报文。

在交换网络中,一般将网关所在地、流量汇聚地点以及STP根网桥三点合并在一起

STP的接口状态

  • 禁用状态(Disable)

    • 此时端口不仅不能转发 BPDU 报文,也不能转发用户流量。端口状态为Down。

    • 接口禁用生成树协议。

  • 阻塞接口(Blocking)

    • 是生成树协议激活后进入的第一个状态。

    • 该状态会停留一个最大老化时间(20秒)。然后进入到下一个状态。

    • 此时端口仅可接收并处理BPDU,不转发用户流量。

  • 侦听状态(Listening)

    • 可以收发BPDU报文。进行STP角色选举过程。

    • 该状态会选举出根网桥、根接口、指定接口和非指定接口。

    • 停留一个转发延迟时间(15秒)后,进入下一个状态。这也是一种过渡状态。

    • 只有根端口和指定端口会进入到学习状态,而非指定端口会退回到阻塞状态

  • 学习状态(Learning)

    • 接收业务流量,并学习MAC地址信息,但不转发用户流量。----目的:为了减少单播帧的洪泛。

    • 停留一个转发延迟时间(15秒)后,进入下一个状态。

    • 这是一种过渡状态,增加Learning状态为防止临时二层环路。

  • 转发状态(Forwarding)

    • 可以正常接收和转发业务数据和BPDU报文。

    • 只有根端口和指定端口可以进入该状态。

状态迁移过程

①:端口从禁止状态开始初始化或者使能后首先进入阻塞状态。

②:在端口突然被禁用或者链路失效时将从当前其他所有状态下直接进入到禁用状态。

③:在端口被选举为根端口或指定端口后,由阻塞状态进入到监听状态。

④:在端口不再是根端口或指定端口时,会从当前其他状态直接进入阻塞状态。

⑤:当新选出的根端口和指定端口要经过两倍的转发延时(即从监听状态进入学习状态,再从学习状态进入转发状态)后才能进入转发状态,以确保新的配置消息传遍整个网络,防止临时环路的产生。

STP的收敛时间

基于计时器进行收敛。

  • 首次收敛 --- 50s(阻塞20s + 2 * 转发延迟)

  • 根桥故障 --- 50s(最大寿命 + 2 * 转发延迟)

  • 直连链路故障 --- 30s( 2 * 转发延迟)

  • 非直连链路故障 --- 50s(最大寿命 + 2 * 转发延迟)

STP的定时器

  1. Hello Time(Hello定时器)

    • Hello定时器是指运行STP协议的设备发送配置BPDU的时间间隔,即设备会每隔Hello Time时间向周围的设备发送配置消息BPDU,以确认链路是否存在故障。

    • 默认为2s。

    • 当网络拓扑稳定之后,该定时器的修改只有在根桥修改后才有效。新的根桥会在发出的BPDU报文中填充适当的字段以向其他非根桥传递该定时器修改的信息。

    • 当拓扑变化之后,TCN BPDU的发送不受这个定时器的管理。

  2. Forward Delay(转发延时)

    • 转发延时是设备进行状态迁移的延迟时间,是指一个端口处于Listening和Learning状态的各自持续时间,缺省是15s。即Listening状态持续15s,随后进入Learning状态,然后再持续15s。

    • 链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。 但是重新计算得到的新配置消息不可能立即传遍整个网络,如果此时新选出的根端口和指定端口就立即开始数据转发的话很可能会造成临时的二层环路。为此,STP 采用了一种状态迁移机制,新选出的根端口和指定端口要经过两倍的 Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。

  3. Max Age(最大生存时间)

    • 最大生存时间是指端口的BPDU报文的老化时间。

    • 运行 STP协议的网络中非根桥设备收到配置BPDU报文后,会对报文中的Message Age(消息生存时间)和Max Age进行比较:如果Message Age小于等于Max Age,则该非根桥设备继续转发配置BPDU报文;如果Message Age大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置 BPDU,可认为网络直径过大,导致根桥连接失败。

    • 当配置 BPDU从根桥发出时报文中的Message Age值为 0。配置BPDU报文每经过一个桥,Message Age增加 1。

STP的配置

[sw1]stp enable   ---启动STP协议,华为默认开启该协议
[sw1]stp mode stp  ---修改STP的工作模式,默认工作模式为MSTP
​
[sw1]stp root primary   ---将交换机设定为根网桥,其本质是将优先级修改为0
[sw2]stp root secondary  ---将交换机设定为备份根网桥,其本质是将优先级修改为4096
[sw3]stp priority 8192  ---将交换机优先级设定为8192
​
[sw6-GigabitEthernet0/0/1]stp port priority ? ---修改接口优先级,干涉PID数值INTEGER<0-240>  Port priority, in steps of 16[sw6]stp pathcost-standard ?  ----修改本地开销值计算方法类型,全网均需要修改dot1d-1998  IEEE 802.1D-1998dot1t       IEEE 802.1Tlegacy      Legacy​
[sw6-GigabitEthernet0/0/1]stp cost ?  ----直接修改接口cost值INTEGER<1-200000000>  Port path cost  ---该参数可以修改的范围是根据开销值计算类型而定
​
[sw1]display stp   ---查看STP协议运行状况
[sw1]display stp brief  ---查看STP接口状态

  • DESI ········> 指定接口

  • ROOT ········> 根端口

  • ALTE ········> 备份端口

相关文章:

STP笔记总结

STP --- 生成树协议 STP&#xff08;Spanning Tree Protocol&#xff0c;生成树协议&#xff09;是根据 IEEE802.1D标准建立的&#xff0c;用于在局域网中消除数据链路层环路的协议。运行STP协议的设备通过彼此交互信息发现网络中的环路&#xff0c;并有选择地对某些端口进行阻…...

Qt开发 之 记一次安装 Qt5.12.12 安卓环境的失败案例

文章目录 1、安装Qt2、安卓开发的组合套件2.1、CSDN地址2.2、官网地址2.3、发现老方法不适用了 3、尝试用新方法解决3.1、先安装JDK&#xff0c;搞定JDK环境变量3.1.1、安装jdk3.1.2、确定jdk安装路径3.1.3、打开系统环境变量配置3.1.4、配置系统环境变量3.1.5、验证JDK环境变量…...

基于SpringBoot的就业信息管理系统设计与实现(源码+数据库+文档)

摘 要 在新冠肺炎疫情的影响下&#xff0c;大学生的就业问题已经变成了一个引起人们普遍重视的社会焦点问题。在这次疫情的冲击之下&#xff0c;大学生的就业市场的供求双方都受到了不同程度的影响&#xff0c;大学生的就业情况并不十分乐观。目前&#xff0c;各种招聘平台上…...

Java面试整理(四)Java IO流

我记得自己刚开始学Java的时候,都听过师兄的分享,说IO流是很重要,而且很难。 自己正式接触之后,其实IO流这块知识并不是特别难,而且随着IT的发展,IO流这块反而用得不是很多。特别是在应用开发这个层面,用得更少。 当然,可能会有朋友跳出来说“这怎么可能?你不懂Java吧…...

《安富莱嵌入式周报》第328期:自主微型机器人,火星探测器发射前失误故障分析,微软推出12周24期免费AI课程,炫酷3D LED点阵设计,MDK5.39发布

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 更新一期视频教程&#xff1a; 【实战技能】 单步运行源码分析&#xff0c;一期视频整明白FreeRTOS内核源码框架和运行…...

产品经理在项目周期中扮演的角色Axure的安装与基本使用

目录 一.项目周期流程 二.Axure是什么 三.Axure安装 3.1 一键式安装 3.2 汉化 3.3 授权登录 四.Axure的界面介绍及基本使用 4.1 菜单栏的使用 4.2 工具栏的使用 4.3 页面概要的使用及组件的使用 4.4 组件的样式设计 一.项目周期流程 在一般的项目周期中包含的工作内容有&…...

Dockerfile创建镜像介绍

1.介绍 Docker 提供了一种更便捷的方式&#xff0c;叫作 Dockerfile&#xff0c;docker build命令用于根据给定的Dockerfile构建Docker镜像。 docker build语法&#xff1a; # docker build [OPTIONS] <PATH | URL | -> 常用选项说明 --build-arg&#xff0c;设置构建时的…...

Android 滥用 SharedPreference 导致 ANR 问题

SharedPreference 是 Android 平台提供的一种轻量级的数据存储方式&#xff0c;它用于存储应用的配置信息或者一些简单的数据。SharedPreference 基于键值对的存储&#xff0c;并且支持基本的数据类型&#xff0c;如整型、字符串、布尔值等。它的使用非常简单方便&#xff0c;适…...

虚幻商城 道具汇总

文章目录 载具Vehicle Variety Pack(车辆品种包)Vehicle Variety Pack Volume 2(车辆品种包第 2 卷)家具Free Furniture Pack(免费家具包)Old West - VOL 1 - Interior Furniture(旧西部 - 第1卷 - 家具包)Old West VOL.3 - Travel Supplies and Goods(旧西部 - 第3卷…...

docker: Error response from daemon: failed to create shim task: OCI runtime

1 概述 在解决"Docker: Error response from daemon: failed to create shim task: OCI runtime"问题之前&#xff0c;我们先来了解一下Docker和OCI runtime的基本概念。 Docker是一个开源的应用容器引擎&#xff0c;可以帮助开发者将应用程序和其依赖打包到一个可…...

SpringBoot+线程池实现高频调用http接口并多线程解析json数据

场景 SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)&#xff1a; SpringbootFastJson实现解析第三方http接口json数据为实体类(时间格式化转换、字段包含中文)-CSDN博客 Java中ExecutorService线程池的使用(Runnable和Callable多…...

java实现局域网内视频投屏播放(一)背景/需求

一 背景 我们在用电视上投屏电影或者电视剧时&#xff0c;如果没有vip&#xff0c;用盗版电影网站投屏的话会有两个问题&#xff0c;1:他们网站没有投屏功能。2:卡&#xff01;&#xff01;&#xff01;。还有就是不能随心所欲的设置自己先要自动播放的视频列表&#xff08;如…...

【Spring】手写一个简易starter

需求&#xff1a; 自定义一个starter&#xff0c;里面包含一个TimeLog注解和一个TimeLogAspect切面类&#xff0c;用于统计接口耗时。要求在其它项目引入starter依赖后&#xff0c;启动springboot项目时能进行自动装配。 步骤&#xff1a; &#xff08;1&#xff09;引入pom依赖…...

Spring Cloud Alibaba实践 --Sentinel

sentinel介绍 Sentinel的官方标题是&#xff1a;分布式系统的流量防卫兵。从名字上来看&#xff0c;很容易就能猜到它是用来作服务稳定性保障的。对于服务稳定性保障组件&#xff0c;如果熟悉Spring Cloud的用户&#xff0c;第一反应应该就是Hystrix。但是比较可惜的是Netflix…...

使用Mockjs模拟(假数据)接口(axios)

一、什么是MockJs Mock.js官网 Mock.wiki.git mock测试就是在测试过程中&#xff0c;对于某些不容易构造或者不容易获取的对象&#xff0c;用一个虚拟的对象来创建以便测试的测试方法。 二、安装mockjs npm install mockjs 三、 MockJs使用 简单使用&#xff1a; // 使用…...

【面试常考题目】五种方法解决“如何在n个无序数组中找出它的中位数(java)”问题

1.3 从N个数组中找到中位数&#xff0c;每一个数组可能乱序 在LeetCode上&#xff0c;"寻找多个数组的中位数"这类问题通常是由两个数组合并中位数问题&#xff08;即LeetCode第4题&#xff09;的变种或扩展。直接对应于多个数组合并后寻找中位数的题目在LeetCode上…...

打包CSS

接上一个打包HTML继续进行CSS的打包 1.在之前的文件夹里的src文件夹创建一个css文件 2.在浏览器打开webpack——>中文文档——>指南——>管理资源——>加载CSS 3.复制第一句代码到终端 4.复制下图代码到webpack.config.js脚本的plugins&#xff1a;[.....]内容下…...

Java项目开发,业务比较复杂如何减少bug

Java项目开发&#xff0c;业务比较复杂如何减少bug 当Java开发工作涉及复杂业务时&#xff0c;可以采取以下方法来减少bug的数量&#xff1a; 1、深入了解业务需求 充分了解业务需求&#xff0c;与业务人员进行充分的沟通和交流&#xff0c;确保对需求的理解正确。在需求分析…...

[EFI]Atermiter X99 Turbo D4 E5-2630v3电脑 Hackintosh 黑苹果efi引导文件

硬件型号驱动情况主板 Atermiter X99 Turbo D4 处理器 Intel Xeon E5-2630v3 已驱动内存Desktop DDR4 2666 MHz已驱动硬盘Netac NV7000已驱动显卡AMD Radeon RX 5700xt已驱动声卡瑞昱 英特尔 High Definition Audio 控制器ALC897已驱动网卡LucyRTL8125已驱动无线网卡蓝牙Broad…...

map.getOrDefault

map.getOrDefault 是 Java 中的一个方法&#xff0c;用于从 Map 中获取指定键的值&#xff0c;如果键不存在&#xff0c;则返回指定的默认值。 方法签名如下&#xff1a; V getOrDefault(Object key, V defaultValue) 其中&#xff0c;key 是要获取值的键&#xff0c;defaul…...

PyAutoGUI实战指南:从基础操作到自动化脚本编写

1. PyAutoGUI入门&#xff1a;解放双手的自动化神器 每次看到同事在电脑前重复点击几百次鼠标时&#xff0c;我都想冲过去安利PyAutoGUI。这个Python库能让你用代码控制鼠标键盘&#xff0c;把枯燥的机械操作变成一键运行的脚本。上周我帮财务部写了个自动填报表的脚本&#xf…...

GraphViz+CANdelaStudio实战:如何可视化你的State Diagram状态转换图

GraphVizCANdelaStudio实战&#xff1a;如何可视化你的State Diagram状态转换图 在汽车电子开发领域&#xff0c;状态机的设计和验证是核心工作之一。当你在CANdelaStudio中精心设计了复杂的状态转换逻辑后&#xff0c;如何让这些抽象的状态关系变得直观可理解&#xff1f;这就…...

BK1086/88 DSP收音机Arduino库详解

1. 项目概述PU2CLR BK108X 是一款专为 BEKEN BK1086 和 BK1088 高集成度数字信号处理&#xff08;DSP&#xff09;广播接收芯片设计的 Arduino 库。该库并非通用型通信封装&#xff0c;而是面向射频接收系统工程实践的底层控制框架&#xff0c;其核心价值在于将芯片复杂的寄存器…...

HJ166 讨厌鬼进货

题目题解(40)讨论(20)排行 入门 通过率&#xff1a;61.91% 时间限制&#xff1a;1秒 空间限制&#xff1a;256M 知识点贪心 校招时部分企业笔试将禁止编程题跳出页面&#xff0c;为提前适应&#xff0c;练习时请使用在线自测&#xff0c;而非本地IDE。 描述 讨厌鬼需要采…...

GHelper合盖模式终极指南:华硕笔记本外接显示器合盖不休眠完整教程

GHelper合盖模式终极指南&#xff1a;华硕笔记本外接显示器合盖不休眠完整教程 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TU…...

FreeRADIUS配置踩坑记:当LDAP用户遇上Google Authenticator,如何解决PAM模块的那些‘坑’?

FreeRADIUS与LDAP集成Google Authenticator的实战避坑指南 当企业安全团队决定为远程访问系统部署双因素认证时&#xff0c;FreeRADIUS与LDAP集成Google Authenticator的方案常被列为优选。但真正实施时&#xff0c;技术细节中的"魔鬼"往往让工程师们夜不能寐。本文将…...

ThinkPHP3.x核心特性全解析

好的&#xff0c;我们来梳理一下 ThinkPHP 3.x 版本的主要特性&#xff1a;MVC 架构支持&#xff1a;严格遵循模型(Model)-视图(View)-控制器(Controller)的设计模式。清晰分离业务逻辑、数据操作和页面展示&#xff0c;便于协作开发和维护。路由支持&#xff1a;支持多种 URL …...

瑞典隆德大学 AI 模型血检识别 5 种神经疾病

瑞典隆德大学研发的 AI 模型 ProtAIDe-Dx&#xff0c;可通过单次血检精准识别 5 种神经退行性疾病&#xff0c;准确率高、早期筛查潜力大。 一、核心信息 发表时间&#xff1a;2026年3月31日&#xff08;《Nature Medicine》&#xff09;研发团队&#xff1a;隆德大学 Vogel &a…...

闲置U盘秒变神器!Windows 11密码重置盘制作保姆级教程(含32/64位系统差异说明)

闲置U盘秒变系统急救神器&#xff1a;Windows 11密码重置盘全流程精解 那个抽屉角落积灰的旧U盘&#xff0c;可能比你想象中更有价值。当Windows 11的登录界面无情拒绝你输入的密码时&#xff0c;一个预先制作的密码重置盘就是打开数字大门的备用钥匙。不同于网上流传的简易教程…...

PlugY:重新定义暗黑破坏神2单机体验的技术突破

PlugY&#xff1a;重新定义暗黑破坏神2单机体验的技术突破 【免费下载链接】PlugY PlugY, The Survival Kit - Plug-in for Diablo II Lord of Destruction 项目地址: https://gitcode.com/gh_mirrors/pl/PlugY 暗黑破坏神2作为ARPG游戏的里程碑之作&#xff0c;其单机模…...