1. STP出现背景

1.png
拓扑描述

  • 广播风暴
    • 假设交换设备上没有启用STP协议。如果PC1发出广播请求,那么广播设备将分别被两台交换设备的端口port1接收,并各自再从端口port2广播出去,然后两台交换机的端口port2又会收到从另一台交换设备发出来的广播报文,再分别再从两台交换设备的端口port1转发出去,如此反复,最终导致整个网络资源被耗尽,网络瘫痪不可用。
  • MAC地址表震荡
    • 交换机S1可以在port2上学习到PCB的MAC地址,但是由于S2会将PC2发出的广播数据帧向自己其它的端口转发,所以S1也可以在port1上学习到PC2的MAC地址。如此广播帧在两台交换设备之间不停转发,S1就会不停的修改自己的MAC地址表。引起MAC地址表的抖动(Flapping)。
  • 重复数据帧接收
    • 由于产生了广播风暴,广播帧同时也会泛洪给交换机S1和S2的其它的接口。其它端口上连接的PC就会频繁的接收重复的广播数据帧。这就是重复数据帧的接收。如果存在大量重复数据帧不只是浪费了网络带宽,导致网络不可用。同时主机也会消耗大量CPU资源来处理广播,这也会降低了主机的性能。

image.png

  • 为了提高网络可靠性,交换网络中通常会使用冗余链路。然而,冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,进而会影响到用户的通信质量。生成树协议STP(Spanning Tree Protocol)可以在提高可靠性的同时又能避免环路带来的各种问题。该协议可应用于在网络中建立树形拓扑,消除网络中的环路,并且可以通过一定的方法实现路径冗余,但不是一定可以实现路径冗余。

STP - 图4

1.1 STP基本知识

桥ID(Bridge Identification)

  • 早期的交换机被称为“桥”或者网桥,受限于当时的技术,早期交换机的接口数量少的可怜,通常只有两个接口,交换机仅能实现数据帧在这两个接口之间的交换,这也是“桥”这一称呼的由来。生成树技术在网桥时代就已经被提出并且应用,随着网络的发展,交换机能够支持的接口数量越来越多,因此上述称呼逐渐不再被使用,然而在生成树等技术领域,“桥”或“网桥”的称呼被一只沿用下来,直至今日我们在生成树中依然会使用它们来称呼交换机。
  • 每一台运行STP的交换机都拥有一个唯一的桥ID(Root Identification)。桥ID一共8Byte,包含16Bit的桥优先级(Bridge Priority)和48Bit的桥MAC地址,其中桥优先级占据桥ID的高16Bit,而MAC地址占据其余的48Bit。

根桥(Root Bridge)

  • STP的主要作用之一是在整个交换网络中计算出一颗无环的“树”(STP)树,这棵树一旦形成,网络中无环拓扑也就形成了。对于这颗树而言,树根是非常重要的,树根一旦明确了,“树枝”才能沿着网络拓扑进行延展,STP的根桥就是这颗树的树根,根桥的角色非常重要,STP的一系列计算均为树根为参考点。当STP开始工作后,第一件事情就是在网络中选举出根桥,在一个交换网络中,根桥只会有一个。
  • 网络中拥有最小桥ID的交换机将成为根桥。在比较桥ID时,首先比的是桥优先级,桥优先级的值最小的交换机将胜出成为根桥,如果桥优先级相同,那么MAC地址最小的交换机将成为根桥。
  • 华为交换机缺省的桥优先级为32768,可以在系统视图下使用stp priority命令修改,优先级的取值范围0~61440,并且必须为4096的倍数。

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

  • 每一个激活了STP的接口都维护这一个Cost值,接口的Cost主要用于计算RPC(根路径开销),也就是计算到达根的开销。接口的缺省Cost除了与其速率,工作模式有关,还与交换机使用的STP Cost计算方式有关。华为交换产品中计算方式,它们分别是IEEE 802.1D-1998标准方法,IEEE 802.1t标准方法以及华为私有计算方法。

接口速率与缺省Cost的对应关系

接口速率 接口模式 STP Cost
IEEE 802.1D-1998标准方法 IEEE 802.1t标准方法 华为计算方式
10Mbps Half-Duplex 100 2000000 2000
Full-Duplex 99 1999999 1999
100Mbps Half-Duplex 19 200000 200
Full-Duplex 18 199999 199
1Gbps Full-Duplex 4 20000 20
10Gbps Full-Duplex 2 2000 2
40Gbps Full-Duplex 1 500 1

image.png

  • 在交换机的系统视图下使用stp pathcost-standard命令,可修改cost计算方法,该命令有3种可选关键字
    • dot1d-1998:IEEE 802.1D-1998标准方法
    • dot1t:IEEE 802.1t标准方法
    • legacy:华为计算方法

image.png

接口ID(Port Identification)

  • 运行STP的交换机使用接口ID来标识每个接口,接口ID主要用于在特定场景下选举指定接口。接口ID长度为16Bit,由两部分组成,其中高4Bit是接口优先级,低12Bit是接口编号,华为交换机的接口缺省优先级为128,可在接口视图下使用stp port priority命令修改,优先级取值范围是0~240,并且必须是16的倍数。



2.STP基本计算过程


2.1 选举根交换机

2.png

  • 每一台交换机刚启动STP时,都认为自己是根交换机
  • 为了计算生成树,交换机之间需要交换相关信息和参数,这些信息和参数被封装在配置BPDU(Configuration Bridge Protocol Unit)中,在交换机之间传递。
  • BPDU是指网桥协议数据单元,泛指交换机之间运行的协议交互信息时使用的数据单元。配置BPDU是BPDU的一种。

  • 生成树计算的第一步是选举根交换机,根交换机的选举基于交换机标识(Bridge ID)。

    • 交换机标识由两部分组成:两字节长度的交换机优先级和六字节长度的MAC地址。
    • 交换机优先级是可以配置的stp priority,取值范围是0~65535,默认值为32768。
    • 网络中BID(交换机标识)越小的成为根交换机,首先比较优先级,如果优先级相同则比较MAC地址,值越小越优先。
  • 上图中,三个交换机的优先级是相同的,由于SWA的MAC地址值最小,因此SWA成为根交换机。


2.2 选举非根交换机的根端口

3.png

  • STP为每个非根交换机选举根端口(Root Port)
  • 在一个交换网络中,除了根桥以外的其它交换机都是非根桥,STP将为每个非根桥选举一个根端口,所谓根端口,实际上是非根桥上所有端口中收到最优BPDU的端口,可以简单理解为交换机在STP树上朝向根桥的接口,STP只会在所有接口上选举出一个根端口。
  • 交换机上的每个端口都会有一个端口开销(Port Cost)的参数,此参数表示数据从该端口发送时的开销值,也就是端口的开销。STP认为从一个端口接收数据是没有开销的。端口的开销和端口的带宽有关,带宽越高,开销越小,VRP平台中,百兆端口的开销值为200。从一个非根交换机到达根交换机的路径可能有很多条,每一条路径都有一个总的开销值,此开销值是路径上所有出端口的端口开销总和。

  • 根端口是指从一个非根交换机到根交换机总开销最小的路径所经过的本地端口。

    • 这个最小的开销值被称为交换机的根路径开销(Root Path Cost)。
    • 如果这样的端口有多个,则比较端口上所连接的上行交换机的交换机标识,越小越优先。
      • image.png
    • 如果端口上所连接的上行交换机标识相同,则比较端口上所连接的上行端口的端口标识(Port Identifier),越小越优先。
      • 端口标识由两部分组成:一字节长度的端口优先级和一字节长度的端口号。一字节长度的端口优先级是可以配置的stp port priority,默认为128。
      • image.png

2.3 选举网段的指定端口

4.png

  • STP为每个网段选出一个指定端口(Designated Port),指定端口为每个网段转发去往根交换机方向的数据,并且转发由根交换机方向发往该网段的数据。指定端口所在的交换机称为该网段的指定交换机。

  • 为每个网段选举指定端口和指定交换机的时候:

    • 首先比较该网段所连接的端口所属交换机的根路径开销,越小越优先。
    • 如果根路径开销相同,则比较所连接的端口所属交换机的交换机标识,越小越优先。
    • 如果根路径开销相同,交换机标识也相同,则比较所连接的端口的端口标识,越小越优先。

上图拓扑描述:

  • 对于根交换机来说,所有端口都是所连网段的指定端口。因此LANA和LANB的指定端口都在SWA上
  • LAND和LANE都只连接了一个交换机端口,此端口即为指定端口。
  • 对于LANC来说,同时连接到两个交换机端口,并且两个交换机的根路径开销相同,因此需要比较两个端口所在交换机的交换机标识,由于SWB的交换机标识比SWC小(两者交换机优先级一致,但SWB的MAC地址更小),因此LANC的指定端口在SWB上。
  • 既不是根端口也不是指定端口的交换机端口被称为Alternate Port(预备端口),预备端口不转发数据,处于阻塞状态。

2.4 交换机选举过程

image.png

  1. 选举LSW1为根桥(优先级相同,LSW1的MAC地址更小)
  2. LSW2选举根端口
    1. Root ID:都是LSW1
    2. Cost:开销值一致
    3. Bridge ID:都是LSW2
    4. Port ID:对端LSW1的接口优先级一致,LSW1的G0/0/1小于G0/0/24,所以对应对端LSW2的G0/0/24选为根端口
  3. 选举指定端口:LSW1的G0/0/1和G0/0/24为指定端口
  4. 选举阻塞端口:阻塞端口为LSW2的G0/0/1

image.png

  1. 选举LSW2为根桥(优先级相同,LSW2的MAC地址更小)
  2. 选举根端口:
    1. Root ID一致
    2. Cost一致
    3. Bridge ID一致
    4. 对端Port ID一致
    5. 本端G0/0/1小于G0/0/24,选举G0/0/1为根端口
  3. 选举LSW2的G0/0/2为指定端口
  4. 阻塞LSW1的G0/0/24端口

image.png

  1. 选举LSW5为根桥(优先级相同,LSW5的MAC地址更小)
  2. 选举LSW4的G0/0/1为根端口
  3. 选举LSW5的G0/0/1为指定端口
  4. 选举LSW4的指定端口
    1. Root ID一致
    2. Cost一致
    3. Bridge ID一致
    4. 无对端交换机Port ID
    5. 本端G0/0/2小于G0/0/24,所以选举G0/0/2为指定端口
    6. LSW4的G0/0/24为阻塞端口

3 STP端口状态


3.1 交换机端口角色

5.png

  • 对于物理层和数据链路层可以正常工作,并且开启了STP的交换机端口,STP共定义了三种端口角色,处于转发状态的有根端口和指定端口。
  • 底层没有开启的端口称为Disable端口。 | 端口角色 | BPDU | 数据 | | —- | —- | —- | | Root Port | 接收BPDU但不转发BPDU | 接收并转发数据 | | Designated Port | 接收并转发BPDU | 接收并转发数据 | | Alternate Port | 接收BPDU但不转发BPDU | 不接收也不转发数据 |

STP端口要求:

  • 根桥无RP,根桥上所有端口都是DP
  • 每个非根桥上都有RP,并且只有唯一的一个RP
  • 每一段链路上只能有一个DP
  • 每一段链路上可以有多个AP

华为设备STP端口角色采用RSTP模式,选举模式中AP和BP也都存在,但是选举规则和收敛时间全部按照STP模式进行,AP和BP收敛模式一致,当DP的端口出现问题,BP等待18S变成DP。

Root Port:

  • 根端口,离根桥最近的非根交换机端口,每台非根交换机只有一个根端口,根交换机没有根端口。根端口接收BPDU,并转发数据帧。
  • 每个STP网络中,都会存在一个根桥,其它交换机为非根交换机,根桥或者根交换机位于逻辑树的根部,是STP网络的逻辑中心,非根桥是根桥的下游设备,根端口是非根交换机去往根桥路径上的最优端口,在一个运行STP协议的交换机上最多只有一个根端口,但根桥上没有根端口。
  • RP端口是接收到最优BPDU的端口,当RP端口Down掉,此时最优BPDU立马Down掉,并且所有的端口置为DP重新发送BDPU,重新进行端口的选举,其余的端口Down掉不会存在此过程,如果一台路由器收不到根桥的BPDU,会等待20S后等BPDU老化重新选举。

Designated Port:

  • 指定端口,用于数据和BPDU的转发,指定端口接收转发BPDU,并转发数据帧。指定端口是交换机上所连接链路转发配置BPDU的端口,每个网段有且只能有一个指定端口。一般情况下,根桥的每个端口总是指定端口。

Alternate Port:

  • 预备端口,应该为Backup Port,华为设备为Alternate Port,预备端口用于保障无环,预备端口接收BPDU,不转发数据帧。

3.2 端口状态引入——可能的临时环路

6.png
7.png

  • 在端口角色以及状态的变化过程中,可能会出现临时环路问题。

拓扑描述:

  • 本例中,初始状态下SWA为根交换机,所有的交换机端口中,只有SWD的E0/2端口为Alternate Port,处于不转发状态。
  • 假设修改SWC的优先级,使SWC成为新的根交换机,SWD的E0/2接口成为新的根端口,进入转发状态,E0/1接口成为新的指定端口,处于转发状态,SWB的E0/2应当成为新的Alternate Port,进入不转发状态。
  • 如果在SWB的E0/2在从转发状态进入不转发状态之前,SWD的E0/2就已经从不转发状态进入了转发状态,则网络中会出现临时环路。
  • 解决临时环路的方法是:在一个端口从不转发状态进入转发状态之前(例如SWD的E0/2端口),需要等待一个足够长的时间,以使需要进入不转发状态的端口有足够时间完成生成树计算,并进入不转发状态。

3.3 端口状态转换

51.png

  • 1:端口被选为指定端口(Designated Port)或根端口(Root Port);
  • 2:端口被选为预备端口(Alternate Port);
  • 3:经过Forward Delay间隔。
    • Forward Delay默认为15秒。
  • 端口被禁用之后进入Disable状态。

  • 一个端口从不转发状态进入转发状态之前需要等待两次Forward Delay间隔(后文详细解释端口状态变换),以解决前文所述可能的临时环路问题

STP端口收敛过程

初次收敛:
传统STP初次收敛称为2倍的Forward Delay,时间为30S:

  1. 交换机默认启用STP生成树后,端口从Disable切换到Listening状态,此状态接收并发送BPDU,进而端口选举,并持续15S。
  2. 15S过后,进而Learing状态,持续15S,目的是为了继续防止临时环路的发生,但由于端口角色已经选举出来,为了收敛后节省时间而能高效的转发,所以在Learing状态下学习MAC地址表,但是不能转发数据包
  3. 在30S后,最终进入Forwarding状态开始转发数据包。

    注:在Listening状态下,已经选举出端口角色,所以阻塞端口会直接由Listening进入Blocking状态。


    拓扑变化重新收敛:
    交换机在以下状态下会改变自己存储的BPDU:

  4. 收到一份比收敛后根桥更优的BPDU

  5. 在20S(MAXage)后没有收到根桥的BPDU但收到了一份新的BPDU(标准,huawei实现中采用802.1W STP模式18S老化时间)在拓扑发生变化时,BPDU报文中的MAX age为最大等待时间为20S,当交换机RP或BP端口down掉后,交换机接收不到根桥发送过来的BPDU后,等待MAXage中的时间(20S,华为使用18S),在20S后重新收敛并重新选举出端口状态,再次经历二倍的Forward Delay(30S)到达Forwarding状态。

在STP模式中,当RP端口出现故障,表示去往根桥的路径失效,则根桥的BPDU也会立即失效,依据根桥选举出来的所有端口状态全部失效。

AP交换机链路故障:
52.jpg
AP交换机上Forwarding链路故障,收敛时间为30S

  • LSW3检测到自己的RP端口G0/0/2端口出现故障。
  • 由于RP端口Down掉,所以认为原有BPDU无效,交换机认为自身是根桥,立刻将自己所有的端口变为DP端口并发送BPDU。
  • LSW2的G0/0/3端口收到了新的BPDU,与原始根桥的BPDU进行比较,发现原始为最优,由于为DP端口,收到了次的BPDU,认为对端设备存在问题,会立刻发送此BPDU给LSW3。
  • LSW3收到BPDU后,发现优于自身,于是将g/0/3端口变为RP,并进入2倍的Forward Delay
  • LSW3从下游发送TCN置位的BPDU送往上游路由器LSW2,LSW2发送TCN置位的BPDU送往上游交换机Root,上游Root交换机LSW1收到TCN置位的BPDU后,发送TC置位的BPDU给下游交换机,下游交换机收到后缩减MAC地址表生存时间

DP交换机链路故障:
53.jpg
原始收敛,如Cisco(50S):

  • LSW4的RP端口G0/0/1端口故障。
  • LSW4的RP端口Down掉后,会立刻认为原BPDU失效,认为自己为根桥,发送BPDU给LSW5
  • LSW5收到BPDU后,由于为AP端口,不会回复BPDU,而是等待MAX Age时间超时,G0/0/3端口中的BPDU老化消除,此端口重新进行选举,从RP留下来的BPDU从G0/0/3端口送入LSW4
  • 最终,LSW5的G0/0/3端口变为DP,LSW4的G0/0/3端口变为RP,进入两倍的Forward Delay变为Forwarding状态


    华为收敛(30S):

  • LSW4的RP端口G0/0/1端口故障

  • LSW4的RP端口Down掉后,会立刻认为原BPDU失效,认为自己为根桥,发送BPDU给LSW5
  • LSW5收到BPDU后,会立刻从G0/0/3端口发出自己保存的最优BPDU并重新进行端口的选举
  • 最终,LSW5的G0/0/3端口变为DP,LSW4的G0/0/3端口变为RP,进入两倍的Forward Delay变为Forwarding状态

非直连链路故障:
54.jpg
原始收敛,如Cisco(50s):

  • HUB1的E0/0/1端口出现问题,但是LSW2并不能知道连接HUB的G0/0/1接收不到LSW1的BPDU,等待Max Age。
  • Max Age过后,LSW2认为去往根桥的根端口G0/0/1链路出现问题,于是认为自己是根桥,发送BPDU重新收敛
  • LSW3的阻塞端口G0/0/3由于长时间收不到SW2发送过来的BPDU,Max age超时后,也会进入重新收敛状态,收到LSW2的BPDU后,将比较原先的LSW1的BPDU,发现LSW1的BPDU更优,发送LSW1的BPDU给LSW2,LSW2收到后重新收敛,经历两倍的转发延迟进入转发状态。
  • LSW2发送TCN置位的BPDU给上游路由器LSW3,LSW3收到TCN置位的BPDU后,继续往上游发送TCN置位的BPDU给根桥LSW1,LSW1发送TC置位的BPDU给所有的下游交换机,最终交换机缩短MAC地址表的生存时间。


    华为收敛(48S):

  • HUB1的E0/0/1端口出现问题,但是LSW2并不能知道连接HUB的G0/0/1接收不到LSW1的BPDU,等待Max Age。

注:此处的Max Age时间为Hello时间3timer Factor(因子自定义,huawei为3)=18S

  • Max Age18S过后,LSW2认为去往根桥的根端口G0/0/1链路出现问题,于是认为自己是根桥,发送BPDU重新收敛
  • LSW3的阻塞端口G0/0/3由于长时间收不到SWB发送过来的BPDU,Max age超时后,也会进入重新收敛状态,收到LSW2的BPDU后,将比较原先的LSW1的BPDU,发现LSW1的BPDU更优,发送LSW1的BPDU给LSW2,LSW2收到后重新收敛,经历两倍的转发延迟进入转发状态。
  • LSW2发送TCN置位的BPDU给上游路由器LSW3,LSW3收到TCN置位的BPDU后,继续往上游发送TCN置位的BPDU给根桥LSW1,LSW1发送TC置位的BPDU给所有的下游交换机,最终交换机缩短MAC地址表的生存时间。



3.4 标准端口状态描述

55.png
Forwarding Delay

  • 端口在过渡状态的停留时间为15秒
  • Forwarding Delay、hello timer与Max Age之间需要满足一定的计算关系,它们的默认值是按照网络直径为7进行计算的结果


    端口状态描述

  • 当端口正常启用之后,端口首先进入Listening状态,开始生成树的计算过程。

  • 如果经过计算,端口角色需要设置为预备端口(Alternate Port),则端口状态立即进入Blocking。
  • 如果经过计算,端口角色需要设置为根端口(Root Port)或指定端口(Designated Port),则端口状态在等待Forward Delay之后从Listening状态进入Learning状态,然后继续等待Forward Delay之后,从Learning状态进入Forwarding状态,正常转发数据帧


    (1)Disabled:
    禁用状态,端口即不处理和转发BPDU报文,也不转发用户流量。交换机接口UP的一瞬间,端口处于此状态。
    (2)Blocking:
    阻塞状态,此状态下接收并处理BPDU,但是不向外发送BPDU,不学习MAC地址,不发送数据帧,AP最终收敛为此状态。
    (3)Listening:
    侦听状态,此状态下接收并转发BPDU,不学习MAC地址,不转发数据帧(此状态理论上所有的交换机端口默认已经选举出所有的端口角色),初次收敛停留时间为15S。
    (4)Learning:
    学习状态,此状态下接收BPDU并转发BPDU,并学习MAC地址,不转发数据帧,初次收敛停留时间为15S。
    注:Learing在初次收敛和拓扑改变收敛分别的作用:
    ① 初次收敛,由于端口角色已经选举出来,为了收敛后节约时间而能高效的转发,所以在Learing状态下学习MAC地址表
    ② 再次收敛,由于链路状态发生变化导致mac地址表错误,所以清空MAC表并不转发数据重新学习MAC地址
    (5)Forwarding:
    转发状态,此状态下接受BPDU,并学习MAC地址,转发数据帧。


3.5 华为端口状态描述

56.png

  • 华为技术有限公司数据通信设备缺省情况处于MSTP模式,当从MSTP模式切换到STP模式,运行STP协议的设备上端口支持的**端口状态仍然保持和**MSTP支持的端口状态一样,支持的状态仅包括Forwarding、Learning和Discarding

4.STP配置BPDU


4.1 封装配置BPDU

57.png

  • 用于计算生成树的各种信息和参数被封装在配置BPDU(Configuration Bridge Protocol Data Unit)中在交换机之间发送。
  • 配置BPDU使用标准LLC格式封装在以太网数据帧中。
  • 配置BPDU只在指定端口(Designated Port)上发送

字段含义:

  • DMAC:目的MAC地址。发送配置BPDU的数据帧使用保留的组播MAC地址01-80-C2-00-00-00,此地址标识所有交换机,但是不能被交换机转发,也即只在本地链路有效
  • LLC Header
    • 目的服务访问点(Destination Service Access Point, DSAP)和源服务访问点(Source Service Access Point, SSAP)的值都设为二进制01000010。
    • Control字段的值设为3。



4.2 配置BPDU的内容

58.png
59.jpg
BPDU有两种类型:

  • 配置BPDU(Configuration Bridge Protocol Data Unit)
  • TCN BPDU(Topology Change Notification)


  • 当配置BPDU只用于计算生成树,不用于传递拓扑改变信息的时候:
    • Protocol Identifier(协议标识)Protocol Version Identifier(协议版本标识)BPDU Type(BPDU类型)Flags(标志)四部分设置为全0
  • Root Identifier,Root Path Cost,Bridge Identifier和Port Identifier四部分用于检测最优的配置BPDU,进行生成树计算。
  • 配置BPDU在以下3种情况下会产生:
    • 只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
    • 当根端口收到配置BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份配置BPDU。
    • 当指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU。

重要字段含义:

  • Message Age随时间增长而变大;
  • Max Age默认为20秒,如果Message Age达到Max Age,则此配置BPDU被认为已经过期。(该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败
  • Hello Time默认为2秒,也即在指定端口上,配置BPDU每隔两秒发送一次。
    • 用于检测链路是否存在故障。
    • 当网络拓扑稳定后,该计时器只有在根桥上进行修改才有效。
    • 当拓扑发生变化时,变更消息不受Hello Time影响。
  • Forward Delay默认为15秒。


    BPDU各字段详解:

  • Protocol Identifier(协议标识):当是生成树协议的时候字段为0x0000

  • Protocol Version Identifier(协议版本标识):对于STP协议该字段为0.RSTP为2.MSTP为3
  • BPDU Type(BPDU类型):当该字段是0x00时为配置BPDU,为0x80为TCN BPDU
  • BDPU flags(BPDU标志):对于标准STP而言,该字段(共8bit)用于网络拓扑变更标志,STP只使用了该字段的最高及最低两个比特位,最低位是TC(Topology Change,拓扑变更)标志,最高位是TCA(Topology Change Acknowledgment,拓扑变更确认)标志。

以下字段来确定最优的BPDU:
60.png

  • Root Identifier(根桥ID):根桥的桥ID,此字段包含优先级和MAC地址。
  • Root Path Cost(根路径开销):去往根桥的最小路径开销。
  • Bridge Identifier(桥ID):发送本BPDU的交换机桥ID,由发送交换机的优先级和MAC组成
  • Port Identifier(接口ID):发送本BPDU的接口的接口ID,由接口优先级和接口编号组成。

重要字段含义:

  • Message Age是本BPDU的寿命,在根桥所发送的BPDU中,该字段为0,此后BPDU每经过一个交换设备,该字段都增加1,因此实际上这个字段指示的是BPDU所经过的交换设备的个数。
  • MAX age是BPDU的最大存活时间,默认为20秒,如果Message Age达到MAX Age,则此配置BPDU被认为已经过期。(该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败)
  • Hello Time默认为2秒,也即在指定端口上,配置BPDU每个两秒发送一次。
    • 用于检测链路是否存在故障。
    • 当网络拓扑稳定后,该计时器只有在根桥上进行修改才有效。
    • 当拓扑发生变化时,变更信息不受Hello Time影响。
    • 可以使用stp timer hello修改发送周期
  • Forward Delay默认为15秒。该字段是接口在侦听和学习状态所停留的时间

注:如果一台交换机接收到自己发出去的BPDU,它会将接收到BPDU的端口阻塞掉,防止环路。
61.jpg


4.3 配置BPDU中的重要参数

62.png

  • 此表格列出了配置BPDU中四个与检测最优配置BPDU相关的参数以及相关描述。

5.STP拓扑计算


5.1 STP拓扑计算参数

5.1.1 配置BPDU中的重要参数

63.png


5.1.2 交换机全局参数

64.png

  • 此表格列出了重要的交换机全局参数,相关描述以及与配置BPDU中相关参数的关系。
  • 根端口的选举与端口所维护的优先级参数有关,在后文中详细描述。
  • 当交换机启动,初始化生成树协议时,Designated Root为交换机本身,也即交换机刚刚初始化的时候,总是认为自身为根交换机;Root Path Cost为0;没有Root Port,所有已被启用的端口都是指定端口(Designated Port)。
  • 因此,当交换机初始化之后,从所有端口上向外发送
    • Root Identifier为自身标识
    • Root Path Cost为0
    • Bridge Identifier为自身标识
    • Port Identifier为发送端口的端口标识的配置BPDU。



5.1.3 端口参数

65.png

  • 此表列出了端口上维护的重要参数,这些参数大都和配置BPDU有关系。
  • 交换机初始化之后,由于认为自身为根交换机,所有端口均为指定端口,因此端口上的参数设置如下:
    • Designated Root为交换机本身;
    • Designated Cost为0;
    • Designated Bridge为交换机本身;
    • Designated Port为端口自身的标识。



5.2 STP拓扑计算过程

5.2.1 初始化全局参数和端口参数

66.png
本例中:

  • SWA为网络中的原有根交换机(Root),SWC为刚加入到该网络中的新交换机。
  • SWC初始化全局参数为:
    • Designated Root为自身的交换机标识32768.00e0-fc41-43b9;
    • Root Path Cost为0;
    • Root Port为空;
    • Bridge Identifier为自身的交换机标识32768.00e0-fc41-43b9。
  • 端口参数初始化为:
    • Designated RootDesignated Bridge初始化为交换机本身32768.00e0-fc41-43b9;
    • Designated Cost初始化为0;
    • Designated Port初始化为自身的端口标识-默认优先级128与端口号的组合。



5.2.2 收到更优配置BPDU并记录在端口参数中

67.png

  • 端口上的参数如前所述进行初始化之后,开始比较在端口上所接收到的配置BPDU和端口参数中的记录,如果端口参数中记录的更优先(表中所列出的比较项均为值越小越优先),则丢弃配置BPDU,如果配置BPDU中记录的更优先,则对端口参数做如下修改:
    • 端口参数中的Designated RootDesignated CostDesignated BridgeDesignated Port分别设置成此配置BPDU中的Root IdentifierRoot Path CostBridge IdentifierPort Identifier

68.png

  • 假设初始化之后SWC的E2端口首先从SWB收到一个配置BPDU,SWC收到此配置BPDU后,将此配置BPDU中的相关参数和E2端口的参数相比较,发现配置BPDU中的Root Identifier比E2端口参数中记录的Designated Root更优先,按照如前所述的规则,将E2端口的相关参数修改为配置BPDU中的值



5.2.3 计算根交换机、根端口和根路径开销

69.png

  • 从端口上收到一个更优的配置BPDU之后,重新计算根交换机、根端口和根路径开销的过程将被启动。

计算过程为:

    1. 根据所有的端口上记录的参数,依次比较Designated RootDesignated Cost和端口Cost之和Designated BridgeDesignated Port,从中选出一个记录了最优参数的端口,并且此端口上记录的Designated Root要比交换机自身的Bridge Identifier(交换机标识)更优先,此端口即为根端口
    1. 选择出此端口之后,需要更新全局参数
      • 更新交换机全局参数Designated Root为根端口记录的Designated Root;
      • 更新交换机全局参数Root Path Cost为根端口记录的Designated Cost与根端口的Port Cost之和;
    1. 如果任何端口记录的Designated Root参数都不比交换机自身的Bridge Identifier更优先,
      • 则交换机全局参数Designated Root设置为交换机自身的Bridge Identifier;
      • 交换机全局参数Root Path Cost设置为0。
  • 本例中:E2端口记录了最优的参数,因此更新全局参数如图所示,Designated Root为E2端口记录的Designated Root;Root Path Cost为E2端口记录的Designated Cost(200)和E2端口的Port Cost(200)之和(400)。



5.2.4 选择指定端口

70.png

  • 根交换机,根端口,根路径开销计算完成,并更新了交换机全局参数之后,启动指定端口选择过程,决定非根端口是否可以成为指定端口


    满足下列条件之一的,成为所连网段上的指定端口:

    1. 已经被选为指定端口,即端口所记录的Designated Bridge为交换机自身的交换机标识,Designated Port为端口自身的端口标识;
    1. 端口参数中的Designated Root和交换机全局参数Designated Root不一致;
    1. 交换机全局参数Designated Root和端口参数Designated Root一致,但是交换机全局参数Root Path Cost比端口参数Designated Cost更优先;
    1. 全局参数中的根交换机和根路径开销都和端口记录的一致,但是交换机自身的交换机标识比端口记录的Designated Bridge更优先;
    1. 全局参数中的根交换机和根路径开销都和端口记录的一致,交换机自身的交换机标识和端口记录的Designated Bridge一致,但是端口自身的标识比端口记录的Designated Port更优先。



5.2.5 更新指定端口参数

71.png

  • 确定一个端口可以成为指定端口之后,交换机需要修改指定端口的参数,修改规则如下:
    • Designated Root设置为交换机全局参数Designated Root;
    • Designated Cost设置为交换机全局参数Root Path Cost;
    • Designated Bridge设置为交换机自身的Bridge Identifier;
    • Designated Port设置为端口自身的Port Identifier。



5.2.6 收到新的配置BPDU

72.png

  • 假设处理完E2端口上收到的配置BPDU之后,SWC又从E1端口上收到SWA发送的配置BPDU,处理过程如前所述,首先比较端口参数和配置BPDU中的参数,发现新收到的BPDU比端口记录的参数更优先,因此修改E1端口的参数。



5.2.7 重新计算根交换机、根端口和根路径开销

73.png

  • 根据如前所述的规则(从端口上收到一个更优的配置BPDU之后),重新启动计算根交换机、根端口和根路径开销的过程,E1端口被选择为新的根端口
  • 选择新的根端口之后,重新修改交换机全局参数,Root Path Cost修改为200,根端口更新为E1。



5.2.8 重新计算指定端口并更新指定端口参数

74.png

  • 按照如前所述规则,检测除了新的根端口之外的其它端口是否可以成为指定端口,不能成为指定端口的,成为预备端口(Alternate Port)。


    本例中:

  • E3端口符合成为指定端口的条件(如前所述条件列表第一条),因此E3端口成为指定端口;

  • E2端口不符合成为指定端口的任何条件,因此E2端口成为预备端口(Alternate Port)。



5.2.9 在指定端口上发送配置BPDU

75.png

  • 交换机在指定端口上向外发送配置BPDU。


    配置BPDU中的参数设置规则如下:

    1. Root Identifier设置为端口参数Designated Root,也即全局参数Designated Root;
    1. Root Path Cost设置为端口参数Designated Cost,也即全局参数Root Path Cost;
    1. Bridge Identifier设置为交换机自身的Bridge Identifier;
    1. Port Identifier设置为发送端口的Port Identifier。



5.3 等路径开销计算

76.png
左侧拓扑描述

  • 根据STP根桥选举原则,很容易得出S1为根桥,接下来确定根端口、指定端口和Alternate端口。
  • S2从接口E0和E1接收到S1发送两条BPDU,分别为{0,0,0,E0}和{0,0,0,E1},该两个BPDU只有发送端口不同,根据比较原则,较小的发送端口胜出,所以E0为根端口,E1为Alternate端口。


    右侧拓扑描述

  • 根据STP根桥选举原则,很容易得出S1为根桥,接下来确定根端口、指定端口和Alternate端口。

  • S2从接口E0和E1接收到S1发送两条BPDU,分别为{0,0,0,E0}和{0,0,0,E0},该两个BPDU优先级向量均相同,根据比较原则,只能比较接收端口的PID大小。经比较,接收端口E0较小,所以E0为根端口,E1为Alternate端口。



5.4 对低优先级BPDU的处理

77.png

  • 通常情况下,只有根桥交换机才会发送配置BPDU,其他非根网桥只从指定端口转发从根端口接收到的配置BDPU。
  • 非根网桥指定端口只有在接收到次优BPDU时,才会主动发送最优BPDU。


    拓扑描述:

  • 当S2收到S4的次优BPDU后,会马上发送回应配置BPDU,这是因为网桥都会保存当前最优的配置BPDU。



6.STP拓扑变化

6.1 拓扑结构改变导致MAC地址表错误

78.png

  • 默认情况下,MAC地址表中的动态表项生存期为300秒(5分钟)。
  • 当发生拓扑变化的时候,由于拓扑的收敛时间一般为50S左右,而MAC地址表的刷新时间为300S,所以可能导致这段时间无法通信。


    本例中:

  • 稳定拓扑下,在SWC上到达LAND某PC的目的端口应当为E1;

  • 当SWB的E1接口断开之后,E2接口成为新的根端口,从SWC到达该PC的目的地址应当修改为E2,但是交换机不能检测到拓扑改变,导致MAC地址表错误,最长可导致5分钟的数据转发错误
  • 解决问题的办法:当拓扑结构改变之后,通过一定的机制,使拓扑改变的信息在整网内泛洪,并修改MAC地址表的生存期为一个较短的数值,等拓扑结构稳定之后,再恢复MAC地址表的生存期。
  • STP规定这个较短的MAC地址表生存期使用交换机的Forward Delay参数,默认为15秒



6.2 泛洪拓扑改变信息

79.png
Topology Change Notification,拓扑变更通知BPDU,通常端口的重新收敛会带来STP域内的mac地址表错误,这种错误在上游交换机中也是存在的,交换机mac表映射默认为300s,当出现mac地址表错误后,300s内由于存在错误的mac地址表,交换机将无法正确的转发数据。当下游交换机感知到拓扑发生变化时,向上游发送的拓扑变更通知,TCN结合configuration BPDU中的flage位的TC和TCA进行全网拓扑MAC地址重新收敛++++++++++++++++++++++++++++++。

注:标准802.1D STP中,接口无论Down还是Up都会产生TCN BPDU用于刷新当前网络中交换机的MAC地址表,而Huawei实现中802.1D STP和802.1W STP的实现方式是一样的,即有接口由原来的Down状态变为Up(Forwarding)状态,才会产生TCN BPDU。

  • 注意SWA也会向SWB发送TCA来确认收到的TCN
  • 拓扑改变通知BPDU:TCN
  • 拓扑改变确认配置BPDU:TCA
  • 拓扑改变配置BPDU:TC


    在向整网泛洪拓扑改变信息的过程中,共涉及三种BPDU:

  • 1. 拓扑改变通知BPDU:Topology Change Notification BPDU。用于非根交换机在根端口上向上行交换机通告拓扑改变信息,并且每隔Hello Time(2秒)发送一次,直到收到上行交换机的拓扑改变确认配置BPDU或者拓扑改变配置BPDU。(Flag位10000000

    1. 拓扑改变确认配置BPDU:Topology Change Acknowledgment Configuration BPDU。配置BPDU的一种,和普通配置BPDU不同的是此配置BPDU设置了一个Flag位。用于非根交换机在接收到拓扑改变通知BPDU的指定接口上向下行交换机发送拓扑改变通知的确认信息。(Flag位00000001
    1. 拓扑改变配置BPDU:Topology Change Configuration BPDU。此配置BPDU设置了另外一个Flag位。用于从根交换机向整网泛洪拓扑改变信息,所有交换机都在自己所有的指定端口上泛洪此BPDU。(Flag位10000000


    拓扑描述:

  • SWA收到SWB发送的拓扑改变通知BPDU之后,每隔2秒向网络中发送拓扑改变配置BPDU(设置了一个Flag位的配置BPDU),使网络中所有的交换机都把MAC地址表的生存期修改为Forward Delay(15秒),经过一段时间(Max Age加上Forward Delay,默认为35秒)之后,SWA(根交换机)在自己发送的配置BPDU中,清除Flag位,表示网络拓扑已经稳定,网络中的交换机恢复MAC地址生存期。


    TCN拓扑变更后删除MAC表举例:
    80.jpg

  • 在网络拓扑发生变化后,下游设备会不间断地向(RP端口)上游设备发送TCN BPDU报文(默认发送时间为35S)。

  • 上游设备收到下游设备发来的TCN BPDU报文后,也会将此报文由RP端口发送给上游设备,并将BPDU报文中的Flags的TCA位设置为1,然后发送给下游设备,告知下游设备停止发送TCN BPDU报文。
  • 上游设备复制一份TCN BPDU报文,向RP端口的根桥方向发送。并重复步骤1、2、3,直到根桥收到TCN BPDU报文。
  • 根桥把配置BPDU报文中的Flags的TC位置为1后发送,根桥和所有收到TC置位的BPDU的路由器会将修改MAC表的老化时间,如果MAC老化时间小于15S则删除此MAC映射,大于15S的变为15S,huawei设备会直接删除MAC地址表的映射。



6.3 封装拓扑改变通知BPDU

81.png

  • 拓扑改变通知BPDU和配置BPDU使用的是相同的封装方式。

6.4 TCN消息

82.png


6.5 收敛时长

83.png
根桥失效:

  • 当S1出现故障,S2和S3都不能收到来自根桥的BPDU报文,他们在等待最长max age时间后,才能发现根桥失效,进而进行新的根桥选举、根端口和指定端口的确定。所以到达最终的拓扑稳定需要经历BPDU的老化、2个forwarding delay(listening+learning)时长,即50秒


    链路失效:

  • 当S3连接S1的链路失效后,S3马上感知到这一情况的发生。S3的阻塞端口立即进入listening状态,并发送以自己为根的配置BPDU。S2收到S3的次优BPDU后,立即回复以S1为根的配置BPDU,因此S2连接S3的端口成为根端口,S3连接S2的端口成为指定端口。S3的面向S2的端口状态要经历listening、learning再到forwarding,即经历30秒。

  • 链路失效或者链路增加均需要经历30秒,才能恢复故障。



7. SPT的不足

84.jpg

  • 没有对端口状态和端口角色进行细致区分
  • 算法被动,收敛速度过慢
  • 极不适应拓扑频繁变化的网络

STP的不足:

  • STP没有对端口状态和端口角色进行细致区分
    • 例如从端口运行角度看,端口处于Blocking和Listening状态没有任何区别,因为这两种状态下的端口都无法收发数据,也不能进行MAC地址学习。
  • STP算法是被动的算法依赖定时器等待的方式判断拓扑变化,收敛速度慢。
  • STP的算法要求在稳定的拓扑中,根桥主动发出配置BPDU报文,而其他设备进行处理,传遍整个STP网络。