华为交换机生成树STP配置案例

- 企业内部网络怎么防止网络出现环路?学会STP生成树技术就可以解决啦。
STP简介
在二层交换网络中,一旦存在环路就会造成报文在环路内不断循环和增生,产生广播风暴,从而占用所有的有效带宽,使网络变得无法正常通信。
在这种环境下生成树协议应运而生,生成树协议是一种二层管理协议,它通过有选择性地阻塞网络冗余链路来达到消除网络二层环路的目的,同时具备链路备份功能。
生成树协议和其他协议一样,是随着网络的不断发展而不断更新换代的。最初被广泛应用的是IEEE802.1D-1998 STP(Spanning Tree Protocol,生成树协议),随后以它为基础产生了IEEE 802.1w RSTP(Rapid Spanning Tree Protocol,快速生成树协议)和IEEE 802.1s MSTP(Multiple Spanning Tree Protocol,多生成树协议)。
三种生成树协议特点比较:
| 生成树协议 | 特点 | 应用场景 |
| STP |
| 无需区分用户或业务流量,所有VLAN共享一棵生成树。 |
| RSTP |
| |
| MSTP |
| 需要区分用户或业务流量,并实现负载分担。不同的VLAN通过不同的生成树转发流量,每棵生成树之间相互独立。 |
STP实现说明
华为实现说明
- STP在交换机所有版本,所有形态都支持。
- 华为交换机默认STP模式是MSTP。需要运行STP或RSTP模式时,必须要手动配置。
- 华为交换机在STP模式下,使用的端口角色和RSTP是一样的,也就是说支持下面5种端口角色:指定端口、根端口、Alternate端口、Backup端口和边缘端口。
- 华为交换机在STP模式下,支持下面4种保护功能:BPDU保护、Root保护、环路保护和防TC-BPDU攻击保护。
- 版本差异说明:
- 从V100R006版本开始,华为X7交换机全局默认使能STP功能。
- V200R001版本及之后版本,开始支持边缘端口属性自动探测功能。即如果端口从未收到过BPDU报文,则边缘端口属性自动生效(端口下不会自动生成stp edged-port enable配置)。
- V200R001版本及之后版本,如果端口已经配置stp edged-port enable,可以再配置根保护和环路保护,而其他版本会提示Error。


其他厂商实现
- H3C交换机STP相关命令配置与S系列交换机基本没有差异。
- H3C交换机默认采用legacy标准来计算路径开销,而S系列交换机默认为dot1t。在与S系列交换机对接时,建议配置相同的计算标准。
- 某些H3C老形态设备,全局不使能STP或全局使能端口不使能STP时,端口收到BPDU报文后,可以当做普通组播数据报文在VLAN内转发。S系列交换机端口默认会丢弃。
Cisco交换机所支持的生成树协议类型分别有:PVST(Per VLAN Spanning Tree)、PVST+(Per VLAN Spanning Tree Plus)、Rapid-PVST+(Rapid Per VLAN Spanning Tree Plus)和MST(Multiple Spanning Tree)。这几种生成树协议的某些BPDU报文采用其私有的报文格式,与IEEE标准的BPDU报文格式不一样。
- 当Cisco交换机运行私有的PVST+或Rapid-PVST+生成树协议时,与S系列交换机能否互通,取决于Cisco侧的端口链路类型:
- 如果端口链路类型为trunk且退出VLAN 1,与S系列交换机无法实现互通。Cisco侧端口在非VLAN 1中发送其私有的BPDU报文,S系列交换机默认不会处理该报文,当做普通组播数据报文进行转发,可以通过配置l2protocol-tunnel进行透传。S系列盒式交换机通过l2protocol-tunnel透传PVST+报文时,全局需要配置bpdu mac-address 0100-0ccc-cccd。
- 如果端口链路类型为trunk而且加入VLAN 1,只可以在VLAN 1中与S系列交换机互通。
- 如果端口链路类型为access,可以与S系列交换机互通。
- 当Cisco交换机运行MST协议时,可以理解为标准的MSTP模式,可以与S系列交换机互通。但是需要注意:在使用MSTP协议的S系列交换机与使用MST的Cisco交换机采用相同的域配置(域名、修订级别、VLAN与实例的映射关系)的情况下,要想实现域内互通,需要在S系列交换机端口配置摘要侦听功能stp config-digest-snoop。这是两者由于采用不同的密钥来生成MSTP的摘要信息,因此端口发送的BPDU报文中的摘要信息不同。由于摘要信息不同,则属于不同的MST域,会进行域间互通。
注意以下介绍的STP是狭义的STP,即IEEE 802.1D-1998 中定义的STP 协议。
STP原理
协商原则
STP协议是根据4个维度进行选举协商的,设备之间通过发送BPDU报文,经过4个维度的比较,最终会阻塞综合能力最差的端口。
选举维度(桥ID,累计根路径开销,发送设备BID,发送端口PID)
| 维度 | 定义 | 作用 |
| 桥ID | BID(Bridge ID),是由16位的桥优先级(Bridge Priority)与桥MAC地址构成。BID桥优先级占据高16位,其余的低48位是MAC地址。 | 确定根桥。桥ID最小的设备会被选举为根桥。 |
| 累计根路径开销 | 某端口到根桥累计的路径开销就是所经过的各个桥上的各端口的路径开销累加而成。 | 选举根端口、指定端口和阻塞端口时使用。 |
| 发送设备BID | 发送BPDU报文的桥ID。 | 选举根端口、指定端口和阻塞端口时使用。 |
| 发送端口PID | 发送BPDU报文的端口ID。 PID由两部分构成的,高4位是端口优先级,低12位是端口号。 | 只在存在Backup端口时使用。 |
角色和状态
经过4个维度的比较,最终会协商出端口的角色和状态,确定报文流量的转发路径。STP角色的定义,如图所示。

- 根桥:就是桥ID最小的设备。桥ID是由16位的桥优先级与桥MAC地址构成。BID桥优先级占据高16位,其余的低48位是MAC地址。华为交换机默认桥优先级都是32768。所以在不修改桥优先级时,MAC地址最小的设备就是根桥。
- 指定端口:就是负责转发BPDU报文的端口。根桥上的端口都是指定端口。该端口可以正常转发流量。

- 根端口:就是去往根桥路径开销最小的端口。该端口可以正常转发流量。

- 阻塞端口:就是禁止转发流量的端口。

从上面的官方定义,可以看出:STP协商完成后,端口要么被阻塞,要么正常转发报文。其实在STP进行协商的过程中,是有一些中间状态的。
| 端口状态 | 目的 | 说明 |
| Forwarding | 端口既转发用户流量也处理BPDU报文。 | 只有根端口或指定端口才能进入Forwarding状态。 |
| Learning | 设备会根据收到的用户流量构建MAC地址表,但不转发用户流量。 | 过渡状态,增加Learning状态防止临时环路。 |
| Listening | 确定端口角色,将选举出根桥、根端口和指定端口。 | 过渡状态。 |
| Blocking | 端口仅仅接收并处理BPDU,不转发用户流量。 | 阻塞端口的最终状态。 |
报文格式
STP协议报文是通过BPDU报文封装的,目的MAC是组播MAC:01-80-C2-00-00-00,封装格式是IEEE 802.3。

BPDU报文处理流程
BPDU报文的分类
-
- 配置BPDU报文:根据Flags标记位,分为3类
第一类配置BPDU报文: Flags的TCA和TC位都置为0的配置BPDU报文
第二类配置BPDU报文: Flags的TCA和TC位都置为1的配置BPDU报文
第三类配置BPDU报文:Flags的TCA位置为0,TC位置为1的配置BPDU报文
-
- TCN BPDU报文: BPDU Type为0x80的BPDU报文,叫做TCN BPDU报文
BPDU报文的处理流程

BPDU报文格式
- 配置BPDU报文:BPDU Type为0x00的BPDU报文,都叫做配置BPDU报文
- 第一类配置BPDU报文: Flags的TCA和TC位都置为0的配置BPDU报文
该报文用于STP状态的协商和维持。具体报文格式如下:

- 第二类配置BPDU报文: Flags的TCA和TC位都置为1的配置BPDU报文
该报文用于通知下游设备停止发送TCN BPDU报文。具体报文格式如下:

- 第二类配置BPDU报文: Flags的TCA位置为0,TC位置为1的配置BPDU报文
该报文用于通知下游设备删除MAC地址表项。具体报文格式如下:

- TCN BPDU报文:BPDU Type为0x80的BPDU报文,叫做TCN BPDU报文,用于通知上游设备网络拓扑变更。具体报文格式如下:

使用注意事项
- 盒式交换机需要通过“bpdu enable”使能BPDU报文上送CPU处理的功能,才能使STP报文上送CPU处理,否则STP状态无法收敛。
V100R005及之前版本,在S2700系列设备,检查全局是否配置bpdu enable;其他系列盒式交换机,检查物理端口、Eth-trunk接口下是否配置bpdu enable。
V100R006及后续版本,对应形态设备全局或端口默认使能bpdu enable。
- Eth-Trunk接口使能STP时,建议修改Eth-Trunk接口的cost值使其小于物理端口的cost值,使其不易协商为备份端口。一是因为Eth-Trunk接口的开销为单个成员接口的开销除以成员接口数量,当成员口状态变化时Eth-trunk接口的cost值会变化;二是cost值越小说明链路质量越高。
- 通过命令“display stp brief”查看端口状态时,只会显示使能STP且UP的端口。
- 可以通过修改路径开销和发送者的BID,选择阻塞指定的端口。
配置举例
组网需求

如图所示,当前网络中SwitchA、SwitchB、SwitchC和SwitchD通过环形组网备份链路。希望通过运行生成树协议阻塞端口,将环形网络结构修剪成无环路的树形网络结构。
- 在主链路故障时,对切换到备份链路的时间要求不高,要求配置简单,所以这里使用STP模式。
- SwitchA设备的性能较高,希望作为根桥,SwithB为备份根桥。
- SwtichC和SwitchD设备连接用户,希望阻塞SiwtchC和SwitchD之间的链路。
- SwitchC和SwitchD连接用户的接口GE0/0/3不要参与STP计算。
配置思路
采用如下的思路配置STP:
- 配置模式是STP模式。
- 配置SwitchA为根桥,SwitchB为备份根桥。
- 统一使用默认路径开销。华为交换机默认的路径开销计算标准使用的是标准的dot1t。GE接口默认路径开销是20000,而Ethernet接口默认路径开销是200000。注意:eNSP模拟器中,STP的路径开销默认是1。
- SwitchC和SwitchD的GE0/0/3端口去使能STP协议。
- SwitchA、SwitchB、SwitchC和SwitchD使能STP协议。
操作步骤
步骤1:配置模式为STP模式。
| <HUAWEI> system-view [HUAWEI] sysname SwitchA [SwitchA] stp mode stp |
| <HUAWEI> system-view [HUAWEI] sysname SwitchB [SwitchB] stp mode stp |
| <HUAWEI> system-view [HUAWEI] sysname SwitchC [SwitchC] stp mode stp |
| <HUAWEI> system-view [HUAWEI] sysname SwitchD [SwitchD] stp mode stp |
步骤2:配置SwitchA为根桥,SwitchB为备份根桥。
| [SwitchA] stp root primary //也可以使用命令stp priority 0 配置优先级为0,和stp root primary的作用是一样的。 |
| [SwitchB] stp root secondary //也可以使用命令stp priority 4096 配置优先级为4096,和stp root secondary的作用是一样的。 |
步骤3:去使能SwitchB和SwitchC设备GE0/0/3端口的STP功能。
| [SwitchC] interface gigabitethernet0/0/3 [SwitchC-GigabitEthernet0/0/3] stp disable [SwitchC-GigabitEthernet0/0/3] quit |
| [SwitchD] interface gigabitethernet 0/0/3 [SwitchD-GigabitEthernet0/0/3] stp disable [SwitchD-GigabitEthernet0/0/3] quit |
步骤4:全局使能STP功能。
华为X7系列交换机默认是使能,该步骤可以省略。
| [SwitchA] stp enable |
| [SwitchB] stp enable |
| [SwitchC] stp enable |
| [SwitchD] stp enable |
步骤5:验证配置结果。
查看STP简要信息,通过STP简要信息可以快速的看出端口的角色和状态。

配置文件
SwitchA的配置文件
| # sysname SwitchA # stp mode stp stp instance 0 root primary # return |
SwitchB的配置文件
| # sysname SwitchB # stp mode stp stp instance 0 root secondary # return |
SwitchC的配置文件
| # sysname SwitchC # stp mode stp # interface GigabitEthernet0/0/3 stp disable # return |
SwitchD的配置文件
| # sysname SwitchD # stp mode stp # interface GigabitEthernet0/0/3 stp disable # return |
联系我们

相关文章:
华为交换机生成树STP配置案例
企业内部网络怎么防止网络出现环路?学会STP生成树技术就可以解决啦。 STP简介 在二层交换网络中,一旦存在环路就会造成报文在环路内不断循环和增生,产生广播风暴,从而占用所有的有效带宽,使网络变得无法正常通信。 在…...
Avalonia框架下实现热更新
在Avalonia框架下实现热更新(也称为动态加载或模块化更新),通常涉及程序集的动态加载与卸载,以及UI元素、视图模型或其他应用程序逻辑部分的实时替换。由于Avalonia本身是一个跨平台的GUI框架,并没有直接内置热更新机制…...
适用于各种危险区域的火焰识别摄像机,实时监测、火灾预防、安全监控,为安全保驾护航
火灾是一种极具破坏力的灾难,对人们的生命和财产造成了严重的威胁。为了更好地预防和防范火灾,火焰识别摄像机作为一种先进的监控设备,正逐渐受到人们的重视和应用。本文将介绍火焰识别摄像机在安全监控和火灾预防方面的全面应用方案。 一、火…...
react-router-dom5升级到6
前言 升级前版本为5.1.2 下载与运行 下载 npm install react-router-dom6运行 运行发现报错: 将node_modules删除,重新执行npm i即可 运行发现如下报错 这是因为之前有引用react-router-dom.min,v6中取消了该文件,所以未找到文件导致报错。…...
Linux调试工具—gdb
🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:HEART BEAT—YOASOBI 2:20━━━━━━️💟──────── 5:35 🔄 ◀️ ⏸ ▶️ ☰ …...
SpringCloud(H版alibaba)框架开发教程之nacos做配置中心——附源码(2)
上篇主要讲了使用eureka,zk,nacos当注册中心 这篇内容是nacos配置中心 代码改动部分mysql驱动更新到8.0,数据库版本升级到了8.0,nacos版本更新到了2.x nacos2.x链接 链接:https://pan.baidu.com/s/11nObzgTjWisAfOp…...
网络摄像头爆破实战
*** 重要说明:仅用于交流网络安全测试技术,并唤起大家对网络安全的重视,如用本文的技术干违法的事情,博主概不负责。*** 文章目录 前言1. 发现摄像头2. 发现端口3. 确定品牌信息4. 确定RTSP地址5. 获取视频流6. 获取密码7. 再次获…...
亚信安慧AntDB数据并行加载工具的实现(二)
3.功能性说明 本节对并行加载工具的部分支持的功能进行简要说明。 1) 支持表类型 并行加载工具支持普通表、分区表。 2) 支持指定导入字段 文件中并不是必须包含表中所有的字段,用户可以指定导入某些字段,但是指定的字段数要和文件中的字段数保持一…...
【Java进阶篇】JDK新版本中的新特性都有哪些
JDK新版本中的新特性都有哪些 ✔️经典解析✔️拓展知识仓✔️本地变量类型推断✔️Switch 表达式✔️Text Blocks✔️Records✔️封装类✔️instanceof 模式匹配✔️switch 模式匹配 ✅✔️虚拟线程 ✔️经典解析 JDK 8中推出了Lambda表达式、Stream、Optional、新的日期API等…...
力扣labuladong一刷day49天迪杰斯特拉
力扣labuladong一刷day49天迪杰斯特拉 文章目录 力扣labuladong一刷day49天迪杰斯特拉一、743. 网络延迟时间二、1631. 最小体力消耗路径三、1514. 概率最大的路径 一、743. 网络延迟时间 题目链接:https://leetcode.cn/problems/network-delay-time/ 使用迪杰斯特…...
MCS接口技术----定时/计数,中断
目录 一.中断系统相关寄存器 1.51单片机中断系统的总体结构: 2.中断源的中断级别(由高到低): 3.与中断有关的四个寄存器: (1)TCON---定时控制寄存器 (2)IE---中断允…...
Java开发框架和中间件面试题(10)
目录 104.怎么保证缓存和数据库数据的一致性? 105.什么是缓存穿透,什么是缓存雪崩?怎么解决? 106.如何对数据库进行优化? 107.使用索引时有哪些原则? 108.存储过程如何进行优化? 109.说说…...
C++ 具名要求-基本概念-指定该类型对象可以从右值构造
指定该类型对象可以从右值构造 指定该类型的实例可以从一个右值实参构造。 要求 以下情况下,类型 T 满足可移动构造 (MoveConstructible) : 给定 T 类型的右值表达式 rv任意标识符 u 下列表达式必须合法且拥有其指定的效果 表达式后条件T u rv;u…...
Python如何把类当做字典来访问及浅谈Python类命名空间
Python如何把类当做字典来访问 Python把类当做字典来访问 定义一个类将它实例化,我们可以通过obj.属性来访问类的属性,如果想获取类的所有实例变量,我们可以使用obj.__dict__来访问,如下: class A:def __init__(self)…...
简述Redis备份策略以及对应的实现机制
引言 Redis作为高性能的内存数据库,数据的安全性至关重要。一旦数据丢失,可能会对业务造成重大影响。因此,备份Redis数据是每个Redis使用者都必须考虑的问题。本文将介绍Redis的备份策略以及对应的实现机制。 一、备份策略 1.1 定期备份 …...
【5G PHY】5G 物理层加速卡介绍
博主未授权任何人或组织机构转载博主任何原创文章,感谢各位对原创的支持! 博主链接 本人就职于国际知名终端厂商,负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作,目前牵头6G算力网络技术标准研究。 博客…...
lftp学习笔记
目录 0. ftp vs. lftp1. 安装2. 常用命令2.1 登录2.2 文件管理2.3 文件传输 3. 脚本编程4. 实践中的问题排查参考 0. ftp vs. lftp lftp是一款文件传输工具,支持FTP、HTTP、SFTP、FISH等多种协议。 功能ftplftp数据传输文件文件、文件夹多线程传输支持断点续传支持…...
idea 插件开发之 HelloWorld
前言 本文使用的 idea 2023.3 版本进行插件入门开发,首先要说明的是 idea 2023 版本及以后的 idea,对插件开发进行了一定程度的变动: 1、创建项目时不再支持 maven 选项 2、必须是 jdk17 及以后版本(点击查看官网版本对应关系&…...
极速文件搜索工具Everything结合内网穿透实现远程搜索本地文件
文章目录 前言1.软件安装完成后,打开Everything2.登录cpolar官网 设置空白数据隧道3.将空白数据隧道与本地Everything软件结合起来总结 前言 要搭建一个在线资料库,我们需要两个软件的支持,分别是cpolar(用于搭建内网穿透数据隧道…...
【PowerMockito:编写单元测试过程中采用when打桩失效的问题】
问题描述 正如上图所示,采用when打桩了,但是,实际执行的时候还是返回null。 解决方案 打桩时直接用any() 但是这样可能出现一个mybatisplus的异常,所以在测试类中需要加入以下代码片段: Beforepublic void setUp() …...
多模态2025:技术路线“神仙打架”,视频生成冲上云霄
文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...
Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...
群晖NAS如何在虚拟机创建飞牛NAS
套件中心下载安装Virtual Machine Manager 创建虚拟机 配置虚拟机 飞牛官网下载 https://iso.liveupdate.fnnas.com/x86_64/trim/fnos-0.9.2-863.iso 群晖NAS如何在虚拟机创建飞牛NAS - 个人信息分享...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
