STP详解

2023-05-16

STP

STP全称为“生成树协议”(Spanning Tree Protocol),是一种网络协议,用于在交换机网络中防止网络回路产生,保证网络的稳定和可靠性。它通过在网络中选择一条主路径(树形结构),并阻塞其他可能形成回路的路径,以避免数据包在网络中产生无限循环,从而实现网络的高效和可靠传输。STP在交换机之间进行通信和协调,确保网络拓扑结构的稳定和可用性,并且能够自动适应网络拓扑结构的变化。STP是一种基于链路层的协议,广泛应用于各种类型的局域网和数据中心网络中。

文章目录

    • STP
      • 技术背景
      • 作用:
        • BPDU
      • 原理
      • 生成树算法 —— 选举根交换机
        • 生成树算法 —— 选举根端口
        • 生成树算法 —— 选举指定端口并阻塞备用端口
        • 端口状态(Port States):
      • cost(成本值)的计算公式是
      • 案例

技术背景

在一个有多个交换机或者桥接器的网络中,当存在多条路径连接同一组设备时,可能会发生环路,数据包会不断循环在这些路径上传递,导致网络堵塞或者数据包丢失。这时候STP就可以检测并消除环路,保证数据包能够正确地传输。

一个缺乏冗余性设计的网络:任何一个网络节点出现故障,会造成单链路故障、单设备故障,使整个网络瘫痪。

引入冗余性的同时也引入了二层环路:网络的冗余性增强了,但是却出现了二层环路。

常见的二层环路的原因有:错误地连接设备之间的互联线缆、配置错误等。

STP用于构建一个无环的网络拓扑结构,防止数据包在网络中出现环路并造成广播风暴。STP的主要作用是在网络中选择一个最优的路径,以避免广播风暴和冗余数据包的产生,同时提高网络的可靠性和稳定性。

假设有一个大公司,公司的总部和各个分部之间需要进行通信和数据传输。为了保证通信的可靠性和安全性,每个分部都建立了多个交换机,这些交换机通过不同的链路连接着不同的主机和服务器。

然而,由于链路的冗余和网络的复杂性,可能会出现链路环路的情况,也就是说,某些交换机之间会存在多条路径,而这些路径上又连接了多个交换机,形成了一个环路。这样一来,数据包就可能在环路上不停地循环,无法到达目的地,从而导致通信故障。

为了解决这个问题,公司决定使用 STP 技术来避免链路环路的出现。通过在交换机之间建立逻辑上的拓扑结构,STP 可以选择一条最佳的路径,同时屏蔽其他的路径,从而避免数据包在环路上不停地循环,保证了数据的可靠传输。这样一来,公司的通信和数据传输就更加可靠和高效了。

作用:

用于在网络中防止数据包在交换机之间形成环路,从而导致网络故障和拥塞。在一个具有冗余链路的网络中,如果不进行处理,数据包就会在多个路径上无限制地循环发送,最终导致网络崩溃。

STP的基本思想是通过选择一条最优路径,从而构建一棵树形结构,从而消除环路。在这个树形结构中,只有一条路径连接任何两个设备,这保证了数据包不会形成环路,从而确保网络的正常运行。

STP的实现需要交换机之间的通信,它们需要交换信息来建立树形结构并确定根桥(Root Bridge),即网络中所有桥中最顶层的桥。在这个过程中,每个桥都会根据所接收到的信息计算出最短路径,并将这个信息向其他桥广播。如果一个桥接收到了另一个桥发送的更优信息,它将更新它自己的信息,并向其他桥广播这个新的信息。

当所有桥都收到了足够的信息后,它们将会选择一个桥作为根桥,并选择一条路径到根桥的最短路径,其余的路径都将被阻止。这个过程称为“生成树算法”。通过STP,网络管理员可以更好地控制网络,减少故障和拥塞,并提高网络的可靠性和稳定性。

  • 生成树算法(Spanning Tree Algorithm)是一种网络算法,其目的是在一个连通图中选择一棵生成树,使得该生成树包含原图的所有节点,且不存在环。

    在计算机网络中,生成树算法通常用于构建一个树形拓扑结构,以避免网络中的环路和冗余链路。生成树算法的实现通常通过网络设备上的协议来完成,其中最常用的就是Spanning Tree Protocol(STP)。

    STP是一种生成树算法,它通过将所有节点的连接关系看作一个图来计算生成树。首先,在该图中选取一个节点作为根节点,然后依次对每个非根节点进行计算,找到连接该节点的链路中的最短路径,将该链路加入生成树。如果该链路导致生成树中出现了环路,则通过从生成树中删除一条链路来解决环路问题。这个过程一直重复,直到所有的非根节点都被加入了生成树中。

    STP算法的实现可以通过以下步骤来完成:

    1. 选定一个根节点:在网络中选定一个根节点,将其作为生成树的根。
    2. 计算最短路径:对于每个非根节点,计算连接该节点的链路中的最短路径,将该链路加入生成树。
    3. 检测环路:检测生成树中是否存在环路,如果存在,则通过删除一条链路来解决环路问题。
    4. 计算端口状态:根据生成树的计算结果,对网络设备上的端口进行状态计算,决定哪些端口需要开启或关闭。

    STP算法的实现可以保证网络中不存在环路和冗余链路,从而提高网络的可靠性和稳定性。

例子:

假设有一个局域网,其中有5台交换机,它们分别是Switch1、Switch2、Switch3、Switch4和Switch5,它们通过多条链路相互连接。为了保证数据的传输不出现环路,我们需要在交换机之间构建一棵生成树。假设在这个局域网中,Switch1是根交换机,那么生成树的过程如下:

  1. Switch1作为根交换机,将所有的端口都设为根端口,并发送BPDU(Bridge Protocol Data Unit)报文,通知其他交换机它是根交换机。
  2. Switch2、Switch3和Switch4收到BPDU报文后,比较自己的参数与BPDU报文的参数,发现Switch1的参数更优,因此它们都将自己的根端口设为与Switch1相连的端口,并将自己的非根端口设为指向根端口的端口,然后再向其他交换机发送BPDU报文,以便其他交换机更新生成树的信息。
  3. Switch5收到BPDU报文后,发现Switch1的参数更优,因此它将自己的根端口设为与Switch1相连的端口,并将自己的非根端口设为指向根端口的端口,然后向其他交换机发送BPDU报文。
  4. 在上述过程中,如果有多条链路具有相同的参数,那么根据STP算法中的端口优先级和端口号来决定哪条链路是根端口,哪些是指向根端口的非根端口。
  5. 经过以上步骤,生成树构建完成,其中Switch1作为根交换机,Switch2、Switch3、Switch4和Switch5成为根交换机的子节点。这样,在数据传输过程中,就可以通过生成树来保证数据只能按照一个方向流动,避免了出现环路和数据丢失等问题。

需要注意的是,STP有多个版本,包括STP、RSTP、MSTP等,它们都有不同的特点和用途。此外,由于STP需要进行广播和计算,因此它可能会对网络性能产生一定的影响,因此在设计网络时需要权衡STP的优点和缺点,选择适当的版本和配置。

BPDU

BPDU是指桥接协议数据单元(Bridge Protocol Data Unit),是在网络中由网桥或交换机发送的信息单元,用于进行交换机之间的通信,以实现网络拓扑的自动发现和动态调整。

当交换机启用STP协议(Spanning Tree Protocol)时,交换机会通过发送BPDU来交流网络拓扑信息,并利用这些信息计算生成一个树型的拓扑结构,从而避免出现网络环路而导致的广播风暴和网络故障。BPDU包含了发送者的标识、端口的标识、桥的标识和优先级、BPDU类型以及其他必要的信息。

交换机通过BPDU实现以下功能:

  1. 发现交换机之间的链路关系。
  2. 选举根交换机,确定整个网络的拓扑结构。
  3. 计算最短路径,防止出现环路。
  4. 监控链路状态,检测链路故障。
  5. 动态调整网络拓扑结构,实现快速恢复。

BPDU包括以下内容:

  1. Protocol Identifier(2 bytes):协议标识符,表示该BPDU是由哪种协议生成的,STP的标识符为0x0000。
  2. Protocol Version Identifier(1 byte):协议版本标识符,表示生成BPDU的STP版本,STP版本1为0x00,STP版本2为0x02。
  3. BPDU Type(1 byte):BPDU类型,包括配置BPDU(0x00)、TCN BPDU(Topology Change Notification,0x80)、RST BPDU(Rapid Spanning Tree,0x02)等。
  4. Flags(1 byte):标志位,包括TCA(Topology Change Acknowledgment)、Proposal、Port Role、Learning、Forwarding和Agreement等。
  5. Root Identifier(8 bytes):根桥的优先级和MAC地址,用于在网络中选举根桥。
  6. Root Path Cost(4 bytes):从发送BPDU的桥到根桥的路径代价。
  7. Bridge Identifier(8 bytes):发送BPDU的桥的优先级和MAC地址。
  8. Port Identifier(2 bytes):发送BPDU的端口编号。
  9. Message Age(2 bytes):BPDU已经存在的时间,以BPDU为单位计算,最大值为0x1FFF。
  10. Maximum Age(2 bytes):BPDU在网络中的最大生存时间,达到该时间BPDU会被认为是过期的,以BPDU为单位计算,最大值为0x1FFF。
  11. Hello Time(2 bytes):发送两个连续BPDU之间的时间间隔,以BPDU为单位计算,最大值为0x1FFF。
  12. Forward Delay(2 bytes):收到TCN BPDU后,等待网络稳定的时间,以BPDU为单位计算,最大值为0x1FFF。

原理

STP(Spanning Tree Protocol)是一种用于创建环路无环路网络拓扑结构的协议。其主要原理是通过选举一个根桥(root bridge)和将其他桥连接到这个根桥的方式来消除网络中的环路。

在STP中,每个桥的端口会被分为两种类型:根端口(root port)和指定端口(designated port)。其中,根端口是连接到根桥的端口,而指定端口是连接到其他桥的端口。通过选举根桥以及为每个桥分配根端口和指定端口,可以实现一个无环路的拓扑结构。

具体实现过程如下:

  1. 选举根桥:在网络中,所有的桥会通过发送BPDU(Bridge Protocol Data Unit)来选举根桥。BPDU包含了桥的ID和优先级等信息,其中ID是由优先级和MAC地址组成的,优先级越高的桥被选为根桥。选举完成后,根桥会向其他桥发送BPDU,其他桥也会将其接收到的BPDU向其他桥转发,以保持网络拓扑的更新和同步。
  2. 计算根端口和指定端口:每个桥根据收到的BPDU计算出到根桥的距离(path cost),距离越短的桥被选为根端口。同时,每个桥还需要选出一个或多个设计端口,这些设计端口会将数据帧转发到其他桥。
  3. 收敛过程:在网络拓扑发生变化时,STP会通过重新选举根桥和重新计算端口的方式重新构建拓扑结构,直到网络达到一个无环路的状态。这个过程被称为收敛过程,需要一定的时间来完成。

STP的主要作用是保证网络中不会出现环路,从而避免数据包的不必要循环和丢失。同时,STP还能够自动适应网络拓扑的变化,确保网络拓扑结构的稳定和可靠。

生成树算法 —— 选举根交换机

  1. 根交换机的选举条件:网桥ID(BID)最小者当选。
  2. 网桥ID(BID)由以下两部分构成:
    • 优先级
      • 范围 0 - 61440
      • 步长 4096
      • 默认值 32768
    • 交换机的基本MAC地址
  3. 网桥ID(BID)的比较方法
    • 优先级取值越小,则网桥ID(BID)就越小。

生成树算法 —— 选举根端口

  1. 在一个非根交换机上选举出一个根端口RP(Root Port)。并且只能是一个。
  2. 根端口RP用于接收根交换机发来的BPDU。也用于转发普通流量。
  3. 根端口RP的选举条件:
    • BPDU接收端口到根交换机的路径成本最小。
    • 对端的网桥ID(BID)最小。
    • 对端的端口ID(PID)最小。
      • 优先级
        • 范围 0 - 240
        • 步长 16
        • 默认值:128
      • 端口号
  • 链路带宽成本值
    4MB/s250
    10MB/s100
    16MB/s62
    100MB/s19
    1GB/s4
    10GB/s2

生成树算法 —— 选举指定端口并阻塞备用端口

  1. 在每个段上选出一个指定端口DP(Designated Port)并且只能是一个。
  2. 指定端口DP用于转发根交换机发来的BPDU,也用来转发普通流量。
  3. 指定端口DP的选举条件:
    • 根交换机的所有端口都是指定端口DP。
    • 根端口的对端端口一定是指定端口DP。
    • BPDU转发端口到根交换机的路径成本最小。
    • 本端的网桥ID(BID)最小。
  4. 剩余端口成为备用端口AP(Alternate Port),将它们阻塞。

端口状态(Port States):

端口状态是指在一个交换机的端口与跟桥之间的关系。STP确保在一个桥接网络中只有一条活动的路径,从而避免了环路问题。端口状态共有5种:

  1. Disabled(禁用状态):禁用状态的端口不会参与 STP 的计算,处于物理层断开状态。
  2. Blocking(阻塞状态):端口接收到 BPDU (Bridge Protocol Data Unit) 数据帧后,端口进入阻塞状态,不会转发数据,但会继续监听网络中的 BPDU,阻止环路的产生。
  3. Listening(监听状态):端口接收到 BPDU 数据帧后,进入监听状态。此时,端口仍然不会转发数据,但会继续监听 BPDU,此状态通常持续 15 秒。
  4. Learning(学习状态):端口在监听状态一段时间后,进入学习状态,开始学习与之相连的设备 MAC 地址,但不会转发数据。
  5. Forwarding(转发状态):学习完毕后,端口进入转发状态,开始转发数据。在这个状态下,端口将正常工作,将数据帧从一个端口转发到另一个端口。
  • 在阻塞状态下,端口只能接收bpdu报文。从这种状态转变可能需要20秒;
  • 在监听状态下,交换机判断是否有其他路径到达根桥。向前延迟,持续
    15秒。监听状态:用户数据不被转发,MAC地址不被学习;
  • 在学习状态下,用户数据不会被转发,但MAC地址会从看到的任何流量
    中学习。学习状态持续15秒,也称为前向延迟;
  • 转发状态转发用户数据,继续学习MAC地址。bpdu仍在处理;

cost(成本值)的计算公式是

cost = 200000 Kbps / port_speed

因此,可以看出 Cisco 交换机默认的 cost 值是由带宽决定的,而带宽越大,成本值越小,这也符合了生成树算法的本质,即选择最短路径。同时,由于交换机的速度越来越快,所以在一些新型的 Cisco 交换机中,可能会将默认的 reference bandwidth 值提高到 100Gbps 或更高的数值,以适应新的硬件环境。

其中,port_speed是指端口速率。对于各种常见的端口速率,对应的成本值如下:

  1. 端口号
链路带宽成本值
4MB/s250
10MB/s100
16MB/s62
100MB/s19
1GB/s4
10GB/s2

案例

案例1:
在这里插入图片描述
案例2:
在这里插入图片描述
案例3:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STP详解 的相关文章

  • 二叉搜索树的第K大节点(leetcode每日打卡)

    目录 题解 代码 题解 本文解法基于此性质 xff1a 二叉搜索树的中序遍历为 递增序列 根据以上性质 xff0c 易得二叉搜索树的 中序遍历倒序 为 递减序列 因此 xff0c 求 二叉搜索树第 k 大的节点 可转化为求 此树的中序遍历倒
  • 【java】小票:设计一张奶茶店的小票

    一 小票如图所示 二 代码 xff08 1 xff09 Order类 package case1 import java util Calendar public class Order private static int count 6
  • Linux网络设置

    目录 一查看网络接口信息ifconfig 二 xff0c 查看看主机名称hostname 三 xff0c 查看路由条目route 四 xff0c 查看网络连接情况netstat 五 xff0c 获取socket统计信息ss 六 xff0c
  • 【python】本地音乐播放器(PyQt5界面版)

    大家好 xff0c 近期又学习了新内容 xff0c 所以迫不及待想分享出来 关于python Gui编写的界面版的音乐播放器 xff0c 能实现本地音乐的播放 目录 前期准备 设计界面 功能需求 播放 暂停 播放模式 时长显示 主窗体 打包
  • 投资 GameFi 前需知道的事?

    April 2022 Simon Data Source Footprint Analytics 2022 年的 GameFi 延续了去年的火热 xff0c 截止到 4 月 Footprint Analytics 统计到的 GameFi 项
  • agt-get install过程中发现依赖Depends错误的解决办法

    ubuntu在sudo apt get install g 43 43 时报错 xff1a Reading package lists Done Building dependency tree Reading state informat
  • windows自带的压缩/解压缩(zip/unzip)功能-Powershell 的应用之一

    压缩文件经常碰到 xff0c 一般可以下载免费的unzip软件 xff0c 但是要么很多广告 xff0c 要么用一段时间就要购买 其实windows自动的Powershell 就可以做压缩和解压的 Powershell 是微软用于计算机管理
  • 服务器应用与安全—— OpenEuler欧拉

    OpenEuler源于华为EulerOS操作系统 xff0c 通过社区合作 xff0c 打造创新平台 xff0c 构建支持多处理架构 统一和开放的操作系统 xff0c 推动软硬件应用生态繁荣发展 最新版 xff1a OpenEuler 21

随机推荐

  • 什么是人工智能?(深度好文,带你初步了解当下最火的AI)一定要看完!

    1 基本概念 定义 机器学习是一门研究如何通过计算手段 xff0c 利用经验提升自身性能的学科 人工智能 机器学习与深度学习三者间的关系如图1 1所示 1 1 人工智能定义 努力将通常由人类完成的智力任务自动化 1 2 机器学习定义 是一种
  • Java中Cookie详解

    最近复习到了Cookie和Session xff0c 这里系统的讲解一下Cookie和Session 在学习这个之前 xff0c 我们需要了解 xff0c 会话的定义 会话是指某一个人打开浏览器 xff0c 访问多个页面 xff0c 然后关
  • 关于ffmpeg,av_read_frame函数返回值小于0的错误

    自己写了一段将视频切成图片的程序 xff0c 在机器上运行 xff0c 发现每次切到10 就结束了 xff0c 截取av read frame返回值 xff0c 发现返回值是AVERROR EOF就是 541478725 xff0c 因为之
  • 在配置log4j.properties中出现问题 ERROR Could not find value for key log4j.appender.Console

    为了测试所有文件是否写好 xff0c 写了一个测试类运行程序 xff0c 报了几行的错误 xff0c 但是还是成功的输出的了数据库的东西 这里是需要在logj4f的配置文件中加上一些东西 xff0c 代码如下 xff1a 解决报错log4j
  • springboot项目启动报错:找不到或无法加载主类【已解决】

    在配 置完一个完整的springboot项目后 xff0c 需要测试是否正确配置 xff0c 出现未加载或未找到加载类的情况 xff0c 可能有以下原因 xff1a 首先需要观察启动类在项目中的位置 xff0c 确保启动类与其他层的包在同一
  • 对于 nested exception is java.net.ConnectException问题【已解决】

    当在springcloud遇到这类问题时 xff0c 需要排查控制器中的路径是否写对 xff0c 由于我报错的项目是一个模拟客户端访问查询业务功能 xff0c 下面是我的源代码 xff08 报错 xff09 xff1a public sta
  • 如何搭建一个基本的Spring项目【Maven】

    相信很多朋友在刚学习Spring时 xff0c 都会存在这个疑问 xff0c 如何正确搭建一个Spring项目 xff0c 以及中间的许多报错无法解决 xff0c 大家可以跟着我一起试一下 xff0c 有问题的朋友评论区见 1 Spring
  • 使用注解开发时需要添加包扫描器【出现问题的可以点进来看看】

    很多第一次接触Spring注解开发的同学 xff0c 在使用注解后容易报错 xff0c 那就很可能是没有在配置文件中加入包扫描器 那么可以往下看 xff0c 以下面这个简单的例子来学习 下面是一个简单的实体类 xff0c 通过Compone
  • 如何使用Autowried,以及与Resource的区别

    在使用注解开发的过程中 xff0c 有个经常会见面的朋友 Autowried xff08 自动装配 xff09 xff0c 刚接触的朋友肯定不能理解自动装配这个词的含义 简单解释一下 xff0c 自动装配将通过已知的类型自动分配对象 xff
  • SpringMVC遇到的有关实体类的报错

    今天在复习SpringMVC数据传参的时候 xff0c 出现了一个非常小的问题 xff0c 主要是为了实验如何将一个对象作为参数传递 xff0c 我创建了两个类 xff0c 但是由于被传递的对象的那个类没有用public 修饰 xff0c
  • app:checkDebugDuplicateClasses错误

    此异常完整表述为 org gradle api tasks TaskExecutionException Execution failed for task 39 app checkDebugDuplicateClasses 39 这类问题
  • LAMP网站架构

    一 LAMP网站架构 1 1 基本定义 LAMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写 Linux xff0c 操作系统Apache xff0c 网页服务器 MariaDB或MySQL xff0c 数据库管理系
  • pancakeswap薄饼添加流动性后实现永久锁仓

    添加完流动性后 xff0c 永久锁仓就是放弃对资金池的控制 xff0c 就是放弃了对流动性的所有权 xff0c 没有办法撤池子了 现在锁仓分为2种 xff0c 一个是丢黑洞永久锁仓 xff0c 另外一种是短期锁仓 xff0c 锁在智能合约中
  • ubuntu14.04 root用户登录方法

    如果你是刚刚装完ubuntu14 04系统 xff0c 你进去后是以普通用户登录的 xff0c 很多操作并没有权限 xff0c 要想获得全部权限可以以root用户登录 1 先解除root锁定 xff0c 为root用户设置密码 打开终端输入
  • pycharm终端常用指令

    在调试ppddle的时候下载的coco数据集过大 xff0c 一时没有注意不急的如何终止 xff0c 所以转载一个记一下 Terminal快捷键 功能 Tab 自动补全 Ctrl 43 a 光标移动到开始位置 Ctrl 43 e 光标移动到
  • 解决Mac电脑因kotlin插件禁用导致的Android Studio无法打开问题

    解决这个办法需要将Android Studio目录下的disabled plugins txt文档中的org jetbrains kotlin删除即可 文件位置 Users mac Library Application Support G
  • 实现生产者消费者进程(Java)

    目录 前言 一 实验要求 二 步骤 1 主类 2 消费者 3 生产者 4 超市 前言 消费者问题是操作系统中典型的进程同步互斥问题 xff0c xff08 英语 xff1a Producer Consumer problem xff09 x
  • python | Pandas库数据预处理-缺失值篇:info()、isnull()、dropna()、fillna()函数

    相关文章 python Pandas库导入Excel数据 xff08 xlsx格式文件 xff09 函数 xff1a read excel python Pandas库导入csv格式文件函数 xff1a read excel 目录 数据源
  • vue3学习笔记 2023

    vue文件 34 组件 34 是一种封装的思想 把相关业务逻辑的 34 js css html 34 都封装到一起 当需要调用 34 组件 34 的时候 只需要在html中期望的位置插入对应的 34 标签 34 即可 比如封装了一个 34
  • STP详解

    STP STP全称为 生成树协议 xff08 Spanning Tree Protocol xff09 xff0c 是一种网络协议 xff0c 用于在交换机网络中防止网络回路产生 xff0c 保证网络的稳定和可靠性 它通过在网络中选择一条主