• 二层环路带来的问题:广播风暴、MAC地址表震荡
  • 生成树协议可以实现局域网中冗余链路的阻塞,环路的消除,用来解决二层环路问题。
  • 生成树协议主要包括STP、RSTP和MSTP。

    1、生成树协议基本原理

    1.1 STP基本原理

    1.1.1 STP出现背景

    image.png

  • 拓扑描述

    • 广播风暴
      • 假设交换设备上没有启用STP协议。如果PC1发出广播请求,那么广播报文将被其他两台交换设备的端口port1接收,并分别从端口port2广播出去,然后端口port2又收到另一台交换设备发过来的广播报文,再分别从两台交换设备的端口port1转发,如此反复,最终导致整个网络资源被耗尽,网络瘫痪不可用。
    • MAC地址表震荡
      • 交换机S1可以在port2上学习到PCB的MAC地址,但是由于S2会将PC2发出的数据帧向自己其它的端口转发,所以S1也可能在pot上学习到PC2的MAC地址。如此S1会不停的修改自己的MAC地址表。这样就引起了MAC地址表的抖动(Flapping)。

        BPDU

        定义:桥协议数据单元,用于传递STP协议相关报文
        分类:
  • 配置BPDU 用于传递STP的配置信息

  • TCN BPDU 用于通告拓扑变更信息

    配置BPDU报文在哪些情况下产生

  • 端口使能STP,配置BPDU就会按照HELLO TIME定时器规定的时间间隔从指定端口发出。(只有根桥主动发送配置BPDU,其他桥收到上游发送的BPDU以后,才能触发转发自己的配置BPDU)

  • 当根端口收到配置BPDU报文后,根端口所在设备会向自己的每一个指定端口复制一份BPDU。
  • 当指定端口收到比自己差的配置BPDU时候,会立刻向下游设备发送自己的BPDU。

    STP的选举机制

    STP操作:
    1.选举一个根桥。
    2.每个非根交换机选举一个根端口。
    3.每个网段选举一个指定端口。
  1. 阻塞非根、非指定端口。

    端口角色定义

  • STP中定义了:指定端口,根端口和预备端口。
  • 指定端口是交换机向所连网段转发配置BPDU的端口,每个网段有且只能有一个指定端口。一般情况下,根桥的每个端口总是指定端口。
  • 根端口是非根交换机去往根桥路径最优的端口。在一个运行STP协议的交换机上最多只有一个根端口,但根桥上没有根端口。
  • 如果一个端口既不是指定端口也不是根端口,则此端口为预备端口。预备端口将被阻塞。

    根网桥(Root bridge)

    在所有交换机中选举出一台作为根网桥(Root bridge)

    选举规则

    1. Bridge-id小的优先

    Brideg-id

    定义
    1. IDBID,用来标识交换机身份

    格式
  • 优先级+Mac地址

  • 优先级默认32768,必须是4096的倍数

    根端口(Root port)

    每台非根网桥(交换机)选举出一个根端口(Root port)

    选举规则

  1. 到达根网桥开销小的优先
  2. 对端交换机BID小的优先
  3. 端口ID小的优先

    开销

    Cost,cost值是和链路和接口的带宽成反比的,代表路径耗费的代价和成本,带宽越大,开销越小;宽越大,cost值越小

    指定端口(Designated port)

    每个物理段(每根网线)上选举出一个指定端口(Designated port)
    选举规则
  • 到达根网桥开销小的优先
  • 本机BID小的优先
  • 端口ID小的优先

剩下没有角色的端口就是阻塞端口(Blocked Port)

STP初始化流程

交换机端口状态

  • disable:禁用状态,被关闭的端口
  • blocking:阻塞状态 接收BPDU,但不发送BPDU,不学习Mac地址,不转发数据
  • listening:监听状态 接收并发送BPDU,不学习Mac地址,不转发数据,持续15秒
  • learning:学习状态 接收并发送BPDU,学习Mac地址,不转发数据,持续15秒
  • forwarding:转发状态 接收并发送BPDU,学习Mac地址,转发数据

    STP计时器

  • Hello time 2秒 配置BPDU的发送周期

  • Max age 20秒 判断链路故障的时间,10个Hello time周期
  • Forwarding delay 15秒 状态切换延迟

    Hello Timer:STP交换机发送BPDU的时间间隔。当网络拓扑稳定之后,该计时器的修改只有在根桥修改才有效。根桥会在之后发出的BPDU中填充适当的字段以向其他非根桥传递该计时器修改信息。但当拓扑变化之后,TCN BPDU的发送不受这个计时器的管理。 Forwarding Delay Timer:指一个端口Listening 和Learning的各自时间,默认为15秒,即Listening状态持续15秒,随后Learning状态再持续15秒。这两个状态下的端口会处Blocking状态,这是STP用于避免临时环路的关键。 Max Age:端口的BPDU老化的时间。端口会根据接收到的BPDU存储所接收到的最好的四个信息(根桥BID、累计根路径开销、发送者BID和发送端口PID)。每次接收到合适的BPDU,端口都会启动这个Max Age计时器。超过这个Max Age时间端口接收不到合适BPDU,就会认为网络直径过大。这个时间默认为20秒。

STP拓扑变更机制

当网络的拓扑发生变化时,网络会从一个状态向另一个状态过渡,重新打开或阻断某些端口口。交换机的端口状态状态变换和时间如下图:
26.png

  • Max age超时/有接口变更为转发状态,判断为拓扑发生变更,向根网桥发起TCN BPDU
  • 收到TCN BPDU的交换机继续向根网桥转发TCN BPDU,到达根网桥为止
  • 根网桥收到TCN BPDU后,向所有端口发起TC置位的配置BPDU
  • 交换机收到TC置位的配置BPDU后,Mac地址表的老化时间缩短到15秒

从上图可以看出STP的最长收敛时间为50s。
当网络的拓扑发生变化时,网络会从一个状态向另一个状态过渡,重新打开或阻断某些端口。交换机的端口要经过几种状态:
禁用(Disable)——>阻塞(Blocking)——>监听状态(Listenning)——>学习状态(Learning)——>转发状态(Forwarding)。
每种端口状态对数据的处理如表4-2所示。
表4-2 生成树端口状态对数据的转发

过程 阻塞 侦听 学习 转发 禁用
接收并处理BPDU 不能
转发接口上收到的数据 不能 不能 不能 不能
转发其它接口发来的数据帧 不能 不能 不能 不能
学习MAC地址 不能 不能 不能

STP的问题

  • 收敛速度慢,故障切换时间太长
  • 网络中大量主机频繁上下线,会导致TCN BPDU以及TC置位BPDU大量发送

    STP常用命令

    | 相关命令 | 功能 | | —- | —- | | [h3c]display stp | 查看STP相关信息 | | [h3c]display stp brief | 查看STP端口状态 | | [h3c]stp global enable | 全局启用STP | | [h3c-GigabitEthernet 1/0/1]undo stp enable | 关闭端口上STP | | [h3c]stp mode ‘stp/rstp/mstp’ | 更改STP模式,默认模式是mstp | | [h3c]stp priority ‘priority’ | 更改交换机优先级 | | [h3c-GigabitEthernet 1/0/1]stp cost ‘cost’ | 更改接口生成树的cost | | [h3c-GigabitEthernet 1/0/1]stp edged-port | 配置端口为边缘端口 |