【华三】STP的角色选举(一文讲透)
【华三】STP的角色选举
- 一、引言
- 二、STP基础概念扫盲
- 三、根桥选举过程详解
- 四、根端口选举过程详解
- 五、指定端口选举过程详解
- 六、阻塞端口
- 七、总结与配置建议
- 七、附录
- **1. BPDU字段结构图(文字描述)**
- **2. 华三STP常用命令速查表**
- 文章总结
一、引言
在复杂的交换网络中,冗余链路是保障高可用性的基础,但同时也可能引发广播风暴和MAC地址表震荡等致命问题。STP(生成树协议,Spanning Tree Protocol)如同一位“网络交通指挥官”,通过逻辑阻塞冗余链路,构建无环拓扑,在确保冗余的同时规避环路风险。
STP的核心价值:
- 破除环路:通过阻塞冗余端口,将物理上的环形网络转化为逻辑上的树形结构。
- 动态恢复:当主链路故障时,自动激活备份链路,恢复网络连通性(需结合转发延迟机制)。
- 资源优化:选择最优路径转发数据,避免无效带宽消耗。
角色选举为何重要?
如果把网络比作一座城市,根桥就是城市的中心车站,所有流量最终都要汇聚或经过这里。若多个“中心车站”同时存在(即根桥未唯一),必然导致路径混乱。角色选举的本质是让全网设备达成共识:
- 唯一根桥:作为数据转发的参考基准点。
- 最优路径:通过根端口和指定端口的选举,确保每条链路选择最高效的传输路径。
华三设备中的STP特点(个人理解)
- 默认协议版本:华三交换机默认启用MSTP(多生成树协议),而非传统的STP/RSTP,这是为了支持VLAN级别的负载分担(需注意与Cisco设备的兼容性)。
- 配置差异:
- 优先级调整命令:
stp priority <value>
(必须为4096的倍数,例如0、4096、8192)。 - 路径开销计算:华三默认使用长整型开销值(如千兆链路为20000),与Cisco的短整型(如千兆链路为4)不同,混合组网时需特别注意。
- 优先级调整命令:
- 快速收敛优化:华三支持边缘端口(
stp edged-port enable
),可跳过Listening/Learning状态,加速终端接入。
二、STP基础概念扫盲
-
根桥(Root Bridge)
- 定义:生成树的逻辑中心,所有数据的转发基准点。
- 类比:类似“交通枢纽”,所有路径最终指向它。
- 关键字段:BID(桥ID)= 桥优先级(16位) + MAC地址(48位)。
-
根端口(Root Port)
- 定义:非根桥设备上离根桥最近的端口(路径开销最小)。
- 作用:用来接收最优配置BPDU。
- 每个非根桥有且仅有一个根端口。
-
指定端口(Designated Port)
- 定义:每条线路中唯一负责转发数据的端口。
- 作用:用来发送最优配置BPDU
- 避免同一网段内多个端口转发数据形成环路。
-
配置BPDU(Bridge Protocol Data Unit)
- 作用:STP协议报文,用于传递拓扑信息。
- 核心字段:
- 根ID(Root ID):当前最优根桥的BID。
- 路径开销(Cost):到根桥的累计开销。
- 发送者BID(Sender BID):发送该BPDU的桥的BID。
- 端口ID(Port ID):发送端口的标识。
-
BID(桥ID)= 桥优先级(16位) + MAC地址(48位)
- 桥优先级默认为32768,范围0~61440,可以修改,但要以4096为倍数
- 桥ID 中的优先级长度为 16个 bit,只有前4个 bit 是描述优先级的,后12个bt 实际用于描述 STP 的所属VLAN。也就是说当我们需要调整优先级,也只能调整优先级的前4个 bit,后12个 bit 无法变更。所以每递增一位数,在十进制中会以 4096 起跳。
-
端口ID(Port ID)= 端口优先级(8位)+ 端口号
- 端口优先级默认128,范围0~240,可以修改,但要以16为倍数
三、根桥选举过程详解
-
选举规则
- BID越小越优,优先级比较顺序:
- 桥优先级(0~65535,默认32768)。
- MAC地址(数值小者胜出)。
- BID越小越优,优先级比较顺序:
-
初始化阶段
- 所有交换机默认认为自己是根桥,发送BPDU时:
- 根ID = 自己的BID,路径开销 = 0。
- 交互过程:
- 收到其他BPDU后,对比根ID,保留更优的(BID更小)。
- 更新本地最优BPDU,并向外转发。
- 所有交换机默认认为自己是根桥,发送BPDU时:
-
示例场景
根桥选举是根据BID的,越小越优
细化下去就是
① 先看桥优先级,桥优先级越小越优;
② 再看桥MAC地址,也是越小越优
可以从图中看出:SWA的桥ID优先级为0,SWB的桥优先级为8192,SWC的桥优先级为32768,SWD的桥优先级为4096;
所以选择SWA为根桥
四、根端口选举过程详解
- 选举规则
- 非根桥设备选择到根桥路径开销最小的端口。(按顺序选举)
- 若路径开销相同,依次比较:
- 发送者的BID,越小越优
- 发送者端口ID,越小越优(优先级+编号)。
- 本端的端口ID,越小越优
- 需要注意,该根端口的发送者BID为对端设备BID
-
路径开销计算
- 累计链路开销 = 接收端口的路径开销 + 接收到的BPDU中的路径开销。
- 同一交换机上不同端口之间的路径开销值为0
- 链路速率与默认开销值对照表(示例):
链路速率 开销值 10 Mbps 100 100 Mbps 19 1 Gbps 4
-
示例场景
以SWB的选举根端口为例子:
每个端口离根桥的累计链路开销(根路径开销)
e0/1:200
e0/2:20+200 = 220
e0/3:200+200+200 = 600
所以SWB中e0/1的根路径开销最小,所以e0/1为SWB的根端口
同理可得,SWC的根端口为e0/1
此时,SWD各个端口距离根桥的开销是一致的,都是200+200 = 400
所以得要去比较发送方的BID:
SWD的E0/1发送方BID为SWB的BID :8192.MAC B
SWD的E0/2发送方BID为SWC的BID :32768.MAC C
所以,可以得出,SWD的根端口为E0/1
五、指定端口选举过程详解
- 选举规则
每个线路选举一个指定端口
- 非根桥设备选择到根桥路径开销最小的端口。(按顺序选举)
- 若路径开销相同,依次比较:
- 发送者的BID,越小越优
- 发送者端口ID更小(优先级+编号)。
- 本端的端口ID,越小越优
- 若路径开销相同,依次比较:
- 需要注意,该指定端口的发送者BID为本地设备BID,因为自身已经选举出的根端口,而根端口就是用来接收到的最优配置BPDU,指定端口用来转发最优配置BPDU;自身根端口收到最优配置BPDU,然后再发送给指定端口转发出去,所以发送方就为自身!!! 这个和根端口的搞明白就稳了
-
特殊说明
- 根桥的所有端口默认是指定端口,除了自环情况外。
- 在线路中,根桥的端口直接成为指定端口。
-
示例场景
根桥的所有端口默认是指定端口,除了自环情况外,所以SWA的E0/1和E0/2就是指定端口,
SWB — SWD中SWD的E0/1为根端口,所以SWB的E0/3为指定端口
剩下就要去比较SWB — SWC,SWC — SWD这两个线路
SWB — SWC :
SWB的E0/2距离根桥的根路径开销为200
SWC的E0/2距离根桥的根路径开销为200
所以,跟路径开销是相同的,继续向下比发送方的BID(Sender Bridge ID = SBID)
又因为指定端口的发送方是为本身,所以
SWB的E0/2的发送方BID为 :8192.MAC B
SWC的E0/2的发送方BID为 :32768.MAC B
可以得出SWB的E0/2的SBID更小,所以SWB的E0/2为指定端口
SWC — SWD:
这条线路就简单了,直接比较根路径开销,可以得出
SWD的E0/2根路径开销为:200 + 200 = 400
SWC的E0/3根路径开销为:200
所以,SWC的E0/3为指定端口
六、阻塞端口
选出根桥、根端口、指定端口后,剩下的端口就是阻塞端口
七、总结与配置建议
-
角色选举流程总结
- 根桥 → 根端口 → 指定端口,依次完成。
- 所有非根桥必须有一个根端口,每个网段必须有一个指定端口。
-
华三设备配置注意点
- 修改桥优先级:
stp priority <0-61440>
(必须为4096的倍数)。 - 查看选举结果:
display stp brief
。 - 路径开销调整:
stp cost <value>
(需根据链路速率设置)。
- 修改桥优先级:
-
常见问题
- 根桥选举失败:检查BID是否冲突或优先级配置错误。
- 端口阻塞异常:检查路径开销计算是否合理。
七、附录
1. BPDU字段结构图(文字描述)
配置BPDU是STP协议的核心报文,其结构可分解为以下关键字段:
字段名 | 长度 | 说明 |
---|---|---|
协议标识符 | 2字节 | 固定为0x0000(表示STP协议) |
协议版本 | 1字节 | STP为0x00,RSTP为0x02,MSTP为0x03 |
BPDU类型 | 1字节 | 配置BPDU为0x00,TCN BPDU(拓扑变更通知)为0x80 |
Flags | 1字节 | 包含TC(拓扑变更)和TCA(拓扑变更确认)标志位 |
根ID | 8字节 | 全网核心字段!当前最优根桥的BID(优先级+MAC) |
路径开销 | 4字节 | 发送端口到根桥的累计开销值(越小越优) |
发送者BID | 8字节 | 发送该BPDU的交换机的BID |
端口ID | 2字节 | 发送端口的ID(高8位为优先级,低8位为端口编号,如0x8003表示优先级128,编号3) |
消息生存时间 | 2字节 | BPDU的有效时间(默认为20秒) |
个人解读:
- 根ID字段是BPDU的“灵魂”:所有交换机通过对比根ID确定是否更新自己的认知,最终全网统一为最小BID。
- 路径开销的“陷阱”:不同厂商的默认开销值可能不同(如华三与Cisco),混合组网时需手动统一,否则可能导致次优路径选择。
2. 华三STP常用命令速查表
命令 | 作用 | 示例 | 备注 |
---|---|---|---|
stp global enable | 全局启用STP协议 | - | 默认已启用,部分型号需手动开启 |
stp mode stp/rstp/mstp | 切换STP模式 | stp mode rstp | 需所有设备模式一致 |
stp priority <value> | 修改桥优先级(需为4096的倍数) | stp priority 0 | 值越小优先级越高,0为最高 |
stp root primary/secondary | 快速指定本机为根桥/备份根桥 | stp root primary | 自动设置优先级为0/4096 |
stp cost <value> | 手动设置端口路径开销 | stp cost 20000 | 需根据链路速率调整(华三千兆口默认20000) |
stp port priority <value> | 修改端口优先级(0-240,步长16) | stp port priority 64 | 影响指定端口选举 |
display stp | 查看STP全局状态 | display stp | 关注根桥、根端口、指定端口信息 |
display stp brief | 简要查看端口角色和状态 | display stp brief | 快速确认端口是否阻塞(BLK) |
display stp interface GigabitEthernet1/0/1 | 查看指定端口的STP详细信息 | - | 分析BPDU收发情况 |
总结:
- 优先级设置的“偷懒技巧”:直接使用
stp root primary
命令,避免手动计算优先级值。 - 故障排查三板斧:
display stp brief
:确认端口角色是否异常。display stp interface
:检查BPDU收发是否正常。- 对比相邻设备的根桥信息:确认全网认知一致。
- 路径开销调整的“潜规则”:若希望流量走高速链路(如万兆),可手动降低该端口的开销值(如设置为2000)。
文章总结
STP的角色选举本质是一场“网络民主投票”——每个设备基于BPDU信息,通过既定的规则(BID、路径开销、端口优先级)达成共识。理解选举逻辑后,结合华三设备的特性,通过合理配置优先级和路径开销,可以主动引导流量走向,构建高效稳定的无环网络。
相关文章:

【华三】STP的角色选举(一文讲透)
【华三】STP的角色选举 一、引言二、STP基础概念扫盲三、根桥选举过程详解四、根端口选举过程详解五、指定端口选举过程详解六、阻塞端口七、总结与配置建议七、附录**1. BPDU字段结构图(文字描述)****2. 华三STP常用命令速查表** 文章总结 一、引言 在…...
【C#零基础从入门到精通】(二十六)——C#三大特征-多态详解
【C#零基础从入门到精通】(二十六)——C#三大特征-多态详解 在 C# 中,多态是面向对象编程的重要特性之一,它允许不同的对象对同一消息做出不同的响应。多态可以分为静态多态和动态多态,下面将详细介绍它们以及各自包含的知识点。 多态概述 多态性使得代码更加灵活、可扩展…...

宇树科技13家核心零部件供应商梳理!
2025年2月6日,摩根士丹利(Morgan Stanley)发布最新人形机器人研报:Humanoid 100: Mapping the Humanoid Robot Value Chain(人形机器人100:全球人形机器人产业链梳理)。 Humanoid 100清单清单中…...

Java集合框架全解析:从LinkedHashMap到TreeMap与HashSet面试题实战
一、LinkedHashMap ①LinkedHashMap集合和HashMap集合的用法完全相同。 ②不过LinkedHashMap可以保证插入顺序。 ③LinkedHashMap集合因为可以保证插入顺序,因此效率比HashMap低一些。 ④LinkedHashMap是如何保证插入顺序的? 底层采用了双向链表来记…...

goland无法debug项目
1、其实个原因是因为正在使用的Delve调试器版本太旧,无法兼容当前的Go语言版本1.2。Delve是Go语言的一个调试工具,用于提供源码级别的调试功能。Go语言每隔一段时间会发布新版本,而相应的调试器Delve也可能会更新以提供新的特性或修复已知问题…...
深入探索 DeepSeek 在数据分析与可视化中的应用
在数据驱动的时代,快速且准确地分析和呈现数据对于企业和个人都至关重要。DeepSeek 作为一款先进的人工智能工具,凭借其强大的数据处理和可视化能力,正在革新数据分析的方式。 1. 数据预处理与清洗 在进行数据分析前,数据预处理…...

python面试题整理
Python 如何处理异常? Python中,使用try 和 except 关键字来捕获和处理异常 try 块中放置可能会引发异常的代码,然后在except块中处理这些异常。 能补充一下finally的作用吗? finally 块中的代码无论是否发生异常都会执行…...

大型装备故障诊断解决方案
大型装备故障诊断解决方案 方案背景 在全球航空工业迅猛发展的背景下,我国在军用和民用飞机自主研发制造领域取得了显著成就。尤其是在国家大力支持下,国内飞机制造企业攻克了诸多关键技术难题,实现了从设计研发到生产制造再到售后保障的完整…...

基于SpringBoot+vue+uniapp的智慧旅游小程序+LW示例参考
系列文章目录 1.基于SSM的洗衣房管理系统原生微信小程序LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统LW参考示例 3.基于SpringBootVue的企业人事管理系统LW参考示例 4.基于SSM的高校实验室管理系统LW参考示例 5.基于SpringBoot的二手数码回收系统原生微信小程序LW参考示…...

小怿学习日记(七) | Unreal引擎灯光架构
灯光的布局对于HMI场景中车模的展示效果有着举足轻重的地位。本篇内容将简单介绍ES3.1的相关知识,再深入了解Unreal引擎中车模的灯光以及灯光架构。 一、关于ES3.1 1.1 什么是ES3.1 ES3.1这个概念对于美术的同学可能比较陌生,ES3.1指的是OpenGL ES3.1&…...
网络运维学习笔记 013网工初级(HCIA-Datacom与CCNA-EI)DHCP动态主机配置协议(此处只讲华为)
文章目录 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)网关配置DHCP服务器配置如果没有DHCP服务器,只在网关上做DHCP服务器: DHCP(Dynamic Host Configuration Protocol,动态主…...

javaEE-14.spring MVC练习
目录 1.加法计算器 需求分析: 前端页面代码: 后端代码实现功能: 调整前端页面代码: 进行测试: 2.用户登录 需求分析: 定义接口: 1.登录数据校验接口: 2.查询登录用户接口: 前端代码: 后端代码: 调整前端代码: 测试/查错因 后端: 前端: lombok工具 1.引入依赖…...
HTML/CSS中并集选择器
1.作用:选中多个选择器对应的元素,又称:分组选择器 所谓并集就是或者的含义. 2.语法:选择器1,选择器2,选择器3,......选择器n 多个选择器通过,连接,此处,的含义就是:或. .rich,.beauty{color: blue;} 3.注意事项 1.并集选择器,我们一般竖着写 2.任何形式的选择器,都可以作为并…...

可编辑35页PPT | DeepSeek如何赋能职场应用
DeepSeek作为一款基于人工智能技术的多模态AI工具,近年来在职场应用中迅速崭露头角,以其强大的功能和高效的表现赢得了广泛的赞誉。DeepSeek融合了文本生成、图像创作、数据分析与可视化等多种功能,为职场人士提供了前所未有的便利和效率提升…...
CSS `transform` 属性详解:打造视觉效果与动画的利器
CSS transform 属性详解:打造视觉效果与动画的利器 引言一、transform 属性简介二、平移(Translation)三、旋转(Rotation)四、缩放(Scale)五、倾斜(Skew)六、组合变换&am…...
Windows使用docker部署fastgpt出现的一些问题
文章目录 Windows使用docker部署FastGPT出现的一些问题1.docker部署pg一直重启的问题2.重启MongoDB之后一直出现“Waiting for MongoDB to start...”3.oneapi启动不了failed to get gpt-3.5-turbo token encoder Windows使用docker部署FastGPT出现的一些问题 1.docker部署pg一…...
Spring Boot中如何使用Thymeleaf模板引擎
Thymeleaf 是一个现代化的服务器端 Java 模板引擎,在 Spring Boot 项目中使用它可以方便地将 Java 代码和 HTML 页面进行整合,生成动态的 Web 页面。以下将详细介绍在 Spring Boot 中如何使用 Thymeleaf 模板引擎。 1. 添加依赖 如果你使用的是 Maven 项目,在 pom.xml 中添…...

C/C++跳动的爱心
系列文章 序号直达链接1C/C李峋同款跳动的爱心2C/C跳动的爱心3C/C经典爱心4C/C满屏飘字5C/C大雪纷飞6C/C炫酷烟花7C/C黑客帝国同款字母雨8C/C樱花树9C/C奥特曼10C/C精美圣诞树11C/C俄罗斯方块小游戏12C/C贪吃蛇小游戏13C/C孤单又灿烂的神14C/C闪烁的爱心15C/C哆啦A梦16C/C简单…...
Element UI中messageBox怎么区分点击取消按钮关闭弹窗,和点击右上角x号以及点击遮罩层关闭按钮
在某些场景下,我们可能需要区分点击取消按钮关闭 messageBox 和点击X号、遮罩层关闭 messageBox 。 实现: 将 distinguishCancelAndClose 设置为 true,这个属性的意思是:是否将取消(点击取消按钮)与关闭&…...
Websocket——心跳检测
1. 前言:为什么需要心跳机制? 在现代的实时网络应用中,保持客户端和服务端的连接稳定性是非常重要的。尤其是在长时间的网络连接中,存在一些异常情况,导致服务端无法及时感知到客户端的断开,可能造成不必要…...

测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...

iOS 26 携众系统重磅更新,但“苹果智能”仍与国行无缘
美国西海岸的夏天,再次被苹果点燃。一年一度的全球开发者大会 WWDC25 如期而至,这不仅是开发者的盛宴,更是全球数亿苹果用户翘首以盼的科技春晚。今年,苹果依旧为我们带来了全家桶式的系统更新,包括 iOS 26、iPadOS 26…...

VB.net复制Ntag213卡写入UID
本示例使用的发卡器:https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...
PHP和Node.js哪个更爽?
先说结论,rust完胜。 php:laravel,swoole,webman,最开始在苏宁的时候写了几年php,当时觉得php真的是世界上最好的语言,因为当初活在舒适圈里,不愿意跳出来,就好比当初活在…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...

Visual Studio Code 扩展
Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后,命令 changeCase.commands 可预览转换效果 EmmyLua…...