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

STP(生成树协议)

STP的基本概念

概述

  • STP是一个用于局域网中消除环路的协议。
  • 运行该协议的设备通过彼此交互信息而发现网络中的环路,并对某些接口进行阻塞以消除环路。
  • STP在网络中运行后会持续监控网络的状态,当网络出现拓扑变更时,STP能够感知并且进行自动响应,从而使得网络状态适应新的拓扑结构,保证网络可靠性
  • 由于局域网规模的不断增长,生成树协议已经成为了当前最重要的局域网协议之一。

桥ID

  • STP中,每一台交换机都有一个标示符,叫做Bridge ID或者IDID16位的桥优先级(Bridge Priority)和48位的MAC地址构成。在STP网络中,桥优先级是可以配置的,取值范围是065535,默认值为32768,可以修改但是修改值必须为4096的倍数。优先级最高的设备(数值越小越优先)会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先。
  • 如图,需要在该网络中选举根桥,首先比较三台交换机的桥优先级,桥优先级都为4096,再比较三台交换机的MAC地址,谁小谁优先,最终选择SW1为根桥。

根桥

  • STP的主要作用之一是在整个交换网络中计算出一棵无环的“树”(STP)。
  • 根桥是一个STP交换网络中的“树根”。
  • STP开始工作后,会在交换网络中选举一个根桥,根桥是生成树进行拓扑计算的重要“参考点”,是STP计算得出的无环拓扑的“树根”。
  • STP网络中,桥ID最小的设备会被选举为根桥
  • BID的比较过程中,首先比较桥优先级,优先级的值越小,则越优先,拥有最小优先级值的交换机会成为根桥;如果优先级相等,那么再比较MAC地址,拥有最小MAC地址的交换机会成为根桥。

Cost

  • 交换机的每个端口都有一个端口开销(Port Cost)参数,此参数表示该端口在STP中的开销值。默认情况下端口的开销和端口的带宽有关,带宽越高,开销越小
  • 华为交换机支持多种STP的路径开销计算标准,提供多厂商场景下最大程度的兼容性。缺省情况下,华为交换机使用IEEE 802.1t标准来计算路径开销。
  • 用户也可以根据需要通过命令调整接口的Cost

RPC(根路径开销)

  • STP的拓扑计算过程中,一个非常重要的环节就是“丈量”交换机某个接口到根桥的“成本”,也即RPC
  • 一台设备从某个接口到达根桥的RPC等于从根桥到该设备沿途所有入方向接口的Cost累加
  • 在本例中,SW3GE0/0/1接口到达根桥的RPC等于接口1Cost加上接口2Cost

Port ID

运行STP交换机的每个端口都有一个端口ID端口ID由高4 bit端口优先级和低12 bit端口号构成。端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。缺省情况下,端口优先级是128。端口ID可以用来确定端口角色。

BPDU

  • 为了计算生成树,交换机之间需要交换相关的信息和参数,这些信息和参数被封装在BPDU中。
  • BPDU有两种类型:配置BPDUTCN BPDU
  • 配置BPDU包含了桥ID、路径开销和端口ID等参数。STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态在初始化过程中,每个桥都主动发送配置BPDU。在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU
  • TCN BPDU是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。

配置BPDU报文格式

配置BPDU比较原则

STP的计算过程

STP 中定义了三种端口角色:指定端口,根端口和预备端口。
  • 指定端口是交换机向所连网段转发配置BPDU的端口,每个网段有且只能有一个指定端口。一般情况下,根桥的每个端口总是指定端口。
  • 根端口是非根交换机去往根桥路径最优的端口。在一个运行STP协议的交换机上最多只有一个根端口,但根桥上没有根端口。
  • 如果一个端口既不是指定端口也不是根端口,则此端口为预备端口。预备端口将被阻塞。

选举根桥

  • STP在交换网络中开始工作后,每个交换机都会向网络中发送BPDU。配置BPDU中包含交换机自己的桥ID
  • 网络中拥有最小桥ID的交换机成为根桥。
  • 在一个连续的STP交换网络中只会存在一个根桥。
  • 桥的角色是可抢占的。
  • 为了确保交换网络的稳定,建议提前规划STP组网,并将规划为根桥的交换机的桥优先级设置为最小值0

选举根端口

  • 每一台非根桥交换机都会在自己的接口中选举出一个根接口。
  • 非根桥交换机上有且只会有一个根接口。
  • 当非根桥交换机有多个接口接入网络中时,根接口是其收到最优配置BPDU的接口。
  • 可以形象地理解为,根接口是每台非根桥上“朝向”根桥的接口。

根端口选举规则:

  1. 选择RPC(根路径开销)最低的端口。
  2. 若有多个端口的RPC相等,选择对端桥ID最低的端口。
  3. 若有多个端口的对端桥ID相等,选择对端端口ID最低的端口。
  4. 若有多个端口的对端端口相等,选择本端端口ID最低的端口。

选举指定端口

网络中的每个链路与根桥之间的工作路径必须是唯一的且最优的。当一个链路有两条及以上的路径通往根桥时(该链路连接了不同的交换机,或者该链路连接了同一台交换机的不同端口),与该链路相连的交换机(可能不止一台)就必须确定出一个唯一的指定端口。因此,每个链路(Link)选举一个指定端口,用于向这个链路发送BPDU,一般情况下,根桥的所有接口都是指定接口。

指定端口的选举规则:

  1. 选择RPC(根路径开销)最低的端口。
  2. 若有多个端口的RPC相等,选择桥ID最低的端口。
  3. 若有多个端口的桥ID相等,选择端口ID最低的端口。

堵塞预备端口

  • 一台交换机上,既不是根接口,又不是指定接口的接口被称为预备接口。
  • STP操作的最后一步是阻塞网络中的预备接口。这一步完成后,网络中的二层环路就此消除。

STP端口状态机

1.禁用(Disable)   :不收发BPDU、不学习MAC地址、不转发业务数据。

2.阻塞(Blocking)  :收BPDU、不发BPDU、不学习MAC地址、不转发业务数据。

3.侦听(Listening) :收发BPDU、不学习MAC地址、不转发业务数据。

                        就是进行端口角色的选举,需要等待一个转发延迟的时间(15s)

4.学习(Learning)  :收发BPDU、学习MAC地址、不转发业务数据。

                        就是防止大量未知单播数据帧的泛洪,需要等待一个转发延迟的时间(15s)

5.转发(Forwarding):收发BPDU、学习MAC地址、转发业务数据。

STP拓扑变化

根桥故障

根桥故障:
在稳定的 STP 网络,非根桥会定期收到来自根桥的 BPDU 报文。
如果根桥发生了故障,停止发送 BPDU ,下游交换机就无法收到来自根桥的 BPDU 报文。
如果下游交换机一直收不到 BPDU 报文, Max Age 计时器(缺省 : 20s )就会超时,从而导致已经收到的 BPDU 报文失效,此时,非根桥会互相发送配置 BPDU ,重新选举新的根桥。
端口状态:
SW3 的预备端口, 20s 后会从 Blocking 状态进入到 Listening 状态,再进入 Learning 状态,最终进入到 Forwarding 状态,进行用户流量的转发。
收敛时间:
根桥故障会导致50s左右的恢复时间 ,等于 Max Age 加上 2 倍的 Forward Delay 收敛时间。

直连链路故障

直连链路故障:
当两台交换机间用两条链路互连时,其中一条是主用链路,另一条为备用链路。
当网络稳定时,交换机 SW2 检测到根端口的链路发生故障,则其备用端口会进入用户流量转发状态。
端口状态:
备用端口会从 Blocking 状态,迁移到 Listening-Learning-Forwarding 状态。
收敛时间:
直连链路故障,备用端口会经过30s后恢复转发状态

非直连链路故障

非直连故障
在稳定的 STP 网络,非根桥会定期收到来自根桥的 BPDU 报文。
SW1 SW2 之间的链路发生了某种故障(非物理故障),因此 SW2 一直收不到来自根桥 SW1 BPDU 报文, Max Age 计时器(缺省 : 20 s )就会超时,从而导致已经收到的 BPDU 报文失效。
此时,非根桥 SW2 会认为根桥失效,并且认为自己是根桥,从而发送自己的配置 BPDU SW3 ,通知 SW3 自己是新的根桥。
在此期间, SW3 预备 端口一直收不到包含根桥 ID BPDU Max Age 计时器超时后,端口进入到 Listening 状态,开始向 SW2 “转发”从上游发来的包含根桥 ID BPDU
因此, Max Age 定时器超时后, SW2 SW3 几乎同时收到对方发来的 BPDU ,再进行 STP 重新计算, SW2 发现 SW3 发来的 BPDU 更优,就放弃宣称自己是根桥并重新确定端口角色。
端口状态:
SW3 预备 端口 20s 后会从 Blocking 状态进入到 Listening 状态,再进入 Learning 状态,最终进入到 Forwarding 状态,进行用户流量的转发。
收敛时间:

非直连故障会导致50s左右的恢复时间,等于Max Age加上2倍的Forward Delay收敛时间。

拓扑改变导致MAC地址表错误

在交换网络中,交换机依赖 MAC 地址表转发数据帧。缺省情况下, MAC 地址表项的老化时间是 300 秒。如果生成树拓扑发生变化,交换机转发数据的路径也会随着发生改变,此时 MAC 地址表中未及时老化掉的表项会导致数据转发错误,因此在拓扑发生变化后需要及时更新 MAC 地址表项
本例中, SW2 中的 MAC 地址表项定义了通过端口 GigabitEthernet 0/0/1 可以到达主机 A ,通过端口 GigabitEthernet 0/0/3 可以到达主机 B 。由于 SW3 的根端口产生故障,导致生成树拓扑重新收敛,在生成树拓扑完成收敛之后,从主机 A 到主机 B 的帧仍然不能到达目的地。这是因为 MAC 地址表项老化时间是 300 秒,主机 A 发往主机 B 的帧到达 SW2 后, SW2 会继续通过端口 GigabitEthernet 0/0/3 转发该数据帧。
拓扑变化过程中,根桥通过 TCN BPDU 报文获知生成树拓扑里发生了故障。根桥生成 TC 用来通知其他交换机加速老化现有的 MAC 地址表项。
拓扑变更以及 MAC 地址表项更新的具体过程如下:
SW3 感知到网络拓扑发生变化后, 会不间断地向SW2发送TCN BPDU报文
SW2 收到 SW3 发来的 TCN BPDU 报文后, 会把配置BPDU报文中的Flags的TCA位设置1,然后发送给SW3,告知SW3停止发送TCN BPDU报文
SW2 根桥转发 TCN BPDU 报文
SW1 把配置 BPDU 报文中的 Flags TC 位设置为 1 后发送, 通知下游设备把MAC地址表项的老化时间由默认的300 s修改为Forward Delay的时间(默认为15 s)
最多等待 15 s 之后, SW2 中的错误 MAC 地址表项会被自动清除。此后, SW2 就能重新开始 MAC 表项的学习及转发操作。

相关文章:

STP(生成树协议)

STP的基本概念 概述 STP是一个用于局域网中消除环路的协议。运行该协议的设备通过彼此交互信息而发现网络中的环路,并对某些接口进行阻塞以消除环路。STP在网络中运行后会持续监控网络的状态,当网络出现拓扑变更时,STP能够感知并且进行自动…...

【前端面试】随机、结构赋值、博弈题

解构赋值(Destructuring Assignment)是 JavaScript ES6 引入的一项非常有用的特性,它允许我们快速地从数组或对象中提取值,并将它们赋给变量。这种方式使得代码更加简洁、易读,并且能够减少重复的访问和赋值操作。 1.…...

Volta——开箱即用的Node.js 版本管理工具

Volta volta 是一个较新的 Node.js 版本管理器,旨在简化 Node.js 和其他工具的安装和管理,在 2019 年出世,仍在积极开发中。Volta 采用了与 nvm 不同的方法:它不是管理 Node.js 的多个版本,而是管理项目及其依赖项。当…...

ubuntu 磁盘空间满,找不到占用文件的目录

解决方法: 检查磁盘空间: 执行 df -h 查看各分区磁盘使用情况。 查找大文件或目录: 执行 du -sh /* 2>/dev/null 查找根目录下的大文件或目录,再逐一进入子目录使用相同命令查找。 清理缓存和临时文件: 清理 /t…...

1. 机器学习基本知识(5)——练习题(参考答案)

20.🔗本章代码笔记📓链接(需要🪜):(01_the_machine_learning_landscape.ipynb - Colab (google.com)) 如果你不想通过上面的官方网址下载本章的笔记,还可以在本篇博文的…...

spark-sql 备忘录

wordcount sc.textFile("../data/data.txt").flatMap(_.split(" ")).map((_,1)).reduceByKey(__).collect 读取json 文件 并通过sql 执行 join 查询 public static void main(String[] args) {SparkSession session SparkSession.builder().master(&qu…...

基于softmax回归的多分类

基于softmax回归的多分类任务是机器学习领域中的一种常见应用。softmax回归,又称多项逻辑回归或多类逻辑回归,是逻辑回归在多分类问题上的推广。以下是对基于softmax回归的多分类任务的详细解释: 一、softmax回归的原理 softmax回归的核心思想是通过softmax函数将输入数据…...

bs4基本运用

1. bs4基本使用 1.1. 简介 bs4的全称为 BeautifulSoup。和lxml一样,是一个html的解析器,主要功能也是解析数据和提取数据 。 本模块作为了解模块,实际开发中很少用这个模块去解析数据,大家可能会想为什么这个模块会逐渐被淘汰&…...

MySQL 时区参数 time_zone 详解

文章目录 前言1. 时区参数影响2. 如何设置3. 字段类型选择 前言 MySQL 时区参数 time_zone 有什么用?修改它有什么影响?如何设置该参数,本篇文章会详细介绍。 1. 时区参数影响 time_zone 参数影响着 MySQL 系统函数还有字段的 DEFAULT CUR…...

Redis - 消息队列 Stream

一、概述 消息队列 定义 消息队列模型:一种分布式系统中的消息传递方案,由消息队列、生产者和消费者组成消息队列:负责存储和管理消息的中间件,也称为消息代理(Message Broker)生产者:负责 产…...

Docker:国内加速源

阿里云docker加速云&#xff1a; sudo tee /etc/docker/daemon.json <<EOF { “registry-mirrors”: [“https://euf11uji.mirror.aliyuncs.com”] } EOFhttps://docker.mozhu.dev/ sudo tee /etc/docker/daemon.json <<EOF {"registry-mirrors": [&qu…...

Android Studio更改项目使用的JDK

一、吐槽 过去&#xff0c;在安卓项目中配置JDK和Gradle的过程非常直观&#xff0c;只需要进入Android Studio的File菜单中的Project Structure即可进行设置&#xff0c;十分方便。 原本可以在这修改JDK: 但大家都知道&#xff0c;Android Studio的狗屎性能&#xff0c;再加…...

ubuntu+ros新手笔记(四):gazebo无法加载

以下为ChatGPT 的解决方案&#xff0c;对我来说是可行的&#xff01;&#xff01; 我按照第2步操作就解决辣&#xff01;&#xff01; 我的提问&#xff1a; 在ubuntu 22.04 和ros2 humble环境下&#xff0c;gazebo加载不了 ChatGPT 回答&#xff1a; 在 Ubuntu 22.04 和 …...

vue季度选择器(antd2.0 版本无此控件,单独写一个)

vue季度选择器 效果显示 效果显示 <template><div><a-popoverplacement"bottom"overlayClassName"season-picker"trigger"click"v-model"showSeason"><template #content><div class"season-picker-b…...

C/C++代码性能优化技巧的书籍及资料

使用C/C开发的场景&#xff0c;大多对代码的执行的速度&#xff0c;实时性有较高的要求&#xff0c;像嵌入式系统的开发&#xff0c;资源还受限。在算力存储空间有限的MCU上写出简洁又高效的代码实际是一种艺术。软件工程师在代码设计上的这种差距&#xff0c;会反映在产品的性…...

通俗易懂的 Nginx 反向代理 配置

通俗易懂的 Nginx 反向代理 配置 首先 root 与 alias 的区别 root 是直接拼接 root location location /i/ {root /data/w3; }当请求 /i/top.gif &#xff0c;/data/w3/i/top.gif 会被返回。 alias 是用 alias 替换 location location /i/ {alias /data/w3/images/; }当请…...

docker设置容器自动启动

说起开机自动启动应该很多人都遇到过&#xff0c;我们公司做的系统很多的中间件都没有设置开机自动启动然后中间修改问题又设置了一些临时生效的文件&#xff0c;开始的时候大家都不以为意&#xff0c;知道公司陆续有人离职入职管理交接一塌糊涂&#xff0c;项目成了历史遗留问…...

蓝桥杯刷题——day1

蓝桥杯刷题——day1 题目一题干题目解析代码 题目二题干题目解析代码 题目一 题干 给定一个字符串 s &#xff0c;验证 s 是否是 回文串 &#xff0c;只考虑字母和数字字符&#xff0c;可以忽略字母的大小写。本题中&#xff0c;将空字符串定义为有效的 回文串 。 题目链接&a…...

Leetcode 面试150题 399.除法求值

系列博客目录 文章目录 系列博客目录题目思路代码 题目 链接 思路 广度优先搜索 我们可以将整个问题建模成一张图&#xff1a;给定图中的一些点&#xff08;点即变量&#xff09;&#xff0c;以及某些边的权值&#xff08;权值即两个变量的比值&#xff09;&#xff0c;试…...

活动预告 |【Part2】Microsoft 安全在线技术公开课:安全性、合规性和身份基础知识

课程介绍 通过参加“Microsoft 安全在线技术公开课&#xff1a;安全性、合规性和身份基础知识”活动提升你的技能。在本次免费的介绍性活动中&#xff0c;你将获得所需的安全技能和培训&#xff0c;以创造影响力并利用机会推动职业发展。你将了解安全性、合规性和身份的基础知…...

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…...

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

【第二十一章 SDIO接口(SDIO)】

第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系&#xff0c;主要是分成几个表&#xff0c;用户表我们是记录用户的基础信息&#xff0c;包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题&#xff0c;不同的角色&#xf…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

AGain DB和倍数增益的关系

我在设置一款索尼CMOS芯片时&#xff0c;Again增益0db变化为6DB&#xff0c;画面的变化只有2倍DN的增益&#xff0c;比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析&#xff1a; 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...

快刀集(1): 一刀斩断视频片头广告

一刀流&#xff1a;用一个简单脚本&#xff0c;秒杀视频片头广告&#xff0c;还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农&#xff0c;平时写代码之余看看电影、补补片&#xff0c;是再正常不过的事。 电影嘛&#xff0c;要沉浸&#xff0c;…...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...