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

ENSP Pro Lab笔记:配置STP/RSTP/MSTP(1)

1、STP概述

1.1 定义

生成树协议(Spanning Tree Protocol,STP) 是一种以太网环路防护机制。
在存在冗余链路的网络中,设备通过运行生成树协议相互交换BPDU报文(Bridge Protocol Data Unit),自动发现网络中的环路,并有选择地阻塞部分端口,从而将原本存在环路的网络逻辑上修剪为无环的树形拓扑

当网络中的链路或设备发生故障时,生成树协议还可以激活被阻塞的冗余链路,恢复网络连通性,实现链路备份与快速恢复。

1.2 目的

在以太网中,为了提升可靠性,常常设计冗余链路作为备份路径,但这同时带来了环路问题
网络环路会导致:

  • 广播风暴(Broadcast Storm);

  • MAC地址表振荡;

  • 链路及设备资源被大量占用;

  • 严重时造成网络瘫痪。

为了解决上述问题,IEEE提出了三代生成树协议标准:

协议标准号特点
STPIEEE 802.1D生成树协议的最初版本,实现基本的环路检测与阻断
RSTPIEEE 802.1W在STP基础上改进,实现快速收敛
MSTPIEEE 802.1S支持多生成树,可实现VLAN级的负载分担与快速收敛

1.3 协议演进与特点

  1. STP(Spanning Tree Protocol)

    • 基于 IEEE 802.1D 标准;

    • 所有 VLAN 共用一棵生成树;

    • 收敛速度慢(通常需要 30~50 秒);

    • 配置简单,但存在带宽浪费。

  2. RSTP(Rapid Spanning Tree Protocol)

    • 基于 IEEE 802.1W 标准;

    • 在 STP 基础上增加端口角色和状态优化机制;

    • 实现秒级收敛;

    • 仍然只支持单生成树,不支持VLAN级负载分担。

  3. MSTP(Multiple Spanning Tree Protocol)

    • 基于 IEEE 802.1S 标准;

    • 将多个 VLAN 映射到不同的生成树实例,实现多路径负载均衡

    • 支持与 STP、RSTP 兼容;

    • 配置复杂度较高,但具备最佳的可扩展性与灵活性。


1.4 三种生成树协议的对比

协议收敛速度流量转发配置复杂度
STP (IEEE 802.1D)最慢所有 VLAN 共享一棵生成树
RSTP (IEEE 802.1W)所有 VLAN 共享一棵生成树
MSTP (IEEE 802.1S)支持 VLAN 与实例映射,多棵生成树独立转发

1.5 设备角色

生成树协议的核心目标是消除环路,构建一个无环的树形逻辑拓扑结构。树形结构必须有一个根节点,即根桥(Root Bridge,RB)

  • 根桥(Root Bridge)
    根桥是整个生成树的逻辑中心,负责控制生成树的计算与路径选择。根桥的选举依据桥ID(Bridge ID),其中优先级最低、MAC地址最小的设备会被选为根桥。根桥的角色可能随着网络拓扑变化而动态变化。

    根桥是逻辑中心,不一定位于物理拓扑的中心位置。

  • 非根桥(Non-root Bridge)
    除根桥外,网络中的其他交换机均为非根桥设备。非根桥通过端口角色(根端口、指定端口、阻塞端口)参与生成树的形成与维护。

  • 根桥数量

    • STP/RSTP 网络中:全网仅有 一个根桥

    • MSTP 网络中:每个实例(Instance)都能独立形成一棵生成树,因此可以存在多个根桥,实现不同VLAN流量的负载分担。

1.6 端口角色

1.6.1 端口角色

生成树协议通过为交换机端口分配不同的角色,实现环路的检测与阻断。各协议支持的端口角色如下表所示:

协议端口角色说明
STP根端口(RP)非根桥上通往根桥的最优路径端口。
指定端口(DP)每个网段中负责转发流量的端口。
RSTP继承STP的RP、DP——
备用端口(Alternate Port)通向根桥的备用路径端口,用于快速切换。
备份端口(Backup Port)位于同一网段上,作为指定端口的备份。
边缘端口(Edge Port)直接连接终端设备的端口,不参与生成树计算。
MSTP继承RSTP的所有端口角色——
主端口(Master Port)用于跨MST区域(Region)与外部区域通信。
域边缘端口(Boundary Port)连接MST区域边界的端口,用于与CST或其他MST区域交互。

总结:

  • STP → RSTP → MSTP 的演进过程中,端口角色逐步丰富,以实现更快的收敛与更灵活的多实例管理。

  • RP与DP是所有生成树协议的核心端口角色;RSTP增加了快速切换机制相关的端口;MSTP则面向多区域场景扩展了跨域通信能力。

1.6.2 根端口(Root Port, RP)

  • 根端口是通向根桥路径开销(Path Cost)最小的端口,用于接收来自根桥方向的生成树BPDU消息,并向根桥方向转发数据。

  • 在运行 STP/RSTP 协议的设备上:

    • 每台非根桥设备上仅有一个根端口

    • 根桥本身没有根端口,因为它就是路径的终点。


1.6.3 指定端口(Designated Port, DP)

指定端口与“指定桥(Designated Bridge)”的概念相对应,二者共同决定在一个网段(segment)中谁负责转发BPDU与用户数据。

分类指定桥(Designated Bridge)指定端口(Designated Port)
从单台设备视角与本机直连、负责向本机发送配置BPDU的设备指定桥用于向本机转发BPDU的端口
从局域网(LAN)视角负责向本网段(Segment)转发BPDU的设备指定桥用于向本网段转发BPDU的端口

🌉 一、Segment(网段)的概念

在生成树(STP/RSTP/MSTP)中,Segment 并不是 IP 层的子网,而是指:

二层网络中,一组通过物理链路互联的设备端口所构成的广播域中的一个“链路段(Link Segment)”。

举例:

  • 如果两台交换机 SW1、SW2 之间用一根网线相连,这根链路就是一个 Segment

  • 如果是一台交换机通过 HUB 连接了多个节点,那么 HUB 那一侧所有端口属于同一个 Segment

  • 对生成树算法来说,每个 Segment 只允许一个“上游”出口来转发 BPDU 和用户数据。


🧭 二、指定桥(Designated Bridge)

每一个 Segment 上,生成树协议都会选出一个设备作为:

该 Segment 的 “管理者” 或 “发言人”,称为 指定桥(Designated Bridge)

指定桥的职责:

  • 负责为该 Segment 发送 BPDU;

  • 代表该 Segment 与其他网段保持生成树拓扑的一致性;

  • 从生成树角度看,Segment 的数据转发方向就是从指定桥指向其他设备。


🔌 三、指定端口(Designated Port)

在指定桥上,连接该 Segment 的那个端口被称为:

指定端口(Designated Port)

所以:

  • 每个 Segment 都对应唯一一个指定桥;

  • 指定桥上连接该 Segment 的端口就是指定端口;

  • 指定端口负责:

    • 向该 Segment 发送 BPDU;

    • 在拓扑收敛后负责转发用户数据。


🧩 四、HUB 与交换机的区别

  • HUB 互联部分:所有端口共享一个碰撞域,HUB 自身不理解 BPDU,不参与生成树算法。
    所以在这种场景下,STP 认为整个 HUB 段是一个 单独的 Segment,BPDU 只在接入 HUB 的交换机端口之间比较。

  • 交换机互联部分:每个链路都是点到点的(point-to-point link),每一段物理链路就是一个独立的 Segment
    交换机会主动参与 BPDU 的发送和比较,决定哪个是指定桥和指定端口。


🔄 五、总结关系图

概念作用唯一性说明
Segment二层链路段多个交换机或HUB互联形成的广播段
Designated Bridge负责该Segment的桥每个Segment仅1个代表该Segment对外发BPDU
Designated PortDesignated Bridge上连接该Segment的端口每个Segment仅1个负责转发BPDU和用户流量

💡一句话总结:

每个二层链路段(Segment),生成树协议都会选出一个指定桥(Designated Bridge)
它的**指定端口(Designated Port)**负责在该链路上发送 BPDU 和转发数据,
从而保证整个拓扑有且只有一个活跃转发路径。

1.6.4 备用端口(Alternate Port)

  • 定义:
    Alternate端口是根端口(Root Port)的备份端口,当根端口失效时,可迅速切换为新的根端口,实现快速收敛。

  • 功能:
    提供一条从指定桥(Designated Bridge)到根桥(Root Bridge)备用路径

  • 状态特征:
    由于端口接收到来自其他交换机的BPDU报文,判断自身不是最优路径而被阻塞(Discarding)

  • 典型场景:
    在两个交换机之间存在多条冗余链路时,非最优路径端口将成为Alternate端口。


1.6.5 备份端口(Backup Port)

  • 定义:
    Backup端口是指定端口(Designated Port)的备份端口,为同一交换机上通往同一网段的链路提供冗余通路

  • 功能:
    在指定端口失效时,可快速切换为转发状态,维持本网段的连通性。

  • 状态特征:
    由于端口接收到自己发送的BPDU报文(说明本网段存在环路或冗余连接),而被阻塞(Discarding)

  • 典型场景:
    一台交换机的两个端口同时接入同一个集线器或共享网段时,主用端口为DP,另一个端口成为Backup端口。

1.6.6 边缘端口(Edge Port)

  • 定义:
    边缘端口是指直接连接终端设备(如主机、打印机、服务器等)的端口。
    该类端口处于网络的最外层边界(Edge),不参与生成树计算,因此可
    直接进入转发(Forwarding)状态
    ,无需等待STP收敛过程。

  • 特性:

    • 边缘端口不会转发或接收生成树BPDU报文。

    • 若误接入交换机或环路设备(收到BPDU),端口会自动退出边缘状态,以防止环路。

  • 自动探测机制:
    启用生成树协议后,设备默认开启**边缘端口自动探测(Auto Edge Detection)**功能:

    • 若端口在 (2 × Hello Time + 1) 秒内未收到BPDU报文,则自动判定为边缘端口;

    • 若在此期间接收到BPDU报文,则将端口设置为非边缘端口

  • 手动配置优先级:
    若管理员手动将端口配置为边缘端口,则自动探测功能将被禁用,该端口始终视为边缘端口。

1.6.7 MSTP 基本概念回顾

在 MSTP 网络中,生成树的结构层次如下:

  • MST 域(MST Region):由配置相同的交换机组成,每个域内部独立计算生成树。

  • IST(Internal Spanning Tree):每个 MST 域内部计算出的一棵生成树。

  • CST(Common Spanning Tree):所有 MST 域之间计算出的生成树,用于连接各域。

  • CIST(Common and Internal Spanning Tree):由 CST 与各 IST 共同组成的整体生成树。

  • 总根(CIST Root):CIST 的根桥,是整个 MSTP 网络的逻辑中心。


1.6.8 主端口(Master Port)

  • 定义:
    主端口是 MST 域中到达 CIST 总根路径开销最小的端口,是域内数据流向总根的唯一出口

  • 功能:
    主端口承担域内与域外之间的转发职责,确保本域流量能正确汇聚至 CIST 根桥。

  • 特征:

    • 每个 MST 域中最多只有 一个 Master 端口

    • CIST 拓扑上,Master 端口的角色为 根端口(Root Port)

    • 其他 MST 实例中,Master 端口被标识为 Master Port

  • 典型场景:
    一个 MST 区域通过多条链路连接到上级骨干域时,只有一条最优链路的端口成为 Master 端口,其余链路端口为阻塞状态。


1.6.9 域边缘端口(Boundary Port)

  • 定义:
    域边缘端口是位于 MST 域边界,用于连接其他 MST 域或单实例生成树(如 STP/RSTP)网络的端口。

  • 功能:

    • 承担不同域之间 BPDU 报文的交换;

    • 作为 MST 域与外部生成树(CST)之间的边界桥接点。

  • 关系说明:

    • Master 端口是一种特殊的域边缘端口

    • Master 端口负责跨域通信并通向总根;

    • 其他域边缘端口可能仅用于跨区域互连而非主干方向转发。

1.7 端口状态

1.7.1 STP端口状态

运行 STP(Spanning Tree Protocol) 的设备端口在不同阶段会处于不同状态,以确保网络逐步收敛并避免环路。

端口状态说明
Disabled端口处于关闭(Down)状态,不参与生成树计算,不处理BPDU报文,也不转发用户流量。
Blocking端口仅接收并处理BPDU报文,用于环路检测,不转发任何用户流量。
Listening过渡状态。端口开始参与生成树计算,可接收和发送BPDU报文,但仍不转发用户流量。
Learning过渡状态。端口根据收到的用户流量开始学习并建立MAC地址表,可接收和发送BPDU报文,但仍不转发用户流量。
Forwarding正常转发状态。端口可接收、发送BPDU报文并转发用户流量。只有**根端口(RP)指定端口(DP)**才能进入此状态。

STP端口状态迁移机制:

  1. 端口Up或使能了STP,会从Disabled状态进入到Blocking状态。
  2. 端口被选举为根端口或指定端口,会进入Listening状态。
  3. 端口的Forward Delay定时器超时,会进入Learning/Forwarding状态。
  4. 端口不再是根端口或指定端口时,会进入Blocking状态。
  5. 端口Down或者去使能STP时,就进入Disabled状态。

1.7.2 RSTP/MSTP端口状态

相比于 STP 的 5 种端口状态,RSTPMSTP 将端口状态精简为 3 种,以加快收敛速度并简化状态转换。

端口状态说明
Forwarding端口处于转发状态,可转发用户流量、学习MAC地址,并可发送和接收BPDU报文。
Learning过渡状态。端口仅学习MAC地址表,可接收和发送BPDU报文,但不转发用户流量。
Discardqing阻塞状态。端口仅接收BPDU报文,不学习MAC地址,也不转发用户流量。

1.7.3 对比说明

  • STP 5 状态 → RSTP/MSTP 3 状态

    • Discarding = STP 的 Blocking + Listening + Disabled

    • Learning 与 STP 的 Learning 对应

    • Forwarding 与 STP 的 Forwarding 对应

  • 优势

    • 简化状态管理

    • 消除了STP中 Forward Delay 定时器的依赖

    • 结合握手机制(handshake)实现快速收敛

1.7.4 端口状态与端口角色对应关系

说明:

  • 端口**状态(Forwarding / Learning / Discarding)与端口角色(RP/DP/Edge/Alternate/Backup)**是两个独立概念。

  • 不同角色的端口支持的状态有所不同,具体如下表所示:

端口状态根端口 / Master端口指定端口边缘端口 / 域边缘端口Alternate端口Backup端口
ForwardingYesYesYesNoNo
LearningYesYesYesNoNo
DiscardingYesYesYesYesYes

关键点总结:

  1. Forwarding 状态仅限可参与流量转发的端口(根端口、指定端口、边缘/域边缘端口)。

  2. Learning 状态用于学习 MAC 地址,受端口角色限制(非备份/备用链路端口)。

  3. Discarding 状态是环路保护状态,所有端口角色均可处于该状态

  4. 端口角色决定端口功能和生成树拓扑作用,端口状态决定端口是否转发流量或学习 MAC

1.8 BPDU 报文分类

BPDU(Bridge Protocol Data Unit) 是生成树协议交换信息的载体,不同协议使用不同类型的 BPDU 报文。

BPDU 类型用途适用协议
配置 BPDU(Configuration BPDU)用于生成树计算和维护网络拓扑STP
RST BPDU用于生成树计算和维护网络拓扑RSTP
MST BPDU用于生成树计算和维护网络拓扑MSTP
TCN BPDU(Topology Change Notification)当网络拓扑发生变化时,通知其他设备进行 MAC 表刷新STP / RSTP / MSTP

补充说明:

  1. 配置类 BPDU:用于选举根桥、计算路径开销、更新端口角色。

  2. TCN BPDU:用于快速传播拓扑变化信息,保证 MAC 地址表及时更新,避免流量丢失。

  3. RSTP 与 MSTP 在报文格式和携带字段上相对于 STP 有优化,以支持快速收敛和多实例管理。

1.9 生成树协议定时器(STP / RSTP / MSTP)

1.9.1 生成树协议定时器

BPDU 报文中包含与时间相关的字段,用于生成树计算、端口状态控制及网络收敛。主要定时器如下:

定时器 / 字段作用默认值说明
Hello Time根桥发送配置 BPDU 的间隔2 秒控制 BPDU 的发送频率,用于生成树拓扑维护。
Forward Delay端口从 Listening → Learning → Forwarding 的过渡时间15 秒控制端口状态过渡,防止环路。
Max AgeBPDU 最大寿命20 秒表示 BPDU 在网络中存活的最大时间,超过则丢弃,防止过时信息影响生成树计算。
Message AgeBPDU 已经过的时间BPDU 报文携带字段,随着报文在网络中转发而累加,判断是否超过 Max Age。

补充说明:

  1. 定时器可手动配置,以满足不同网络规模和收敛需求。

  2. RSTP / MSTP 对 Forward Delay 和 Max Age 的依赖减少,通过握手机制和快速状态切换实现更快收敛。

  3. 生成树定时器直接影响端口状态迁移与整个网络收敛时间,是理解生成树行为的关键参数。

1.9.2 STP 定时器详解

STP 使用多种定时器控制生成树计算、端口状态迁移和网络收敛,主要包括 Hello Time、Forward Delay、Max Age,以及 BPDU 报文携带的 Message Age


1. Hello Time 定时器与超时时间
  • 作用:根桥周期性向邻居发送 BPDU 报文,确认链路状态。

  • 默认值:2 秒(可手动修改)

  • 超时时间计算

超时时间=Hello Time×3×Timer Factor

  • 说明

    • Timer Factor 缺省为 3,可手动调整。

    • 当网络稳定后,Hello Time 只有在 根桥修改后 才会生效,新值通过 BPDU 广播到非根桥。

    • 拓扑变化触发的 TCN BPDU 发送不受 Hello Time 管理。


2. Forward Delay 定时器
  • 作用:控制端口状态过渡,防止临时环路。

  • 默认值:15 秒

  • 端口状态过渡

    • Listening 状态持续 15 秒 → Learning 状态持续 15 秒 → Forwarding

  • 关键机制

    • 新选出的根端口和指定端口不会立即转发流量。

    • 通过 2 × Forward Delay 的延迟,让新的配置消息传播到全网,避免临时环路。


3. Max Age 定时器和 Message Age
  • Max Age

    • 作用:BPDU 报文老化时间,防止过时信息影响生成树。

    • 默认值:20 秒(可手动配置)

    • 根桥通过 BPDU 广播 Max Age 值,保证全网一致。

  • Message Age

    • 作用:记录 BPDU 从根桥到当前交换机的总时间。

    • 规则:

      1. Message Age ≤ Max Age:BPDU 继续转发。

      2. Message Age > Max Age:BPDU 被丢弃,可能意味着网络直径过大或根桥连接失败。

    • 实现细节:

      • 根桥发出的配置 BPDU,Message Age = 0

      • 每经过一台交换机,Message Age +1


4. 小结
  • Hello Time 控制 BPDU 发送间隔与链路故障检测

  • Forward Delay 控制端口从 Listening → Learning → Forwarding 的延迟,防止临时环路

  • Max Age + Message Age 保证 BPDU 老化机制有效,防止过时 BPDU 干扰生成树计算

1.10 根桥、根端口、指定端口的选举原则

1.10.1 BPDU 优先级向量

每台设备通过 BPDU 交互信息时,会携带四个关键字段,构成优先级向量:

{ Root ID, Root Path Cost, Bridge ID, Port ID }

字段名含义比较优先级
Root ID当前认为的根桥标识最高
Root Path Cost (RPC)到根桥的累积路径开销次高
Bridge ID (BID)报文发送设备的标识(Priority + MAC)第三
Port ID (PID)报文发送端口标识(Priority + Port No.)最低

💡 比较规则:从左到右依次比较,数值越小,优先级越高


1.10.2 各角色的选举原则

1️⃣ 根桥(Root Bridge)
  • 原则:BID 最小者为根桥。

  • BID 组成:

    BID = Bridge Priority (16bit) + MAC Address (48bit)

    • 当桥优先级相同时,MAC 地址较小的设备胜出。

  • 特点:

    • 根桥上所有端口都是 指定端口(Designated Port)

    • 根桥没有根端口(Root Port)。


2️⃣ 根端口(Root Port)
  • 定义:
    每台 非根桥 上距离根桥路径开销最小的端口。

  • 选举逻辑:

    1. 比较 Root Path Cost(RPC) → 最小者为根端口;

    2. 若 RPC 相同 → 比较收到的 BPDU 中的 发送设备 BID

    3. 若 BID 相同 → 比较 发送端口 PID

    4. 若 PID 也相同(极少发生) → 按端口号最小者为根端口。

  • 特点:

    • 每台非根桥设备仅有 一个根端口

    • 根桥没有根端口。


3️⃣ 指定端口(Designated Port)
  • 定义:
    每个网络段(或链路)上负责转发该段数据的端口。

  • 选举逻辑:

    1. 比较该段(Segment)上各端口的 到根桥路径开销(RPC)

    2. 若相同 → 比较 发送设备 BID

    3. 若相同 → 比较 发送端口 PID

    4. PID 较小者为指定端口,PID 较大者阻塞。

  • 特点:

    • 每个网段(Segment)只有一个指定端口;

    • 其他端口处于阻塞或备用状态。


路径开销(Path Cost)计算

  • 定义:
    端口到根桥的路径优劣衡量值。带宽越高,路径开销越小。

  • 根路径开销(RPC) = 所经过各段 Path Cost 之和。

1.11 STP/RSTP拓扑计算方法

1.11.1 基本原理

在一个启用了生成树协议的以太网中,所有设备(桥)会通过互相交换 BPDU(Bridge Protocol Data Unit) 报文来协同计算出一个无环的树形拓扑结构
生成树算法(STA, Spanning Tree Algorithm)的核心目标是:

  • 选举出根桥(Root Bridge)

  • 确定各非根桥上的根端口(Root Port)

  • 确定每个网络段(Segment)上的指定桥(Designated Bridge)/指定端口(Designated Port)

  • 对冗余链路上的其他端口进行阻塞(Blocking),防止环路。


1.11.2 算法基本过程

(1)初始状态

网络刚启动时,每台启用 STP/RSTP 的设备都认为自己是根桥,因此:

  • 发送的 BPDU 报文中:

    • 根桥 ID(Root Bridge ID) = 本设备 BID(Bridge ID);

    • 根路径开销(RPC, Root Path Cost) = 0;

    • 发送者 BID = 自身 BID;

    • 发送端口 ID(PID) = 本端口 ID。

  • 所有端口均处于“阻塞”或“侦听(Listening)”状态,仅参与 BPDU 交换,不转发用户流量。


(2)根桥选举

在 BPDU 交互过程中,设备之间会比较收到的“根桥 ID”:

  • BID(Bridge ID)最小的设备被选举为根桥;

  • 根桥持续周期性发送 BPDU,以维持网络拓扑稳定;

  • 非根桥在其 BPDU 中更新根桥信息,并计算到根桥的路径开销。

比较规则(优先级从高到低)

  1. 根桥 ID(Root Bridge ID)

  2. 根路径开销(Root Path Cost)

  3. 发送者 BID

  4. 发送端口 ID


(3)根端口与指定端口选举
步骤过程说明
1每台非根桥设备,从所有端口收到的配置 BPDU 中,选择“最优配置消息”的端口作为 根端口(Root Port)
2每个设备根据自己的根端口信息,为其余端口生成“指定端口配置消息”:
• 根桥 ID = 根端口 BPDU 的根桥 ID;
• 根路径开销 = 根端口路径开销 + 根端口到根桥路径开销;
• 发送者 BID = 本设备 BID;
• 发送端口 ID = 本端口 ID。
3设备将计算出的配置消息与端口自身的配置消息进行比较:
• 若计算出的配置消息更优,则该端口成为 指定端口(Designated Port),并周期性发送 BPDU;
• 若端口自身的配置消息更优,则该端口被阻塞(Discarding / Blocking),仅接收不发送 BPDU。

(4)最优配置消息选择过程
步骤过程说明
1每个端口比较收到的配置 BPDU 与自身生成的 BPDU:
• 若收到的 BPDU 优先级较低 → 丢弃;
• 若收到的 BPDU 优先级较高 → 用其内容替换本端口配置;
• 若相同 → 丢弃。
2设备对所有端口的 BPDU 信息进行全局比较,选出最优配置消息,用于确定根端口。

(5)拓扑收敛

当所有设备完成根桥、根端口、指定端口的选举后:

  • 根端口和指定端口进入 Forwarding 状态;

  • 其他端口进入 Discarding(Blocking) 状态;

  • 网络形成一个逻辑无环拓扑

STP 收敛过程较慢(通常 30~50 秒),RSTP 通过引入 快速迁移机制(Proposal / Agreement) 可实现秒级收敛。

http://www.dtcms.com/a/470208.html

相关文章:

  • ajax 效果网站中国室内装饰设计网
  • 5-流程控制语句
  • Dify实战:调试技巧深度解析
  • Linux下Mysql初始化如,密码如何查找
  • 2025知识管理平台深度测评:从工具进化为智能决策引擎
  • 网站后台开发教程jsp网站缓存在哪
  • 网站页面怎么做的好看百度在西安的公司叫什么
  • Python 打印1-100的素数
  • 创建子进程时的一些细节
  • STM32 EC11旋转编码器扫描读取
  • 如何对抗GPS欺骗式干扰之二:多天线阵列测向的识别原则和应用场景
  • Linux 内核网络调优:单连接大带宽吞吐配置
  • STM32 外设驱动模块【含代码】:XY摇杆模块
  • 商会网站模板河南核酸检测vip
  • 外骨骼手套带来了一种仅用手就能与XR进行交互的更自然的方式
  • 学习随笔-Math
  • Android 权限模型(前台、后台、特殊权限)
  • 成安专业做网站公司注册的流程与步骤
  • 多个编码智能体同时使用会不会混乱?
  • wpf中调用NumericUpDown控件
  • JVM(九)-- 类的生命周期
  • 数字孪生重构智慧园区:众趣科技何以成为 VR 园区领域标杆
  • LeetCode 刷题【113. 路径总和 II】
  • 网站英文联系我们毕设做购物网站系统的原因
  • 当涂城乡建设局的网站wordpress 链接主题
  • 利用ps制作网站的设计江苏省建设工程集团
  • Linux内核架构浅谈9-Linux内核的开源生态:开发者协作与版本迭代机制
  • 【经验总结】AUTOSAR架构下NvM进入无限循环问题分析
  • 春招准备之Git篇
  • 11-py调用js