简单描述标准生成树协议STP

news2024/11/25 20:53:07

简单描述标准生成树协议STP

生成树协议STP

为什么需要生成树

如上图所示网络拓扑,如果没有生成树协议,在网络通信开始时,假设PC0向PC1发送一个数据包,交换机S2的MAC地址表中并没有对应的MAC地址,因此会产生ARP洪泛(详情参考交换机自学习算法那篇文章)发送广播帧,由S2的Fa0/1和Fa0/3端口向对端发出。

当S1、S3分别接收到广播帧后,根据同样原理进行广播帧转发。这时网络形成了一个环路,但交换机并不知道这将导致广播帧在环路中永远循环下去。

随着时间增加,广播帧将会越来越多,最终形成网络广播风暴导致网络瘫痪。(对于交换机的运算速度来讲,网络由正常变瘫痪过程中的时间是非常短的)

STP概念

由上述描述就可以知道,我们需要一套方案去解决这种问题,所以就有了生成树协议。

生成树协议(英语:Spanning Tree ProtocolSTP),是一种工作在OSI网络模型中数据链路层的通信协议,基本应用是防止交换机冗余链路产生的环路。用于确保以太网中无环路的逻辑拓扑结构。从而避免了网络广播风暴,大量占用交换机的资源。

与图论中所指的生成树概念一致,目的就是为了破环(将环形图变成树形)。

STP会阻塞备用链路,当正常线路损坏时会启用备用链路。

交换机上默认的STP版本还有多实例生成树(MSTP)、快速生成树(RSTP)等,本文只描述标准版本。

生成树协议核心是生成树算法(Spanning Tree Algorithm,STA),下面对STA算法过程进行描述。

生成树算法STA

交换机是由网桥演变而来的,在描述生成树算法的时候也指代交换机

STA大致分为三步:

  • 选举根网桥
  • 选举根端口
  • 选举指定端口并阻塞备用端口

选举根网桥

选举条件:网桥ID(BID)最小者当选

BID由以下两部分构成:

  • 优先级
  • 交换机的基本MAC地址

优先级范围为0-61440,步长4096,默认值为32768

看到这里可能会有人问,为什么步长恰好是2的12次方即4096?这并不是巧合,因为这里的步长就是VLAN号(VLAN号使用12比特)

BID的比较方法:

  • 优先级取值越小,BID就越小
  • 若优先级相同,则比较MAC地址,从MAC地址左侧开始比较,数值小的BID就越小

选举根端口

根端口(Root Port, RP)的选举是在非根网桥(非根交换机)上的,并且在每个交换机上只能存在一个RP。

RP用于接收根网桥发来的BPDU,也用来转发普通流量。

RP的选举首先考虑BPDU接收端口到根网桥的路径成本最小,其路径成本与链路带宽对应如下(该值不绝对,交换机上可更改)

链路带宽成本值
4Mb/s250
10Mb/s100
16Mb/s62
100Mb/s19
1Gb/s4
10Gb/s2

如果存在多个端口到根网桥的成本相同时,则比较对端的BID,对端BID小的本机端口则选举为RP。

(注意BID是对端,也就是与参加选举的端口相连的其它交换机的端口,而参与选举的端口是在本交换机上)

如果对端BID也相同,则比较对端的端口ID(PID),同样对端PID小的本机端口选举为RP。

PID参数如下:

  • 范围0-240
  • 步长16
  • 默认值128
  • 端口号(如Fa0/1比Fa0/2小)

(其实还存在一种对端BID与PID都相同的情况,详细请看本文 STA举例部分->其他例子->使用集线器的情况)

选举指定端口并阻塞备用端口

在每一个网段上选出一个指定端口(Designated Port,DP)。DP用于转发根网桥发来的BPDU,也用来转发普通流量。

注意:每网段上存在且只能存在一个DP

DP的选举条件如下:

  • 根网桥的所有端口都是DP
  • 根端口的对端端口一定都是DP(反之不一定成立)
  • BPDU转发端口到根网桥的路径成本最小
  • 本端的BID最小

剩余端口成为备用端口(Alternate Port,AP),它们将被阻塞。

STA举例

主要例子

网络拓扑如下

按照上文中的步骤

首先选举根网桥

  • 优先级都是32768,然后比较MAC地址,S1的MAC地址为00-01-...,比其它地址都小,所以S1是根网桥。

然后选取根端口

  • 交换机S2的到S1路径上的所有链路都是1Gb/s,所以开销都是4,G0/1到S1的总开销为4,G0/2到S1的总开销为8,G0/3到S1的总开销为12,所以S2的根端口为G0/1。

  • 与此同理,S3根端口为G0/1,S4的根端口的为G0/2(G0/2的对端BID比G0/1对端BID小,二者成本相同)。

  • S5的根端口为Fa0/1(Fa0/1与Fa0/2的成本相同,对端BID相同,但Fa0/1对端为S4的Fa0/1,端口号小,所以PID小)。

选举指定端口并阻塞备用端口

  • S1为根网桥,所以S1的G0/1与G0/2都是指定端口
  • 然后按照第二个条件,所有的RP对端端口都是DP,那么选出来的有:S3的G0/3,S4的Fa0/1

  • 剩下的几个网段无法根据第二个条件选出DP,然后根据第三个条件即到S1成本路径最小来选
  • 首先来看S4Fa0/2-S5Fa0/2这个网段,到S4Fa0/2成本为8,到S5Fa0/2成本为27,所以S4的Fa0/2端口胜出,为该网段的DP
  • 再看S2G0/2-S3G0/2这段链路,这两个端口到S1的开销相同,但是S3的BID比S2小,所以S3的G0/2为该网段下的DP
  • 同理S2的G0/3也是DP
  • 剩下的端口都是AP

其他例子

已知条件如下:

  • 所有链路带宽都相等(也就是说链路成本值相同)
  • S2 BID < S3 BID

那么下图中S4的RP如红圈所示

有一种特殊情况,使用了集线器,在S4上Fa0/1与Fa0/2链路成本相同,Fa0/3成本比前两者大,并且Fa0/1与Fa0/2对端BID与对端PID相同,此时比较的是本机端口的PID,如下图所示

结束

上述仅对STA最基本的情况进行描述分析,实际网络中的情况更复杂,例如某个网桥(交换机)突然掉线、链路损坏、生成树还未生成时交换机发生故障需重新选举等等。

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

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

相关文章

常见的项目管理问题有哪些?

在项目执行过程中&#xff0c;相信大家总会遇到一些项目管理常见问题以及各种意想不到的管理问题。如果想让你的项目取得最终成功&#xff0c;项经理便需要有一个计划来快速有效地应对任何出现的问题&#xff0c;否则它们会影响项目的成果。那么常见的项目管理问题有哪些呢&…

PolarDB-X 的 in 常量查询

场景 实际场景中经常需要根据一些常量指标做IN查询&#xff0c;并且IN值往往是分区键。例如在电商场景中&#xff0c;有两张表&#xff0c;买家表与订单表。订单的具体信息会记录到订单表中&#xff0c;该表按照订单ID进行哈希拆分&#xff1b;买家表则会保存买家ID及其关联的…

Flowable 中的网关、流程变量以及历史流程

今天这篇文章&#xff0c;松哥和大家梳理一下 Flowable 中的网关、流程变量以及历史流程的玩法。 1. 三大网关 Flowable 中网关类型其实也不少&#xff0c;常见的主要有三种类型&#xff0c;分别是&#xff1a; 排他网关并行网关包容网关 这三个里边最常用的当然就是排他网关…

苦等官方阿里云盘TV版久矣,终于期待一款TV版。

苦等官方阿里云盘TV版久矣&#xff0c;终于期待一款TV版。 一、获取链接&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/19Z-2Lb4-lOSU14M83rivVA 提取码&#xff1a;o2z0 二、产品&#xff1a; 1、文件列表&#xff1a;确定键打开文件或文件夹&#xff0c;菜单键进…

华为19级专家10年心血终成百页负载均衡高并发网关设计实战文档

负载均衡&#xff08;LoadBalance&#xff09;的字面意思是将工作负载分担到多个工作单元上进行执行&#xff0c;它建立在现有网络结构之上&#xff0c;是构建分布式服务、大型网络应用的关键组件。 近十几年来&#xff0c;负载均衡技术层出不穷&#xff0c;令人眼花缭乱。如果…

[思考进阶]01 如何克服自己的无知?

除了要提升自己的技术能力&#xff0c;思维的学习和成长也非常非常重要&#xff0c;特推出此[思考进阶]系列&#xff0c;进行刻意练习&#xff0c;从而提升自己的认知。 有段时间我特别喜欢研究一些定律和法则&#xff0c;比如&#xff1a;熵增定律、懒蚂蚁效应、蝴蝶效应、吸引…

Java搭建宝塔部署实战毕设项目物品分类springboot管理系统源码

大家好啊&#xff0c;我是测评君&#xff0c;欢迎来到web测评。 本期给大家带来一套Java开发的物品分类springboot管理系统源码&#xff0c;适合准备做毕业设计的同学&#xff0c;可以下载搭建起来&#xff0c;在这基础上加一些功能&#xff0c;改改UI&#xff0c;随便写篇答题…

解决办法‘npm‘ 不是内部或外部命令,也不是可运行的程序或批处理文件。

今天使用了nvm这个node的保姆级版本管理工具,的确很香。 首先打开官网nvm.uihtm.com/ 下载安装过程很顺利&#xff0c;但是验证node及npm是否安装成功时&#xff0c;出现下面错误提示。 C:\Users\Administrator>npm -v npm 不是内部或外部命令&#xff0c;也不是可运行的…

里奥哈大使撰文 | 来一场云旅行吧,盘点里奥哈那些美轮美奂的酒庄~

俗话说得好&#xff0c;“里奥哈美酒夜光杯&#xff0c;欲买机票马上飞”&#xff08;说得太好了&#xff0c;反正也去不了下次别说了&#xff09;既然疫情当下&#xff0c;无法来一场说走就走的旅行&#xff0c;那我们就来云游一下里奥哈这个美轮美奂的酒庄吧&#xff01; 说起…

2023年浙大MEM英语二作文干货模版:临阵磨枪可用

这些年来&#xff0c;通过杭州达立易考教育对英语二小作文的总结发现&#xff0c;书信形式成为主要考察的内容&#xff0c;而随着形式的变化和难度的提升&#xff0c;复合型题材逐渐成为侧重点&#xff0c;比如道歉信加建议信、感谢信加建议信等。我们不建议原班照背模版&#…

汇编语言快速回顾(以x86_64为例)

GAS (GNU Assembler) 是一款基于 Linux 的汇编器&#xff0c;主要供 GNU 项目使用&#xff0c;用于对 Linux 内核及其他软件进行进行汇编。 MASM (Microsoft Macro Assembler) 是微软操作系统的专属汇编器&#xff0c;于 1981 年随 Visual Studio 一起发布。 大学本科教育中有两…

小学生python游戏编程arcade----精灵调用图片的两种类

小学生python游戏编程arcade----精灵调用图片的两种类前言精灵调用图片的两种类1、第一种类的定义1.1 以文件名及缩放比例做初始参数1.2 利用变换图片的颜色更换角色的使用1.3 代码分析转换文件来不及调用&#xff0c;时间问题&#xff1f;&#xff1f;&#xff1f;&#xff1f…

【数据结构初阶】链式二叉树接口实现+痛苦的OJ题

递归心决&#xff1a;(xdm好好感悟) 1.确定递归的结束条件 2.确定递归的单层逻辑 3.确定递归的参数和返回值 文章目录一、链式二叉树接口1.二叉树的结构体2.手动造一棵二叉树3.二叉树前、中、后序遍历(递归的神圣大门开启)4.二叉树的结点个数5.二叉树的叶子结点个数6.二叉树的…

【毕业设计】深度学习动物识别系统 - 图像识别 python OpenCV

文章目录0 前言1 课题背景2 实现效果3 卷积神经网络3.1卷积层3.2 池化层3.3 激活函数&#xff1a;3.4 全连接层3.5 使用tensorflow中keras模块实现卷积神经网络4 inception_v3网络5 最后0 前言 &#x1f525; Hi&#xff0c;大家好&#xff0c;这里是丹成学长的毕设系列文章&a…

Web前端大作业、基于HTML+CSS+JavaScript响应式个人相册博客网站

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

【DL with Pytorch】第 1 章 :深度学习与PyTorch简介

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

1.每天进步一点点------爬虫应用场景

14天学习训练营导师课程&#xff1a; 杨鑫《Python 自学编程基础》 杨鑫《 Python 网络爬虫基础》 杨鑫《 Scrapy 爬虫框架实战和项目管理》 杨老师推荐自学Python的网站 w3schools 传送门 geeksforgeeks 传送门 realpython 传送门 学习之前读一读 来看看爬虫合不合法 传送…

安洵杯 2022 复现

babyphp 知识点&#xff1a;原生类的利用&#xff0c;session 反序列化<?php //something in flag.phpclass A {public $a;public $b;public function __wakeup(){$this->a "babyhacker";}public function __invoke(){if (isset($this->a) && $t…

[附源码]SSM计算机毕业设计文章管理系统查重PPTJAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

Java 多线程为啥要有ThreadLocal,怎么用,这篇讲全了!

前面我们学习的线程并发时的同步控制&#xff0c;是为了保证多个线程对共享数据争用时的正确性的。那如果一个操作本身不涉及对共享数据的使用&#xff0c;相反&#xff0c;只是希望变量只能由创建它的线程使用&#xff08;即线程隔离&#xff09;就需要到线程本地存储了。 Ja…