STP

以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路,但是这也带来了
网络环路的问题。网络环路会引发广播风暴和MAC地址表震荡等问题,导致用户通信质量差,甚
至通信中断。为了解决这个问题就有了:IEEE(美国电气和电子工程师协会)提出了基于802.1D的STP

STP的工作原理

通过在交换机之间传递BPDU报文。来选举根桥以及确定各个接口的接口状态。

在初始化状态下,每个交换机都会发送bpdu报文,因为没有根桥所以所有交换机一开始都认为自己是根桥;相互交互完,BPDU报文后会选举出根桥

当网络稳定之后,根桥就会周期性的发送配置BPDU,Hello Time:2s。

其他交换机收到根桥发送的配置BPDU后,不是转发BPDU。而是重新产生BPDU。是发送自己的配置BPDU。里面包含了桥ID路径开销端口ID等参数。

STP的选举过程与计算

通过4个参数进行选举

桥ID根路径开销网桥ID端口ID

角色:

  1. 根桥(Root Bridge)设备

    在交换机之间的网络中选举一个根桥

  2. 根端口(Root Port)

    在每个非根交换机上选举一个根端口

  3. 指定端口(Designated Port)

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

  4. 阻塞端口

    阻塞,交换机上剩下的非根端口(RP)非指定端口(DP)

STP的端口状态

image-20241110231121435

  1. Disabled(未使能状态)

    端口未打开、端口被禁用、链路失效

  2. Blocking(阻塞)

    端口初始化或者使能,进入Blocking状态、端口不再是根端口、指定端口,进入Blocking状态。

  3. Listening(侦听)

    端口被选为根端口或者指定端口,进入Listening状态,

  4. learning(学习)

    端口的Forward Delay时间到(15s),进入Learning状态

  5. Forwarding(转发)

    再经过一个Forward Delay(15s),进入Forwarding状态。

STP不足

STP拓扑收敛速度慢.如果网络中的拓扑结构频繁发生变化就会失去连通性,从而导致通信中断。

  1. STP没有细致区分端口状态和端口角色
    • tening、Learning和Blocking状态并没有区别,都同样不转发用户流量。
    • 端口之间最本质的区别并不在于端口状态,而是在于端口扮演的角色。
  2. STP算法是被动的算法,依赖定时器的方法来判断拓扑变化,所以收敛速度慢。
  3. STP算法要求在稳定的拓扑中,根桥主动发出配置BPDU报文,而其他设备再进行处理,最终传遍整个STP网络。

STP重收敛过程慢

直连故障

image-20241110230443209

当有一条链路中断时,阻塞端口会进入Blocking状态,然后按照重新构建STP的过程,在这个过程中会在30s后进入都转发状态(Forwarding)。

环形故障(非直连)

image-20241110230523039

当有一条链路中断时,由于阻塞端口上收不到更优的BPDU报文,所以在20s后判断链路是否有效,判断完成后开始重新计算、收敛。最终进入转发状态。在这个过程中会导致50s左右的业务中断。(20+15+15)

STP拓扑变更

如果STP拓扑变化如:新增、删除等

汇报拓扑变化信息发送给根桥,再由根桥向下翻红拓扑信息的变化。

这种交互方式不高效。

RSTP

IEEE又发布了基于802.1W的RSTP。

主要是在stp的基础之上进行了一些改进,用于加快收敛速度。而且能兼容STP

改进

新增了2个端口角色

通过端口角色的增补,简化了生成树协议的理解及部署

image-20241110232416701

新增了替代端口(Alternate)备份端口(Backup)

替代端口(Alternate Port)

指一个环形交换网络中,由于学习到其他交换机发送的配置BPDU报文而阻塞的端口,提供了从指定桥到根桥的另一条路径,用于作为根端口的备份端口。(把原有STP在环形交换网络中所阻塞的端口变成了替代端口。)

备份端口(Backup Port)

image-20241110232435224

指在一个直连交换中设备之间有多条链路进行连接的情况下,由于学习到了自己发送的配置BPDU报文而阻塞的接口,作为指定端口(DP)的备份,提供了另一条从根桥到设备之间的备份通路。(为多条链路之间的指定端口做备份的)

如果在多条链路之间有集线器(hub)的情况下:

假设DP断开连接,由于BPDU是DP发的,假设对端就只有RP,有DP的话那也是跟BP相连的,那么在这个链路上就不存在BPDU了。这时候BP是不会立刻进入转发状态的,他会先去探测什么时候出现故障。理论值:(3倍的hello time):3x2=6s。经过这段时间后会立刻进入转发状态。

但华为设备上有一个变量值是3s,所以是3x2x3=18s.

怎么判断这个端口是AP还是BP:主要取决于BID是否一致。

在收到更优的BPDU报文时判断BID跟我所在的接口或者交换机是否一致。不是就是AP。是就是BP.

端口状态的重新划分;

根据端口是否转发流量和学习mac来划分。将原有STP的5种端口状态缩减为3种:

  1. Discarding:不转发流量也不学习mac
  2. Learning:不转发流量但学习mac
  3. Forwarding:即转发流量也学习mac
STP端口状态RSTP端口状态端口在拓扑中的角色
DisabledDiscardingDisabled端口
BlockingDiscardingAP、BP
ListeningDiscardingRP、DP
learninglearningRP、DP
ForwardingForwardingRP、DP

配置BPDU格式的改变

image-20241111002456220

充分利用了STP协议报文中的Flag字段,明确了端口角色;

在Type字段中配置BPDU类型不在是0而是0x02,所以运行STP的设备收到RSTP的BPDU会丢弃

在Flag字段中使用了原来保留的中间6位,这样改变的配置BPDU叫做RST BPDU

在STP的Flag字段中只是用了7bit位和0bit位的TCA和TC

配置BPDU的处理发生变化

BPDU报文的发送方式

在原本的STP中当拓扑稳定后,根桥按照Hello Time规定的时间间隔发送配置BPDU。其他非根桥设备在收到上游设备发送过来的配置BPDU后,才会触发发出配置BPDU,此方式使得STP计算复杂且缓慢。

RSTP对配置BPDU的发送方式进行了改进。:
在拓扑稳定后,无论非根桥设备是否接收到根桥传来的配置BPDU报文,非根桥设备仍然按照
Hello Time规定的时间间隔发送配置BPDU,该行为完全由每台设备自主进行。

更短的BPDU超时时间:

如果一个端口在超时时间(即三倍周期,超时时间=Hello Timex3,但实际上还是18s)内没有收到上游设备发送过来
的配置BPDU,那么该设备认为与此邻居之间的协商失败。

而STP需要先等待Max Age(20s)。但在RSTP中还是有的,但是用不用是可以自己决定的,一般情况下不用,RSTP上是等超时时间。

处理次优BPDU

当链路故障时,不再收到上游的RST BPDU后,会认为自己是根桥,发送自身的BPDU。

当一个端口收到上游的指定桥发来的RST BPDU报文时,该端口会将自身缓存的RST BPDU与收到的RST BPDU进行比较。

如果该端口缓存的RST BPDU优于收到的RST BPDU那么该端口会直接丢弃收到的RST BPDU,立即回应自身缓存的RST BPDU,从而加快收敛速度。

但STP只有DP会立刻处理次优BPDU

快速收敛机制

新增的两个端口角色AP和BP:可以在根端口快速切换和指定端口的快速切换

边缘端口(Edge Port)

在RSTP中,如果某一个端口位于整个网络的边缘,即不再与其他交换设备连接,而是直接与终
端设备直连,这种端口可以设置为边缘端口。

边缘端口不参与RSTP计算,可以由Discarding直接进入Forwarding状态。

但是一旦边缘端口收到配置BPDU,就丧失了边缘端口属性,成为普通STP端口。并重新进行生成
树计算,从而引起网络震荡。

Proposal/Agreement机制(P/A机制)

P/A机制:在相互发送BPDU时,通过把Flag位里的Proposal位或者是Agreement位,置1。

RSTP通过P/A机制加快了上游端口进入Forwarding状态的速度。

在RSTP中,当一个端口被选举成为指定端口之后会先进入Discarding状态,再通过P/A机制快速进入Forwarding状态。

两台交换机之间初始化的时候,都认为自己是根(端口都为DP)。当经过一次交互之后进行选举,两台交换机之间通过BID就知道了谁优。比如说A的优,B会停止发送RST BPDU并协商完毕后回复给A,A置位的BPDU。A收到后对P置位的BPDU做出回应。这样这两台设备就立刻进入到转发状态。

image-20241111005833820

假设在根桥SW2和新增交换机根桥SW1(手工设置的根桥)之间添加一条新链路,那么这两个相连的端口都会认为自己是根并都先成为DP并发送RST BPDU。

SW2收到了SW1发来的RST BPDU,去比较BID后发现对方的优先,这时候就会认为对面是根并把自己的端口变成RP和停止发送RST BPDU。

SW1还是会发RST BPDU,端口会进入Discarding状态并发送P置位的RST BPDU。

SW2收到来自根桥发送过来的P置位的RST BPDU后会将自己其他的所有端口(除边缘端口和阻塞端口以外的的其他端口)进入到同步状态。为了保障下游设备不会环路的情况下,SW1和SW2之间就只有一条链路并在确保快速协商的过程中不出环。以此来加快转发速度

同步后,SW2的下游端口(除边缘端口)都会进入Discarding状态,上游根端口进入转发状态后,会向SW1发送A置位的RST BPDU。

当SW1收到A置位的RST BPDU报文后,会对自己发出的P置位的RST BPDU报文进行回应,于是DP端口会从Discarding状态立刻进入到转发状态(forwarding)。

如果下游还有其他设备则继续执行P/A的过程

华为设备有增强的P/A机制

交换机在交互RST BPDU的过程中,P跟A都置位。比普通的P/A机制更快

如果华为交换机要跟其他厂商的设备做RSTP需要把华为设备上的P/A机制改为普通的P/A机制,华为设备默认的P/A机制是增强版的

拓扑变更机制

在RSTP中检测拓扑是否发生变化只有一个标准:一个非边缘端口迁移到Forwarding状态。

image-20241111155553135

一旦检测到拓扑发生变化,将进行如下处理:
为本交换设备的所有非边缘指定端口和根端口启动一个TC While Timer,该计时器值是Helo Time的两倍(4s)。在这个时间内清空所有端口上学习到的MAC地址。

同时,由非边缘指定端口和根端口向外发送RSTBPDU,其中TC置位(最多发两次,4s)。一旦TC While Timer超时,则停止发送RST BPDU。

其他交换设备接收到RST BPDU后,清空所有端口(除了收到RST BPDU的端口和边缘端口)学习到MAC地址,然后也为自己所有的非边缘指定端口和根端口启动TC While Timer,重复上述过程

网络中就会产生RST BPDU的泛洪

华为的标准生成树:

当设备发送TCN BPDU给上游设备,那么上游设备就会回复TCA置位和TC置位的BPDU那么这时候就会把mac地址给删除了。以此来加快收敛速度

增加保护功能

BPDU保护

image-20241111160930934

正常情况下,边缘端口不会收到RST BPDU。如果有人伪造RST BPDU恶意攻击交换设备,当边缘端口接收到RST BPDU时,交换设备会自动将边缘端口设置为非边缘端口,并重新进行生成树计算,从而引起网络震荡。

交换设备上启动了BPDU保护功能后,如果边缘端口收到RST BPDU,边缘端口将被error-down(把该端口shutdown),但是边缘端口属性不变,同时通知网管系统。

根保护

image-20241111161228959

对于启用根保护功能的指定端口(DP),其端口角色只能保持为指定端口(DP)。不建议在根桥上使用根保护功能

一旦启用根保护功能的指定端口收到优先级更高的RST BPDU时,端口将进入Discarding状态,不再转发报文。

经过一段时间(通常为两倍的Forward Delay 30s),如果端口一直没有再收到优先级较高的RST BPDU,端口会自动恢复到正常的Forwarding状态。

根保护功能确保了根桥的角色不会因为一些网络问题而改变。

环路保护

image-20241111162109977

单向链路故障:

上述情况可能发生在光纤通信上可能存在单通问题。但是SW3发到SW1报文是可以发送的。接口指示灯是绿色正常的

这样情况就会收不到根桥的BPDU了,就会等待6s的时间(实际等待18s)。过了这段时间后就会认为这跟根桥出现问题或链路故障

环路保护一般配置在AP和RP端口上的

在启动了环路保护功能后,如果根端口或Alternate端口长时间收不到来自上游设备的BPDU
报文时,则向网管发出通知信息(此时根端口会进入Discarding状态,角色切换为指定端口),而
Alternate端口则会一直保持在Discarding状态(角色也会切换为指定端口),不转发报文,从而不
会在网络中形成环路。

直到链路不再拥塞或单向链路故障恢复,端口重新收到BPDU报文进行协商,并恢复到链路拥塞或者单向链路故障前的角色和状态。

防TC-BPDU攻击

image-20241111164608504

启用防TC-BPDU报文攻击功能后,在单位时间内交换设备处理TC BPDU报文的次数可配置。

如果在单位时间内,交换设备在收到TC BPDU报文数量大于配置的阈值,那么设备只会处理阈值
指定的次数。

对于其他超出阈值的TC BPDU报文,定时器到期后设备只对其统一处理一次。这样可以避免频繁
的删除MAC地址表项,从而达到保护设备的目的

拓扑收敛过程

  1. 每一台交换机启动RSTP后,都认为自己是“根桥”并且发送RST BPDU。

    image-20241111164915599

    所有端口都为指定端口,处于Discarding状态。

  2. 上游链路的设备互联端口通过P/A机制,快速进入转发状态。

    image-20241111165031955

    在这个过程中只能与根桥相连的交换机做P/A,下游设备处于同步状态。只有当与根桥相连的上游端口处理完后,下游才能进行P/A处理

    SW2收到更优的RST BPDU后,经比较认为SW1才是当前根桥,此时Sw2的端口将成为根端口,而不是指定端口,停止发送RST BPDU

    SW1的端口进入Discarding状态,发送Proposal位置位的RST BPDU。SW2收到后阻塞除边缘端口以外的所有其他端口(该过程称为同步过程)。

    SW2的各端口同步后,根端口立即进入Forwarding状态,并向SW1返回Agreement位置位的RSTBPDUSW1收到该报文后,会让指定端口立即进入Forwarding状态。

3.下游链路的设备互联端口会进行新一轮的P/A协商。

image-20241111165926194

SW2的下游端口设置为指定端口,持续发送Proposal位置位的RST BPDU。

Sw3的下游端口收到该BPDU后,发现不是本设备收到的最优BPDU,则会忽略,不会发送Agreement位置位的RST BPDU

SW2的下游端口一直收不到Agreement位置位的回应报文,等待2倍的Forward Delay后,进入转发状态。

MSTP

RSTP在STP基础上进行了改进,实现了网络拓扑快速收敛。但在划分VLAN的网络中运行RSTP/STP,局域网内所有的VLAN共享一棵生成树,被阻塞后的链路将不承载任何流量无法在VLAN间实现数据流量的负载均衡,导致链路带宽利用率、设备资源利用率较低。

为了弥补RSTP/STP的缺陷,IEEE于2002年发布的802.1S标准定义了MSTP(Multiple Spanning Tree Protocol,多生成树协议)。MSTP兼容STP和RSTP,通过建立多棵无环路的树,解决广播风暴并实现冗余备份。

在MSTP网络中,可以将一个或多个VLAN映射到一个Instance,然后MSTP基于该Instance计
算生成树。基于Instance的生成树被称为MSTI,MSTP为每个Instance维护独立的MSTI,映
射到同一个Instance的VLAN将共享同一棵生成树。

在以太网中部署MSTP协议后可实现如下功能:

  1. 形成多棵无环路的树,解决广播风暴并实现冗余备份。

  2. 多棵生成树在VLAN间实现负载均衡,不同VLAN的流量按照不同的路径转发

RSTP/STP的不足

流量无法负载分担

image-20241111203749511

SW3为接入交换机用于连接终端设备,使用两条链路连接SW1和SW2,并且所有链路均允许VLAN2和VLAN3通过。

将SW1设为VLAN2内终端的网关,SW2设为VLAN3内终端的网关,并希望VLAN2和VLAN3内的终端分别使用不同的链路到相应的网关。

但在这个交换网络中只有一个生成树,假设SW3与SW2相连的端口为阻塞端口,则VLAN2和VLAN3的数据都只能通过一条链路到汇聚交换机,不能实现流量负载分担。

二层次优路径

image-20241111211010960

SW3为接入交换机连接终端网段,SW1和SW2为汇聚交换机

将SW1设为VLAN2内终端的网关,SW2设为VLAN3内终端的网关,并且所有链路均允许VLAN2和VLAN3通过。

运行单个生成树之后,环路被打破,VLAN2和VLAN3的数据都直接到SW1。

由于SW3与SW2间的链路被阻塞,VLAN3的数据到达网关的路径是次优的,最优的路径应当是由sW3直达SW2。

MSTP的基本概念

image-20241111212640299

MSTP是IEEE 802.1S中定义的生成树协议,也才采用的P/A机制。MSTP兼容STP和RSTP,既可以快速收敛,又提供了数据转发的多个冗余路径,在数据转发过程中实现VLAN数据的负载均衡。

MSTP可以将一个或多个VLAN映射到一个Instance(实例),再基于Instance计算生成树,映射到同一个Instance的VLAN共享同一棵生成树。

MST Region

MSTP网络层次:

image-20241111213455517

MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。

MST Region(Multiple Spanning Tree Region,多生成树域),也可简称MST域:

由交换网络中的多台交换设备以及它们之间的网段所构成。

一个局域网可以存在多个MST域,各MST域之间在物理上直接或间接相连。用户可以通过MSTP配置命令把多台交换设备划分在同一个MST域内。

MSTP网络中包含1个或多个MST域,每个MST域中包含一个或多个多生成树实例。

MSTI

MSTl(Multiple Spanning Tree Instance,多生成树实例)

一个MST域内可以生成多棵生成树,每棵生成树都称为一个MSTI

MSTI使用InstanceID标识,华为设备取值为0~4094。

VLAN映射表:MST域的属性,描述了VLAN和MSTI之间的映射关系。
image-20241111213422457

CST

CST(Common Spanning Tree,公共生成树)是连接交换网络内所有MST域的一棵生成树。

如果把每个MST域看作是一个节点(大交换机),CST就是这些节点通过生成树协议计算生成的一棵生成树。

image-20241111213817609

如图深蓝色粗线条连接各个域构成CST。其中MST Region 1~4 都可以被看作一个独立的大的交换机。大交换机之间相互传递报文通过CST来进行传输。而这个CST与域内的生成树(IST)来说是独立的,是公共的。也就会在相应的节点(交换机)端口或链路上进行阻塞,如下图:

image-20241111214321205

IST

IST(InternalSpanningTree,内部生成树)是各MST域内的一棵生成树。

IST是一个特殊的MSTI,MSTI的InstanceID为0。

缺省不做任何操作的话,华为交换机设备会默认所有vlan都处于instance 0.

image-20241111214754369

如图所示的MST Region 4,黑色细线条在域中连接该域的所有交换设备构成IST。

CIST

CIST(Common and Internal Spanning Tree,公共和内部生成树)

通过生成树协议计算生成的,连接一个交换网络内所有交换机的单生成树。

image-20241111213817609

如图所示,所有MST域的IST加上CST就构成一棵完整的生成树,即:IST + CST = CIST

image-20241111215202492

SST

SST(Single SpanningTree,单生成树):运行生成树协议的交换设备只能属于一个生成树。

MST域中只有一个交换设备,这个交换设备构成单生成树。

image-20241111215546148

如图所示的MST Region3,该域中的唯一的交换设备构成SST。

总根、域根、主桥

image-20241111215823784

总根(CIST Root):

是CIST的根桥,如图中SW1。

域根(Regional Root):

分为IST域根和MSTI域根.

IST域根:在各个MST域中IST生成树中距离总根最近的交换设备是IST域根,如图中SW2、sW3、SW4。

MSTI域根:是每个多生成树实例的树根。

主桥(Master Bridge):

是IST Master,它是域内距离总根最近的交换设备,如图中SW1、SW2、SW3、SW4。

如果总根在MST域中,则总根为该域的主桥。

MSTP的端口角色

在RSTP/STP原有的基础(RP、DP、AP、BP、Edged )之上新增了Master端口域边缘端口

image-20241111221934061

Master端口

  1. 是MST域和总根相连的所有路径中最短路径上的端口
  2. 是交换设备上连接MST域到总根的端口
  3. Master端口是域中的报文去往总根的必经之路
  4. Master端口是特殊域边缘端口,Master端口在CIST上的角色是RP,在其它各实例上的角色都是Master端口。

域边缘端口

位于MST域的边缘并连接其它MST域或SST的端口。

MSTP的端口状态

与RSTP的端口状态基本一致

端口状态动作
Discarding端口只接收BPDU报文,不转发用户流量也不学习MAC地址。
Learning端口接收/发送BPDU报文,不转发用户流量但是学习MAC地址
Forwarding端口既转发用户流量,学习MAC地址,又接收/发送BPDU报文

端口在拓扑中的角色:

端口状态端口在拓扑的角色
DiscardingRP、DP、Master、域边缘端口、AP、BP
LearningRP、DP、Master、域边缘端口
ForwardingRP、DP、Master、域边缘端口

MSTP报文

MSTP使用MST BPDU(多生成树桥协议数据单元)作为生成树计算的依据。

MST BPDU报文用来计算生成树的拓扑、维护网络拓扑以及传达拓扑变化记录。

由于MST BPDU的报文格式的前36字节与RSTP BPDU是一样的。所有通过版本信息和类型来判断是不是MST BPDU报文

版本类型名称
00x00配置BPDU
00x80TCN BPDU
20x02RST BPDU
30x02MST BPDU

image-20241111223020674

MST拓扑计算

MSTP拓扑计算:

MSTP可以将整个二层网络划分为多个MST域,各个域之间通过计算生成CST,域内生成IST,CT和IT构成了整个交换设备网络的CIST。

域内还可以基于实例计算生成多棵生成树,每棵生成树都被称为是一个MSTI。

CIST和MSTI都是根据优先级向量来计算的,这些优先级向量信息都包含在MST BPDU中。各交换设备互相交换MST BPDU来生成CIST和MSTI

参与CIST计算的优先级向量为:
{根交换设备ID,外部路径开销,域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID}
参与MSTI计算的优先级向量为:

·{域根ID,内部路径开销,指定交换设备ID,指定端口ID,接收端口ID}

这些向量的优先级从左到右依次递减。

CIST计算

所有的交换机泛洪BPDU后。

经过比较MST BPDU消息后,在整个网络中选择一个优先级最高的交换设备作为CIST的树根,即总根

在每个MST域内,MSTP通过计算生成IST;同时MSTP将每个MST域作为单台交换设备对待,通过计算在MST域间生成CST。CST和IST构成了整个交换设备网络的CIST。

MSTI计算

在MST域内,MSTP根据VLAN和生成树实例的映射关系,针对不同的VLAN生成不同的生成树实例。

每棵生成树独立进行计算,计算过程与STP计算生成树的过程类似。

MSTP网络数据转发

在一个运行MSTP协议的交换网络中,一个VLAN报文会沿着:

  1. 在MST域内,会沿着对应的MSTI进行转发
  2. 在MSTI域间,会沿着CST转发