STP协议基础

news2024/10/2 12:18:36

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,最终才能进行转发状态。

拓扑变化——根桥故障

在这里插入图片描述

  1. SW1根桥设备发生故障(此时链路没有出现故障,与直连链路故障进行区分),停止发送BPDU报文。
  2. SW2等待MAX Age计时器(20s)超时,从而导致已经收到的BPDU报文失效,又因为收不到根桥发送的新的BPDU报文,从而得知上游出现了故障。
  3. 于是非根桥会相互发送配置BPDU,重新选举新的根桥。
  4. 经过重新选举之后,SW3的A端口经过两个Forward Delay(15s)时间恢复转发状态。
  5. 非根桥会在BPDU老化之后重新开始选举。
  6. 根桥故障的时间会导致50s的恢复时间,包括20s的老化时间+30秒的Forward Delay。
  7. 根桥每2s发送一次配置BPDU。

拓扑变化——直连链路故障

在这里插入图片描述
图中SW1与SW2之间通过两根线进行相连。

  1. 当SW1与SW2相连的上面一根线路发生断裂之后,线路断裂则SW2的端口接着进入DOWN状态。
  2. SW2就可以立即感知到链路状况并且切换到备用链路。
  3. 此过程就剩去了等待BPDU失效的20s,只需啊要2个Forward Delay即可,也就是进入到转发只需30s。

拓扑变化——非直连链路故障

在这里插入图片描述

  1. 现在SW1与SW2之间的互联链路突然断掉了,SW3也就收不到最优的BPDU了。
  2. 此时SW2会向SW3发送自身的BPDU,但是SW3收到之后会与自身记载的BPDU进行对比,发现不如自身的BPDU更优,于是不予理睬。
  3. 等待20s老化时间到了之后,SW3意识到出现故障,于是重新进行选举,多加两个Forward Delay30s,总共50s恢复故障。

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

在这里插入图片描述

  1. 图中的MAC地址表正确的并且此时SW1与SW3之间的链路还没有断裂。
  2. 此时,SW1与SW3相连的链路发生故障,SW3立即感知,阻塞接口需要30s的时间进入到转发状态。
  3. 但是现在主机A发送给主机B的数据包就会仍然通过G0/0/3进行发送,这时就会出现故障。
  4. 要等待MAC地址表老化要300s,时间非常长,那么,有什么办法可以加速正确的恢复转发呢?

TC BPDU(Topology Change BPDU)

在这里插入图片描述
简言之就是在拓扑发生变化的时候进行清理MAC地址表的。

  1. TCN:用于向根桥通告有故障。
  2. TCA:回复接收到了TCA报文。
  3. TCN:向根桥发送TCN报文。
  4. TC:这里有一个隐形的确认,只要给你发送TC默认意思是已经收到了TCN报文,TC报文用于清除MAC地址表。
  5. TC:传送给SW3用于清除相关的MAC地址表。

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

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

相关文章

VS中安装gismo库

文章目录前言一、下载安装paraview直接下载压缩包安装就可以了解压后按步骤安装即可二、gismo库的安装gismo库网址第一种方法:第二种方法第三种方法:用Cmake软件直接安装首先下载cmake软件[网址](https://cmake.org/download/)安装gismo库三、gismo库的使…

ChatGPT闭包解答

怎么理解javaScript闭包 JavaScript 闭包是一种特殊的对象,它包含了函数及其相关作用域中的变量。它允许函数访问并保存其外部作用域中的变量,即使该函数已经离开了其作用域。 闭包的一个常见应用场景是封装私有变量。例如,在一个对象的方法内…

Android IO 框架 Okio 的实现原理,如何检测超时?

本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 提问。 前言 大家好,我是小彭。 在上一篇文章里,我们聊到了 Square 开源的 I/O 框架 Okio 的三个优势:精简且全面的 API、基于共享的缓冲区设计以…

电机参数中力矩单位kgf.cm,Nm,mNm表示的含义

力的基本知识 质量和力的比例系数 质量和重力的关系有一个重力系数:g≈9.8 N/kg≈10,后面看到的1kgf就相当于1kg物体的力也就是10N 杠杆原理 对于同一个支点,在不考虑杠杆的重量的情况下,实现同样的作用效果,距离支点越近&…

vscode搭建python Django网站开发环境

这里使用pip安装的方式,打开命令行,输入执行: pip install django2.2这里选择安装2.2版本是因为是新的lts版本,长期支持稳定版。 接下来再安装pillow,Django底层一部分是基于pillow进行的。 pip install pillowpylint…

SpringBoot + Disruptor实现高并发内存消息队列

1. 简介 Disruptor是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于Disruptor开发的系统单线程能支撑每秒600万订单,2010年在QCon演讲后,获得了业界关…

【思维模型】概率思维的价值:找到你的人生算法,实现阶级跃迁!

把同样公平的机会放在放在很多人面前,不同的人生算法,会得到迥然不同的结果。 概率思维是什么? 【ChatGPT】概率思维是一种通过使用数学模型来思考和评估不确定性事件的方法。它通过计算不同可能性的概率来预测事件的结果,并评估风险和机会。 概率思维的价值在于它可以帮…

ChatYuan元语AI: 类似ChatGPT功能型对话大模型

ChatYuan元语AI 元语智能开发团队训练了一个类似ChatGPT的功能型对话大模型ChatYuan. 类似ChatGPT模型, 中文开源版,功能型对话大语言模型. 功能有:支持训练端到端文本生成文本生成情感分析句子相似度零样本分类命名实体识别翻译自然语言推理问答文本纠错文本摘要FAQ问答文本…

终于体验了一下ChatGPT

再次尝试 隔了一天,今天(2023-2-11)再试一下。真的是一下。。。(如果没有境外环境的,大家还是在网上找个共享账号试一下吧。网上有人分享的,大家细找一下就可以,我就不在这里发出来了。。。&…

微信小程序 Springboot校运会高校运动会管理系统

3.1小程序端 小程序登录页面,用户也可以在此页面进行注册并且登录等。 登录成功后可以在我的个人中心查看自己的个人信息或者修改信息等 在广播信息中我们可以查看校运会发布的一些信息情况。 在首页我们可以看到校运会具体有什么项目运动。 在查看具体有什么活动我…

“笨办法”学Python 3 ——练习 37. 复习各种符号

练习 37. 复习各种符号 关键词 可参考:https://www.knowledgedict.com/tutorial/python-keyword.html 数据类型 可参考:https://www.knowledgedict.com/tutorial/python-data-type.html 如果需要查看变量的类型。可以使用Python的内置类type。 例如…

【Python小游戏】通过这款专为程序员设计的《极限车神》小游戏,你的打字速度可以赢过专业录入员,这个秘密98%的人都不知道哦~(爆赞)

导语 哈喽,我是你们的木木子👸! 今天小编要为大家介绍一款小编自己用代码码出来的赛车风格的打字小游戏 取名暂定为《🚗极限车神🚗》打字小游戏。 这款Pygame小游戏在玩法上可以说十分创新,不仅能游戏还…

内存对齐计算方法(偏移量)

内存对齐简单来讲就是把一个数据存放到内存中,其内存的地址要与数据自己大小为整数倍。 处理器在执行指令去操作内存中的数据,这些数据通过地址来获取。 当一个数据所在的地址和它的大小对齐的时候,就说这个数据对齐了,否则就是没…

【GO】29.go-gin支持ssl/tls,即https示例

本文为演示采用自签名证书一.生成证书通过openssl工具生成证书1.1 安装opensslmacos通过brew安装brew install openssl1.2 生成跟证书私钥openssl genrsa -out ca.key 40961.3 准备配置文件vim ca.conf内容如下[ req ] default_bits 4096 distinguished_name req_disti…

光耦合器的定义与概述

光耦合器或光电耦合器是一种电子元件,基本上充当具有不同电压电平的两个独立电路之间的接口。光耦合器是可在输入和输出源之间提供电气隔离的常用元件。它是一个 6 引脚器件,可以有任意数量的光电探测器。 在这里,光源发出的光束作为输入和输…

设计模式第7式:适配器模式与外观模式

前言 前面讲的装饰者模式是将对象包装起来,并赋予新的职责。适配器模式同样是包装对象,但是目的不一样,它要让某些对象的接口看起来不像自己而是像别的东西。为什么要这样做,因为可以将类的接口转换成想要的接口。还会讲一个适配…

C++中的枚举与位域

枚举在传统 C中,枚举类型并非类型安全,枚举类型会被视作整数,则会让两种完全不同的枚举类型可以进行直接的比较(虽然编译器给出了检查,但并非所有),甚至同一个命名空间中的不同枚举类型的枚举值…

GPR后期功能整理

基金本子写得太困难了,学术水平不够,好的想法未想到好的科学问题,难以下笔。和龙工沟通后,得到了大量impulse radar的数据,后期需要进行分析,从而能让GPR智能识别走得更远。从数据解译角度,找到…

配置CMAKE编译环境:VSCODE + MinGW

一. MinGW安装 MinGW(Minimalist GNU For Windows)是个精简的Windows平台C/C、ADA及Fortran编译器,相比Cygwin而言,体积要小很多,使用较为方便。 MinGW最大的特点就是编译出来的可执行文件能够独立在Windows上运行。 MinGW的组成&#xff…

[Linux]进程替换

🥁作者: 华丞臧. 📕​​​​专栏:【LINUX】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文…