当前位置: 首页 > news >正文

第八章,STP(生成树协议)

image-20240527184247445

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

MAC地址表的翻摆(漂移)----同一个数据帧,顺时针接收后将记录MAC地址及接口的对应信息,之后,逆时针还会再更改一次MAC地址表,如果循环,导致MAC地址表内容一直在变化

多重复数据帧

STP是一个经典的、开放的解决以太网二层环路问题的技术

802.1D生成树协议

802.1D----标准STP---IEEE
802.1W----RSTP----快速生成树
802.1S----MSTP----多生成树协议

PVST\PVST+-----思科
VBST---华为

基本概念

桥ID---每一个运行STP的交换机都拥有的唯一的一个桥ID。一共8字节,2字节的桥优先级+6字节的桥MAC地址

根桥----指的就是通过STP算法计算出的STP树的根节点。

根桥式STP算法中最重要的一个参考点,STP协议在开始工作后,第一件事就是在网络中选举出根桥设备

在交换网络中,根桥有且只能有一个

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

华为交换机缺省的桥优先级=32768。该参数可以修改,但是必须修改为4096的倍数

image-20230414143208956

开销(Cost)与根路径开销(RPC)

STP的接口开销值是根据不同的开销值算法、接口速率和接口工作模式共同决定。

image-20230414145904140

缺省情况下,使用IEEE 802.1t算法需要保证交换网络中所有STP设备使用一致的计算方法

跟路径开销---RPC----指的是任意一个节点到达根桥节点的总开销

接口ID

交换机使用接口ID来标识每一个接口,接口ID主要用来在特定场景下选举角色。

16bit组成,4bit的接口优先级+12bit的接口编号

默认情况下,接口优先级为128;只能修改为16的倍数

STP的报文---BPDU

网桥协议数据单元

  • 配置BPDU

  • TCN BPDU --- 拓扑发生变更时,进行通知的报文

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

配置BPDU

每台交换机在初始化的过程中,都会从自己激活了STP协议的接口向外发送配置BPDU

当STP协议收敛完成后,只有根桥才会周期性发送配置BPDU(2S)非根网桥会在收到上游设备传递来的配置BPDU后,触发更新将自己的BPDU报文向下游设备通告

image-20221019174257022

PVI---协议版本ID
    STP----0
    RSTP---2
    MSTP---3

BPDU Type----BPDU类型
    0x00---STP的配置BPDU
    0x80---STP的TCN BPDU
    0x02---RSTP\MSTP
    
标记位
    最高位:TCA---拓扑变更确认标记
    最低位:TC----拓扑变更标记
    
消息寿命---代表该BPDU从发出到现在经过多少台设备
    单位:设备数量
    初始值=0,每经过一台交换机,数值+1
    存在一个Max Hop参数--->最大消息寿命,默认值20

最大寿命(最大生存时间)---可以理解为死亡时间
    当超过该时间,则设备认为网络出现问题,链路出现故障等。20S

TCN BPDU报文

当设备接收到一个只有4字节大小的BPDU,就是TCN BPDU,则设备会知晓此时网络拓扑发生变化了

image-20230414165037109

image-20221019174613413

1、本地交换链路发生故障后,STP将重新收敛,为了加快刷新全网交换机的MAC地址表,故障交换机会向本地其余运行了STP协议的接口发送TCN BPDU报文。
2、邻居交换机收到TCN报文,将回复一个TCA标记位置为1的配置BPDU,用于可靠传输。
    该过程会一直持续到根网桥收到这个TCN BPDU。
3、之后根网桥会向下游设备发送TC标记位置为1的配置BPDU,并逐级发送到每一台交换机身上。
4、所有交换机在收到TC标记位置为1的配置BPDU后,会立即将MAC地址表的老化时间临时从300S调整到15秒(转发延迟),使得MAC地址表可以尽快刷新,以便适应新的网络拓扑。

STP角色选举

根桥选举(RB)

image-20230414150947886

  • 选举范围:整个交换网络中。

  • 每一台设备都会发送配置BPDU,配置BPDU中的BID字段为自己的桥ID,RID也是自己的桥ID--->每一台设备都会认为自己的根网桥。

  • 选举方法----选举具备最小桥ID数值的设备称为根网桥。

  • 根网桥的地址是具备可抢占性的。---一旦发生抢占,则会导致STP协议重新收敛。

根接口(RP)

  • 选举范围:每一个非根网桥设备上。

  • 根接口----非根网桥上所有接口中可以收到最优BPDU的接口。---根接口有且只有一个

    • 在STP收敛完成后,只有根网桥会周期性的发送配置BPDU,而非根网桥会根据收到的配置BPDU来计算自己的配置BPDU,然后将计算出的配置BPDU向下游发送。

    • 在计算过程中,设备会将最优的BPDU信息保存在自己的接口。

最优BPDU的比较原则

  1. 选择具有最小根桥ID的BPDU

    • 目的:是为了从众多的交换机中选举出根网桥。

  2. 比较入向的配置BPDU的RPC,选择最小的接口作为根端口

  3. 如果RPC相同,则比较对端设备的BID,选择较小的BID设备所对应的接口作为根端口

  4. 如果对端设备的BID相同,则比较对端的PID数值,PID小的端口为根端口

  5. 如果对端设备的PID相同,则比较本地的PID数值,PID小的端口为根端口

1、根桥ID
2、最小RPC
3、最小BID
4、最小PID

指定端口-DP

  • 选举范围:在每一个链路中选举出一个指定端口。

  • 这个接口是这条链路上所有接口中到大根桥的最优接口,并且,该接口负责向该链路中发送BPDU报文

  • 对于非根网桥而言,所有接口中收到的最优BPDU的接口将成为根接口,随后,非根网桥使用自己收到的最优BPDU,为本设备上的==其他接口各自计算一个BPDU报文==

    • 设备根据根网桥发送的配置BPDU,从而计算出自己接口的BPDU报文。并且该接口也可以收到对端发送来的BPDU报文。

    • 比较两个配置BPDU报文,选举出最优的BPDU报文。

    • 发送出最优BPDU报文的接口称为指定端口。--->一条链路两个接口,对端的接口被称为非指定端口。

  • 根端口的选举过程是非根网桥将自己所收到的所有BPDU进行比较,而指定接口的选举过程则是非根网桥用自己计算出的BPDU跟别的设备发送过来的BPDU进行对比

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

非指定接口--NDP

  • 一般也被称为阻塞端口。

  • 所有的非指定接口都会被STP协议阻塞,而被阻塞的接口既不会接收也不会转发业务数据,另外该接口也不会发送BPDU报文,但是,可以接收BPDU报文

STP的角色选举过程
  1. STP交换机初始启动后,都会认为自己是根网桥,并在发送给其他交换机的BPDU报文中宣告自己的根桥。因此,此时的BPDU中的根桥ID为各自设备的网桥ID。

    • 交换机收到网络中其他设备发阿松的BPDU后,会比较BPDU中的根桥ID和自己的BID。从而选举出BID最小的交换机作为根网桥,其他设备为非根网桥。

    • 根网桥可以被抢占。抢占后STP协议会重新收敛。

  2. 在选举出根桥后,根桥设备周期性发送BPDU---2S。而非根网桥周期性接收BPDU报文。

  3. 每个交换机根据从自己不同接口收到的BPDU报文中选择出最优的BPDU,从而选举出根端口

    • 比较RPC

    • 比较对端BID

    • 比较对端PID

    • 比较本地PID

  4. 每台交换机的每一条链路选举一个指定端口

    • 交换机将本接口与本接口收到的BPDU进行对比,若本接口BPDU较优,则本接口称为指定接口。否则本接口称为非指定端口。

      • RPC

      • BID

      • 链路两端的PID

  5. 在确定了根端口和指定端口后,交换机上剩余的所有端口被称为非指定端口。并且在逻辑上阻塞这些非指定端口

    • 一旦非指定端口被逻辑阻塞,STP收敛完成,生成STP树。

    • 阻塞端口不能收发业务数据,不能转发BPDU,可以接收和处理BPDU。

根网桥的选举非常重要,因为STP的一切工作都是基于根网桥的位置而定的,如果根网桥选举的位置不恰当,那么可能会造成流量走向异常的问题

解决方案:在三层架构组网中,汇聚层设备恰好是网关所在地,本身PC的流量就要经过汇聚层设备,所以一般将根网桥的位置放在网关所在地

STP的接口状态

image-20230418022900048

  • 阻塞

    • STP协议激活后接口进入的第一个状态。

    • 处于该状态的接口不能收发业务数据、不能学习MAC地址,不能发送BPDU,但是可以接收BPDU

    • 所有设备处于阻塞状态,网络中没有任何BPDU报文,当20S最大老化时间超时后,则所有设备认为网络中原本应该发送BPDU报文的根网桥设备出现故障,所以需要重新进行STP收敛,每台设备的每个接口会进入到下一个状态。

  • 侦听

    • 进行STP协议的角色选举。

    • 处于该状态的接口不能收发业务数据、不能学习MAC地址,但是可以收发BPDU报文

    • 在此时,每台设备认为自己是根网桥,发送BPDU报文,完成STP角色选举。

    • 在这个状态需要停留一个转发延迟时间(15S),当时间超时后,则进入下一个状态。

      • 只有根端口和指定端口会进入下一个状态,而非指定端口会退回到阻塞状态

  • 学习

    • 可以侦听业务数据,并且根据业务流量来学习MAC地址信息,但是,不会转发业务数据

    • 目的:是为了提前充实设备的MAC地址表,在后续的数据转发过程中,不需要在进行洪泛操作,因为MAC地址表中存有所有PC对应信息。

    • 停留一个转发延迟时间---15S

  • 转发

    • 正常收发业务数据和BPDU报文

STP的收敛时间

802.1D生成树的收敛是基于计时器完成。

  • STP的首次收敛---50S

  • 根网桥故障---50S

    • image-20230418030247556

  • 直连链路故障----30S

    • image-20221019205848271

  • 非直连链路故障---50S

STP基本配置

image-20240529184057772

[sw1]stp enable    ---开启STP协议,华为默认是开启STP生成树
[sw1]stp mode stp  ---修改生成树的工作模式为STP


[sw1]display stp   ---查看本地完整STP信息
[sw1]display stp  brief  ---查看STP接口状态简表


修改STP根网桥
[sw1]stp root primary   ---将SW1设定为STP的主根网桥,本质含义是将桥优先级修改为0
[sw2]stp root secondary ---将SW2设定为STP的备份根网桥,本质是将桥优先级修改为4096

直接修改STP桥优先级
[sw3]stp priority 8192  ----修改时,必须为4096的倍数


[sw1-GigabitEthernet0/0/24]stp port priority ?  --修改接口优先级
  INTEGER<0-240>  Port priority, in steps of 16
  


[sw1]stp pathcost-standard ?   ---修改开销值计算方式
  dot1d-1998  IEEE 802.1D-1998
  dot1t       IEEE 802.1T   ---默认
  legacy      Legacy   ---华为私有
  
  
[sw1-GigabitEthernet0/0/22]stp cost ?  ---直接修改某个接口的开销
  INTEGER<1-200000000>  Port path cost

RSTP---快速生成树协议

STP协议的问题
1、收敛速度慢----STP基于计时器的方式进行接口状态切换
2、链路利用率低

802.1W---主要解决了STP协议收敛速度慢的问题,没有解决链路利用率低的问题,所以,在RSTP中,还是一个交换网络一棵树。---向下兼容STP协议。

改进点1---端口角色

STP---根端口、指定端口、非指定端口
RSTP--根端口、指定端口、替代端口、备份端口
    替代和备份端口都属于阻塞端口。
    
替代端口----理解为根端口的备份。
    如果根端口发生故障,替代端口可以称为新的根端口,加快网络的收敛速度。
    在一个非根网桥设备上,根端口必须存在,但是替代端口可以存在没有也可以存在多个。
备份端口----理解为指定端口的备份
    备份端口实际上是一台设备上由于收到了自己所发送的BPDU报文从而被阻塞的端口。

改进点2---端口状态

image-20230418162553322

改进点3---RST BPDU

标记字段---使用了原本中间的6bit信息。

image-20221019213147640

bit 6---表示同意的含义,用于P/A机制
bit 5---转发状态
bit 4---学习状态
bit 3和bit 2---表示端口角色
bit 1---表示提议的含义,用于P/A机制

RSTP和STP不同,RSTP在网络稳定后,无论是根网桥还是非根网桥,都会周期性的发送配置BPDU

P/A机制----加快收敛

修改了状态切换的机制,将原本STP的基于计时器的状态切换方式修改为,选择出端口角色后立即切换状态

image-20240529194127013

1、A设备被选举为根网桥,故GE0/0/1接口称为指定端口。
    根网桥从该接口发送P标记置为1的BPDU报文,请求将本接口状态从丢弃切换到转发状态。加快收敛
    备注:想要切换为转发状态的前提是后续网络中没有环路。
    
2、B设备收到该BPDU报文后,会将本地所有除了根端口的其他端口全部阻塞,保障后续网络无环。
    这个过程被称为同步过程。
    
3、B设备完成同步过程后,将从根端口向上发送A标记位置为1的BPDU报文,并且将根端口的状态切换到转发状态。

4、A设备收到BPDU报文后,将接口切换为转发状态。

RSTP通过P/A机制来保证一个指定端口得以从丢弃状态快速进入转发状态,从而加速了生成树的收敛速度。在P/A机制中存在一个“同步状态”,实际上就是将其他全部接口设置为丢弃状态,防止临时环路的产生

改进点4---对配置BPDU的处理
  1. 配置BPDU的发送方式

    • STP---只有根网桥周期发送,非根网桥需要收到BPDU报文后,在发送自己的

    • RSTP---所有设备周期性发送

  2. 更短的BPDU超时时间

    • STP--最大老化时间20S

    • RSTP---最大老化时间-6S

  3. 次优BPDU的处理

    • 在STP的交换机的每一个接口中,都会保存一份BPDU报文。对于根端口和非指定端口而言,保存的是上游设备发送的BPDU报文,而对于指定端口而言,保存的是自己根据根端口的BPDU计算出的BPDU报文

      • 如果接口收到了一份BPDU报文,而该接口当前保存的BPDU比接收到的BPDU更优,那么接收的BPDU就是次优BPDU。---不如接口保存的BPDU报文

    • STP----当指定接口收到次优BPDU报文,它将立即发送自己的BPDU报文;而对于非指定端口,当收到次优BPDU报文,它将等待接口所保存的BPDU老化之后,再重新计算新的BPDU报文,并将新的BPDU报文发送出去。---->为什么非指定端口需要在最长20S的时间后才能启动状态迁移

    • RSTP----无论接口的角色如何,只要接口收到次优BPDU报文,便立即发送自己的BPDU,加速收敛

改进点5---快速收敛机制
  1. 根端口和指定端口的快速切换

  2. P/A机制

  3. 边缘端口

    • 如果交换机上某个端口位于整个网络的边缘---不在于其他交换机相连的接口,直接与PC或服务器直连的接口。

    • 边缘接口不参与生成树的计算,当边缘接口被激活时。这个接口可以立即切换到转发状态,并且开始收发业务数据流量

    • 边缘接口的关闭或激活不会影响RSTP的拓扑变化的

    • [sw3-GigabitEthernet0/0/22]stp edged-port enable ---将该接口设定为边缘接口,该接口不需要发送BPDU报文,因为边缘接口一般是连接PC的接口。

      边缘端口还是会持续性发送BPDU报文

      [sw1-GigabitEthernet0/0/1]stp bpdu-filter enable ---开启BPDU过滤,该接口就不会再发送BPDU报文。-----激活该功能后,该接口还是可以收到BPDU报文,但是设备会忽略掉这个报文。

    • 注意:一旦边缘端口收到配置BPDU报文,就丧失了边缘端口属性,成为普通的STP端口,重新进行STP计算,引发网络震荡

改进点6---保护功能

BPDU保护

当交换机激活BPDU保护功能,如果边缘接口收到的BPDU报文,则交换机会将该接口关闭,同时发送日志进行告警。

image-20240529204437296

SW1接口配置边缘接口,开启BPDU保护,然后让SW2发送配置BPDU

[Huawei]stp bpdu-protection ---开启BPDU保护功能

结果导致SW1的接口被shutdown,默认交换机不会自动开启,需要网络管理员手工执行undo shutdown命令开启接口。

根保护

image-20230419032834318

原因:新加入的第三方设备SW4的BID小于SW1,因为STP的根网桥是可抢占的,所以会抢占根网桥角色,导致二层网络重新收敛,引发网络震荡。

根保护:当根网桥的指定接口激活根保护功能后,该接口如果收到更优的BPDU报文,会忽略这个BPDU报文,并将接口切换为丢弃状态

[Huawei-GigabitEthernet0/0/24]stp root-protection ---根保护功能只有在指定接口上激活才有效

当接口不再接受更优的BPDU报文,则一段时间(2*转发延迟)后,接口自动恢复到转发状态

环路保护

image-20230419033305693

一般交换机的根接口以及处于丢弃状态的替代接口都会出现这种情况

在网络正常时,接口持续接收BPDU报文,而当网络出现链路的单向故障或者网络拥塞等问题,这些接口无法正常接收BPDU报文,会导致交换机进行RSTP重新计算,接口角色和状态发生改变,给网络中引发环路。

  1. 根端口上激活环路保护功能

    • 如果该接口长时间没有收到BPDU报文,那么交换机会重新选举根端口并将该接口调整为指定接口。

    • 并且将接口的状态切换为丢弃。

  2. 给替代端口激活环路保护功能

    • 如果该接口长时间没有收到BPDU报文,那么交换机会将替代端口调整为指定接口。

    • 并且接口的状态切换为丢弃。

[Huawei-GigabitEthernet0/0/22]stp loop-protection ---开启环路保护

拓扑变更保护

image-20230419033949053

如果网络环境不稳定,导致TC BPDU频繁洪泛,又或者网络中存在攻击者,而攻击者发送大量的TC报文,那么交换机的性能将收到极大的消耗。

而激活拓扑变更保护后,将在单位时间内只进行一定次数的TC报文处理,如果超出这个次数上限,那么只会按照规定的次数进行处理,而对于超出的部分,需要等待一段时间处理

[Huawei]stp tc-protection ---开启拓扑变更保护功能,单位时间:2S;次数:1次

[Huawei]stp tc-protection threshold 2 ---修改单位时间内处理TC报文的次数

改进点7---拓扑变更机制改进

image-20230419030312788

  • SW3的根端口收不到根网桥发送的BPDU后,设备所有的接口启动一个计时器(TC TIME,时间为Hello Time的两倍,4S),并且清空本地所有端口学习到的MAC地址信息。然后向外发送TC标记位置为1的BPDU报文。

  • 一旦计时器超时,则本地停止发送BPDU报文。

  • 其他交换机收到该报文后,清空MAC地址表,启动计时器,向上游发送TC标记位置为1的BPDU报文。重复该过程。

MSTP---多实例生成树---802.1S

instance---实例---->一个或多个VLAN的集合

instance-ID---->12bit---->多个VLAN属于一个实例,基于实例来计算生成树。

instance 0---->该实例默认存在,并且所有VLAN都属于该实例。

在BID中,桥优先级只使用前4bit,而后12bit被称为扩展系统ID,用来携带实例ID信息,区分不同树发送的BPDU报文

MSTI---多生成树实例。--->MSTP基于实例创建一个MSTI,而每一个MSTI都是完全独立的

MSTP--->--->将一个二层网络划分为多个小的MST域。

  • 相同的域名

  • 相同的修订登记

  • 相同的VLAN和instance的映射关系

配置

image-20240602142617755

[sw1]stp enable 
[sw1]stp mode mstp 

[sw1]stp region-configuration   ---进入到MSTP域视图界面
[sw1-mst-region]region-name HCIP  ----默认名称为本地MAC地址
[sw1-mst-region]revision-level ?  ---修改修订等级,默认为0
  INTEGER<0-65535>  Revision level 
[sw1-mst-region]instance 1 vlan 2 to 10
[sw1-mst-region]instance 2 vlan 11 to 20
[sw1-mst-region]active region-configuration   ---激活配置


display stp region-configuration  ---查看STP协议配置内容

http://www.xdnf.cn/news/301969.html

相关文章:

  • [论文阅读]Deep Cross Network for Ad Click Predictions
  • C# 使用SunnyUI控件 (VS 2019)
  • 上市公司-企业上下游供应链数据(2003-2023年)-社科数据
  • 解释 NestJS 的架构理念(例如,模块化、可扩展性、渐进式框架)
  • 【MongoDB篇】MongoDB的事务操作!
  • VBA ListBox/ComboBox 响应鼠标滚轮操作
  • Java中常见的问题
  • Jupyter Notebook为什么适合数据分析?
  • [监控看板]Grafana+Prometheus+Exporter监控疑难排查
  • UE5 使用插槽和物理约束对角色新增的饰品添加物理效果
  • Maven依赖未生效问题
  • Houdini制作烟雾消散并导入UE5
  • UE5 Daz头发转Blender曲线再导出ABC成为Groom
  • 基于Blender的AI插件——2D图片生成3D模型
  • Python 中的数据结构介绍
  • LangChain:大语言模型应用的“瑞士军刀”入门指南
  • Sublime Text快速搭建Lua语言运行环境
  • vue3中解决 return‘ inside ‘finally‘ block报错的问题
  • 【AI】如何自己训练AI大模型
  • IP-Adapter
  • LeetCode 每日一题 2025/4/28-2025/5/4
  • 华为云短信接入实现示例
  • c#OdbcDataReader的数据读取
  • Blender 初学者指南 以及模型格式怎么下载
  • FPGA----基于ZYNQ 7020实现petalinux并运行一个程序
  • 赛灵思 XCZU11EG-2FFVC1760I XilinxFPGAZynq UltraScale+ MPSoC EG
  • 探索Hello Robot开源移动操作机器人Stretch 3的新技术亮点与市场定位
  • 在 GitLab 中部署Python定时任务
  • 在与大语言模型交互中的礼貌现象:技术影响、社会行为与文化意义的多维度探讨
  • 告别异步复杂性?JDK 21 虚拟线程让高并发编程重回简单