STP(生成树协议)

STP(生成树协议)

生成树协议原理

​在二层交换网络中,逻辑的阻塞部分接口,实现从根节点到所有节点唯一的路径的生成,成为一个没有环路的拓扑。当最佳路径数显故障时,个别被阻塞的接口将被打开,形成备份链路

冗余的方式有

设备冗余,线路冗余,网关冗余,UPS冗余

没有STP协议时,二层交换机存在的一些问题

在这里插入图片描述

​ 当PC1首次想访问PC2时,LSW2会接收到一个请求未知MAC地址的数据帧;二层交换机会洪泛该数据帧(除了接收到该数据帧的接口),此时会出现两种情况(目的MAC地址的设备没有及时回应):

顺时针:当LSW1接收到该洪泛的数据帧时,因为LSW1的MAC地址表内也没有该MAC地址,因此也会洪泛该数据帧;LSW3接收到洪泛的数据帧时,同样也会洪泛出去,导致LSW2会再次接收到相同的数据帧,以此反复

逆时针:当LSW3接收到该洪泛的数据帧时,因为LSW3的MAC地址表内也没有该MAC地址,因此也会洪泛该数据帧;LSW1接收到洪泛的数据帧时,同样也会洪泛出去,导致LSW2会再次接收到相同的数据帧,以此反复

  1. 广播风暴

    ​ 广播帧在二层环路中形成逆时针和顺时针转动的两层环路,并且无限循环,最终导致设备宕机,网络瘫痪

  2. MAC地址表的翻摆(MAC地址表漂移)

    ​ 同一个数据帧,顺时针接收后将记录MAC地址与接口的对应关系;之后,逆时针方向再次接收到相同的数据帧,因此会再次修改MAC地址与接口的对应关系,如此循环,导致MAC地址表内容一直在变动

  3. 多重复数据帧

    ​ PC2会接收到多条相同的数据帧信息

802.1D生成树

最基础的三种解决环路的方案:

802.1D:是由 IEEE组织 颁布的公有协议 ----标准的STP协议

RSTP(802.1W):作为802.1D的补充

MSTP(802.1S):最常用的协议 ----可应用于跨运营商的网络

STP基本概念

桥ID

  1. 桥ID一共8字节,包含16bit的桥优先级和48bit的桥MAC地址,其中桥优先级占据桥ID的高16bit位
  2. 每一台运行STP协议的交换机都拥有的唯一的BID

根桥(root)

​STP的主要作用之一就是在整个交换网络计算出一颗无环的树,而想要计算出该树,则需要先行确定树根的位置,即根网桥的位置

选举规则:网络中拥有最小桥ID的交换机将成为根桥

​ 当人工未干预的情况下,MAC地址小的二层交换机将成为根桥

缺省情况下,桥优先级为32768 ----该数值可以进行修改,修改的范围为0-61440,且必须是4096的倍数

在这里插入图片描述

开销cost与根路径开销RPC

每一个激活了STP的接口都维护着一个cost值,接口的cost主要用于计算RPC,也就是计算到达根的开销

在这里插入图片描述

华为设备默认情况下使用 IEEE 802.1T 标准

​ 在进行修改缺省COST时,应全网修改一致

接口ID(PID)

​ 每一个运行了STP协议的交换机的接口会存在一个PID值,来标识该接口信息

接口ID长度是16bit,高4bit是接口优先级,低12bit是接口编号

接口优先级默认为128,该数值可以进行修改,修改的范围为0-240,必须为16的倍数

STP报文(BPDU)

BPDU:网桥协议数据单元

分为两大类:

  1. 配置BPDU
  2. TCN BPDU

​BPDU载荷被直接封装在以太网数据帧中,数据帧的目的MAC地址是组播MAC地址:0180-c200-0000

配置BPDU报文

  1. 在交换网络初始化过程中,每台交换机都从自己激活了STP的接口向外发送配置BPDU
  2. 当STP收敛完成后,只有根网桥才会周期性发送配置BPDU,缺省为2秒。非根网桥会在自己接收到根网桥发送的配置BPDU以后,使用触发更新方式,将自己的配置BPDU发送出去

BPDU报文格式

在这里插入图片描述

  1. 协议ID ----PID

    ​ 对于STP而言,该字段的值总为0

  2. 协议版本ID ----PVI

    ​ stp协议:0

    ​ rstp协议:2

    ​ mstp协议:3

  3. BPDU类型字段 ----BPDU Type

    ​ 指示本BPDU的类型,若值为0x00,则表示本报文为配置BPDU;若值为0x80,则为TCN BPDU

  4. 标志字段 ----Flags

    ​ STP仅仅使用了最高位(TCA—拓扑变更确认标记)和最低位(TC ----拓扑变更标记)

  5. 根网桥的桥ID ----Root ID

    ​ 代表根桥

  6. 根路径开销 ----RPC

    ​ 到达根网桥的STP Cost

  7. BPDU发送桥的ID(BID) ----Bridge ID

    ​ 代表该BPDU报文是由哪一个设备发送的

  8. 接口ID值(PID) ----PortID

    ​ BPDU发送网桥的接口ID(优先级+接口号

  9. 消息寿命 ----Message Age

    1. 与TTL值相同,单位为设备数量,代表BPDU从发出到现在所经过的时间
    2. 初始值为0,每经过一台交换机,该数值加1
    3. Max Hop参数 ----最大消息寿命,默认值为20
  10. 生存时间 ----Max Age
    ​ 最大寿命,当一段时间未收到任何BPDU,生存期到达最大寿命时,网桥会认为该接口连接的链路发生故障。默认20s

  11. Hello Time
    根网桥连续发送的BPDU之间的时间间隔,默认2s

  12. Forward Delay
    转发延迟,在侦听和学习状态所停留的时间间隔,默认15s

TCN BPDU报文

该报文用于在网络拓扑发生变化时,向根桥通知变化的发生。该报文是为了修改全网交换机的MAC地址表信息而存在的,而非是为了改变STP的生成树结构

在这里插入图片描述

  1. 本地交换链路发生故障后,STP将重新收敛,为了加快刷新全网交换机的MAC地址表,故障交换机会向本地其余运行了STP的接口发送TCN BPDU报文
  2. 邻居交换机收到TCN BPDU报文后,将回复一个TCA标记为1的配置BPDU报文,用于可靠性传输
    1. 该过程会一直持续到根网桥接收到TCN BPDU报文
    2. 注意:非根网桥不能主动发送配置BPDU,故需要等待接收到根网桥的BPDU后,将TCA标记位置为1,转发给故障设备
  3. 之后该TCN BPDU会一直转发到根网桥处,由根网桥下发TC标记位为1的配置BPDU(只有根可以设置该标记位),逐级下发给所有交换机
  4. 所有交换机在收到TC标记位为1的配置BPDU后,会立即将MAC地址表的老化时间临时性修改为15秒(转发延迟),使得MAC地址表能够提前刷新

STP角色选举

在这里插入图片描述

根桥选举(RB)
  1. 选举范围:整个交换网络

  2. 一个交换网络有且只有一个根网桥

  3. 选择最小BID:先比较桥优先级,后比较桥MAC地址

  4. 根网桥的地位是具有可抢占性的

    ​ 可修改其设备优先级,使其成为根桥

根接口选举

根接口:是非根网桥上所有接口中收到最优BPDU报文的接口

  1. 选举范围:每一个非根网桥设备

    ​ 每一个非根网桥设备上有且只有一个根接口

最优BPDU的比较原则
  1. 选择具有最小桥ID的BPDU ----这一步,实际上是在选举根网桥(通过对比BID参数)
  2. 比较入方向BPDU的RPC数值(RPC:根路径开销值),选择收到最小的RPC的接口作为最优BPDU报文
  3. 如果交换机接收到的多个BPDU报文的RPC相同,则比较对端设备的BID,选择具有较小BID参数的设备所对应的接口作为最优BPDU报文
  4. 如果存在对端设备的BID相同,则比较对端的PID值,选择较小的PID所在接口的对应接口作为最优BPDU报文
  5. 若对端PID相同,则比较本端接收到BPDU报文的接口的PID值,选择较小的接口作为最优BPDU报文
指定接口选举
  1. 选举范围:两台交换机之间的物理链路上选举一个指定接口(有且只有一个
  2. 该接口是该物理链路内到达根网桥最优的接口,也就是接收到最优BPDU的接口
  3. 对于非根桥而言,其所有接口中收到最优BPDU的接口将成为该设备的根接口,随后,该非根桥使用自己接收到的最优BPDU,为本设备上的其他接口各自计算一个BPDU报文
    1. 然后使用计算出的BPDU报文与该接口上所接收到的BPDU报文进行对比,选择出最优的BPDU报文,那么最优BPDU所在的接口为指定接口

一般而言,根网桥的所有接口都是指定接口;在存在跟接口的链路上,对端必然是指定接口

非指定接口选举

​ 所有的不是根端口和指定端口都被称为非指定端口。而非指定端口会被交换机进行逻辑阻塞

被阻塞的接口既不会接收也不会转发业务数据,且该接口不会发送BPDU报文,但是可以接收BPDU报文(业务数据:除了BPDU报文外的所有流量)

STP的工作过程

  1. STP交换机初始化启动后,都会认为自己是根网桥,并在发送给其它交换机的配置BPDU中宣告自己为根桥。因此,此时的BPDU中的根桥ID为各自设备的网桥ID数值
    1. 当交换机收到网络中其他设备发来的配置BPDU后,会对比BPDU报文中的根桥ID字段和自己的BID
    2. 交换机不断交互BPDU报文,同时对BID进行对比,最终选举一台BID最小的交换机作为根网桥,其他为非根网桥
    3. 根网桥的角色是可抢占的
  2. 选举完根网桥后,根网桥仍然会持续性发送配置BPDU报文,起到保活的效果。而其他非根网桥将持续不断的收到根网桥发送的BPDU,并计算自己的BPDU报文从其他指定端口发送出去
  3. 每个交换机根据从自己不同接口收到的BPDU报文中选择出最优的BPDU,从而选举根端口(以下为比较参数的顺序):
    1. 比较RPC(根路径开销值)
    2. 比较对端BID(桥ID值:优先级 + MAC地址)
    3. 比较对端PID(接口ID值:优先级 + 接口号)
    4. 比较本地PID
  4. 每台交换机的每一条链路选举指定端口(以下为比较参数的顺序):
    1. 比较RPC
    2. 比较对端BID
    3. 比较两端PID
  5. 在确定了根端口和指定端口之后,交换机上所有剩余的端口都被称为非指定端口。并且会在逻辑上阻塞所有的非指定端口
    1. 当非指定端口被阻塞后,生成STP树
    2. 被阻塞的接口既不会接收也不会转发业务数据,且该接口不会发送BPDU报文,但是可以接收BPDU报文

在交换网络中,一般将网关所在地、流量汇聚地点以及STP根网桥三点合并在一起

STP的接口状态

在这里插入图片描述

  1. 禁用状态 ----Disable
    1. 接口关闭状态
    2. 接口禁用生成树协议
  2. 阻塞状态 ----Blocking
    1. 是生成树协议激活后进入的第一个状态
    2. 该状态会停留一个最大老化时间(20秒)。然后进入到下一个状态
    3. 仅仅可以接收BPDU报文
  3. 侦听状态 ----Listening
    1. 可以收发BPDU报文。进行STP角色选举过程
    2. 该状态会选举出根网桥,根接口,指定接口和非指定接口
    3. 停留一个**转发延迟时间(15秒)**后,进入下一个状态
    4. 只有根端口和指定端口会进入到学习状态,而非指定端口会退回到阻塞状态
  4. 学习状态 ----Learning
    1. 接收业务流量,并学习MAC地址信息 ----为了减少单播帧的洪泛
    2. 停留一个**转发延迟时间(15秒)**后,进入下一个状态
  5. 转发状态 ----Forwarding
    1. 可以正常接收和转发业务数据和BPDU报文
    2. 只有根端口和指定端口可以进入该状态

STP的收敛时间

基于计时器进行收敛

  1. 首次收敛 ----50S(阻塞20S + 2*转发延迟15S)

  2. 根桥故障 ----50S(最大寿命20S + 2*转发延迟15S)

  3. 直连链路故障 ----30S(2*转发延迟15S)

  4. 非直连链路故障 ----50S(最大寿命20S + 2*转发延迟15S)

STP的相关配置

在这里插入图片描述

与STP有关的命令

启动STP协议,华为默认开启该协议
[sw1]stp enable修改STP的工作模式,默认工作模式为MSTP
[sw1]stp mode stp查看本地设备的MAC地址
[sw1]display bridge mac-address 查看某一个接口的STP协议的运行状况
[sw1]display stp interface GigabitEthernet 0/0/3查看STP协议运行状况
[sw1]display stp查看STP接口状态
[sw1]display stp brief
[sw1]display stp ----查看STP协议允许状况需注意查看的为下图的公共区域信息

在这里插入图片描述

[sw1]display stp brief ----查看STP接口状态
DESI:指定接口
ROOT:根端口
ALTE:备份端口

在这里插入图片描述

配置STP的相关命令

修改交换机的优先级,干涉其选举根桥:

[sw1]stp root primary ----将交换机设定为根网桥,其本质是将优先级修改为0
[sw2]stp root secondary ----将交换机设定为备份根网桥,其本质是将优先级修改为4096
[sw3]stp priority 8192 ----将交换机优先级设定为8192

修改启用STP协议后的设备内其参数的相关命令

[sw1-GigabitEthernet0/0/1]stp port priority 数值(0-240)修改接口优先级,干涉PID数值[sw1]stp pathcost-standard dot1d/dot1t/legacy修改本地开销值计算方法类型,全网均需要修改dot1d-1998  IEEE 802.1D-1998dot1t       IEEE 802.1Tlegacy      Legacy[sw1-GigabitEthernet0/0/1]stp cost 数值(1-200000000)直接修改接口cost值,该参数可以修改的范围是根据开销值计算类型而定

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

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

相关文章

Slate基础使用说明

目录 Slate基础使用说明 1. 简单教程 2. 要点说明 2.1 TCommands以及TCommands基类 2.2 FUICommandInfo 2.3 FUICommandList 2.4 FUIAction 2.5 UICommand 3. 代码源码 4. 工具使用 4.1 Display Ul Extension Points 4. 参考文章 Slate基础使用说明 1.…

linux逻辑卷LVM

创建LVMVG管理LV扩容 6.2.6 逻辑卷LVM LVM是Logical Volume Manager 的简称,译为逻辑卷管理,它是Linux下对硬盘分区的一种管理机制。LVM适合于管理大存储设备,并允许用户动态调整文件系统的大小。此外,LVM的快照功能可以帮助我们快…

算法leetcode|92. 反转链表 II(rust重拳出击)

文章目录 92. 反转链表 II:样例 1:样例 2:提示:进阶: 分析:题解:rust:go:c:python:java: 92. 反转链表 II: 给你单链表的…

期待已久:K8S终于迎来交换内存Beta支持!

关注【云原生百宝箱】公众号,获取更多云原生消息 Kubernetes 1.22 版本开始支持在 Linux 节点上使用交换内存的 Alpha 特性,而在 1.28 版本中升级为 Beta 版本并进行了许多改进。之前版本的 Kubernetes 不支持 Linux 系统上的交换内存,但随着…

微信小程序、mpvue性能测试与体验

最近一直在折腾mpvue写的微信小程序的性能优化,分享下实战的过程。 先上个优化前后的图: 可以看到打包后的代码量从 813KB减少到 387KB,Audits体验评分从 B到 A,效果还是比较明显的。其实这个指标说明不了什么,而且轻易就可以做…

Pytorch深度强化学习1-6:详解时序差分强化学习(SARSA、Q-Learning算法)

目录 0 专栏介绍1 时序差分强化学习2 策略评估原理3 策略改进原理3.1 SARSA算法3.2 Q-Learning算法 0 专栏介绍 本专栏重点介绍强化学习技术的数学原理,并且采用Pytorch框架对常见的强化学习算法、案例进行实现,帮助读者理解并快速上手开发。同时&#…

网络层重点协议——IP协议详解

✏️✏️✏️今天给大家分享的是网络层的重点协议——IP协议。 清风的CSDN博客 🛩️🛩️🛩️希望我的文章能对你有所帮助,有不足的地方还请各位看官多多指教,大家一起学习交流! ✈️✈️✈️动动你们发财的…

UIKit-AVCapture(创建一个简单的摄像头demo)

AVCaptureVideoPreviewLayer 用于显示摄像头采集到的实时视频预览,可以直接添加到视图层次结构中。 AVCaptureVideoPreviewLayer可以嵌入 AVCaptureSession 处理摄像头捕获的数据封装后给屏幕 AVCaptureConnection 用于管理捕获会话中的数据流连接,…

Cocos Creator:坐标系

Cocos Creator:坐标系 坐标系节点位置坐标转换锚点缩放和旋转总结 在 Cocos Creator 3.8 中,节点坐标系统是游戏开发中的关键概念。它帮助开发者定位和排列场景中的各种元素。以下是关于节点坐标的使用详解: 坐标系 Cocos Creator 使用两种…

【数据结构】栈和队列超详解!(Stack Queue)

文章目录 前言一、栈1、栈的基本概念2、栈的实现(数组实现)3、栈的基本操作3.1 栈的结构设计3.2 栈常见的基本函数接口 4、栈的实现4.1 初始化栈4.2 栈的销毁4.3 入栈4.4 出栈4.5 判空4.6 长度4.7 获取栈顶元素 完整代码Stack.hStack.cTest.c 二、队列1、…

iOS ApplePay 支付汇总一二

一、前端发起支付的参考例子: import UIKit import MMKV import StoreKit import Alamofire import SVProgressHUD/// ApplePay 工具类 class ApplePayUtils : NSObject {static let shareInstance ApplePayUtils.init()/// 丢单存储集Key,验证成功从集合中移除le…

建行账单导出的手工操作

文章目录 建行账单导出的手工操作概述笔记END 建行账单导出的手工操作 概述 自己的电商账单分析程序初步搞定. 支付宝/微信/京东导出的账单都是csv格式. 我开始做的时候, 建行的账单选的是xls(旧版excel)格式. 没注意看. 程序中用的excel库操作, 只能处理.xlsx格式(新版exce…