生成树协议原理

作者: mik1th0n | 来源:发表于2017-08-20 18:31 被阅读0次

    本文首次发布于 Mlin Blog简书CSDN,作者 @木林(Mlin) ,转载请保留原文链接。

    前言

    正文

    一、STP

    为了提高网络可靠性,交换网络中通常会使用一些冗余链路。然而,冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,进而会影响到用户的通信质量。生成树协议STP(Spanning Tree Protocol)可以在提高可靠性的同时又能避免环路带来的各种问题。

    1 STP出现背景

    1.1 广播风暴

    • 环路会引起广播风暴。
    • 网络中的主机会收到重复数据帧。
    • 根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧,或者是一个目的MAC地址未知的单播帧,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧。
    • 主机A向外发送了一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。SWB接收到此帧后,将其转发到SWA和SWC,SWA和SWC也会将此帧转发到除了接收此帧的其他所有端口,结果此帧又会被再次转发给SWB,这种循环会一直持续,于是便产生了广播风暴。交换机性能会因此急速下降,并会导致业务中断。

    1.2 MAC地址表震荡

    • 环路会引起MAC地址表震荡。
    • 交换机是根据所接收到的数据帧的源地址和接收端口生成MAC地址表项的。
    • 主机A向外发送一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。SWB收到此数据帧之后,在MAC地址表中生成一个MAC地址表项,00-01-02-03-04-AA,对应端口为G0/0/3,并将其从G0/0/1和G0/0/2端口转发。此例仅以SWB从G0/0/1端口转发此帧为例进行说明。
    • SWA接收到此帧后,由于MAC地址表中没有对应此帧目的MAC地址的表项,所以SWA会将此帧从G0/0/2转发出去。
    • SWC接收到此帧后,由于MAC地址表中也没有对应此帧目的MAC地址的表项,所以SWC会将此帧从G0/0/2端口发送回SWB,也会发给主机B。
    • SWB从G0/0/2接口接收到此数据帧之后,会在MAC地址表中删除原有的相关表项,生成一个新的表项,00-01-02-03-04-AA,对应端口为G0/0/2。此过程会不断重复,从而导致MAC地址表震荡。

    2 STP的基本概念

    2.1 一般概念

    • 遵循标准
      • STP遵循IEEE std 802.1D标准
    • 基本思想
      • STP根据拓扑结构构建无环网络
    • 实现方法
      • STP通过阻塞适当的端口来避免环路
    • STP可以消除网络中的环路。其基本理论依据是根据网络拓扑构建(生成)无回路的连通图(就是树),从而保证数据传输路径的唯一性,避免出现环路导致报文流量的增加和循环。STP是工作在OSI第二层(Data Link Layer)的协议。
    • STP协议通过在交换机之间传递特殊的消息并进行分布式的计算,来决定在一个有环路的网络中,某台交换机的某个端口应该被阻塞,用这种方法来避免掉环路

    2.2 重要概念

    • 根桥RB(Root Bridge)
      • 根桥就是网桥ID最小的桥,由优先级和MAC地址组成。
    • 根端口RP(Root Port)
      • 所谓根端口就是去往根桥路径开销最小的端口,根端口负责向根桥方向转发数据,这个端口的选择标准是依据根路径开销判定。在一台设备上所有使能STP的端口中,根路径开销最小者,就是根端口。很显然,在一个运行STP协议的设备上根端口有且只有一个,根桥上没有根端口。
    • 指定端口(DP)和指定桥
      • 每一个网段选择到根桥最近的网桥作为指定桥,该网桥到这个网段的端口为指定端口。
      • 指定桥通过指定端口负责向本网段转发流量和发送配置消息。
    • 替代端口AP(Alternate Port)
      • 既不是根端口,又不是指定端口

    2.3 配置BPDU

    • 配置BPDU

      • 传递根桥ID,累计根路径开销,发送设备BID,发送端口PID等参数
      • 由根桥周期(hello time)发送
      • 发送目的为组播MAC地址01-80-C2-00-00-00
      • 老化时间为Max Age
    • 配置BPDU在以下3种情况下会产生

      • 只要端口使能STP,则配置BPDU就会按照Hello Time定时器规定的时间间隔从指定端口发出。
      • 当根端口收到配置BPDU时,根端口所在的设备会向自己的每一个指定端口复制一份配置BPDU。
      • 当指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的BPDU。

    2.4 STP的作用

    • 消除环路:通过阻断冗余链路来消除网络中可能存在的环路。
    • 链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连通性。

    3 STP报文格式

    字段内容 含义
    Protocol Identifier 协议ID=“0”
    Protocol Version Identifier 协议版本标识符,STP为0,RSTP为2,MSTP为3。
    BPDU Type BPDU类型,MSTP为0x02。 0x00:STP的Configuration BPDU 0x80:STP的TCN BPDU(Topology Change Notification BPDU) 0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU)
    Flags 标识位,对于“标记域”(Flags),第一个bit(左边、高位bit)表示“TCA(拓扑改变响应)”,最后一个bit(右边、低位bit)表示“TC(拓扑改变)”。
    Root Identifier 根桥BID,网桥ID都是8个字节——前两个字节是网桥优先级,后6个字节是网桥MAC地址。
    Root Path Cost 根路径开销,本端口累计到根桥的开销。
    Bridge Identifier 发送者BID,本交换机的BID。
    Port Identifier 发送端口PID,发送该BPDU的端口ID。
    Message Age 该BPDU的消息年龄。
    Max Age 消息老化年龄。
    Hello Time 发送两个相邻BPDU间的时间间隔。
    Forward Delay 控制Listening和Learning状态的持续时间。
    • 根路径开销(Root Path Cost)
      • 从发送该BPDU的网桥到根桥的最小路径开销,即到根桥的最短路径上所有链路开销的和。
    • 桥ID(Bridge Identifier)
      • 发送BPDU的桥ID,对于LAN来说,就是指定桥ID(DesignatedBridgeID)。
    • 发送端口ID(Port Identifier)
      • 发送BPDU的端口ID,端口ID由端口优先级和端口号组成。对于LAN来说,就是指定端口ID(DesignatedPortID)
    • Hello Time
      • 运行STP协议的设备发送配置消息BPDU的时间间隔,用于检测链路是否存在故障。
      • 当网络拓扑稳定之后,该计时器只有在根桥上进行修改才有效。
      • 当拓扑发生变化时,变更消息不受Hello time影响。
      • 缺省为2秒。
    • Max Age
      • 运行STP协议的网络中非根桥设备收到配置BPDU报文后,报文中的Message Age和Max Age会进行比较:
        • 如果Message Age小于等于Max Age,则该非根桥设备继续转发配置BPDU报文。
        • 如果Message Age大于Max Age,则该配置BPDU报文将被老化。该非根桥设备直接丢弃该配置BPDU,可认为网络直径过大,导致根桥连接失败。
      • 实际实现中,配置BPDU报文经过一个桥,Message Age增加1。
      • 缺省为20。
    • Forward Delay
      • 配置BPDU传播到全网的最大延迟,默认为15秒。

    4 STP拓扑计算

    4.1 STP操作过程

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

    4.2 选举根桥

    • 初始状态所有交换机所有端口处于listening状态
    • 网络中桥ID最小的网桥被选为根桥
    • STP拓扑计算
      • 网络中所有的设备使能STP协议后,每一台设备都认为自己是根桥。此时,每台设备仅仅收发配置BPDU,而不转发用户流量,所有的端口都处于Listening状态。所有设备通过交换配置BPDU后,进行选举工作,选出根桥、根端口和指定端口。
      • 网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的设备ID。通过交换配置消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。
      • 交换机优先级是可以配置的,取值范围是0~65535,默认值为32768。
    • STP中根桥的选举依据的是桥ID,STP中的每个交换机都会有一个桥ID(Bridge ID) 。桥ID由16位的桥优先级(Bridge Priority)和48位的MAC地址构成。在STP网络中,桥优先级是可以配置的,取值范围是0~65535,默认值为32768。优先级最高的设备(数值越小越优先)会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先。
    • 交换机启动后就自动开始进行生成树收敛计算。默认情况下,所有交换机启动时都认为自己是根桥,自己的所有端口都为指定端口,这样BPDU报文就可以通过所有端口转发。对端交换机收到BPDU报文后,会比较BPDU中的根桥ID和自己的桥ID。如果收到的BPDU报文中的桥ID优先级低,接收交换机会继续通告自己的配置BPDU报文给邻居交换机。如果收到的BPDU报文中的桥ID优先级高,则交换机会修改自己的BPDU报文的根桥ID字段,宣告新的根桥。

    4.3 最优配置BPDU

    为了计算生成树,交换机之间需要交换相关的信息和参数,这些信息和参数被封装在BPDU(Bridge Protocol Data Unit)中。

    • BPDU有两种类型:配置BPDU和TCN BPDU。

      • 配置BPDU包含了桥ID、路径开销和端口ID等参数。STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态。在初始化过程中,每个桥都主动发送配置BPDU。在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。
      • TCN BPDU是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。
    • 配置BPDU中包含了足够的信息来保证设备完成生成树计算,其中包含的重要信息如下:

      • 根桥ID:由根桥的优先级和MAC地址组成,每个STP网络中有且仅有一个根桥。
      • 根路径开销:到根桥的最短路径开销。
      • 指定桥ID:由指定桥的优先级和MAC地址组成。
      • 指定端口ID:由指定端口的优先级和端口号组成。
      • Message Age:配置BPDU在网络中传播的生存期。
      • Max Age:配置BPDU在设备中能够保存的最大生存期。
      • Hello Time:配置BPDU发送的周期。
      • Forward Delay:端口状态迁移的延时。
    • 最优配置BPDU处理方法

    4.4 选举根端口和指定端口

    4.4.1 根端口选举
    • 非根交换机在选举根端口时分别依据该端口的根路径开销、对端BID(Bridge ID)、对端PID(Port ID)和本端PID。
    • 交换机的每个端口都有一个端口开销(Port Cost)参数,此参数表示该端口在STP中的开销值。默认情况下端口的开销和端口的带宽有关,带宽越高,开销越小。从一个非根桥到达根桥的路径可能有多条,每一条路径都有一个总的开销值,此开销值是该路径上所有接收BPDU端口的端口开销总和(即BPDU的入方向端口),称为路径开销。非根桥通过对比多条路径的路径开销,选出到达根桥的最短路径,这条最短路径的路径开销被称为RPC(Root Path Cost,根路径开销),并生成无环树状网络。根桥的根路径开销是0。
    • 一般情况下,企业网络中会存在多厂商的交换设备,华为X7系列交换机支持多种STP的路径开销计算标准,提供最大程度的兼容性。缺省情况下,华为X7系列交换机使用IEEE 802.1t标准来计算路径开销。
    • 运行STP交换机的每个端口都有一个端口ID,端口ID由端口优先级和端口号构成。端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。缺省情况下,端口优先级是128。端口ID(Port ID)可以用来确定端口角色。
    • 每个非根桥都要选举一个根端口。根端口是距离根桥最近的端口,这个最近的衡量标准是靠路径开销来判定的,即路径开销最小的端口就是根端口。端口收到一个BPDU报文后,抽取该BPDU报文中根路径开销字段的值,加上该端口本身的端口开销即为本端口路径开销。如果有两个或两个以上的端口计算得到的累计路径开销相同,那么选择收到发送者BID最小的那个端口作为根端口。
    • 如果两个或两个以上的端口连接到同一台交换机上,则选择发送者PID最小的那个端口作为根端口。如果两个或两个以上的端口通过Hub连接到同一台交换机的同一个接口上,则选择本交换机的这些端口中的PID最小的作为根端口。
    4.4.2 指定端口选举
    • 非根交换机在选举指定端口时分别依据根路径开销、BID、PID。
    • 未被选举为根端口或指定端口的端口为预备端口,将会被阻塞。
    • 在网段上抑制其他端口(无论是自己的还是其他设备的)发送BPDU报文的端口,就是该网段的指定端口。每个网段都应该有一个指定端口,根桥的所有端口都是指定端口(除非根桥在物理上存在环路)。
    • 指定端口的选举也是首先比较累计路径开销,累计路径开销最小的端口就是指定端口。如果累计路径开销相同,则比较端口所在交换机的桥ID,所在桥ID最小的端口被选举为指定端口。如果通过累计路径开销和所在桥ID选举不出来,则比较端口ID,端口ID最小的被选举为指定端口。
    • 网络收敛后,只有指定端口和根端口可以转发数据。其他端口为预备端口,被阻塞,不能转发数据,只能够从所连网段的指定交换机接收到BPDU报文,并以此来监视链路的状态。

    4.7 计时器

    • 配置BPDU报文每经过一个交换机,Message Age都加1。
    • 如果Message Age大于Max Age,非根桥会丢弃该配置BPDU。

    STP协议中包含一些重要的时间参数,这里举例说明如下:

    1. Hello Time是指运行STP协议的设备发送配置BPDU的时间间隔,用于检测链路是否存在故障。交换机每隔Hello Time时间会向周围的交换机发送配置BPDU报文,以确认链路是否存在故障。当网络拓扑稳定后,该值只有在根桥上修改才有效。
    2. Message Age是从根桥发送到当前交换机接收到BPDU的总时间,包括传输延时等。如果配置BPDU是根桥发出的,则Message Age为0。实际实现中,配置BPDU报文每经过一个交换机,Message Age增加1。
    3. Max Age是指BPDU报文的老化时间,可在根桥上通过命令人为改动这个值。Max Age通过配置BPDU报文的传递,可以保证Max Age在整网中一致。非根桥设备收到配置BPDU报文后,会将报文中的Message Age和Max Age进行比较:如果Message Age小于等于Max Age,则该非根桥设备会继续转发配置BPDU报文。如果Message Age大于Max Age,则该配置BPDU报文将被老化掉。该非根桥设备将直接丢弃该配置BPDU,并认为是网络直径过大,导致了根桥连接失败。

    5 STP端口状态

    5.1 标准端口状态

    • 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状态,正常转发数据帧。

    5.2 华为端口状态

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

    5.3 端口状态机

    • 端口转台转换
      • 1 端口初始化或使能;
      • 2 端口被选为根端口或指定端口。
      • 3 端口不再是根端口或指定端口。
      • 4 forward delay计时器超时。
      • 5 端口禁用或链路失效。
    • 图中所示为STP的端口状态迁移机制,运行STP协议的设备上端口状态有5种:
      • Forwarding:转发状态。端口既可转发用户流量也可转发BPDU报文,只有根端口或指定端口才能进入Forwarding状态。
      • Learning:学习状态。端口可根据收到的用户流量构建MAC地址表,但不转发用户流量。增加Learning状态是为了防止临时环路。
      • Listening:侦听状态。端口可以转发BPDU报文,但不能转发用户流量。
      • Blocking:阻塞状态。端口仅仅能接收并处理BPDU,不能转发BPDU,也不能转发用户流量。此状态是预备端口的最终状态。
      • Disabled:禁用状态。端口既不处理和转发BPDU报文,也不转发用户流量。

    6 STP拓扑变化

    6.1 TCN消息

    6.1.1 TCN BPDU
    • 指在下游拓扑发生变化时向上游发送拓扑变化通知,直到根节点
    • 产生条件:
      • 端口状态变为Forwarding状态,且该设备上至少有一个指定端口
      • 指定端口收到TCN BPDU,复制TCN BPDU并发往根桥
    6.1.2 TCN消息处理
    • TCN消息处理过程:
      • 在网络拓扑发生变化后,有端口转为转发状态的下游设备会不间断地向上游设备发送TCN BPDU报文。
      • 上游设备收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文。其它端口也有可能收到TCN BPDU报文,但不会处理。
      • 上游设备会把配置BPDU报文中的Flags的TCA位设置1,然后发送给下游设备,告知下游设备停止发送TCN BPDU报文。
      • 上游设备复制一份TCN BPDU报文,向根桥方向发送。
      • 重复步骤1、2、3、4,直到根桥收到TCN BPDU报文。
      • 根桥收到TCN BPDU后,会将下一个要发送的配置BPDU中的TCA位置位,作为对收到的TCN的确认,还会将该配置BPDU报文中的Flags的TC位置1,用于通知所有网桥拓扑发生了变化。
      • 根桥在之后的max age+forwarding delay时间内,将发送BPDU中的TC置位的报文,收到该配置BDPU的网桥,会将自身MAC地址老化时间缩短为forwarding delay。
    • 拓扑描述:
      • 拓扑中,经由STP计算,S1为根桥,S4的E1端口被阻塞。
      • 当S3的面向PC1的链路断掉之后,网络中的STP将进行重算,S4的E1端口将转变为指定端口,进入转发状态,此时S4会向上游发送TCN消息。
      • S2收到S3的TCN消息之后,将下一个配置BPDU中的TCA置位并从端口E3发送给S4,S2也从自己的根端口E1向根发送TCN BPDU。
      • S1收到S2发送的TCN消息之后,将下一个配置BPDU中的TCA和TC置位并从指定端口E1发送给S2。此后的(20秒+15秒)时间内,S1均将配置BPDU中的TC置位,各个网桥收到TC置位的BPDU后,将MAC地址的老化时间置为15秒。
      • 于是网络拓扑改变后,网络中交换机上的MAC地址表将很快收敛,避免无效流量浪费带宽。

    6.2 收敛时长

    STP时长最长可达30秒或者50秒

    • 根桥失效:
      • 当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秒,才能恢复故障。

    6.3 根桥故障

    • 非根桥会在BPDU老化之后开始根桥的重新选举。
    • 在稳定的STP拓扑里,非根桥会定期收到来自根桥的BPDU报文。如果根桥发生了故障,停止发送BPDU报文,下游交换机就无法收到来自根桥的BPDU报文。如果下游交换机一直收不到BPDU报文,Max Age定时器就会超时(Max Age的默认值为20秒),从而导致已经收到的BPDU报文失效,此时,非根交换机会互相发送配置BPDU报文,重新选举新的根桥。根桥故障会导致50秒左右的恢复时间,恢复时间约等于Max Age加上两倍的Forward Delay收敛时间。

    6.4 直连链路故障

    • SWB检测到直连链路物理故障后,会将预备端口转换为根端口。
    • SWB新的根端口会在30 秒后恢复到转发状态。
    • SWA和SWB使用了两条链路互连,其中一条是主用链路,另外一条是备份链路。生成树正常收敛之后,如果SWB检测到根端口的链路发生物理故障,则其Alternate端口会迁移到Listening、Learning、Forwarding状态,经过两倍的Forward Delay后恢复到转发状态。 t

    6.5 非直连链路故障

    • 非直连链路故障后,SWC的预备端口恢复到转发状态大约需要50秒。
    • SWB与SWA之间的链路发生了某种故障(非物理层故障),SWB因此一直收不到来自SWA的BPDU报文。等待Max Age定时器超时后,SWB会认为根桥SWA不再有效,并认为自己是根桥,于是开始发送自己的BPDU报文给SWC,通知SWC自己作为新的根桥。在此期间,由于SWC的Alternate端口再也不能收到包含原根桥ID的BPDU报文。其Max Age定时器超时后,SWC会切换Alternate端口为指定端口并且转发来自其根端口的BPDU报文给SWB。所以,Max Age定时器超时后,SWB、SWC几乎同时会收到对方发来的BPDU。经过STP重新计算后,SWB放弃宣称自己是根桥并重新确定端口角色。非直连链路故障后,由于需要等待Max Age加上两倍的Forward Delay时间,端口需要大约50秒才能恢复到转发状态。 e

    6.6 拓扑改变导致MAC地址表错误

    • MAC地址表项的默认老化时间是300秒。在这段时间内,SWB无法将数据从G0/0/2端口转发给主机B。
    • 在交换网络中,交换机依赖MAC地址表转发数据帧。缺省情况下,MAC地址表项的老化时间是300秒。如果生成树拓扑发生变化,交换机转发数据的路径也会随着发生改变,此时MAC地址表中未及时老化掉的表项会导致数据转发错误,因此在拓扑发生变化后需要及时更新MAC地址表项。
    • SWB中的MAC地址表项定义了通过端口GigabitEthernet 0/0/3可以到达主机A,通过端口GigabitEthernet 0/0/1可以到达主机B。由于SWC的根端口产生故障,导致生成树拓扑重新收敛,在生成树拓扑完成收敛之后,从主机A到主机B的帧仍然不能到达目的地。这是因为MAC地址表项老化时间是300秒,主机A发往主机B的帧到达SWB后,SWB会继续通过端口GigabitEthernet 0/0/1转发该数据帧。

    6.7 拓扑改变导致MAC地址表变化

    • 拓扑变化过程中,根桥通过TCN BPDU报文获知生成树拓扑里发生了故障。根桥生成TC用来通知其他交换机加速老化现有的MAC地址表项。
    • 拓扑变更以及MAC地址表项更新的具体过程如下:
    1. SWC感知到网络拓扑发生变化后,会不间断地向SWB发送TCN BPDU报文。
    2. SWB收到SWC发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的TCA位设置1,然后发送给SWC,告知SWC停止发送TCN BPDU报文。
    3. SWB向根桥转发TCN BPDU报文。
    4. SWA把配置BPDU报文中的Flags的TC位设置为1后发送,通知下游设备把MAC地址表项的老化时间由默认的300秒修改为Forward Delay的时间(默认为15秒)。
    5. 最多等待15秒之后,SWB中的错误MAC地址表项会被自动清除。此后,SWB就能重新开始MAC表项的学习及转发操作。

    二、RSTP

    1 STP的不足

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

    1.1 设备运行STP初始化场景

    • STP从初始状态到完全收敛至少需经过30s:

    1.2 交换机有BP端口,RP端口down掉场景

    • SWC与SWA的直连链路down掉,其BP端口切换成RP端口并进入转发状态至少需要经过30s:

    1.3 交换机无BP端口,RP端口down掉场景

    • SWB与SWA的直连链路down掉,则SWC的BP端口切换成DP端口并进入转发状态大约需要50s:

    1.4 运行STP的交换机连接用户终端的场景

    • 交换机连接终端的链路进入转发需要经过30s:

    1.5 STP的拓扑变更机制

    • 先由变更点朝根桥方向发送TCN消息,收到该消息的上游交换机就会回复TCA消息进行确认;最后TCN消息到达根桥后,再由根桥发送TC消息通知设备删除桥MAC地址表项,机制复杂,效率低下。
    • Flag两个置位。TC发17个。35S 交换机清空除接受端口之外所有端口学到的MAC,35内广播
    • 拓扑变更处理过程:
      • 在网络拓扑发生变化后,下游设备会不间断地向上游设备发送TCN BPDU报文。
      • 上游设备收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文。其它端口也有可能收到TCN BPDU报文,但不会处理。
      • 上游设备会把配置BPDU报文中的Flags的TCA位设置1,然后发送给下游设备,告知下游设备停止发送TCN BPDU报文。
      • 上游设备复制一份TCN BPDU报文,向根桥方向发送。
      • 重复上述步骤,直到根桥收到TCN BPDU报文。
      • 根桥把配置BPDU报文中的Flags的TC位置1后发送,通知下游设备直接删除桥MAC地址表项。

    1.6 端口角色

    1.7 端口状态

    2 RSTP的基本概念

    2.1 RSTP与STP的区别

    • RSTP与STP的不同
      • 增加端口角色
      • 减少端口状态
      • 充分利用BPDU中的Flag字段
      • 对BPDU的处理方式发生了改变
      • 提高收敛速度
      • 增加了保护功能

    2.2 端口角色

    • 根端口

    • 指定端口

    • Alternate端口

    • Backup端口

    • RSTP的端口角色共有4种:根端口、指定端口、Alternate端口和Backup端口。
    • 根端口和指定端口与STP协议中的定义相同,Alternate端口和Backup端口的描述如下:
    • 从配置BPDU报文发送角度来看:
      • Alternate端口就是由于学习到其它网桥发送的更优配置BPDU报文而阻塞的端口。
      • Backup端口就是由于学习到自己发送的更优配置BPDU报文而阻塞的端口。
    • 从用户流量角度来看:
      • Alternate端口提供了从指定桥到根的另一条可切换路径,作为根端口的备份端口。
      • Backup端口作为指定端口的备份,提供了另一条从根桥到相应网段的备份通路。
    • 给一个RSTP域内所有端口分配角色的过程就是整个拓扑收敛的过程。

    2.3 端口状态

    • RSTP端口状态
      • Forwarding
      • Learning
      • Discarding
    • RSTP的状态规范把原来的5种状态缩减为3种。根据端口是否转发用户流量和学习MAC地址来划分:
      • 如果不转发用户流量也不学习MAC地址,那么端口状态就是Discarding状态。
      • 如果不转发用户流量但是学习MAC地址,那么端口状态就是Learning状态。
      • 如果既转发用户流量又学习MAC地址,那么端口状态就是Forwarding状态。
    • RSTP计算过程:
      • 端口在Discarding状态下完成端口角色的确定:
        • 当端口角色确定为根端口和指定端口后,经过forwarding delay后,端口进入Learning状态,处于Learning状态的端口其处理方式和STP相同,此期间端口开始学习MAC地址并在Forwarding delay后进入Forwarding状态,开始转发数据。实际上,RSTP会通过其他方式加快这个过程。
        • 当端口角色确定为Alternate端口后,端口会维持在Discarding状态。

    2.4 BPDU中的Flag

    • RSTP对STP的BPDU改动
      • 充分利用STP中BPDU的Flag,明确端口角色
      • Type字段为2
      • Flag字段使用了之前的保留位,更改后的配置BPDU更名为RST BPDU
    image.png
    • 配置BPDU格式的改变,充分利用了STP协议报文中的Flag字段,明确了端口角色。在配置BPDU报文的格式上,除了保证和STP格式基本一致之外,RSTP作了一些小变化:
      • Type字段,配置BPDU类型不再是0而是2,所以运行STP的设备收到RSTP的配置BPDU时会丢弃。
      • Flags字段,使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU。
    • RSTP中BPDU的Flag字段解释:
      • 第0位为TC标志位,和STP相同。
      • 第1位为Proposal标志位,该位置位表示该BPDU为快速收敛机制中的Proposal报文。
      • 第2位和第3位为端口角色标志位,00表示端口角色为未知;01表示端口角色为根端口;10表示端口角色为Alternate或Backup端口;11表示端口为指定端口。
      • 第4位为Learning标志位,该位置位表示端口处于Learning状态。
      • 第5位为Forwarding标志位,该位置位表示端口处于Forwarding状态。
      • 第6位为Agreement标志位,该位置位表示该BPDU位快速收敛机制中的Agreement报文。
      • 第7位为TCA标志位,和STP相同。

    2.5 配置BPDU的处理

    • RSTP中配置BPDU的处理
      • 非根桥设备每隔Hello Timer从指定端口主动发送配置BPDU
      • BPDU超时计时器为3个Hello Timer
      • 阻塞端口可以立即对收到的次级BPDU进行回应

    BPDU处理发生的变化

    • 拓扑稳定后,配置BPDU报文的发送方式
      • 在STP中拓扑稳定后,根桥按照Hello Timer规定的时间间隔发送配置BPDU。其他非根桥设备在收到上游设备发送过来的配置BPDU后,才会触发发出配置BPDU,此方式使得STP协议计算复杂且缓慢。RSTP对此进行了改进,即在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置BPDU报文,非根桥设备仍然按照Hello Timer规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行。
    • 更短的BPDU超时计时
      • 如果一个端口连续3个Hello Time时间内没有收到上游设备发送过来的配置BPDU,那么该设备认为与此邻居之间的协商失败。而不像STP那样需要先等待一个Max Age。
    • 次级BPDU的处理
      • 当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身存储的RST BPDU与收到的RST BPDU进行比较。如果该端口存储的RST BPDU的优先级高于收到的RST BPDU,那么该端口会直接丢弃收到的RST BPDU,立即回应自身存储的RST BPDU。当上游设备收到下游设备回应的RST BPDU后,上游设备会根据收到的RST BPDU报文中相应的字段立即更新自己存储的RST BPDU。由此,RSTP处理次等BPDU报文不再依赖于任何定时器通过超时解决拓扑收敛,从而加快了拓扑收敛。

    3 RSTP快速收敛

    3.1 基本方法

    • STP收敛机制

      • 在STP中,为了避免出现临时环路,端口从启动到进入转发状态默认需要等待30秒的时间;也就是说STP只能依靠计时器被动的收敛。如果缩短端口从启动到转发的等待时间,可能会引起网络的不稳定。
    • RSTP快速收敛机制

      • 边缘端口机制

        • 在RSTP里面,如果某一个指定端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终端设备直连,这种端口叫做边缘端口。边缘端口不接收处理配置BPDU,不参与RSTP运算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用。但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。
      • 根端口快速切换机制

        • 如果网络中一个根端口失效,那么网络中最优的Alternate端口将成为根端口,进入Forwarding状态。因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥。
      • Proposal/Agreement机制

        • 当一个端口被选举成为指定端口之后,在STP中,该端口至少要等待一个Forward Delay(Learning)时间才会迁移到Forwarding状态。而在RSTP中,此端口会先进入Discarding状态,再通过Proposal/Agreement机制快速进入Forward状态。这种机制必须在点到点全双工链路上使用。

        Proposal/Agreement机制简称P/A机制。

    3.2 边缘端口机制

    • 边缘端口机制
      • 直接与用户相连
      • 可直接进入转发状态,无需延迟,不会触发拓扑变更
      • 收到RST BPDU则变为普通端口
    • 边缘端口连接的是终端,当网络拓扑发生变化时,边缘端口不会发生环路,所以边缘端口可以忽略两个Forwarding Delay,直接进入转发状态,无需任何延迟。
    • 边缘端口不接收处理配置BPDU,不参与RSTP运算,可以由Disable直接转到Forwarding状态,且不经历时延,就像在端口上将STP禁用。但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口,并重新进行生成树计算,从而引起网络震荡。

    3.3 根端口快速门切换机制

    • 根端口快速切换机制
      • 网桥根端口失效,且对端网桥指定端口依然为转发状态,则该网桥Alternate端口直接进入转发状态
    • 在RSTP中,Alternate端口为根端口的备份。当该网桥的根端口失效时,网桥会选择最优的Alternate端口作为新的根端口,直接进入Forwarding状态。因为通过这个Alternate端口连接的网段上必然有个指定端口可以通往根桥。

    3.4 P/A机制

    3.4.1 P/A机制介绍
    • 使指定端口快速进入转发状态
    • 工作模式为点对点的全双工模式
    • 包括Proposal和Agreement报文
    • Proposal/Agreement机制,其目的是使一个指定端口尽快进入Forwarding状态。
    • P/A机制要求两台交换设备之间链路必须是点对点的全双工模式。一旦P/A协商不成功,指定端口的选择就需要等待两个Forward Delay,协商过程与STP一样。
    • 新链路连接成功后,P/A机制协商过程如下
      • p0和p1两个端口马上都先成为指定端口,发送RST BPDU。
      • S2的p1口收到更优的RST BPDU,马上意识到自己将成为根端口,而不是指定端口,停止发送RST BPDU。
      • S1的p0进入Discarding状态,于是发送的RST BPDU中把proposal置1。
      • S2收到根桥发送来的携带proposal的RST BPDU,开始将自己的所有端口进入sync变量置位。
      • p2已经阻塞,状态不变;p4是边缘端口,不参与运算;所以只需要阻塞非边缘指定端口p3。
      • p2、p3、p4都进入Discarding状态之后,各端口的synced变量置位,根端口p1的synced也置位,于是便向S1返回Agreement位置位的回应RST BPDU。该RST BPDU携带和刚才根桥发过来的BPDU一样的信息,除了Agreement位置位之外(Proposal位清零)。
      • 当S1判断出这是对刚刚发出的Proposal的回应,于是端口p0马上进入Forwarding状态。
    3.4.2 P/A机制传递过程
    • P/A过程可以向下游继续传递
    • P/A过程可以向下游继续传递。
    • 当S1和S2之间新增了一条链路后,P/A机制工作如下:
      • S1通过端口E1发送Proposal置位的RST BPDU消息给S2。
      • S2收到该消息后,意识到E2为根端口,启用同步机制阻塞指定端口E1和E3以避免产生环路,然后将根端口设置为转发状态,并向S1发送Agreement消息。
      • S1收到Agreement消息后,指定端口E1马上进入转发状态。
      • S2处于同步状态的非边缘指定端口E1和E3发送Proposal报文。
      • S3收到S2发送的Proposal报文后,判断E1为根端口,启动同步过程,由于S3下游均为边缘端口,所以已经实现了同步,因此S3直接向S2回复Agreement消息。
      • S2收到S3发送的Agreement消息后,端口E1马上进入转发状态。
      • S4的处理过程如S3。
      • S2收到S4发送的Agreement消息后,端口E3马上进入转发状态。
      • P/A过程结束。

    4 RSTP拓扑变化

    • 检测拓扑发生变化条件
      • 一个非边缘端口迁移到Forwarding状态
    • 对拓扑改变的处理
      • 在每隔两个Hello timer时间内向所有其他指定端口和根端口发送TC置位的RST BPDU
      • 清除接收到TC报文的端口之外所有的非边缘端口学习到的MAC地址
    • 在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态。
    • 一旦检测到拓扑发生变化,将进行如下处理:
      • 为本交换设备的所有非边缘指定端口启动一个TC While Timer,该计时器值是Hello Time的两倍。在这个时间内,清空状态发生变化的端口上学习到的MAC地址。同时,由这些端口向外发送RST BPDU,其中TC置位。一旦TC While Timer超时,则停止发送RST BPDU。
      • 其他交换设备接收到RST BPDU后,清空所有端口学习到MAC地址,除了收到RST BPDU的端口。然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,重复上述过程。
      • 如此,网络中就会产生RST BPDU的泛洪。

    5 RSTP保护功能

    5.1 BPDU保护

    • 应用场景:防止有人伪造RST BPDU恶意攻击交换设备,当边缘端口接收到该报文时,会自动设置为非边缘端口,并重新进行生成树计算,引起网络震荡。
    • 实现原理:配置BPDU保护功能后,如果边缘端口收到BPDU报文,边缘端口将会被立即关闭。

    5.2 根保护

    • 应用场景:由于维护人员的错误配置或网络中的恶意攻击,网络中合法根桥有可能会收到优先级更高的RST BPDU,使得合法根桥失去根地位,从而引起网络拓扑结构的错误变动。

    • 实现原理:一旦启用Root保护功能的指定端口收到优先级更高的RST BPDU时,端口状态将进入Discarding状态,不再转发报文。在经过一段时间,如果端口一直没有再收到优先级较高的RST BPDU,端口会自动恢复到正常的Forwarding状态。

    • Root保护功能只能在指定端口上配置生效。

    5.3 TC-BPDU泛洪保护

    • TC-BPDU攻击:
      • 交换机在接收到TC-BPDU报文后,会执行MAC地址表项的删除操作。如果有人伪造TC-BPDU报文恶意攻击交换机时,交换机短时间内会收到很多TC-BPDU报文,频繁的删除操作会给设备造成很大的负担,给网络的稳定带来很大隐患。
    • TC-BPDU攻击保护:
      • 启用防TC-BPDU报文攻击功能后,在单位时间内,RSTP进程处理TC类型BPDU报文的次数可配置(缺省的单位时间是2秒,缺省的处理次数是3次)。如果在单位时间内,RSTP进程在收到TC类型BPDU报文数量大于配置的阈值,那么RSTP进程只会处理阈值指定的次数;对于其他超出阈值的TC类型BPDU报文,定时器到期后,RSTP进程只对其统一处理一次。这样可以避免频繁的删除MAC地址表项,从而达到保护交换机的目的。

    6 RSTP与STP互操作

    • RSTP端口在接收到STP BPDU的两个hello timer后,会切换到STP工作模式
    • 切换到STP协议的RSTP端口会丧失快速收敛等特性
    • 当运行STP的设备从网络撤离后,原运行RSTP的交换设备可迁移回到RSTP工作模式

    当一个网段里既有运行STP的交换设备又有运行RSTP的交换设备,STP交换设备会忽略RST BPDU,而运行RSTP的交换设备在某端口上接收到运行STP的交换设备发出的配置BPDU,在两个Hello Time时间之后,便把自己的端口转换到STP工作模式,发送配置BPDU。这样,就实现了互操作。

    三、MSTP

    • RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但由于局域网内所有的VLAN共享一棵生成树,因此被阻塞后链路将不承载任何流量,无法在VLAN间实现数据流量的负载均衡,从而造成带宽浪费。
    • 为了弥补STP和RSTP的缺陷,IEEE于2002年发布的802.1s标准定义了MSTP。MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。

    1 单生成树的弊端

    1.1 部分VLAN路径不通

    • 如图所示,网络中有SWA、SWB、SWC三台交换机。配置VLAN2通过两条上行链路,配置VLAN3只通过一条上行链路。

    • 为了解决VLAN2的环路问题,需要运行生成树。在运行单个生成树的情况下,假设SWC与SWB相连的端口成为预备端口(Discarding状态),那么VLAN3的路径就会被断开,无法上行到SWB。

    1.2 无法实现流量分担

    • 为了实现流量分担,需要配置两条上行链路为Trunk链路,允许通过所有VLAN;SWA和SWB之间的链路也配置为Trunk链路,允许通过所有VLAN。将VLAN2的三层接口配置在SWA上,将VLAN3的三层接口配置在SWB上。
    • 我们希望VLAN2和VLAN3分别使用不同的链路上行到相应的三层接口,但是如果连接到SWB的端口成为预备端口(Alternate Port)并处于Discarding状态,则VLAN2和VLAN3的数据都只能通过一条上行链路上行到SWA,这样就不能实现流量分担。

    1.3 次优二层路径

    • 如图所示,SWC与SWA和SWB相连的链路配置为Trunk链路,允许通过所有VLAN;SWA与SWB之间的链路也配置为Trunk链路,允许通过所有VLAN。
    • 运行单个生成树之后,环路被断开,VLAN2和VLAN3都直接上行到SWA。
    • 在SWA上配置VLAN2的三层接口,在SWB上配置VLAN3的三层接口,那么,VLAN3到达三层接口的路径就是次优的。

    2 MSTP基本概念

    2.1 MSTP域

    MSTP域,具有相同元素网桥的集合

    • 使能MSTP
    • 相同域名。
    • 相同VLAN映射
    • 相同修订级别
    • MST域是多生成树域(Multiple Spanning Tree Region),由交换网络中的多台交换设备以及它们之间的网段所构成。同一个MST域的设备具有下列特点:
      • 都启动了MSTP。
      • 具有相同的域名。
      • 具有相同的VLAN到生成树实例映射配置。
      • 具有相同的MSTP修订级别配置。
    • 所谓实例就是针对一组VLAN的一个独立计算的STP。通过将多个VLAN捆绑到一个实例,相对于每个VLAN独立运算来说,可以节省通信开销和资源占用率。MSTP各个实例的计算过程相互独立,使用多个实例可以实现物理链路的负载均衡。当把多个相同拓扑结构的VLAN映射到一个实例之后,这些VLAN在端口上的转发状态取决于该端口在对应MSTP实例中的状态。

    2.2 CST/IST/CIST/总根/ 主桥

    • CIST公共和内部生成树CIST是通过STP或RSTP协议计算生成的,连接一个交换网络内所有交换设备的单生成树。
      • 总根是整个网络中优先级最高的网桥,即为CIST的根桥。
      • 拓扑中,MST域内的红线和MST域间的蓝线共同组成了CIST。CIST的根桥为MST Region1中的S1。
    • CST公共生成树CST(Common Spanning Tree)是连接交换网络内所有MST域的一棵生成树。
      • CST就是这些节点通过STP或RSTP协议计算生成的一棵生成树。
      • 拓扑中,由蓝线组成CST。CST的根即为MST Region1。
    • 内部生成树IST(Internal Spanning Tree)是各MST域内的一棵生成树。
      • MST域内每颗生成树都对应一个实例号,IST的实例号为0。实例0无论有没有配置都是存在的,没有映射到其他实例的VLAN默认都会映射到实例0,即IST上。
      • IST是CIST在MST域中的一个片段。
      • 拓扑中,由红线组成IST。
    • 主桥(Master Bridge)也就是IST Master,它是域内距离总根最近的交换设备。
      • 如果总根在MST域中,则总根为该域的主桥。
      • 拓扑中,Master桥为黄色的网桥,即为S1/S4/S7。
    • 构成单生成树SST(Single Spanning Tree)有两种情况:
      • 运行STP或RSTP的交换设备只能属于一个生成树。
      • MST域中只有一个交换设备,这个交换设备构成单生成树。
      • 拓扑中没有给出实例。

    2.3 MSTI/MSTI域根

    • MSTI
      • 一个MST域内可以存在多棵生成树,每棵生成树都称为一个MSTI。MSTI域根是每个多生成树实例的树根。域中不同的MSTI有各自的域根。
      • MSTI之间彼此独立,MSTI可以与一个或者多个VLAN对应。但一个VLAN只能与一个MSTI对应。
      • 每一个MSTI对应一个实例号,实例号从1开始,以区分实例号为0的IST。
      • 拓扑中,VLAN2映射到实例2,即MSTI 2;VLAN4映射到实例4,即MSTI 4。
    • MSTI域根
      • MSTI域根是每个MSTI上优先级最高的网桥,MST域内每个MSTI可以指定不同的根。
      • 拓扑中,假设S9在MSTI 2中优先级最高,所以S9为MSTI 2中的域根;假设S8在MSTI 4中优先级最高,所以S8为MSTI 2中的域根。

    2.4 MSTP端口角色

    • MSTP在RSTP的基础上新增了2种端口
      • Master端口
      • 域边缘端口
    • MSTP在RSTP的基础上新增了2种端口,MSTP的端口角色共有7种:根端口、指定端口、Alternate端口、Backup端口、边缘端口、Master端口和域边缘端口。
      • Master端口
        • Master端口是MST域和总根相连的所有路径中最短路径上的端口,它是交换设备上连接MST域到总根的端口。
        • Master端口是域中的报文去往总根的必经之路。
        • Master端口是特殊域边缘端口,Master端口在CIST上的角色是Root Port,在其它各实例上的角色都是Master端口。
        • 拓扑中,S7面向Region 1的端口为Master口。
      • 域边缘端口
        • MST域内网桥和其他MST域或者STP/RSTP网桥相连的端口为域边界端口。
        • 拓扑中,S8面向Region 2的端口为域边界端口。

    由于网桥在不同MSTI上可以具有不同的角色,所以网桥端口在MSTI上可能有不同的角色。唯一例外的是Master端口,该端口在所有MSTI上的角色都相同,都为Master端口。

    3 MSTP报文结构

    • MSTP支持报文格式
      • dot1s
      • legacy
    • 目前MSTP的BPDU报文存在两种格式:
      • dot1s:IEEE802.1s规定的报文格式。
      • legacy:私有协议报文格式。
      • 采用的端口收发MSTP报文格式可配置(stp compliance)功能,能够实现对BPDU报文格式的自适应。
    • 无论是域内的MST BPDU还是域间的,除MST专有字段,其他消息和RST BPDU相同。
      • RST BPDU中的Root ID字段在MSTP中表示CIST中的总根ID。
      • EPC字段在MSTP中表示CIST外部路径开销,即发送此BPDU的网桥所属的域距离总根所属的域的CST路径开销。
      • Bridge ID字段在MSTP中表示CIST域根ID。
      • Port ID字段在MSTP表示MSTP中CIST指定端口ID。
      • MST专有字段:
        • Version 3 Length,Version3 BPDU的长度,用于对接收到的BPDU进行校验。
        • MST Configuration Identifier,MST配置标识,表示MST域的标签信息,包含4个字段。标识自己所在的区域。MST配置标识包括四部分数据结构,只有四部分设置都相同的相邻交换机才被认为是在同一个区域中。
          • Format Selector:配置标识格式选择符,长度为一个字节,固定设置为0。
          • Name:配置名称,也就是给交换机的MST域名,长度为32字节。每个交换机都配置一个MST域名,默认为交换机的MAC地址。
          • Digest:配置摘要,长度为16字节。相同区域的交换机应当维护相同的VLAN到MST Instance的映射表,可是MST配置表太大(8192字节),不适合在交换机之间相互发送。此字段是使用MD5算法从MST配置表中算出的摘要信息。
          • Revision Level:修订级别,长度为两个字节,默认取值为全0。由于Configuration Digest是MST配置表的摘要信息,因此有很小的可能MST配置表不同但摘要信息却相同的情况,这会导致本来不在同一区域的交换机认为在同一区域中,此字段是一个额外的标识字段,建议不同的区域使用不同的数值,以消除上述可能的错误的情况。
        • CIST Internal Root Path Cost,CIST内部路径开销指从本端口到IST Master交换设备的累计路径开销。CIST内部路径开销根据链路带宽计算。
        • CIST Bridge Identifier,CIST的指定交换设备ID,即发送此BPDU的交换机。
        • CIST Remaining Hops,BPDU报文在CIST中的剩余跳数。,用来限制MST的规模。从CIST域根开始,BPDU每经过一个网桥的转发,跳数就被减1;网桥丢弃收到的跳数为0的BPDU。
        • MSTI Configuration Messages(may be absent),MSTI配置信息。
          • MSTI Flag,1个自己,第1位到第7位和RSTP定义的相同,第8位为Master标志位,表示该网桥是否为Master桥,取代RSTP中的TCA位。
          • MSTI region Root ID,表示该MST实例的域根ID。
          • MSTI IRPC,表示发送此BPDU的网桥到达MSTI域根的路径开销。
          • MSTI Bridge Priority,发送此BPDU的网桥的优先级。
          • MSTI Port Priority,发送此BPDU端口的优先级。
          • MSTI Remaining Hops,定义同CIST剩余跳数,表示BPDU在该MST实例中剩余跳数。

    4 MSTP拓扑计算

    • MSTP拓扑计算基本原理
      • MSTP将整个二层网络划分为多个MST域,各个域之间通过计算生成CST。域内则通过计算生成多棵生成树,每棵生成树都被称为是一个多生成树实例。其中实例0被称为IST,其他的多生成树实例为MSTI。MSTP同STP一样,使用配置消息进行生成树的计算,只是配置消息中携带的是设备上MSTP的配置信息。

    4.1 比较原则

    • CIST计算比较向量
      • 根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID
    • MSTI计算比较向量
      • 域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID
    • 比较原则
      • 首先,比较根交换设备ID。
      • 如果根交换设备ID相同,再比较外部路径开销。
      • 如果外部路径开销相同,再比较域根ID。
      • 如果域根ID仍然相同,再比较内部路径开销。
      • 如果内部路径仍然相同,再比较指定交换设备ID。
      • 如果指定交换设备ID仍然相同,再比较指定端口ID。
      • 如果指定端口ID还相同,再比较接收端口ID。
    • 向量解释
      • 根交换设备ID,根交换设备ID用于选择CIST中的根交换设备。根交换设备ID = Priority(16bits) + MAC(48bits)。其中Priority为MSTI0的优先级。
      • 外部路径开销(ERPC),从CIST的域根到达总根所在域的外部路径开销。MST域内所有交换设备上保存的外部路径开销相同。若CIST根交换设备在域中,则域内所有交换设备上保存的外部路径开销为0。
      • 域根ID,域根ID用于选择MSTI中的域根。域根ID = Priority(16bits) + MAC(48bits)。
      • 内部路径开销(IRPC),本桥到达域根的路径开销。
      • 指定交换设备,发送该BPDU的网桥。
      • 指定端口,指定交换设备上同本设备上根端口相连的端口。Port ID = Priority(4位) + 端口号(12位)。端口优先级必须是16的整数倍。
      • 接收端口,接收到BPDU报文的端口。Port ID = Priority(4位) + 端口号(12位)。端口优先级必须是16的整数倍。

    如果端口接收到的BPDU内包含的配置消息优于端口上保存的配置消息,则端口上原来保存的配置消息被新收到的配置消息替代。端口同时更新交换设备保存的全局配置消息。反之,新收到的BPDU被丢弃。

    4.2 CST计算

    • CST比较向量
      • 总根,外部路径开销,域根ID,指定端口ID,接收端口ID
    • CST和IST计算方式和RSTP类似。在进行CST计算时,将会把MST域看做逻辑上的一个网桥,其中网桥ID为IST域根的ID。
    • CIST的比较向量为{根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID},但是在CST的计算中,比较向量为{总根,外部路径开销,域根ID,指定端口ID,接收端口ID}。
    • 拓扑描述:
      • 假设网络中S1为Region1的域根,S4为Region2的域根,S7为Region3的域根。S1优先级最高,S4优先级最低,且各个路径开销相同。
      • 初始时,每个域被看做一个网桥,网桥ID为域根ID。每个域向其他域发送以该域根为总根的BPDU,外部开销为0。
      • 经过RSTP计算,可以确定S1为总根。
      • 经过外部路径开销,可以确定每个域根面向Region1的端口为Master端口。
      • 经过比较域根ID优先级,可以确定域边界端口的角色。

    4.3 IST计算

    • IST比较向量
      • 域根,内部路径开销,指定桥ID,指定端口ID,接收端口ID
    • CST和IST计算方式和RSTP类似。在每个MST域内MSTP通过计算生成IST,CST和IST构成了整个交换设备网络的CIST。
    • CIST的比较向量为{根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID},但是在IST的计算中,比较向量为{域根,内部路径开销,指定桥ID,指定端口ID,接收端口ID}。
    • 拓扑描述:
      • CST计算完成之后,S1为Region1的域根,S4为Region2的域根,S7为Region3的域根。需要注意,此时的域根并不一定是各个域中优先级最高的网桥,而只是距离总根最近的网桥。
      • 域内以域根为根桥,结合内部路径开销确定各个网桥端口角色,最终得到IST。
      • 域内网桥通过比较内部路径开销确定IST根端口。
      • 通过比较BPDU的优先级确定IST上的端口角色。

    5 MSTP与RSTP交互

    • MSTP与RSTP交互
      • RSTP/STP网桥将MSTP域看做一个桥ID为域根ID的RSTP桥
    • RSTP/STP网桥将MSTP域看做一个桥ID为域根ID的RSTP桥
    • 当RSTP/STP网桥收到MST BPDU后,会提取BPDU中的{总根,外部路径开销,域根ID,指定端口ID}作为RSTP/STP的{RID,RPC,BID,PID}
    • 当MSTP网桥收到RSTP/STP的BPDU后,会将BPDU中的{RID,RPC,BID,PID}对应到MSTP中,其中,BID作为MSTP中的域根ID,也作为指定交换机ID,内部路径开销为0。

    6 MSTP快速收敛

    • MSTP快速收敛
      • 普通方式P/A,同RSTP
      • 增强型方式P/A
    • 在MSTP中,P/A机制工作过程如下:
      • 上游设备发送Proposal报文,请求进行快速迁移。下游设备接收到后,把与上游设备相连的端口设置为根端口,并阻塞所有非边缘端口。
      • 上游设备继续发送Agreement报文。下游设备接收到后,根端口转为Forwarding状态。
      • 下游设备回应Agreement报文。上游设备接收到后,把与下游设备相连的端口设置为指定端口,指定端口进入Forwarding状态。

    缺省情况下,华为使用增强的快速迁移机制。如果华为设备与其他厂商的设备进行互通,而其他厂商的设备P/A机制使用普通的快速迁移机制,此时,可在华为设备上通过命令stp no-agreement-check设置P/A机制为普通的快速迁移机制,从而实现华为设备和其他厂商的设备进行互通。

    7、生成树协议故障诊断

    1. MSTP拓扑变化导致业务中断
    • 检查MSTP组网内的端口状态是否正常
    • 检查MSTP配置是否正确
      • 查看端口配置,是否使能了stp bpdu-filter enable
      • 与终端设备相连的端口MSTP是否处于边缘端口状态
      • 查看设备端口是否加入正确的VLAN
    • 查看组网中是否有MSTP重新计算
      • 查看TC消息是否增长
    • 查看是否有端口震荡
      • 通过日志查看使能MSTP的端口是否存在Up和Down状态频繁切换
    • 检查MSTP的收敛模式是否是Normal
    1. 当某个生成树实例的拓扑发生改变时,和它建立映射关系的VLAN的转发路径也将发生变化。此时,交换机的ARP表中与这些VLAN相关的表项也需要更新。STP的收敛方式不同,交换机对ARP表项的处理方式不同:
    • 如果STP的收敛方式配置为fast,交换机将ARP表中的以上表项直接删除。
    • 如果将STP的收敛方式配置为normal,交换机将ARP表中以上表项的剩余存活时间置为0,对这些表项进行老化处理。如果配置的ARP老化探测次数大于零,则ARP对这些表项进行老化探测。
    • 若选择fast方式,频繁的ARP表项删除会影响业务,严重时可能会导致设备CPU占用率高达100%,报文处理超时导致网络震荡。

    结语

    相关文章

      网友评论

        本文标题:生成树协议原理

        本文链接:https://www.haomeiwen.com/subject/tqvfdxtx.html