STP

技术背景

引发二层环路的原因:

  • 冗余链路,增加网络可靠性

  • 人为错误导致二层环路

二层环路带来的问题:

  • 广播风暴
  • MAC地址漂移

       

STP

在一个具有物理环路的交换网络中,交换机通过运行STP,自动生成一个没有环路的工作拓扑,也被称为STP树。树节点为某些特定的交换机,树枝为某些特定的链路

STP在网络中运行后会持续监控网络的状态,当网络出现拓扑变更时,STP能够感知并且进行自动响应,从而使得网络状态适应新的拓扑结构,保证网络可靠性

STP的基本概念

桥ID

  • IEEE 802.1D标准中规定BID由16位的桥优先级与桥MAC地址构成
  • 每一台运行STP的交换机都拥有一个唯一的BID
  • 在STP网络中,BID最小的设备会被选举为根桥

注意:

在STP网络中,桥优先级是可以配置的,取值范围0-65535,默认值:32768,可以修改但修改值必须是4096的倍数。

根桥

STP的主要作用之一是在整个交换网络中计算出一棵无环的"树"(STP树)

根桥是一个STP交换网络中的"树根"

在STP网络中,根桥的选举规则:

  1. 比较桥优先级,优先级的值越小,则越优先,拥有最小优先级值的交换机会成为根桥
  2. 如果优先级值相等,那么在比较MAC地址,拥有最小MAC地址的交换机会成为根桥

   

Cost

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

  • 接口的缺省Cost与其速率、工作模式、交换机使用的STP Cost计算方法有关
  • 接口带宽越大,则Cost值越小
  • 用户可以根据需要通过命令调整接口的Cost

   

   

   

RPC

在STP的拓扑计算过程中,一个非常重要的环节就是"丈量"交换机某个接口到根桥的"成本",即RPC

一台设备从某个接口到达根桥的RPC = 从根桥到该设备沿途所有入方向接口的Cost累加

   

Port ID

运行STP的交换机使用接口ID来标识每个接口,接口ID主要用于在特定场景下选举指定接口

接口ID由两部分构成,高4位是接口优先级,低12位是接口编号

端口优先级用户可以根据实际需要,通过命令修改。端口优先级取值范围是0到240,步长是16(即取值必须为16的整数倍)。缺省情况下,端口优先级是128

BPDU

BRDU是STP的协议报文。BPDU是STP能够正常工作的根本。

BPDU分为两种类型:

  • 配置BPDU:是STP进行拓扑计算的关键
    • STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态
    • 在初始化过程中,每个桥都主动发送配置BPDU。在网络拓扑稳定后,只有根桥主动发送配置BPDU,其他交换机在收到上有传来的配置BPDU后,才会发送自己的配置BPDU
  • TCN BPDU:只在网络拓扑发送变更时才会被触发
    • 下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知

   

重要字段:

BPDU Type:0x00表示配置BPDU,0x80表示TCN BPDU

Root ID:根桥的桥ID

RPC:根路径开销,到达根桥的STP Cost

Bridge ID:发送BPDU的桥ID

Port ID:发送BPDU的网桥的接口ID

Max Age:最大寿命。当一段时间未收到任何BPDU,生存期到达最大寿命是,网桥认为该接口连接的链路发生故障。默认:20秒

Hello Time:根网桥连续发送的BPDU之间时间间隔,默认:2秒

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

配置BPDU的比较原则:

  1. 最小的根桥ID
  2. 最小的RPC
  3. 最小的网桥ID
  4. 最小的接口ID

STP操作:

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

STP中定义了3种端口角色:

  • 指定端口:交换机向所连网段转发配置BPDU的端口(每个网段有且只有一个)
  • 根端口:非根交换机去往根桥路径最优的端口(在一个运行STP协议的交换机上最多只有一个根端口,但根桥上没有根端口)
  • 阻塞端口:既不是指定端口也不是根端口,则此端口为阻塞端口

配置BPDU的转发过程:

   

交换机在刚启动的时候都认为自己时根桥,互相发送配置BPDU进行STP运算

STP的计算过程

选举根桥

选举根桥的规则:

  • 网络中拥有最小桥ID的交换机成为根桥

注意:

  • 在一个连续的交换网络中,只会存在一个根桥
  • 根桥的角色是可抢占的。当有更优的BID的交换机加入网络时,网络会重新进行STP计算,选出新的根桥

在每台非根桥上选举一个根接口

选举根接口的规则:

  1. 比较RPC(根路径开销),RPC值越小,越优选,因此交换机会选RPC最小的端口作为根端口
  2. 在RPC值相等时,比较上行交换机的BID,BID值越小,越优选,因此交换机会选连接上行设备BID最小的端口作为根端口
  3. 在RPC值和上行交换机BID值相等时,比较上行交换机的Port ID,PID的值越小,越优选,因此交换机会选上行设备PID最小的端口作为根端口
  4. 在RPC值、上行交换机BID值和上行交换机PID值相等时,比较本地交换机的Port ID,PID值越小,越优选,因此交换机会选端口PID最小的端口作为根端口

   

注意:一个非根桥设备上,最多只能由一个根端口

在每条链路上选举一个指定端口

选举指定端口的规则:

  1. 比较RPC(根路径开销),值越小,越优选,因此交换机选择RPC最小的端口作为指定端口
  2. 在RPC值相等时,比较链路两端交换机的BID,值越小,越优选,因此交换机会选择BID最小的交换机的端口作为指定端口
  3. 在RPC和BID值相等时,比较链路两端端口的Port ID,值越小,越优选,因此交换机会选择PID最小的交换机的端口作为指定端口

   

   

注意:一般情况下,根桥上不存在任何根端口,只存在指定端口,根桥的所有端口都是指定端口

非指定端口和根端口被阻塞

在确定了根端口和指定端口之后,交换机上所有剩余的非根端口和非指定端口将被阻塞

   

注意:

  • 被阻塞端口可以接收并处理BPDU,但是不能转发用户数据帧
  • 根端口和指定端口既可以接收和发送BPDU,也可以转发用户数据帧

如何生成STP树

主要通过比较4个参数:根桥ID、根路径开销、网桥ID和端口ID,值越小,越优先

  • 根桥选举:比较根桥ID,最小生成
  • 根端口选举:依次比较RPC、对端BID、对端PID和本端PID,最小胜出
  • 指定端口选举:依次比较RPC、本端BID和本端PID,最小胜出
  • 在确定了根端口和指定端口之后,交换机上所有剩余的非根端口和非指定端口被阻塞

STP的接口状态

状态名称

收发BPDU

MAC地址学习

收发数据帧

Disable(禁用)

F

F

F

Blocking(阻塞)

F

F

F

Listening(侦听)

T

F

F

Learning(学习)

T

T

F

Forwarding(转发)

T

T

T

STP端口状态迁移

   

拓扑变化

根桥故障

在稳定的STP网络,非根桥会定期(Hello Time:2秒)收到来自根桥的BPDU报文

根桥故障恢复过程:

  1. SW1根桥发生故障,停止发送BPDU报文
  2. SW2等待Max Age计时器(20秒)超时,从而导致已经收到的BPDU报文失效,又接收不到根桥发送的新的BPDU报文,从而得知上游出现故障
  3. 非根桥会互相发送配置BPDU报文,重新选举新的根桥
  4. 经过重新选举后,SW3的阻塞端口经过两个Forward Delay(15秒)时间恢复转发状态

端口状态:

SW3的阻塞端口,20秒(Max Age超时)后会从Blocking状态进入到Listening状态,再进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发

收敛时间:

根桥故障会导致50秒左右的恢复时间(Max Age + 2倍的Forward Delay)的收敛时间

直连链路故障

  • 当两台交换机之间用两条链路互连,其中一条是主用链路,另一条为备用链路
  • 当网络稳定时,交换机SWB检测到根端口的链路发生故障

直连链路故障恢复过程:

  1. 备用端口会经过2倍的Forward Delay(15秒)时间进入用户流量转发状态

端口状态:

备用端口会从Blocking状态,迁移到Listening-Learning-Forwarding状态

收敛时间:

直连链路故障,备用端口会经过30秒(2倍的Forward Delay)后恢复转发状态

非直连故障

   

若SW1与SW2之间的链路发生了某种故障(非物理故障),因此SW2一直收不到来自根桥SW1的BPDU报文,Max Age计时器(缺省:20秒)就会超时,从而导致已经收到的BPDU报文失效

非直连链路故障恢复过程:

  1. SW2一直收不到来自根桥SW1的BPDU报文,Max Age计时器(缺省:20秒)就会超时,从而导致已经收到的BPDU报文失效
  2. SW2会认为根桥失效,并且认为自己是根桥,从而发送自己的配置BPDU给SW3,通知SW3自己是新的根桥
  3. SW3的阻塞端口一直收不到包含根桥ID的BPDU,Max Age计时器超时后,端口进入到Listening状态,开始向SW2"转发"从上游发来的包含根桥ID的BPDU
  4. Max Age定时器超时后,SW2和SW3几乎同时收到对方发来的BPDU,在进行STP重新计算,SW2发现SW3发来的BPDU更优,就放在宣告自己是根桥并重新确定端口角色

端口状态:

SW3的阻塞端口Max Age(缺省:20秒)超时后,会从Blocking状态进入到Listening状态,在进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发

收敛时间:

非直连故障会导致50秒左右的恢复时间(Max Age + 2倍Forward Delay)收敛时间

拓扑改变导致MAC地址错误

解决方法:

拓扑变更以及MAC地址表项更新的具体过程:

  1. SW3感知到网络拓扑发生变化后,会以Hello Time(缺省:2秒)为周期通过根端口向SW2发送TCN BPDU报文
  2. SW2收到SW3发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的TCA位置位,然后发送给SW3,告知SW3停止发送TCN BPDU
  3. SW2向根桥转发TCN BPDU报文
  4. SW1把配置BPDU报文中的Flags的TC位置位后发送,通知下游设备把MAC地址表项的老化时间由默认的300秒修改为Forward Delay时间(默认:15秒)
  5. 最多等待15之后,SW2中的错误MAC地址表项会被自动清除,此后,SW2就能重新开始MAC地址表项的学习及转发操作

   

posted @ 2022-05-24 14:25  hongliang888  阅读(628)  评论(0编辑  收藏  举报