STP(生成树协议)

STP的基本概念

概述

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

桥ID

  • 在STP中,每一台交换机都有一个标示符,叫做Bridge ID或者桥ID,桥ID由16位的桥优先级(Bridge Priority)和48位的MAC地址构成。在STP网络中,桥优先级是可以配置的,取值范围是0~65535,默认值为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累加。
  • 在本例中,SW3从GE0/0/1接口到达根桥的RPC等于接口1的Cost加上接口2的Cost。

Port ID

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

BPDU

  • 为了计算生成树,交换机之间需要交换相关的信息和参数,这些信息和参数被封装在BPDU中。
  • BPDU有两种类型:配置BPDU和TCN 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 表项的学习及转发操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/diannao/63826.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GLM-4-Plus初体验

引言:为什么高效的内容创作如此重要? 在当前竞争激烈的市场环境中,内容创作已成为品牌成功的重要支柱。无论是撰写营销文案、博客文章、社交媒体帖子,还是制作广告,优质的内容不仅能够帮助品牌吸引目标受众的注意力&a…

Android IO 性能优化:全面解析与实践

文章目录 前言1、文件系统与 I/O 流程原理1.1 文件系统架构1.2 文件 I/O 流程 2、优化策略与场景适用2.1 异步 I/O2.2 合并文件操作2.3 页缓存优化2.4 内存映射文件 3. 性能监控与验证总结 前言 在现代 Android 应用中,I/O 性能直接影响用户体验。流畅的响应速度和…

Jetpack Compose赋能:以速破局,高效打造非凡应用

Android Compose 是谷歌推出的一种现代化 UI 框架,基于 Kotlin 编程语言,旨在简化和加速 Android 应用开发。它以声明式编程为核心,与传统的 View 系统相比,Compose 提供了更直观、更简洁的开发体验。以下是对 Android Compose 的…

MinerU:PDF文档提取工具

目录 docker一键启动本地配置下载模型权重文件demo.py使用命令行启动GPU使用情况 wget https://github.com/opendatalab/MinerU/raw/master/Dockerfile docker build -t mineru:latest .docker一键启动 有点问题,晚点更新 本地配置 就是在Python环境中配置依赖和…

UE4_控件蓝图_制作3D生命血条

一:效果图如下: 二、实现步骤: 1、新建敌人 右键蓝图类 选择角色, 重命名为BP_Enemytest。 双击打开,配置敌人网格体 修改位置及朝向 效果如下: 选择合适的动画蓝图类: 人物就有了动作&#x…

【深度学习】深刻理解ViT

ViT(Vision Transformer)是谷歌研究团队于2020年提出的一种新型图像识别模型,首次将Transformer架构成功应用于计算机视觉任务中。Transformer最初应用于自然语言处理(如BERT和GPT),而ViT展示了其在视觉任务…

用于日语词汇学习的微信小程序+ssm

日语词汇学习小程序是高校人才培养计划的重要组成部分,是实现人才培养目标、培养学生科研能力与创新思维、检验学生综合素质与实践能力的重要手段与综合性实践教学环节。本学生所在学院多采用半手工管理日语词汇学习小程序的方式,所以有必要开发日语词汇…

代码随想录-算法训练营day48(动态规划10:买卖股票的最佳时机,买卖股票的最佳时机2)

第九章 动态规划part10● 121. 买卖股票的最佳时机 ● 122.买卖股票的最佳时机II 详细布置 股票问题是一个动态规划的系列问题,今日安排的题目不多,大家可以慢慢消化。121. 买卖股票的最佳时机 视频讲解:https://www.bilibili.com/video/BV…

docker xxxx is using its referenced image ea06665f255d

Error response from daemon: conflict: unable to remove repository reference “registrxxxxxx” (must force) - container 9642fd1fd4a0 is using its referenced image ea06665f255d 这个错误表明你尝试删除的镜像正在被一个容器使用,因此无法删除。要解决这…

go高性能单机缓存项目

代码 // Copyright 2021 ByteDance Inc. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apach…

ichunqiu-2024年春秋杯网络安全联赛夏季赛-brother

1.打开题目,看到题目我就想到了再后面加一个ls,结果回显了ls,然后又想到会不会是模板注入,尝试{{7*7}},然后页面返回了49,说明存在模板注入 如下,判定为模板注入 看一下系统环境配置 然后看可…

基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 数据处理

基于Qwen2-VL模型针对LaTeX OCR任务进行微调训练 - 数据处理 flyfish 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_LoRA配置如何写 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_单图推理 基于Qwen2-VL模型针对LaTeX_OCR任务进行微调训练_-_原模型_单图推理 基于Q…

QT从入门到精通——Qlabel介绍与使用

1. QT介绍——代码测试 Qt 是一个跨平台的应用程序开发框架,广泛用于开发图形用户界面(GUI)应用程序,也支持非图形应用程序的开发。Qt 提供了一套工具和库,使得开发者能够高效地构建高性能、可移植的应用程序。以下是…

Edge SCDN深度解析,边缘安全加速的创新实践

边缘安全加速(Edge Secure Content Delivery Network,SCDN)是酷盾安全推出的边缘集分布式 DDoS 防护、CC 防护、WAF 防护、BOT 行为分析为一体的安全加速解决方案。通过边缘缓存技术,智能调度使用户就近获取所需内容,为…

WebRTC Simulcast 大小流介绍与优化实践

Simulcast 是 WebRTC 中的一种标准化技术 ,简称大小流。通过 Simulcast,客户端可以同时发送同一视频的多个版本。每个版本都以不同的分辨率和帧率独立编码,带宽较多的拉流端可以接收较高质量的视频流,带宽有限的拉流端则可以接收较…

40分钟学 Go 语言高并发:服务监控与追踪

服务监控与追踪 一、知识要点总览 模块核心内容技术选型难度监控指标请求量、响应时间、错误率、资源使用Prometheus Grafana中链路追踪分布式调用链、性能瓶颈分析Jaeger, OpenTelemetry高日志处理日志收集、分析、存储ELK Stack中告警系统告警规则、通知渠道、告警分级Ale…

vue3 使用 konva

1&#xff1a;安装 npm install vue-konva konva --save 在main.ts 里面引入 import VueKonva from vue-konva; app.use(VueKonva); 2&#xff1a;效果图 3&#xff1a;直接粘贴复制就能用你 &#xff08;重要的地方做了备注&#xff09; <template><div st…

【MySQL 进阶之路】了解 性能优化 与 设计原则

1.B树的优势 “矮胖”结构&#xff1a; 矮&#xff1a;B树的每个节点存储更多的关键字&#xff0c;从而减少了树的层级&#xff08;最多三层&#xff09;&#xff0c;减少了磁盘I/O操作&#xff0c;提高了查询效率。胖&#xff1a;叶子节点存储实际的数据&#xff0c;并使用双…

Spring Boot集成Knife4j文档工具

Knife4j 搭建 Knife4j环境的的搭建和Swagger一样都比较简单&#xff0c;只需要极简的配置即可。 maven依赖 我使用的是较高版本的基于openapi规范的依赖包&#xff0c;OpenAPI2(Swagger)规范是Knife4j之前一直提供支持的版本&#xff0c;底层依赖框架为Springfox。 此次在4…

LightRAG测试BUG

错误一&#xff1a; LightRAG无法回答错误&#xff1a; INFO:lightrag:kw_prompt result:{{"high_level_keywords": ["xxx", "xxx"],"low_level_keywords": ["xxx", "xxx", "xxx"] }} JSON parsing e…