STP协议基础
STP协议
- 技术来源
- 二层环路及危害
- 二层交换机网络的冗余性与环路
- 人为错误导致的二层环路
- 二层环路带来的问题
- STP生成树协议
- STP概述
- STP基本概念
- 桥ID
- 根桥
- COST
- RPC(Root Path Cost)根路径开销
- PORT ID端口ID
- BPDU桥协议数据单元
- STP的计算过程(1):在交换网络中选举出一个根桥
- STP的计算过程(2):在每台非根桥上选举一个根接口
- STP的计算过程(3):在每条链路上选举出一个指定接口
- STP接口状态
- STP接口状态迁移
- 拓扑变化——根桥故障
- 拓扑变化——直连链路故障
- 拓扑变化——非直连链路故障
- 拓扑变化导致MAC地址表错误
- TC BPDU(Topology Change BPDU)
技术来源
- 以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol) 。
- 运行STP协议的设备通过彼此交互信息发现网络中的环路,并有选择的对某个接口进行阻塞,最终将环形网络结构修剪成无环路的树形网络结构,从而防止报文在环形网络中不断循环,避免设备由于重复接收相同的报文造成处理能力下降。
二层环路及危害
二层交换机网络的冗余性与环路
左图:在没有冗余的情况下,如果交换机发生故障,那就直接下层设备都无法进行上网,容易出现单点故障。
右图:虽然实现了冗余,但是很容易产生环路。现在下面的PC发送一个未知的单播包给接入层交换机,交换机在收到未知的数据包之后会进行泛洪转发,下面的交换机转发给上面的交换机,然后继续执行这个操作,因为这个数据包在二层根本就找不到,所以就会一致进行转发。
人为错误导致的二层环路
左图:由于技术人员的疏忽,把线缆错误的连接到了一起,导致二层环路的产生。
右图:两个交换机之间明明是要进行链路聚合,但是忘记进行做相应的操作,导致两台交换机之间直接成环路。
二层环路带来的问题
左图:当SW3收到一个未知的单播包之后,就会从两个其他的端口进行转发,因为一直找不到数据包的接收者,所以就会一直转发,成环。
右图:造成MAC地址漂移,因为一开始SW3从左边接口发出数据包之后,SW1从G0/0/1接口学习到这个地址,然后记录相应的对应表项。但是SW3也会从右边的端口进行转发,这样SW2收到之后又会转发给SW1的G0/0/2端口,SW1就会认为数据包中的MAC地址又跟G0/0/2是对应的,于是更换原来跟G0/0/1的对应关系,于是就产生了MAC地址漂移的现象。
STP生成树协议
在网络中部署了生成树之后,交换机之间会运行生成树协议报文的交互并进行无环拓扑计算,最终将网络中的某个(或者某些)接口进行阻塞(Block),从而打破环路。(没运行STP之前,会一直来回传递,运行STP之后,会主动阻塞端口,于是就不会产生环路了)
另外,交换机上运行的生成树协议会持续的监控网络的拓扑结构,当网络拓扑结构发生变化时,生成树能感知这些变化,并且自动做出调整,因此,生成树既能解决二层环路问题,也能够为网络冗余提供一种方案。(好比现在SW3和SW1之间的链路发生故障,此时SW3就无法与外界进行通信了,此时之前阻塞的链路就可以恢复,继续进行信息传递。)
STP概述
- STP是一个用于局域网中消除环路的协议。
- 运行该协议的设备通过彼此交互信息而发现网络中的环路,并对某些接口进行阻塞以消除环路。
- STP在网络中运行后会持续监控网络的状态,当网络出现拓扑变更时,STP能够感知并且进行自动响应,从而使得网络状态适应新的拓扑结构,保证网络可靠性。
- 由于局域网规模的不断增长,生成树协议已经成为了当前最重要的局域网协议之一。
STP基本概念
桥ID
- IEEE 802.1D标准中规定BID由16位的桥优先级(Bridge Priority)与桥MAc地址构成。
- 每一台运行STP的交换机都拥有一个唯一的BID。
- BID桥优先级占据高16bit,其余的低48bit是桥MAC地址。
- 在STP网络中,BID最小的设备会被选举为根桥。
- 优先级默认为32768,并且以4096的倍数增加或者减少。
- 总之就是优先级+MAC地址,越小越好
根桥
- STP的主要作用就是在整个交换网络之中计算出一棵无环的“树”(SPT树)
- 根桥就是一个STP交换网络之中的“树根”
- STP开始工作之后,会在交换网络中选出一个根桥,作为 生成树进行拓扑计算的重要“参考点”,是STP计算得出无环拓扑的“树根”
- STP网络之中,桥ID最小的设备会被选举为根桥
- 在BID的比较过程之中,首先比较桥优先级,优先级的值越小则越优先,拥有最小优先级的交换机成为根桥,如果优先级相等,那么就继续比较MAC地址,MAC地址最小的交换机成为根桥。
COST
- 每一个激活了的STP接口都维护着一个COST值,接口的COST值主要用来计算根路径开销,也就是到达根的开销。
- 接口的缺省COST值除了与其速率、工作模式有关,还与交换机使用的STP COST计算方法有关。
- 接口的带宽越大,那么COST值就越小。
- 用户也可以根据需要通过命令调整接口的COST值。
RPC(Root Path Cost)根路径开销
- 在STP进行拓扑计算的过程中,一个非常重要的环节就是“丈量”交换机的某个接口道根桥的“成本”,即RPC。
- 一台设备从某个接口到达根桥的RPC等于从根桥道该设备沿途所有入方向接口的COST累加。
- 好比图中,SW3的G0/0/1接口到达根桥的RPC就等于图中接口1的COST加上接口2的COST。
PORT ID端口ID
- 运行STP的交换机使用接口ID来标识每个接口,接口ID主要用于在特定场景之下选举指定接口。
- 接口ID由两部分组成,高4bit是接口优先级,低12bit是接口编号。
- 激活STP的接口会维护一个默认的接口优先级,在华为交换上,默认值为128。用户可以根据需要,通过命令修改该优先级。
BPDU桥协议数据单元
- BPDU是STP能够正常进行工作的根本。里面包含了各种信息,好比谁是根桥,各种根路径开销等等。
- BPDU是STP的协议报文。
- STP交换机之间会交互BPDU报文,这些BPDU报文会携带着一些重要的信息,正是基于这些信息,STP才能够顺利工作。
- BPDU分为两种类型:
- 配置BPDU(Configration BPDU)
- TCN BPDU (Topology Change Notification BPDU)
- 配置BPDU是STP进行拓扑计算的关键;TCP BPDU只有在网络拓扑发生变更时才会被触发。
配置BPDU的报文格式:
红色框中的最为重要。
STP的计算过程(1):在交换网络中选举出一个根桥
- STP在交换网络中开始工作之后,每个交换机都认为自己是根桥,然后向网络中发送配置BPDU。配置BPDU中包含交换机自己的桥ID。
- 网络中拥有最小桥ID的交换机成为根桥。
- 在一个连续的STP交换网络中只会存在一个根桥。
- 根桥的角色是可以抢占的。
- 为了确保交换网络的稳定,建议提前规划STP组网,并将规划为根桥的交换机的桥优先级设置为最小的0.
STP的计算过程(2):在每台非根桥上选举一个根接口
- 每一台非根交换机都会在自己的接口中选举出一个接口。
- 非根桥的交换机上有且只有一个根接口。
- 当非根桥交换机有多个接口接入网络时,根接口时其收到最优配置BPDU的接口。
- 可以形象的理解为,根接口是每台非跟桥上“朝向”根桥的接口。
STP的计算过程(3):在每条链路上选举出一个指定接口
- 根接口选出来之后,非根桥会使用其在接口上收到的BPDU进行计算,然后将计算得到的配置BPDU与除了根接口之外的其它所有接口收到的配置BPDU进行比较:
- 如果前者更优,则该接口成为指定接口;
- 如果后者更优,则该接口为非指定接口;
- 一般情况之下,根桥的所有接口都是指定接口
如果既不是根端口也不是指定端口,那么它就是阻塞接口。
STP接口状态
- 禁用:就好比没有被STP激活的普通端口一样。
- 阻塞:本状态不能发BPDU,但是可以接收BPDU,因为在其它链路出现故障之后,含有阻塞接口的链路可以成为备用链路。
- 侦听:进行STP的计算,可以理解为内部进行选举。
- 学习:学习业务数据,但是不进行转发。
- 转发:根接口与指定接口进行转发。
STP接口状态迁移
其中侦听过程,也就是内部端口选举的过程需要15s,选举完成再进行业务数据的学习也要15s,最终才能进行转发状态。
拓扑变化——根桥故障
- SW1根桥设备发生故障(此时链路没有出现故障,与直连链路故障进行区分),停止发送BPDU报文。
- SW2等待MAX Age计时器(20s)超时,从而导致已经收到的BPDU报文失效,又因为收不到根桥发送的新的BPDU报文,从而得知上游出现了故障。
- 于是非根桥会相互发送配置BPDU,重新选举新的根桥。
- 经过重新选举之后,SW3的A端口经过两个Forward Delay(15s)时间恢复转发状态。
- 非根桥会在BPDU老化之后重新开始选举。
- 根桥故障的时间会导致50s的恢复时间,包括20s的老化时间+30秒的Forward Delay。
- 根桥每2s发送一次配置BPDU。
拓扑变化——直连链路故障
图中SW1与SW2之间通过两根线进行相连。
- 当SW1与SW2相连的上面一根线路发生断裂之后,线路断裂则SW2的端口接着进入DOWN状态。
- SW2就可以立即感知到链路状况并且切换到备用链路。
- 此过程就剩去了等待BPDU失效的20s,只需啊要2个Forward Delay即可,也就是进入到转发只需30s。
拓扑变化——非直连链路故障
- 现在SW1与SW2之间的互联链路突然断掉了,SW3也就收不到最优的BPDU了。
- 此时SW2会向SW3发送自身的BPDU,但是SW3收到之后会与自身记载的BPDU进行对比,发现不如自身的BPDU更优,于是不予理睬。
- 等待20s老化时间到了之后,SW3意识到出现故障,于是重新进行选举,多加两个Forward Delay30s,总共50s恢复故障。
拓扑变化导致MAC地址表错误
- 图中的MAC地址表正确的并且此时SW1与SW3之间的链路还没有断裂。
- 此时,SW1与SW3相连的链路发生故障,SW3立即感知,阻塞接口需要30s的时间进入到转发状态。
- 但是现在主机A发送给主机B的数据包就会仍然通过G0/0/3进行发送,这时就会出现故障。
- 要等待MAC地址表老化要300s,时间非常长,那么,有什么办法可以加速正确的恢复转发呢?
TC BPDU(Topology Change BPDU)
简言之就是在拓扑发生变化的时候进行清理MAC地址表的。
- TCN:用于向根桥通告有故障。
- TCA:回复接收到了TCA报文。
- TCN:向根桥发送TCN报文。
- TC:这里有一个隐形的确认,只要给你发送TC默认意思是已经收到了TCN报文,TC报文用于清除MAC地址表。
- TC:传送给SW3用于清除相关的MAC地址表。
相关文章:

STP协议基础
STP协议技术来源二层环路及危害二层交换机网络的冗余性与环路人为错误导致的二层环路二层环路带来的问题STP生成树协议STP概述STP基本概念桥ID根桥COSTRPC(Root Path Cost)根路径开销PORT ID端口IDBPDU桥协议数据单元STP的计算过程(1…...

Linux上面配置Apache2支持Https(ssl)具体方案实现
虽然Nginx比较流行,但是由于一些老项目用到了Apache2来支持Web服务,最近想给服务上一个Https支持,虽然看似教程简单,但是也遇到一些特殊情况,经历了一番折腾也算是解决了所有问题,将过程记录如下。演示是基…...

[Linux]进程替换
🥁作者: 华丞臧. 📕专栏:【LINUX】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文…...
常见的锁策略面试题
你是怎么理解乐观锁和悲观锁的,具体怎么实现呢? 悲观锁认为多个线程访问同一个共享变量冲突的概率较大, 会在每次访问共享变量之前都去真正加锁 乐观锁认为多个线程访问同一个共享变量冲突的概率不大. 并不会真的加锁, 而是直接尝试访问数据. 在访问的…...

设计师一定要知道这几个网站,解决你80%的设计素材。
本期推荐一波设计师必备的设计素材网站,设计党赶紧马住!能解决你日常设计中80%的素材。 1、菜鸟图库 菜鸟图库-免费设计素材下载 这是一个为新手设计师提供免费素材的设计网站,站内有超多平面模板、海报、UI设计、电商设计等相关素材&#x…...

QT基础入门
学习视频:QT开发概述_哔哩哔哩_bilibili 1.QT开发概述 1.什么是QT QT是一个1991年由Qt Company开发的跨平台C图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架&#…...
高数不定积分72题解答
题目来源:这72道积分题目会积了,绝对是高高手 作者: 湖心亭看雪 第一题 原式∫15x3dx15∫15x3d(5x3)15ln(5x3)C\begin{aligned} \text{原式}&\int \frac{1}{5x3}dx \\ &\frac{1}{5} \int\frac{1}{5x3}d(5x3) \\ &\frac{1}{5} ln…...

基于北方苍鹰算法优化LSTM(NGO-LSTM)研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...

Linux内核启动(理论,0.11版本)分段与分页
为什么要虚拟内存 我们知道,在之前上微机原理时,我们的程序是可以直接访问内存的,而且访问的是直接的物理内存,在实模式下,寄存器是16位的,数组总线(data bus)是16位的,…...

数据与C(字符串)
目录 一.概念引入 二.字符串(数组存储,必须以\0结尾) 三.错误示范 四.strlen()和sizeof()相对于字符串的不同 一.概念引入 “a”,a哪个是字符哪个又是字符串,嘿嘿不用猜了 我们在上一章中说过&#x…...

Python+Go实践(电商架构三)
文章目录服务发现集成consul负载均衡负载均衡算法实现配置中心nacos服务发现 我们之前的架构是通过ipport来调用的python的API,这样做的弊端是 如果新加一个服务,就要到某个服务改web(go)层的调用代码,配置IP/Port并发…...

基于 MySQL 排它锁实现分布式可重入锁解决方案
一、MySQL 排它锁和共享锁 在进行实验前,先来了解下MySQL 的排它锁和共享锁,在 MySQL 中的锁分为表锁和行锁,在行锁中锁又分成了排它锁和共享锁两种类型。 1. 排它锁 排他锁又称为写锁,简称X锁,是一种悲观锁&#x…...

【大数据】Hadoop-HA-Federation-3.3.1集群高可用联邦安装部署文档(建议收藏哦)
背景概述 单 NameNode 的架构使得 HDFS 在集群扩展性和性能上都有潜在的问题,当集群大到一定程度后,NameNode 进程使用的内存可能会达到上百 G,NameNode 成为了性能的瓶颈。因而提出了 namenode 水平扩展方案-- Federation。 Federation 中…...

【设计模式之美 设计原则与思想:面向对象】14 | 实战二(下):如何利用面向对象设计和编程开发接口鉴权功能?
在上一节课中,针对接口鉴权功能的开发,我们讲了如何进行面向对象分析(OOA),也就是需求分析。实际上,需求定义清楚之后,这个问题就已经解决了一大半,这也是为什么我花了那么多篇幅来讲…...
工作技术小结
2023/1/31 关于后端接口编写小结 1,了解小程序原型图流程和细节性的东西 2,数据库关联结构仔细分析,找到最容易查询的关键字段,标语表之间靠什么关联 2023/2/10 在web抓包过程中,如果要实现批量抓取,必须解…...

无重复字符的最长子串-力扣3-java
一、题目描述给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: s "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: s "bbbbb"输出: 1解释: 因为…...

java ssm高校教材管理平台 idea maven
设计并且实现一个基于JSP技术的高校教材管理平台的设计与实现。采用MYSQL为数据库开发平台,SSM框架,Tomcat网络信息服务作为应用服务器。高校教材管理平台的设计与实现的功能已基本实现,主要学生、教材管理、学习教材、教材入库、教材领取、缴…...

【Python学习笔记】25.Python3 输入和输出(1)
前言 在前面几个章节中,我们其实已经接触了 Python 的输入输出的功能。本章节我们将具体介绍 Python 的输入输出。 输出格式美化 Python两种输出值的方式: 表达式语句和 print() 函数。 第三种方式是使用文件对象的 write() 方法,标准输出文件可以用…...

C++复习笔记8
泛型编程:编写的是与类型无关的通用代码,是代码复用的一种手段,模板是泛型编程的基础。 1.函数模板:类型参数化,增加代码复用性。例如对于swap函数,不同类型之间进行交换都需要进行重载,但是函数…...

RabbitMQ入门
目录1. 搭建示例工程1.1. 创建工程1.2. 添加依赖2. 编写生产者3. 编写消费者4. 小结需求 官网: https://www.rabbitmq.com/ 需求:使用简单模式完成消息传递 步骤: ① 创建工程(生成者、消费者) ② 分别添加依赖 ③ 编…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
SciencePlots——绘制论文中的图片
文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了:一行…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

Matlab实现任意伪彩色图像可视化显示
Matlab实现任意伪彩色图像可视化显示 1、灰度原始图像2、RGB彩色原始图像 在科研研究中,如何展示好看的实验结果图像非常重要!!! 1、灰度原始图像 灰度图像每个像素点只有一个数值,代表该点的亮度(或…...
CppCon 2015 学习:Time Programming Fundamentals
Civil Time 公历时间 特点: 共 6 个字段: Year(年)Month(月)Day(日)Hour(小时)Minute(分钟)Second(秒) 表示…...

AD学习(3)
1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分: (1)PCB焊盘:表层的铜 ,top层的铜 (2)管脚序号:用来关联原理图中的管脚的序号,原理图的序号需要和PCB封装一一…...

渗透实战PortSwigger Labs指南:自定义标签XSS和SVG XSS利用
阻止除自定义标签之外的所有标签 先输入一些标签测试,说是全部标签都被禁了 除了自定义的 自定义<my-tag onmouseoveralert(xss)> <my-tag idx onfocusalert(document.cookie) tabindex1> onfocus 当元素获得焦点时(如通过点击或键盘导航&…...
js 设置3秒后执行
如何在JavaScript中延迟3秒执行操作 在JavaScript中,要设置一个操作在指定延迟后(例如3秒)执行,可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法,它接受两个参数: 要执行的函数&…...