首页 > 其他分享 >STP协议原理

STP协议原理

时间:2023-04-12 16:22:12浏览次数:35  
标签:协议 BPDU 根桥 端口 MAC 交换机 STP 原理

STP 技术背景:

在网络中,为了防止单点故障的出现,会给链路和设备都做 冗余

image-20230412082835574

 

 

 

冗余带来环路,环路会导致:

- 广播风暴
- MAC地址表紊乱 【不稳定的MAC地址表/MAC地址表抖动】
- 交换机收到重复数据帧

 

image-20230412083358486

  • 广播风暴

image-20230412083312663

 

 

如何解决环路带来的问题?

STP:

既要有冗余,又要去除环路带来的危害------》 从逻辑上去 阻塞 一个端口。 当其余可用的链路出现故障的时候,能过自动化的启用这个被阻塞的端口,保证这个链路可用。

image-20230412085455252

 

 

STP 的终极目标就是要找到那个被阻塞的接口。

 

 

STP 定义 :

Spanning Tree Protocol ,IEEE 802.1d

找到阻塞的接口以后,最终网络就会出现一棵无环的树形。

image-20230412090029534

 

 

STP的工作机制

STP协议如何找到那个被阻塞的接口的? 选举

1 在所有的交换机中,选出 根网桥

2 在所有的非根交换机上,选出一个 根端口

3 选出 指定端口

4 最后剩下的,既没有被选上根端口,也没有被选上阻塞端口的那个端口,就把它 阻塞 掉。

选举的过程,就是交换机彼此之间 相互传递自己信息的过程, 去比较自己信息的 优劣。

 

 

STP 术语:

BPDU

桥协议数据单元 : Bridge Protocol Data Unit

STP的正常工作依赖于BPDU报文的泛洪.

 

image-20230412090737267

 

 

BPDU 报文各个字段说明:

image-20230412090956299

 

 

 

选举使用的参数和选举规则:

image-20230412091129971

 

BPDU参数详解:

  • Bridge ID

    • 桥ID(Bridge ID)是交换机的STP标示符,一共8个字节,由2个字节的优先级和6个字节的MAC地址构成:

      • 桥优先级缺省为32768,可以手工修改。

      • MAC地址为交换机的背板MAC。

      • 网络中Bridge ID最小的交换机将成为根桥。

  • Path Cost

    • 路径开销是一个端口量,是STP/RSTP协议用于选择链路的参考值。

    • 端口路径开销的默认值及取值范围由选定的路径开销算法决定,路径开销与端口的带宽成反比。

    • 华为网络设备支持的路径开销计算标准:802.1d-1998、802.1t、legacy,其中legacy为华为私有标准。华为交换机默认选择802.1t的标准。

    image-20230412150910800

    • COST值的计算(802.1t):

image-20230412150930237

 

 

  • Port ID

    • 端口ID (2字节)= 端口优先级(1字节)+ 端口编号(1字节)

    • 缺省优先级128,范围0-255,越小越优。

 

 

选举详细过程:

1 在所有的交换机中,选出 根网桥

一开始,所有的交换机都会认为自己是根桥,相互发送BPDU, 它们会在 DBPU的 Root-id这个字段,填写上自己的BID[优先级和MAC地址],

先比较优先级,如果优先级相同,才比较MAC地址,越小越优先。

当选举出根桥以后,其他的就是非根桥,这些非根桥,就不再自己主动产生BPDU了,而是转发根桥产生的BPDU。

BID: 优先级 + MAC地址,越小越优先
优先级:默认是32768, 可以被设定的范围是:0-65535,但是只能被设置为 4096的倍数。 越小越优先
MAC地址是唯一的,不能被修改。

image-20230412092315268

 

2 在所有的非根交换机上,选出一个根端口

每一台交换机,在自己的所有接口当中,只选出一个根端口。

 

比收到BPDU的 Cost值,【反过来就是:到达根桥的路径开销。】

image-20230412093205398

 

 

 

如果Cost相同,则比较收到的BPDU中 Sender-BID字段,越小越优先

image-20230412094313953

 

 

 

如果COST值也相同,则比较 Sender-BID:

Sender-PID : 发送BDPU报文的接口ID :
优先级+ 端口编号:
优先级默认是 128,范围是 0 - 255

 

image-20230412094904067

 

 

 

如果Sender PID也相同:

image-20230412095236277

比较 交换机自身接口的PID【local pid】,越小越优先。

 

 

3 选出 指定端口

0 一般情况下,根端口对面的,都是指定端口。

1 在其他链路上,选举出指定端口:

1.1 比较 所在交换机到达根桥的开销

1.2 如果所在交换机,达到根桥的路径开销相同,比较所在交换机的 BID

1.3 如果所在交换机的BID也相同,则比较 各自端口的 PID

 

 

4 最后剩下的,既没有被选上根端口,也没有被选上阻塞端口的那个端口,就把它 阻塞 掉。

 

验证接口选举的角色:

# 查看STP的简要信息
display stp brief

# Role
designate   指定

 

[SW4]display stp brief 
MSTID Port                       Role STP State     Protection
  0   GigabitEthernet0/0/1       DESI FORWARDING     NONE
  0   GigabitEthernet0/0/2       DESI FORWARDING     NONE
  0   GigabitEthernet0/0/3       DESI FORWARDING     NONE

 

 

根桥 负责向外发送BPDU,其他非根交换机的根端口来接收BPDU, 所有的指定端口负责转发BPDU。

 

 

STP的端口状态机

端口状态行为
Disable 端口不仅不转发BPDU报文,也不转发用户流量。端口为DOWN
Blocking 只能接收BPDU,不能转发BPDU。也不能学习MAC地址,也不能转发数据。
Listening(要经历15s进入下一个状态) 完成选举的阶段,能够接收和转发BPDU,不能学习MAC地址,不能转发数据。
Learning(要经历15s进入下一个状态) 学习MAC地址的阶段,能够接收和转发DPDU,能够学习MAC地址,不能转发数据。
Forwarding 数据转发状态,能够接收和转发BPDU,能够学习MAC地址,也能够转发数据。

 

 

STP 计时器

转发延时【Forward Delay】

15s, 就是 从 Listening到 Learning,和从Learning到Forwarding需要等待的时间。

报文的Hello时间。

及成为根桥的交换机,发送BPDU的周期:2s一次。

最大存活期:

Blocked的端口,接收BPDU,要进行储存的最大时间,如果经历10个hello周期,Blocked端口依然没有收到来自于根桥的BPDU,这个端口要进入到Listing状态,再次参加选举。

 

拓扑变更机制

参考PPT。

 

 

STP的基础配置:

  • 启用生成树:

    stp enable
    交换机会运行生成树, 默认开启的

    # 不启用生成树:
    undo stp enable

    [SW2]undo stp enable
    Warning: The global STP state will be changed. Continue? [Y/N]Y

     

  • STP mode

    华为 3700 5700 交换机都默认开启了 STP的功能。
    可以设置为三种形式
    stp: 传统的 生成树协议
    rstp: rapid stp: 快速生成树,对stp做了一些机制的优化【主要从收敛速度方面】
    mstp: multiple stp, 基于stp,支持多个vlan的STP选举。

    # 华为 x7系列交换机默认的STP模式为 MSTP
    [SW1]stp mode ?
    mstp Multiple Spanning Tree Protocol (MSTP) mode
    rstp Rapid Spanning Tree Protocol (RSTP) mode
    stp   Spanning Tree Protocol (STP) mode

     

  • 交换机的优先级

    [SW1]stp priority ?
    INTEGER<0-61440> Bridge priority, in steps of 4096
     
     # 可以设置交换机的优先级,调整STP根桥的选举,只能被设置为 4096的倍数
  • 根桥和次根桥

    如果网络中交换机设备过多,可以设置主根桥和次根桥,

    • 主根桥:优先级为0,选举的时候,必然会被选举为根桥

    • 次根桥:优先级设置为 4096, 当主根桥故障的时候,它会成为下一个根桥。

    # 设置交换机成为主根桥
    stp root primary

    image-20230412145300793

    # 设置交换机成为备根桥
    stp root secondary

    image-20230412145407320

 

 

说明:本文部分截图来自于朱仕耿老师所制作PPT,侵删。 

标签:协议,BPDU,根桥,端口,MAC,交换机,STP,原理
From: https://www.cnblogs.com/karl-goo/p/17310201.html

相关文章

  • BS结构的系统通信原理(没有涉及到java小程序)
    B/S结构的系统通信原理(没有涉及到java小程序)WEB系统的访问过程第一步:打开浏览器第二步:找到地址栏第三步:输入一个合法的网址第四步:回车第五步:在浏览器上会展示相应的结果关于域名:http://www.baidu.com/(网址)www.baidu.com是一个域名在浏览器地址上输入域名,回车之后......
  • TCP协议
    TCP协议的特点:TCP是面向连接(虚连接),是一种点对点的连接。每一条TCP只能有两个端点。TCP连接是可靠的交付,无差错、不丢失、不重复、按顺序到达。TCP提供全双工通信(双向通信)。因此发送方和接受方都会有发送缓存和接收缓存。发送缓存:准备发送的数据&已发送但尚未确认的数据。接......
  • Java中ThreadLocal的用法和原理
    用法隔离各个线程间的数据避免线程内每个方法都进行传参,线程内的所有方法都可以直接获取到ThreadLocal中管理的对象。packagecom.example.test1.service;importorg.springframework.scheduling.annotation.Async;importorg.springframework.stereotype.Component;imp......
  • Youpk 脱壳机脱壳原理分析
    Youpk是一个针对整体加固和Dex抽取加固壳的脱壳机主要是基于虚拟机的,也就是基于VA的脱壳机,相对FART出来的更晚一些,厂商针对少一些,脱壳位置相对更底层一些,还提供了Dex修复的工具,简直棒棒1.先分析整体脱壳的原理在ActivityThread的handleBindApplication中增加了代......
  • 第十二篇 手写原理代码 - 实现一个前端并发控制请求函数
    实现并发控制请求函数/***并发控制请求函数*@param{Array}urls请求的URL数组*@param{Number}max最大并发数*@param{Function}callback请求成功回调函数*/asyncfunctionconcurrentRequest(urls,max,callback){constlen=urls.length;//用......
  • 第十三篇 手写原理代码 - 实现 Promise
    当使用JavaScript进行异步编程时,我们往往需要面对回调地狱(callbackhell)、代码可读性低、错误处理困难等问题。为了解决这些问题,ECMAScript6(ES6)中引入了Promise。Promise是一种用于处理异步操作的对象,它是一个容器,保存着未来才会结束的事件(通常是一个异步操作),并提供了一组......
  • 第十一篇 手写原理代码 - 实现事件订阅中类
    javaScript中的订阅发布模式(也称为观察者模式)是一种设计模式,用于在对象之间的事件通信中。该模式由两部分构成:发布者和订阅者。发布者持有所有订阅者的引用,在某个事件发生时通知所有的订阅者,从而触发它们的相应行为。这种模式可以用于解耦发布者和订阅者之间的依赖关系,从而实......
  • 嵌入式软件架构设计协议定义
    在嵌入式软件架构设计中,协议定义是非常重要的。协议定义规定了通信双方之间的消息格式以及通信方式,保证了系统之间的可靠性、安全性和互操作性。以下是一些常见的嵌入式软件架构设计协议定义:UART协议:UART是一种简单的串行通信协议,适用于低速、短距离的通信。UART不需要外部时钟信号......
  • 第二篇 手写原理代码 - 函数【 函数防抖 、函数节流 】
    函数防抖和函数节流都是优化高频事件处理的JavaScript技术。它们可以限制函数的调用,在一定程度上减少计算、网络请求和提高响应速度,但它们的实现方式略有不同函数防抖:延迟执行函数,只有在事件停止后才会执行最后一次事件函数节流:定期执行函数,每隔一段时间执行一次通常情况下,......
  • 第四篇 手写原理代码 - 函数 【 实现 compose 函数 】
    JavaScript中的Compose函数用于组合一些函数,使得每个函数都接收上一个函数的返回值作为参数,并返回一个新的函数。可以使用这种方式把多个函数串起来,从而实现更复杂的逻辑Comopse函数是一个非常有用的工具,它可以帮助我们简化程序逻辑,实现代码复用,提高开发效率实现compose......