1 概述

STP,Spanning Tree Protocol,生成树协议,在 IEEE802.1d 中定义。协议设计的目的是在增加二层网络的可靠性的同时,还不会产生环路。

STP 在生产中应用非常广泛,几乎所有厂家的可网管交换机出厂都默认开启

STP 功能,一般都是基于 RSTP 的 MISTP,几乎所有的二层网络都会使用 STP 及相关技术。

为了增加交换机之间链路的可靠性,我们在交换机之间连接了多条链路,多条

链路又引入了一个新问题——产生了网络环路。为了在增加链路可靠性的同时,避免网络环路的产生,工程技术人员开发出来了 STP 及相关协议。

在《数据在网络中的传输》一章我们知道,以太网不像 IP 网络那样具有防止

环路的机制,环路一旦发生,广播数据帧就会在网络中不停地被复制转发,直到系统崩溃。因此像 STP 等以太网防环技术就显得非常重要了。

 2 MAC 地址表的建立

以太网交换机转发数据帧的依据是 MAC 地址表,所以我们也经常把交换机构建 MAC 地址表的过程,称之为交换机的工作原理。

图 13-01 构建 MAC 地址表

  1. 步骤一

PC0 要和网络上的其它设备进行通信,它就要发出数据,数据帧到达 Switch0,Switch0 会记下这个帧的源 MAC 地址 0060.70D8.6A01 到接口 Fa0/2 下面,并启动老化定时器,记录这个条目的生存时间,于是交换机 Switch0 的 MAC 地址

表就有了第一条条目:

Fa0/2          0060.70d8.6a01

不管有没有主机回应 PC0,都不影响这一条条目的建立。

  1. 步骤二

当 PC1 回应 PC0 时,回应的数据帧到达 Switch0,Switch0 会记下这个帧的源 MAC 地址 0005.5e2e.542e 到接口 Fa0/3 下面,并为这一个条目启动老化定时器,

于是交换机 Switch0 的 MAC 地址表就有了第二条条目:

Fa0/3          0005.5e2e.542e

  1. 总结

交换机只读取某个接口所收到的数据帧的源 MAC 地址,并与该接口建立起对应关系,来构建 MAC 地址表。

收到数据帧,检查帧源地址是否在接收接口有记录,如果没有,就在这个接口

下记录数据帧的源 MAC 地址,并为这一条目启动老化定时器;如果接收接口下有记录,仅刷新这一条目的老化定时器。

 2.1 好问题一

好,问题来了,交换机上没有 MAC 地址表的时候,PC1 是如何收到 PC0 发给他的数据的?

新的专业术语出现了,Flooding。这是一个我至今都不会翻译专业术语,有的

教材上译作“洪泛”,有的教材上译作“泛洪”,我个人认为第一个翻译更好一些,Flooding 的过程尤如洪水泛滥。

Flooding 的作用就是当交换机收到了一个数据帧,这个帧的目的 MAC 地址不

在交换机的 MAC 地址表里,它就会复制这一个帧到除接收这个帧的接口外的每一个活动接口(不就是洪水泛滥嘛)。收到这一个帧的主机会查看目的地址是不是自己,如果不是,丢弃,如果是,就处理。

是时候画个流程图了。

13-02

交换机工作原理

真是一图胜千言呀!

源地址是否在

MAC

地址表里

收到一个数据帧

更新

MAC

地址表

对应条目的老化定时器

目的地址是否在

MAC

地址表里

复制这个帧到帧的目的地址

所对应的接口

复制这个帧到

除接收接口外的

所有活动接口

创建一个表条目,即

把帧的源地址记录在

接收接口下面,

并设置老化定时器

 2.2 好问题二

好,问题又来了,如果 PC0 要访问的是 PC2,Switch0 会不会在 Fa0/1 下面记录 PC2 的 MAC 地址?或者说 Switch1 会不会在 Fa0/1 下面记录 PC0 的 MAC 地址?

这真是一个好问题!PC0 发出的第一个数据帧因为 Flooding 的作用,来到了 Switch1 上,Switch1 收到这个数据帧之后,要记录下帧的源 MAC 地址以创建 MAC 地址表,因为数据没有经过网络层处理,没有重新成帧,数据帧的源地址和

目的地址并没有发生变化,交换机 Switch1 收到 PC0 的数据帧,会在 Fa0/1 下面记

录它的 MAC 地址。

因为 Switch1 还没有构建 MAC 地址条目,他开始了 Flooding,PC2 回应了这个数据包,Switch1 查表后并把这个回应复制到了 Fa0/1,并在 Fa0/2 接口下面记录下 PC2 的 MAC 地址。

同样道理,Switch0 收到这个回应之后,要记录下帧的源 MAC 地址以创建 MAC 地址表,又因为数据帧的源地址和目的地址并没有改变,交换机 Switch0 收到 Fa0/1 的数据帧,会在 Fa0/1 下面记录它的 MAC 地址。

结合组网拓扑及描述,我们来看一下两台交换机上的 MAC 地址表吧!

Switch0 MAC 地址表

Switch0>show mac-address-table

Mac Address Table

-------------------------------------------

Vlan    Mac Address       Type        Ports

----    -----------       --------    -----

1    0000.0cc0.66b3    DYNAMIC     Fa0/1

1    0005.5e2e.542e    DYNAMIC     Fa0/3

  1    0060.4742.080b    DYNAMIC     Fa0/1

1    0060.70d8.6a01    DYNAMIC     Fa0/2

1    00d0.bc7e.4a01    DYNAMIC     Fa0/1

Switch0>

Switch1 MAC 地址表

Switch1>show mac-address-table

Mac Address Table

-------------------------------------------

Vlan    Mac Address       Type        Ports

----    -----------       --------    -----

1    0000.0cc0.66b3    DYNAMIC     Fa0/3

1    0005.5e2e.542e    DYNAMIC     Fa0/1

   1    0060.4742.080b    DYNAMIC     Fa0/2

1    0060.705e.1301    DYNAMIC     Fa0/1

1    0060.70d8.6a01    DYNAMIC     Fa0/1

Switch1>

从两台设备上打印出来的 MAC 地址表可以看出,以太网设备在转发以太网帧的时候,不修改帧的源目地址。

 2.3 好问题三

好问题层出不穷!为了增加两台交换机之间链路的可靠性,我在两台交换机之间接了两条线,Flooding 会复制同一个帧到两个接口上吗?

答案是肯定的。

如图 13-01,Switch0 在相关 MAC 地址表没有构建起来之前,他会 Flooding 数据帖到两个交换机相连的两个接口。Switch1 在相关 MAC 地址表没有构建起来之前,也会 Flooding PC0 的数据帧,Switch0 收到后再次 Flooding,直到环路消失。

在 Switch1 上,会从两个端口收到源 MAC 地址相同的数据帧,在 Switch0 上,会从三个端口收到源 MAC 地址相同的数据帧。会导致交换机的 MAC 地址表频繁被修改,并上报 MAC 地址漂移告警。

我们知道交换机是分隔冲突域、共享广播区域的,网络通信又是基于广播的。以太网广播地址是 FF:FF:FF:FF:FF:FF;网络层广播地址是 255.255.255.255 和网络号+所有主机位为 1 的地址。还有组播地址,以太网组播地址第 48 位为 0 的地址;

网络层组播地址是 224.0.0.0/4。当然以太网交换机只关心以太网广播和组播。这些广播地址和组播地址都会在同一个广播域内传播,如果没有 STP,环路就会导致广播风暴,进而导致网络的性能下降或不可用。

 3 STP

Spanning Tree ProtocolSTP,生成树协议,是由 IEEE 提出的 802.1d 标准。生成树的目的就是通过使用 STA(Spanning Tree Algorithm)算法,阻塞环状网络中的部分端口,从而把一个环状网络变成一个树状网络。

要阻塞哪些端口,是由根桥通过运行 STA 来决定的,但在此之前,必须先要选出根桥。

 3.1 STP与Bonding

当然,你说:“用 Bonding!除了可以增加可靠性,还可以提高链路带宽

呢!”对的!Bonding 确实可以在提高链路可靠性的同时,还可以提高链路的带宽,但是使用场景局限在两台交换机直连的情况,多台交换机互联或级联所遇到的环路问题,还是得请 STP 出马。

换作通俗的话来说,在两交换机互联的场景中,解决多链路所带来的问题最好使用 Bonding 技术;在多交换机互联的场景中,就不得不使用 STP 了。

部署 STP 的目的是通过 STP 的拓扑计算,达到消除网络环路,并备份链路的

目的。拓扑计算是通过 STA 算法来实现的,消除网络环路和备份链路则是通过转化端口状态来实现的。

好吧!我承认这个前奏有点长,现在让我们进入主题吧!

 3.2 STP术语

3.2.1        STA

Spanning Tree Algorithm,生成树算法。交换机通过运行 STA 算法,计算整个广播网络的拓扑,阻塞部分冗余端口,把环状网络转化为树状网络,并选举根网桥,选择根端口和指定端口等。

3.2.2        Configuration BPDU

Bridge Protocol Data Unit,网桥协议数据单元,用于交换机之间交换信息,

这些信息包括根桥 BID、发送者 BID、路径代价、和端口 ID 等,可用来做根网桥和根端口的选举和网络配置。

在 STP 中,有两种 BPDU,一种是 Configuration BPDU,即配置 BPDU,一

种是 Topology Change Notification BPDU,即 TCN  BPDU ,拓扑更改通知 BPDU,有些教材也叫做 TC BPDU 或 TC。Configuration BPDU 与 TCN BPDU 和

格式一样,只是字段的利用不同,TCN 利用了更少的 Payload 字段内容。在工程

实现中,一个 BPDU 既可以是 Configuration BPDU 同时也可以是 TCN BPDU,由 BPDU flags 字段和其它相关字段标识。如图 13-03 所示。

Configuration BPDU 用于将环状网络计算成树状网络,其实就是通过计算,阻

塞掉环状网络的某些接口,使其成为树状结构。

TCN BPDU 只有在组网拓扑发生变化后才发出,目的是将 MAC 地址表的生存时间缩短,用来缩短 MAC 地址表的刷新时间。在 CISCO 交换机上,收到 TCN BPDU 的交换机会把相关的 MAC 地址条目由默认的老化时间由 300s 修改为 15s,在华为交换机上,收到 TCN BPDU 的交换机会把相关的 MAC 地址条目立即老化。

BPDU 包含在以太网帧当中,目的地址是 01:80:c2:00:00:00,这是一个组播 MAC 地址。

从图 13-03 中可以看到,info 栏中显示 Conf. Root...的是 Configuration BPDU,显示为 Conf. TC + Root...的是 TCN BPDU,其实就是对 Configure BPDU 的 TC 位

置位。STP BPDU 的格式都是一样的,置不同的位就是不同的 BPDU,一个 BPDU

既可以是 Configuration BPDU 也可以同时是 TCN BPDU。

图 13-03 STP 的 Configuration + TCN BPDU

每一台交换机都可以产生 TCN BPDU,也可以产生 Configuration BPDU,只有

根桥产生的 TCN BPDU 才可以被全网扩散,其它网桥产生的 TCN BPDU 只能向

上级交换机传送。交换机并不是简单的转发 Configuration BPDU,而是重新生成一个。

3.2.3       Bridge ID, 网桥 ID

用来标识网络中的某台网桥,由网桥优先级和网桥 MAC 地址组成。长度 64 个二进制位,高 16 位是网桥优先级,低 48 位是 MAC 地址。如图 13-03 中 Bridge Identifier 字段所示。根桥选择时会比较网桥 ID,网桥 ID 最小的网桥会被选为根桥。

3.2.4       Bridge Priority, 网桥优先级

长度 16 个二进制位,缺省值是 32768。可选值是一个公差为 4096 的等差数列,最小值是 0,最大值是 61440,数字值越小,越有可能被选举为根桥。可以使用的数字有:

0,4096,8192,12288,16384,20480,24576,28672,32768,36864,40960, 45056,49152,53248,57344,61440。

在网络中部署 STP,很大程度上就是修改网桥优先级,用来避免性能较差的设备被选举为根桥,但是在实际的生产中我们一般不直接操作网桥优先级,而是通过直接配置为根桥或备份根桥的方式来间接操作网桥优先级。

CISCO 交换机的缺省优先级是 32768,根桥的优先级会被设置为 24586,备份根桥的优先级会被设置为 28672。华为交换机的缺省优先级是 32768,根桥会的优先级会被设置为 0,备份根桥的优先级会被设置为 4096。

在华为交换机上配置根桥或备份根桥:

[Huawei-GigabitEthernet0/0/1]stp instance 1 root ?   primary  Primary oroot switch   secondary  Secondary root switch

[Huawei-GigabitEthernet0/0/1]stp instance 1 root primary ?   <cr>

[Huawei-GigabitEthernet0/0/1]stp instance 1 root primary

在运行 PVST 协议的 CISCO 交换机上配置根桥或备份根桥:

Switch0(config)#spanning vlan 10 ?

priority  Set the bridge priority for the spanning tree   root      Configure switch as root

<cr>

Switch0(config)#spanning vlan 10 root ?   primary    Configure this switch as primary root for this spanning tree

secondary  Configure switch as secondary root Switch0(config)#spanning vlan 10 root primary ?

<cr>

Switch0(config)#spanning vlan 10 root primary

3.2.5       网桥 MAC 地址

长度 48 个二进制位,前 24 位代表生产厂商,后 24 位是一个流水号,因此设

备的 MAC 全球唯一。交换机的 MAC 地址是一个烧录(burn in)地址,一经写入就不再改变。一台交换机只有一个 MAC 地址,所有的接口下都使用这一个地址,哪怕是三层交换机的 SVI 接口,也是使用这个 MAC 地址。这与路由器有所不同,路由器上每一个接口的都有一个 MAC 地址。有关 MAC 更多知识,请查阅本书第

02 章《数据在网络中的传输》。

3.2.6       Port ID, 端口 ID

长度 16 位,由端口优先级和端口号组成,高 4 位是端口优先级,低 12 位是端口号。选择指定端口时会比较端口 ID,端口 ID 比较小的被选为指定端口。

如果想有意识地影响网络流量的路径,可以通过有意识地影响指定端口的选择

来实现,从而让流量走在可靠性和带宽都比较高链路上。这就需要修改端口 ID,但是因为端口号是无法改变的,因此就只能修改端口优先级了。换句话说,修改端口 ID 是通过修改端口优先级来实现的。

3.2.7       Port Priority, 端口优先级

长度 4 位,在 CISCO 和华为设备上的缺省值都是 128,可选值是一个公差为

16 的等差数列,最小值是 0,最大值是 240。可以使用的数字值有:

0,16,32,48,64,80,96,112,128,144,160,176,192,208,224,240

因为 Port ID 是由端口优先级和端口号组成,修改端口优先级的最终结果,是

修改端口 ID,从而影响端口角色的选择。端口优先级数字值相对小的端口,会被选为指定端口。

在华为交换机上修改端口优先级:

[Huawei-GigabitEthernet1/0/47]stp port priority ?

INTEGER<0-240>  Port priority, in steps of 16. The default is 128. Valid                   values are 0, 16, 32, 48, 64, 80, 96, 112, 128, 144, 160,                   176, 192, 208, 224, and 240

[Huawei-GigabitEthernet1/0/47]stp port priority

在运行 PVST 协议的 CISCO 交换机上修改端口优先级:

Switch(config-if)#spanning-tree vlan 2 port-priority ?

<0-240>  port priority in increments of 16

Switch(config-if)#spanning-tree vlan 2 port-priority

3.2.8       Root Bridge, 根网桥

通过 STA 算法,将错综复杂的网络结构变成一个树状,树根所在网桥就叫做根桥。每个 STP 网络中有且仅有一个根桥。根网桥选举的依据是网桥 ID,网桥 ID 最小网桥被选为根网桥。在生产中可以通过修改网桥 ID(实际上是网桥优先级)的方法影响根网桥的选择,以避免不合适的网桥(比如性能低的网桥)成为根网桥。

3.2.9        Designated Bridge,指定桥

对于一台设备来说,指定桥是指与本机直接相连,并且拥有指定端口,负责向

本机发送 Configuration BPDU 的网桥。对于一个网络来说,指定桥是网络中负责发送 Configuration BPDU 的网桥,根桥肯定是指定桥,指定桥却不一定是根桥。

Configuration BPDU 由指定端口发出。

 3.2.10     Nonroot Bridge, 非根网桥

STP 网络中除根网桥和备份根桥外的其它网桥都叫做非根网络桥。

3.2.11     Path Cost, 路径开销

即某段路径的成本。路径的开销通过端口体现出来。路径开销是生成树计算的重要依据,用来选择指定端口和根端口。交换机计算路径开销是以端口速率为依据来计算的,端口速率值越高,开销越小。华为有三种计算路径开销的办法:1)dot1d-1998,即 IEEE 802.1d,可表示的数字范围是 1~65535;2)dot1t,即 IEEE 802.1t,可表示的数字范围是 1~200,000,000;3)legacy,即华为计算法,可表示的数字范围是 1~200,000。缺省的计算方法是 dot1t,即 IEEE 802.1t

在华为交换机上修改端口路径代价计算方法和代价值:

[Huawei]stp pathcost-standard ?   dot1d-1998  IEEE 802.1D-1998

dot1t       IEEE 802.1T   legacy      Legacy

[Huawei]stp pathcost-standard dot1t

[Huawei]int gig 1/0/47

[Huawei-GigabitEthernet1/0/47]stp cost ?

INTEGER<1-200000000>  Port path cost

[Huawei-GigabitEthernet1/0/47]stp cost 100

CISCO 有两种计算路径开销的办法:1)short,短方法,使用 16 位二进制数来表示路径开销,可表示的数字范围是 1~65535;2)long,长方法,使用 32 位二进制数来表示路径开销,可表示的数字范围是 1~200,000,000。缺省的计算方法是 long

我们试图在运行 PVST 协议的 CISCO 交换机上修改端口端口路径代价计算方法和代价值,但是却没有 CISCO 的模拟环境,更没有设备环境,根据在官方网站上找到的资料,推演出配置过程如下: switch(config)#spanning-tree pathcost method ?  long Specifies the 32-bit based values for port path costs.  short Specifies the 16-bit based values for port path costs.

switch(config)#spanning-tree pathcost method long switch(config)# interface ethernet 0/1 switch(config-if)# spanning-tree cost 100

 3.2.12     Root Path Cost, 根路径开销

某端口到达根网桥所经过的路径的开销的总和。

 3.3 生成树端口角色

3.3.1       Designated Port, 指定端口

负责发送 Configure BPDU 的端口。根桥上的端口都是指定端口。在非根网桥

上,会在远离根桥的一端选择指定端口。只有指定端口,才会发送 Configure

BPDU。指定端口并不一定是会转发用户数据,因为指定端口的对端可能是根端口,也有可能是阻塞端口。

如果到达根桥不止一条路径,那么:

  1. 到达根桥路径开销最小的端口就被选为指定端口;
  2. 如果多个端口的路径开销相同,则根据 Port ID 来进行选择,Port ID 小的端口被选为指定端口;
  3. 可以通过修改端口优先级来影响指定端口的选择,修改端口优先级其实最终是修改 Port ID。

3.3.2       Root Port, 根端口

在非根网桥上会选择一个根端口,这个端口负责向根桥转发用户数据,接收根桥发送的 Configuration BPDU。根端口只在非根网桥上出现,位于指定端口的对端,一台交换机上只有一个根端口。

根端口的选择与指定端口的选择机制大致相同,如果到达根桥不止一条路径,那么:

  1. 到达根桥路径开销最小的端口就被选为根端口;
  2. 如果多个端口的路径开销相同,则根据 Port ID 来进行选择,Port ID 小的端口被选为根端口;
  3. 可以通过修改端口优先级来影响根端口的选择,修改端口优先级其实最终是修改 Port ID。

 3.4 生成树端口状态

3.4.1        Disabled/Down,禁用

端口处于不可用状态,既不处理 BPDU,也不转发用户数据。有的文档上

Disabled,有的文档叫 Down,虽然叫法不同,但是本质都是不可用。

3.4.2        Blocking,阻塞

被 STP 阻塞掉的端口处于 Blocking 状态。这种状态的端口只处理 BPDU,但不构建 MAC 地址表,也不转发用户数据。

3.4.3        Listening,侦听

只处理 BPDU,但不构建 MAC 地址表,也不转发用户数据。是一种过渡状态,

还没有完全确定自己的角色。也有说法认为,只有确定了自己身份的端口(指定端口或根端口),才会进入侦听状态。这种状态的端口还不能够转发用户数据,不是最终状态,最终状态只会是 Blocking 或 Forwarding。

3.4.4        Learning,学习

处理 BPDU,接受用户数据并构建 MAC 地址表,但是不转发用户数据。也是一种过渡态,还没有完全确定自己的角色。也有说法认为,只有确定了自己身份的端口(指定端口或根端口),才会进入学习状态。端口的 Learning 状态也是一种过渡态,但是它实际上并不转发用户数据。

3.4.5        Forwarding,转发

处理 BPDU,构建 MAC 地址表,转发用户数据。指定端口和根端口会进入

Forwarding 状态,成为转发端口。

根端口和指定端口都要经历 Listening 或 Learning 两种状态后,才能进入

Forwarding 状态,转发用户数据,Listening 和 Learning 两种状态的端口本质上与 Blocking 状态一样,都不转发用户数据。也有文档认为端口是经过了 Listening 和 Learning 两种状态后才进入 Forwarding 状态的。Forwarding Delay 是 15 秒,而等待两倍的 Forward Delay 才进入 Forwarding 就是指 15 秒的 Listening 状态和 15 秒的

Learning 状态。

Learning 状态的端口只接收 BPDU,但是不构建 MAC 地址表也不转发用户数

据;Forwarding 状态和 Learning 状态下的交换机端口,只构建 MAC 地址表,也不

转发用户数据;只有 Forwarding 状态的端口才构建 MAC 地址表,并且转发用户数据。

当网络拓扑结构稳定后,端口状态只会处于 Forwarding 状态或者是 Blocking 状态,如果还有其它状态的端口,说明网络还不稳定。

 3.5 STP端口转化图

图 13-04 STP 端口状态转化图,引用华为 HedEx 技术文档

  1. 端口初始化或使能,进入阻塞状态;
  2. 端口被选为根端口或指定端口,进入 Listening 状态;
  3. 端口的临时状态停留时间到,进入一下状态 Learning,然后进入 Learning 状态,端口被选为根端口或指定端口;
  4. 端口不再是根端口、指定端口或指定状态,进入阻塞状态;
  5. 端口被禁用或者链路失效。

 3.6 STP瑕疵

在 STP 当中,端口角色和端口状态非常容易导致混淆和迷茫,当初在端口角

色和端口状态的解耦没有考虑清楚,这是协议的一个小瑕疵。另外一种说法是

STP 端口角色只有指定端口和根端口,转发端口,阻塞端口都是端口状态。显然第一种不太能站得住脚。

初学者如果看到这里应该已经有所感受了,一点点困惑不必太在意,继续前行,很快就会柳暗花明。

 3.7 影响STP网络收敛的时间

3.7.1        Hello Time

运行 STP 的设备为了保持彼此的在线状态,会定时发送一个 Configuration

BPDU,用来检测链路或设备故障。网络收敛后,如果想修改 Hello Time,只能在根桥上进行修改,根桥会通过 BPDU 报文将计时器信息传递到整个网络。Hello

Time 的缺省时间是 2 秒,通过抓包很容易看到。

3.7.2        Forward Delay

Forward Delay Time 指一个端口处于 Listening 或 Learning 状态持续的时间,两种状态持续的时间默认都是 15 秒。即 Listening 状态持续 15 秒,随后 Learning 状

态再持续 15 秒。Listening Time 或 Learning Time 称之为 Forward Delay Time,在这两个状态下的端口实际上相当于 Blocking 状态,因为它此时并不转发用户数据。

设置 STP 的 Forwarding Delay Time 其实就是设置 Listening Time 和 Learning

Time。Forward Delay 是 STP 协议避免临时环路的关键。为了避免造成临时环路,新选出来的指定端口和根端口会等待 2 倍的 Forward

Delay 后,才能进入 Forwarding 状态。这个延时保证了新的 Configuration BPDU 能够传遍整个网络,可规避临时环路的产生。

3.7.3        Max Age

端口的 BPDU 报文老化时间。网络收敛以后,如果想修改 Max Age,只能在根

桥上进行,根桥会通过 BPDU 报文将计时器信息传递到整个网络。缺省时间是

20s。

通过上上面的介绍,我们会发现,STP 网络收敛时间最多可能需要 52 秒,即

Hello Time(2s) + Max Age(20s) + Listening Time (15s) + Learning

Time(15s) = 52s

 3.8 STP对拓扑变化的处理

STP 认为端口的状态由 Up 转为 Down 或由 Down 转为 Up,都视为拓扑变化。

  1. 交换机一旦检测到拓扑发生变化,就会不停向上游设备发送 TC 置位的

Configuration  BPDU 报文;

  1. 上游设备收到后,会回送 TC 和 TCA 都置位的 Configuration BPDU,告知

下游设备停止发送 TC 置位的 Configuration BPDU,同时复制一份 TC 置位的

Configuration BPDU,向根桥方向发送;

  1. 重复第一步,直到根桥收到这个 TC 置位的 Configuration BPDU;
  2. 根桥把 Configuration BPDU 中的 TC 位与 TCA 位同时置位,发给所有下游设备,TC 置位是通知下游设备删除 MAC 地址表(华为实现)或快速老化 MAC

地址表(CISCO 实现),TCA 置位是通知下游设备停止发送 TC 置位的

Configuration BPDU。根桥会持续发送 TC,持续时间=最大老化时间+转发延时。只有指定端口才会处理 TC 置位的 BPDU,其它端口可能收到,但是不处理。

 3.9 STP实践

如果在生产中部署 STP,其实只需要确保适合的交换机成为根桥即可,让合适

性能和合适位置的交换机的的网桥 ID 改成全网最小值,将备份根桥的网桥 ID 改成全网第二小。生产实现的方法是直接设置为根桥或备份根桥。另外是对端口 ID 的操作,以影响端口角色的选择,实现的方法是修改端口优先级,从而达到修改端口 ID 的目的。还有一个就是对路径 Cost 的操作,如果是不同厂家的设备互联,操作路径 Cost 时还需要注意路径 Cost 的计算方法要一致。

实事上,STP 在生产中基本不用,主要是因为它存在有以下问题:

  1. 端口角色和端口状态定义不清晰,不便于理解、学习及实现;
  2. 依赖定时器,收敛速度慢;
  3. BPDU 只能由根桥发出,同样是影响收敛速度;

 4 RSTP

Rapid Spanning Tree Protocol,快速生成树协议。是 IEEE 在 2001 年发布了

802.1w,目的主要是为了解决 STP 的低效率问题。设备厂家在实现 RSTP 的时候,通过将某些端口设置成特殊的角色,减少端口过渡状态,从而提高网络的收敛速度,减少网络不可用的时间。

 4.1 RST BPDU

RSTP BPDU 与 STP BPDU 使用相同的格式,但是置位不同。STP BPDU 的

BPDU Type 字段的值是 0x00,表示是 STP 的 BPDU,是 Configuration BPDU,如图 13-03 所示。RSTP BPDU 的 BPDU Type 字段的值是 0x02,表示是 RSTP 的

BPDU,是 RST BPDU。也可以认为,在 STP 中的 Configuration  BPDU 在 RSTP 中被叫做 RST BPDU。如图 13-05 所示。

图 13-05 RSTP 的 RST + TCN BPDU

SRT BPDU 将 BPDU 的 Flags 字段的 8 个位全部利用起来;Configuration BPDU

只用到了第一位和最后一位,即第 0 位和第 7 位。如表 13-01,图 13-03,图 13-05

所示。

表 13-01 RST BPDU Flags

7

6

5

4

3

2

1

0

Topology

Change

Acknowledge

Agreement

Forwarding

Learning

Port Role

Proposal

Topology Change

 4.2 RSTP端口角色

RSTP 端口角色有四种,分别是:根端口(Root Port)、指定端口(Designated

Port),以及为支持 RSTP 的快速特性的替代端口(Alternate Port)和备份端口(Backup Port)。

端口角色由 RST BPDU 的 Flags 字段第二位和第三位的值表示,列表如表 13-

02 所示。

表 13-02 RST BPDU 的 Flags 字段值中的第 Bit 3 与 Bit 2 位组合表示端口角色

Bite 3

Bite 2

Port Role

0

0

unknow

0

1

Alternate / Backup

1

0

Root

1

1

Designated

其中指定端口(Designated Port)和根端口(Root Port)的定义与 STP 中的定

义基本一样,这里不做赘述,我们重点讨论一下替代端口(Alternate Port)和备份端口(Backup Port)。

4.2.1       Alternate 端口

又叫替代端口,是根端口的备份端口,当根端口失效时,快速转换成根端口,

不经过协商及延时。此端口收到其它网桥发送的 RST BPDU,进入阻塞状态。只会在非根桥上出现。

4.2.2       Backup 端口

又叫备份端口,是指定端口的备份端口,当指定端口失效时,快速转换成指定

端口,需要经过 P/A 机制的协商,有一定时间的延迟,一般不超过 5 秒。此端口收到了自己发送的 RST BPDU,进入阻塞状态。根桥和非根桥上都会出现这种端口。

 4.3 Edge Port或Port Fast

华为交换机的边缘端口(Edge Port)和 CISCO 交换机的 Port Fast 端口的功能一样,是各自实现连接终端设备时可以快速转发的功能特性。它的地位也不是由协议决定,而是由管理指定,用来端接终端设备,可以达到快速进入转发状态的目的。设置为 Edge Port 的端口在查看状态时显示是 Designated Port。它的角色也不能够由 RST BPDU 的 Flags 位决定。

Edge Port 优点:

  1. 被设置为 Edge Port 的端口 Up 后直接赶往转发状态,业务提供速度快,相比 STP 最多可能需要 52 秒的延时;
  2. 端口进入 Forwarding 状态时不产生 TCN BPDU,减少网络数据流量和系统开销,保证网络稳定;
  3. 生成树拓扑发生变化时不会进入阻塞状态,持续业务提供,保证业务稳定,减少系统开销;
  4. 收到 TCN BPDU 不会刷新 MAC 地址表,持续业务提供,保证业务稳定;
  5. 系统不会向 Edge Port 转发 TCN BPDU,减少网络数据流量和系统开销;
  6. 收到 RST BPDU 变成普通端口,防止网络出现环路,保证网络业务连续性。

缺点:

  1. 可能会造成最大 2 秒的临时环路;
  2. 收到 RST BPDU 成为普通端口,重算生成树,刷新 MAC 表,导致网络不稳定;
  3. 被配置为 Edge Port 的端口仍然会向其所连接的端口发送 BPDU,如果这个端口连接的不是终端设备而是网络设备,可能导致对方网络不稳定。

对于以上存在的问题,可以配合以下技术使用:

  1. 在 Edge Port 启用 BPDU 保护,并配置自动恢复,其作用是收到 RST BPDU 后端口关闭(Error Down),并配置自动恢复。
  2. 在 Edge Port 启用 BPDU Filter,让端口不收不发 BPDU。

基于 Edge Port 的特性,可以把连接端设备的端口设置成 Edge Port,比如用户终端,网络电话机,服务器等。

 4.4 RSTP端口状态

RSTP 端口状态有三种,依据是否接受 BPDU、是否学习 MAC 地址、是否转发用户流量进行划分。

端口状态由 RST BPDU 中的 Flags 字段的第四位和第五位组合表示,列表如表

13-03 所示。

表 13-03 RST BPDU 中的 Flags 字段值中的第 Bit 5 与 Bit 4 位组合表示端口状态

Bite 5

Bite 4

Port Status

0

0

Discarding

0

1

Learning

1

1

Forwarding

4.4.1       Discarding

不转发用户流量,也不学习 MAC 地址,接受 BPDU。任何一种端口角色都有

可能处于这种状态,对于根端口、指定端口、Alternate 端口、Backup 端口等来说,这是一种过渡态。

端口从 Down 状态起来后就处于 Discarding 状态,但网络稳定后,只有

Alternate 端口、Backup 端口才会处于这种状态,也只能处于这种状态。

4.4.2        Learning

不转发用户流量,学习 MAC 地址,接受 BPDU。只有根端口和指定端口才会处于这种状态,但网络稳定后不再会有这种状态,这是一种过渡态。

4.4.3        Forwarding

接受 BPDU,学习 MAC 地址,转发用户流量。只有根端口和指定端口才会处于这种状态。

RSTP 网络收敛后,只会处于两种端口状态:1)指定端口和根端口处于

Forwarding 状态;2)Alternate 端口和 Backup 端口处于 Discarding 状态。

 4.5 RSTP如何处理BPDU

  1. 拓扑稳定后,对于非根网桥,不管是否收到根桥传来的 RST BPDU 报文,

都会自主地按照 Hello Time 规定的时间间隔发送 RST BPDU。非根网桥不转发根桥的 RST BPDU,而是重新生成一个。如果网络拓扑发生变化,发生变化处的交换机发送 TC 置位的 RST BPDU 在网络内扩散,不依赖根桥;

  1. RSTP 的 RST BPDU 超时时间相比 STP 的 Configuration BPDU 更短。RSTP

端口超时时间 = Hello Time * 3 * Timer Factor,而 STP 需要等待 Max Age。一个端口在一个超时时间间隔内没有收到对端发送过来的 RST BPDU,即认为对端失效;

  1. 一个端口收到上游的指定桥发来的 RST BPDU 报文,该端口会将其与自身

存储的 RST BPDU 进行比较,根据优先级高低接受或丢弃,如果收到的 RST

BPDU 比自己存储的更低,丢弃并回应自己存储的 RST BPDU。不再依赖于定时器,从而加速收敛。

 4.6 RSTP的P/A机制

P/A,Proposal / Agreement,直译为提议/同意,其实就是通过相互协商选举端口角色、确定端口状态。

SW1

SW2

gig 0/0/2

Root Port

gig 0/0/1

gig 0/0/1

gig 0/0/3            gig 0/0/4       gig 0/0/5

Alternate Port   Edge Port    Designated Port

图 13-05 RSTP  Proposal / Agreement 机制

如上图 13-05 所示。交换机 SW1 的网桥 MAC 地址是 4C:1F:CC:A3:62:6B,交换机 SW2 的网桥 MAC 地址是 4C:1F:CC:FE:19:17。我们通过抓包来分析 P/A 机制

的过程。

  1. 两台运行 RSTP 的交换机 SW1 那 SW2 连通之后,都认为自己是根桥,相连

的两个端口都是指定端口。两台交换机互发 RST BPDU,Agreement 和 Proposal 位都被置位,端口角色是 Designated,端口状态不是 Forwarding 也不是 Learning,显

然是 Discarding。如图 13-06 与图 13-07 所示。

图 13-06 SW1 发给 SW2 Proposal / Agreement 被置位的 RST BPDU

图 13-07 SW2 发给 SW1 Proposal / Agreement 被置位的 RST BPDU

  1. 比较两台交换机的网桥 ID 后发现,交换机 SW1 的网桥优先级值更小,被

选举为根桥,由它再发送一个 RST BPDU,Agreement 和 Proposal 位都被置位,端口角色是 Designated,端口状态是 Discarding。交换机 SW2 停止并不再发送 RST

BPDU。如图 13-08 所示。

图 13-08 SW2 再发一个 Proposal / Agreement 被置位的 RST BPDU 给 SW1

还有一种情况是优先级数值较小的交换机 SW1 先发现两台交换机之间的链路

连接,在 SW2 还没有发送 Proposal / Agreement 被置位的 RST BPDU 给交换机 SW1 之前,已经发了两个 Proposal / Agreement 被置位的 RST BPDU 给交换机 SW2,交换机 SW2 就不再发送 Proposal / Agreement 被置位的 RST BPDU 给交换机

SW1 了。如图 13-09 所示,第 12 和第 13 个帧。

图 13-09 SW1 发送两个 Proposal / Agreement 被置位的 RST BPDU 给 SW2

  1. 交换机 SW2 收到来自根桥的 Proposal 置位的 RST BPDU,开始同步所有下游端口,将所有下游端口 Sync 位置位,因为被设置为 Edge Port 的端口不参与计

算,Alternate 端口已经是 Discarding 状态,其结果是将 Edge Port 的 Designated Port 端口转入到 Discarding 状态,如交换机 SW2 的 gig 0/0/2 口。这个状态持续时

间非常短,需要在 SW1 上接口连接上的同时在 SW2 上执行查看的命令,从图 13-

10 的前在次 dis stp brief 命令中可以看出相应的端口的角色和状态变化。

图 13-10 SW2 下游端口的角色和状态的变化

  1. 交换机 SW1 会发送过来两个 TC(Topology Change)被置位的 RST

BPDU,在第一个 TC 被置位的 RST BPDU 中,将自己的端口角色设置为 Root,端口状态设置为 Forwarding 和 Learning,在第二个 TC 被置位的 RST BPDU 中,将自己的端口角色设置为 Designated,端口状态设置为 Frowarding。TC 报文会会快速中扩散到网络中的其它交换机上,收到 TC 报文的交换机会重新运行 STA,重新选举端口角色和定义端口状态。如图 13-11 和图 13-12 所示。

图 13-11 根交换机 SW1 发送一个 TC 置位端口角色为 Root 的 BPDU

图 13-11 根交换机 SW1 发送一个 TC 置位端口角色为 Designated 的 BPDU

  1. P/A 过程结束,SW1 以 2 秒为一个周期,持续发送常规 RST BPDU,维护网络稳定。

 4.7 RSTP比STP收敛快的原因

通过前面的介绍我们知道 STP 最多可能需要 52 秒的收敛时间,相比而言 RSTP 的收敛时间明显比 STP 要快得多。

  1. RSTP 引入了 Edge Port 和 Alternate Port 两路端口角色,Edge Port 可以在端

口 up 后直接进入转发状态,Alternate Port 在发现 Root Port 失效后直接替换它,进入转发状态。

  1. RSTP 引入了 Proposal / Agreement 机制,此机制收敛速度不依赖定时器,端口 up 就开始 P / A,P / A 过程中不需要定时器参与和等待,持续时间一般不超过 5 秒。
  2. RSTP 中 TC 的传播不依赖根桥,任何角色的交换机都可以向邻居扩散,而 STP 中 TC 必须先上传到根桥后,再由根桥向全网扩散。

 4.8 RSTP对拓扑变化的处理

RSTP 中检测拓扑变化的原则是一个非边缘端口迁移到 Forwarding 状态。交换机一旦检测到拓扑变化,就会为根端口和非边缘端口的指定端口启动一个

计时器,此计时器叫 TC While Timer,时长是 Hello Time 的两倍。在 TC While

time 时间内,华为交换机会清空所有端口上学习到的 MAC 地址,CISCO 交换机会把 MAC 地址老化时间设置为 15 秒,加速其老化。同时,由根端口和非边缘端

口的指定端口向外发送 TC 置位的 RST BPDU。一旦 TC While Time 超时,则停止发送 RST + TC BPDU。所以 TC 置位的 RST BPDU 只发送了 2~3 个。

 4.9 RSTP保护

4.9.1       BPDU 保护

BPDU 保护是针对 Edge Port 或 Post Fast。

为防止 Edge Port 收到 RST BPDU 会变成普通端口,会导致生成树重算和 MAC 地址表不稳定,造成网络不稳定和网络业务流中断,可以在 Edge Port 上配置 BPDU 保护。配置了 BPDU 保护的交换机,如果在边缘端口收到 BPDU,会端口

的 Error Down,并记录日志,上报网管。Error Down 关闭的端口需要管理员手动

开启,除非配置了自动恢复。

华为交换机实现 BPDU 保护和 Error Down 自动恢复时间为 600 秒:

<HUAWEI>system-view

[HUAWEI]stp bpdu-protection

[HUAWEI]error-down auto-recovery cause bpdu-protection interval 600

CISCO 交换机实现 Port Fast 和 BPDU 保护都是在:

Switch>en

Switch#config t

Enter configuration commands, one per line. End with CNTL/Z.

Switch(config)#in fa 0/1

Switch(config-if)#spanning-treebpduguard enable

CISCO 交换机 Error disable 自动恢复时间缺省是 300 秒。配置命令如下:

Switch(config)#errdisable recovery cause bpduguard Switch(config)#errdisable recovery interval 300

 4.9.2 TC BPDU 保护防 TC BPDU 保护是针对 TC BPDU 报文。

交换设备在接收到 TC BPDU 报文后,会删除相关的 MAC 地址表项,三层交换机还会同时删除 ARP 表项。如果攻击者伪造 TC BPDU 发送到网络中,会引起网络设备删除 MAC 地址表和重算生成树,进而导致网络可用性下降。

配置了 TC 保护的交换机,单位时间内只会集中处理一次 TC BPDU。此功能一般在华为交换机上默认都有开启,缺省 Hello Time 时间内处理 1 个 TC BPDU。不建议修改引配置。

仅在 CISCO 官方网站上找到了官方举出的对 Root Guard,Loop Guard,和 BPDU Guard 的支持,没有找到对 TC 保护进行支持的相关描述。

 4.9.3      根保护根保护在指定端口生效,用来保护根桥的地位。

如果根端口收到优先级更高的 RST BPDU,会导致根桥失去其根地位,进而导致网络不稳定,影响网络的可用性和业务的连续性,甚至会导致业务流量走在低速链路上,降低网络的服务质量。针对这种情形,开发出了根保护特性。

BPDU 保护应用在 Edge Port(Port Fast),用来防范 BPDU,为保证 Edge Port(Port Fast)不会变成普通端口;根保护用指定端口,用来保护根桥的地位不被取代。BPDU 保护防范的是 RST BPDU,不管优先级如何;根保护防范的是更优(优先级值更小)RST BPDU。两种保护的违反动作都是将端口置于不转发状态,但是 BPDU 保护需要手动恢复或配置自动恢复才能进入转发状态,根保护不

需要管理员干预,通常等待两倍的 Forward Delay 就可以自动恢复,进入转发状态。根保护功能与 BPDU 保护功能相似,功能区别对比如下表 13-03 所示。表 13-03 BPDU 保护与根保护对比

Protect

Type

Port Role

Object

Protect Action

Autorecovery

BPDU

Guard

Edge Port Port-Fast

BPDU

Disable

Forwarding

No

Root Guard

Designate d Port

BPDU

Disable

Forwarding

Yes

根保护可以配置在任一端口,但是只在指定端口生效,而且根保护与环路保护不能配置在同一端口。华为配置实现:

<HUAWEI> system-view

[HUAWEI] interface GigabitEthernet 0/0/1

[HUAWEI-GigabitEthernet0/0/1] stp root-protection

[HUAWEI-GigabitEthernet0/0/1] quit

CISCO 配置实现:

Switch# configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Switch(config)# interface fastethernet 0/8

Switch(config-if)# spanning-tree rootguard

 4.9.4      环路保护如果链路拥塞或出现单向链路故障,会导致根端口和其它处理 Discarding 状态的端口迁移到 Forwarding 状态,从而造成网络环路。在部署了环路保护的交换机上,如果根端口或 Alternate 端口长时间收不到来自上游设备的 BPDU 报文时,则将自己的角色设置为指定端口,状态设置为 Discarding 状态,并向网管发出通知消息。直到链路不再拥塞或单向链路故障恢复,端口重新收到 BPDU 报文,并恢复到链路故障前的角色和状态。

华为配置实现:

<HUAWEI> system-view

[HUAWEI] interface GigabitEthernet 0/0/1

[HUAWEI-GigabitEthernet0/0/1] stp loop-protection

[HUAWEI-GigabitEthernet0/0/1] quit

CISCO 实现:

Switch# configure terminal

Enter configuration commands, one per line.  End with CNTL/Z.

Switch(config)#interface gigabitEthernet 1/1 Switch(config-if)#spanning-tree guard loop

 4.10       CISCO对RSTP的增强

CISCO 设备对 RSTP 做了部分增强,但是是属于私有特性,这些增强主要有

Backbone Fast,Uplink Fast 和 Port Fast,其中 Port Fast 特性与华为 Edge Port 特性

非常相似,都是应用在终端设备的接入时快速进入转发状态。在特殊的场景下设置相关的特性能够加快网络的收敛速度。

 4.11 STP/RSTP案例,华为实现还是看一个应用案例吧,概念介绍了很多,但是实际配置起来却非常简单。 STP 与 RSTP 的配置基本一样,只是在收敛机制上有所不同,我们这里以华为设备为例来进行讨论,CISCO 设备运行的是 PVST 等私有协议,我们在后面的章节再讨论。

4.11.1      实验说明

图 13-05 STP 配置实现

LSW2 和 LSW3 相当于两台核心交换机,三个在网的接口运行在 trunk 模式下,允许通过 VLAN 10,VLAN 20。

LSW1 和 LSW4 相当于两台接入交换机,分别为满足用户接入和服务器接入。

为防止性能较低的接入交换机成为根桥,我们将两台核心交换机分别配置成根桥和备份根桥。

为了加快收敛和网络稳定,我们运行 RSTP,并在边缘端口(端接终端设备的接口)过滤或禁用 STP 功能。

4.11.2      配置实现

通常情况下,设备出厂时厂家默认开启 STP 功能,并且运行的是基于 RSTP 的 MSTP,但是所有的 VLAN 都映射到 Instance 0,也就是只运行一个实例的快速多生成树。显然这个默认配置并不能满足我们的需求,我们在生产中往往不会这样应用。

我们实际上要做的是:1)在每一台交换机上开启 RSTP;2)并开启每台交换机上 BPDU 保护,配置端口 BPDU 错误自动恢复时间为 30 秒;3)设置根桥和备份根桥。

开启 BPDU 保护的目的是当交换机在某个端口收到非法 BPDU 时关闭这个端口,防止有人恶意攻击导致网络不稳定。

如果只配置了 BPDU 保护,没有配置 BPDU 错误自动恢复时间,BPDU 保护不生效。BPDU 错误自动恢复时间缺省没有配置,更没有默认值,所以一定要手工

配置。BPDU 错误自动恢复时间的单位是秒,取值是 30~86400。

[lsw1]stp mode rstp

[lsw1]stp bpdu-protection

[lsw1]error-down auto-recovery cause bpdu-protection interval 30

INTEGER<30-86400>  Value of the automatic recovery timer, in seconds

[lsw1]

将 lsw2 配置成根桥:

[lsw2]stp root primary

将 lsw3 配置成备份根桥:

[lsw3]stp root secondary

分别配置 lsw1,lsw4 的接入端口为边缘端口,并开启 BPDU 过滤。

[lsw1]int gig 0/0/3

[lsw1-GigabitEthernet0/0/3]stp bpdu-filter enable

[lsw1]int gig 0/0/4

[lsw1-GigabitEthernet0/0/4]stp bpdu-filter enable

为什么要配置缘接口和 BPDU 过滤?是因为这个接口端接的是终端设备,不是网络交换机设备,在这个接口上向外发送 BPDU 没有意义。或者直接在这类接口上直接禁用 STP,两种实现效果一样。只有在确认端接终端设备的接口上才这么做。

[lsw1]int gig 0/0/3

[lsw1-GigabitEthernet0/0/3]stp disable

[lsw1]int gig 0/0/4

[lsw1-GigabitEthernet0/0/4]stp disable

4.11.3      验证配置

LSW2 是根桥,它上面的端口都是指定端口,处于转发状态。

<lsw2>dis stp brief

MSTID  Port                        Role  STP State     Protection

0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE

0    GigabitEthernet0/0/2        DESI  FORWARDING      NONE

0    GigabitEthernet0/0/3        DESI  FORWARDING      NONE <lsw2>

LSW3 是备份根桥,它上面除了连接根桥(LSW1)的端口 gigabitEthernet0/0/3

是根端口外,其它端口都是指定端口。正如我们前面的介绍:指定端口的对端是根端口或阻塞端口,最靠近根桥的端口是根端口。

<lsw3>dis stp brief

MSTID  Port                        Role  STP State     Protection

0    GigabitEthernet0/0/1        DESI  FORWARDING      NONE

0    GigabitEthernet0/0/2        DESI  FORWARDING      NONE

0    GigabitEthernet0/0/3        ROOT  FORWARDING      NONE

<lsw3>

LSW1 的 GigabitEthernet0/0/2 连接备份根桥,因为我们运行了 RSTP,它的角色是 Alternate,处于丢弃状态。

<lsw1>dis stp brief

MSTID  Port                        Role  STP State     Protection

0    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE

0    GigabitEthernet0/0/2        ALTE  DISCARDING      NONE

0    GigabitEthernet0/0/3        DESI  FORWARDING      BPDU

0    GigabitEthernet0/0/4        DESI  FORWARDING      BPDU

<lsw1>

LSW4 与 LSW1 的配置一样,所以验证配置结果也一样。

<lsw4>dis stp brief

MSTID  Port                        Role  STP State     Protection

0    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE

0    GigabitEthernet0/0/2        ALTE  DISCARDING      NONE

0    GigabitEthernet0/0/3        DESI  FORWARDING      BPDU

0    GigabitEthernet0/0/4        DESI  FORWARDING      BPDU <lsw4>

4.11.4      业务相关的配置文件

LSW2 上业务相关配置如下:

#

sysname LSW2

#

vlan batch 10 20

#

stp bpdu-filter default

stp mode rstp stp instance 0 root primary

stp bpdu-protection

#

#

error-down auto-recovery cause bpdu-protection interval 30

#

#

interface GigabitEthernet0/0/1

port hybrid tagged vlan 10 20

#

interface GigabitEthernet0/0/2

port hybrid tagged vlan 10 20

#

interface GigabitEthernet0/0/3

port hybrid tagged vlan 10 20 #

LSW3 上业务相关配置如下:

# sysname LSW3 #

vlan batch 10 20

#

stp bpdu-filter default stp mode rstp stp instance 0 root secondary

stp bpdu-protection

#

#

error-down auto-recovery cause bpdu-protection interval 30

#

#

interface GigabitEthernet0/0/1

port hybrid tagged vlan 10 20

#

interface GigabitEthernet0/0/2

port hybrid tagged vlan 10 20

#

interface GigabitEthernet0/0/3

port hybrid tagged vlan 10 20

#

LSW1 上业务相关配置如下:

# sysname LSW1 #

vlan batch 10 20

#

stp bpdu-filter default stp mode rstp

stp bpdu-protection

#

error-down auto-recovery cause bpdu-protection interval 30

#

#

interface GigabitEthernet0/0/1

port hybrid tagged vlan 10 20

#

interface GigabitEthernet0/0/2

port hybrid tagged vlan 10 20

#

interface GigabitEthernet0/0/3  port hybrid pvid vlan 10  port hybrid untagged vlan 10  stp bpdu-filter enable

stp edged-port enable

#

interface GigabitEthernet0/0/4  port hybrid pvid vlan 20  port hybrid untagged vlan 20  stp bpdu-filter enable

stp edged-port enable #

LSW4 上业务相关配置如下:

# sysname LSW4 #

vlan batch 10 20

#

stp bpdu-filter default stp mode rstp stp bpdu-protection

#

#

error-down auto-recovery cause bpdu-protection interval 30

#

#

interface GigabitEthernet0/0/1

port hybrid tagged vlan 10 20

#

interface GigabitEthernet0/0/2

port hybrid tagged vlan 10 20

#

interface GigabitEthernet0/0/3  port hybrid pvid vlan 10  port hybrid untagged vlan 10  stp bpdu-filter enable

stp edged-port enable

#

interface GigabitEthernet0/0/4  port hybrid pvid vlan 20  port hybrid untagged vlan 20  stp bpdu-filter enable

stp edged-port enable #

 4.12       RSTP仍然没有解决的问题相对于 STP,RSTP 的优势是解决了慢收敛的问题,但是简单粗暴地阻塞端口的模式,仍然不能让人达到满意——整个端口进行阻塞的模式导致流量过于集中,业务流量无法负载。于是工程技术人员就开发出了 MSTP。

 5 MSTP

MSTPMultiple Spanning Tree Protocol ,多生成树,在 IEEE 802.1s 中定义。

STP 和 RSTP 都是基于交换机或者说是基于端口进行转发或阻塞决定,如果能够根据一个或几个 VLAN 决定转发或阻塞,就可以解决 STP 和 RSTP 当中流量过于集中的问题。我们的网络中往往有多个 VLAN,一台交换机也能够运行多个生成树实例,每一个实例都可以有一个或多个 VLAN 对应,这样某个端口对于一个生成树实例是阻塞的,但是对于另外一个实例来说可能就是转发的,这个生成树实例所对应的 VLAN 的用户数据也会表现为转发或阻塞,于是就达到负载均衡的目的。

多生成树在生产中应用时一般会与 VRRP 同时部署,一定要注意 VLAN 所在实例的根桥一定要与所在 VRRP 的主设备是同一台设备,否则可能造成次优路径。

 5.1 MSTP术语

5.1.1        多生成树实例

Multiple Spanning Tree Instance,MSTI,多生成树实例。一个生成树实例运行一个生成树算法进程,它可以为一个以上 VLAN 提供生成树计算,即一个实例当中可以包含多个 VLAN。

5.1.2        多生成树域

Multiple Spanning Tree Region,MSTR,多生成树域。所有运行多生成树的交换机所组成的网络。但并不是运行了 MSTP 就是同一个域,需要同时满足以下四个条件才行:

  1. 首先当然是需要运行 MSTP 啦;
  2. 有相同的域名;
  3. 生成树实例配置相同,即 VLAN 与实例的映射关系相同;
  4. 相同的修订级别。关于修订级别在配置实现一节再详细介绍。

 5.1.3        映射表

VLAN 与 MSTI 的对应关系表。一个 MSTI 至少有一个 VLAN 与之对应。

5.1.4        公共生成树

Common Spanning Tree,CST,公共生成树。如果一个交换机网络中有多个域,为多个域互联所运行的生成树叫做公共生成树。

 5.1.5        内部生成树

Internal Spanning Tree,IST,内部生成树。即运行在某个 MSTR 内的生成树。

5.1.6        单生成树

Single Spanning Tree,SST。就是只有一个生成树进程在运行。有两种场景可出现此现象:

  1. 网络中运行的是 STP 或 RSTP;
  2. MSTP 网络中只有一台交换机。

5.1.7        公共和内部生成树

Common and Internal Spanning Tree,CIST,公共和内部生成树。所有 MSTR 的 IST 和 CST 所构成生成树,是运行在交换机网格内所有网桥上的单生成树。

 5.1.8        总根

交换网络内所有网桥的根桥,即 CIST 的根桥。

 5.1.9        域根

Regional Root,RR,域根。一个域的根桥。

分为 IST 域根和 MSTI 域根。

  1. IST 域根:在 MSTR 中、IST 生成树中,距离总根(CIST Root)最近的网桥是 IST 域根。
  2. MSTI 域根:一个 MSTR 内有多个 MSTI,每一个 MSTI 都会选举一个根桥。

 5.1.10      主桥

Master Bridge,MB,主桥。IST 的主桥,是 IST 域内距离总根最近的网桥。

 5.2 MSTP端口角色

MSTP 的端口角色有指定端口、根端口、Alternate 端口、Backup 端口、Master 端口、域边缘端口和边缘端口。

其中指定端口、根端口、Alternate 端口、Backup 端口、边缘端口与 RSTP 定义一致,具体内容请参阅 STP 和 RSTP 端口角色一节。

我们重点介绍一下 Master 端口,域边缘端口。

5.2.1       Master 端口

Master 端口是 MSTR 和总根相连的所有路径中,最短路径上的端口,它是交换设备上连接 MSTR 到总根的端口。

Master 端口是特殊域边缘端口,是域中的报文去往总根的必经之路。

 5.2.2        域边缘端口

域边缘端口是指位于 MSTR 的边缘,用来连接其它 MSTR 或 SST 的端口。

 5.3 MSTP端口状态

MSTP 的端口状态有三种,分别是:Discarding,Learning,Forwarding。与

RSTP 端口角色定义相同。

以上有关 MSTP 概念相关的内容,参考华为 HedEx 技术文档,文档给了很大帮助,在此表示衷心感谢!

 5.4 MSTP配置实例

5.4.1       CISCO 实现

在 CISCO 教材,MSTP 又被叫做 MISTP,Multi-Instance Spanning-Tree

Protocol。我们目前还没有实验环境,我们手上的 Cisco Packet Tracer 6.2.0.0052 不支持 MSTP,实验实例暂时空缺,等有条件后再补充完善。如果找不到环境做实验,这一节的内容就不要了。

5.4.2        华为实现

在使用华为的模拟器 eNSP Version 1.2.00.500 做本实验时,第一次配置好后,查看状态就好了,不要改动运行参数,否则也会出些稀奇古怪的问题,达不到想要的效果。规避的办法是复制实验拓扑,清空所有配置后用新参数重新做一次实验。

 5.4.2.1 实验拓扑

图 13-06 MSTP 配置实现

 5.4.2.2 实验要求

LSW2 和 LSW3 相当于两台核心交换机,三个连网的接口都运行在 Trunk 模式下,允许通过 VLAN 10,VLAN 20,VLAN 30,VLAN 40。

LSW1 和 LSW4 相当于两台接入交换机,分别为满足用户接入和服务器接入。

为了保护网络的稳定,我们在每一台交换机上开启 BPDU 保护功能,并配置

BPDU 错误自动恢复时间。

为了加快收敛和网络稳定,我们运行 RSTP 并在边缘端口(端接终端设备的接

口)过滤或禁用 STP 功能。

通过使用 MSTP,合理分担用户流量。因为我们的网络中只有两条主要路径,

因此启用两个 STP 进程实例,使 VLAN 10、VLAN 20 的流量主要走 LSW2,VLAN 30、VLAN 40 的流量主要走 LSW3。

 5.4.2.3 配置实现

通常情况下,设备出厂时厂家默认开启 STP 功能,并且运行的是多生成树模

式,所有的 VLAN 都映射到 Instance 0,也就是只运行一个实例的多生成树,而且

这个实例运行的是快速生成树协议。我们需要做的是确认这些默认配置,并修改

Instance 与 VLAN 之间的映射关系。

在每一台交换机上开启 MSTP,并开启每台交换机上 BPDU 保护,配置端口

BPDU 错误自动恢复时间为 30 秒。

[lsw1]stp mode mstp

[lsw1]stp bpdu-protection

[lsw1]error-down auto-recovery cause bpdu-protection interval 30

INTEGER<30-86400>  Value of the automatic recovery timer, in seconds

[lsw1]

开启 BPDU 保护的目的是当交换机在某个端口收到非法 BPDU 时关闭这个端口,防止有人恶意攻击,导致网络不稳定。

如果只配置了 BPDU 保护,没有配置 BPDU 错误自动恢复时间,BPDU 保护不生效。

BPDU 错误自动恢复时间缺省没有配置,也没有默认值,不配置 BPDU 错误自动恢复时间,保护就不会生效。时间的单位是秒,取值是 30~86400。

配置每一台交换机上的 MSTR,使其具有相同的域名,VLAN 映射关系,和修订级别。

[lsw1]stp mode mstp

[lsw1]stp region-configuration

[lsw1-mst-region]region-name niuhai

[lsw1-mst-region]instance 1 vlan 10 20

[lsw1-mst-region]instance 2 vlan 30 40

[lsw1-mst-region]revision-level 0

[lsw1-mst-region]active region-configuration

Info: This operation may take a few seconds. Please wait for a moment...done.

[lsw1-mst-region]

修订级别缺省是 0,大多数厂家的修订级别默认都是 0。如果要配置不同厂家的设备在同一个域,最好再检查一下修订级别的初始值是否一致。

[lsw1-mst-region]revision-level ?

INTEGER<0-65535>  Revision level

[lsw1-mst-region]revision-level 0

VLAN 和 MSTI 的映射关系也可以配置成

[lsw1-mst-region]vlan-map modulo ?   INTEGER<1-48>  Value of modulo

[lsw1-mst-region]vlan-map modulo 2 后面的整数值有两个作用:

  1. 数字就是进程数;
  2. 分配 VLAN 与生成树实例的对应关系。

如果只有两个进程,就把它配置成 2,这样一来,奇数 VLAN ID 映射到 MSTI 1,偶数 VLAN ID 映射到 MSTI2。如果只有三个进程,就把它配置成 3,这样一

来,第一个 VLAN ID 映射到 MSTI 1,第二个 VLAN ID 映射到 MSTI 2,第三个

VLAN ID 映射到 MSTI 3,第四个 VLAN ID 映射到 MSTI 1,,,依次类推。

分配计算方法是:(VLAN ID - 1) % modulo + 1。

最后一行配置很重要,也很容易被遗忘,如果不执行的话配置不会生效:

[lsw1-mst-region]active region-configuration

非常重要,如果域配置信息有变化,使修改后的域配置信息生效,就必需要执行这么一行。这里的变化包括第一次配置和后面的修改。我的建议是退出 MST 域配置模式后,都要执行这么一句。

将 lsw2 配置成 instance1 的根桥,instance2 的备份根桥:

[lsw2]stp instance 1 root primary

[lsw2]stp instance 2 root secondary

将 lsw2 配置成 instance1 的备份根桥,instance2 的根桥:

[lsw3]stp instance 1 root secondary

[lsw3]stp instance 2 root primary

分别配置 lsw1,lsw4 的接入端口为边缘端口,并开启 BPDU 过滤。

[lsw1]int gig 0/0/3

[lsw1-GigabitEthernet0/0/3]stp bpdu-filter enable

[lsw1-GigabitEthernet0/0/3]stp edged-port enable

[lsw1-GigabitEthernet0/0/3]quit

[lsw1]int gig 0/0/4

[lsw1-GigabitEthernet0/0/4]stp bpdu-filter enable

[lsw1-GigabitEthernet0/0/4]stp edged-port enable

[lsw1-GigabitEthernet0/0/4]quit

[lsw1]int gig 0/0/5

[lsw1-GigabitEthernet0/0/5]stp bpdu-filter enable

[lsw1-GigabitEthernet0/0/5]stp edged-port enable

[lsw1-GigabitEthernet0/0/5]quit

[lsw1]int gig 0/0/6

[lsw1-GigabitEthernet0/0/6]stp bpdu-filter enable

[lsw1-GigabitEthernet0/0/6]stp edged-port enable

[lsw1-GigabitEthernet0/0/6]

为什么要配置缘接口和 BPDU 过滤?是因为这个接口接的是终端设备,不是网络交换机设备,在这个接口上向外发送 BPDU 没有意义。或者直接在这类接口上直接禁用 STP。两种实现效果一样,但是只在确认端接终端设备时才这么做。

[lsw1]int gig 0/0/3

[lsw1-GigabitEthernet0/0/3]stp disable

[lsw1]int gig 0/0/4

[lsw1-GigabitEthernet0/0/4]stp disable

 5.4.2.4 验证配置

LSW2 是 instance 1 的根桥,3 个活动端口都是指定端口,处于转发状态。

在 instance 2 中,LSW2 是备份根桥,端口 GigabitEthernet0/0/3 连接

LSW3(instance 2 的根桥),端口角色是根端口,处于转发状态,另外两个活动

端口是指定端口,处于转发状态。

<lsw2>dis stp instance 1 brief

MSTID  Port                        Role  STP State     Protection

1    GigabitEthernet0/0/1        DESI  FORWARDING      NONE

1    GigabitEthernet0/0/2        DESI  FORWARDING      NONE

  1. GigabitEthernet0/0/3        DESI  FORWARDING      NONE

<lsw2>dis stp instance 2 brief

MSTID  Port                        Role  STP State     Protection

  1. GigabitEthernet0/0/1        DESI  FORWARDING      NONE

2    GigabitEthernet0/0/2        DESI  FORWARDING      NONE

2    GigabitEthernet0/0/3        ROOT  FORWARDING      NONE

<lsw2>

LSW3 是 instance 1 的备份根桥,它上面除了连接根桥(LSW1)的端口

gigabitEthernet0/0/3 是根端口外,其它端口都是指定端口。

LSW3 是 instance 2 的根桥,3 个活动端口都是指定端口,处于转发状态。在

instance 1 中,LSW3 是备份根桥,端口 GigabitEthernet0/0/3 连接 LSW2(instance

  1. 的根桥),端口角色是根端口,处于转发状态,另外两个活动端口是指定端口,处于转发状态。

<lsw3>dis stp instance 1 brief

MSTID  Port                        Role  STP State     Protection

1    GigabitEthernet0/0/1        DESI  FORWARDING      NONE

1    GigabitEthernet0/0/2        DESI  FORWARDING      NONE

  1. GigabitEthernet0/0/3        ROOT  FORWARDING      NONE

<lsw3>dis stp instance 2 brief

MSTID  Port                        Role  STP State     Protection

    1. GigabitEthernet0/0/1        DESI  FORWARDING      NONE
  1. GigabitEthernet0/0/2        DESI  FORWARDING      NONE

2    GigabitEthernet0/0/3        DESI  FORWARDING      NONE

<lsw3> 在 instance 1 中,LSW1 的 GigabitEthernet0/0/2 连接备份根桥,因为我们运行了 RSTP,它的角色是 Alternate,处于丢弃状态。在 instance 2 中,LSW1 的

GigabitEthernet0/0/1 连接备份根桥,因为我们运行了 RSTP,它的角色是

Alternate,处于丢弃状态。

其它两种端口角色及状态在 LSW2 和 LSW3 的配置检查中已经介绍过,不多赘述。

<lsw1>dis stp instance 1 brief

MSTID  Port                        Role  STP State     Protection

1    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE

1    GigabitEthernet0/0/2        ALTE  DISCARDING      NONE

1    GigabitEthernet0/0/3        DESI  FORWARDING      BPDU

  1. GigabitEthernet0/0/4        DESI  FORWARDING      BPDU

<lsw1>dis stp instance 2 brief

MSTID  Port                        Role  STP State     Protection

  1. GigabitEthernet0/0/1        ALTE  DISCARDING      NONE

2    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE

2    GigabitEthernet0/0/5        DESI  FORWARDING      BPDU

2    GigabitEthernet0/0/6        DESI  FORWARDING      BPDU

<lsw1>

LSW4 与 LSW1 的配置一样,所以验证配置结果也一样。

<lsw4>dis stp instance 1 brief

MSTID  Port                        Role  STP State     Protection

1    GigabitEthernet0/0/1        ROOT  FORWARDING      NONE

1    GigabitEthernet0/0/2        ALTE  DISCARDING      NONE

1    GigabitEthernet0/0/3        DESI  FORWARDING      BPDU

  1. GigabitEthernet0/0/4        DESI  FORWARDING      BPDU

<lsw4>dis stp instance 2 brief

MSTID  Port                        Role  STP State     Protection

  1. GigabitEthernet0/0/1        ALTE  DISCARDING      NONE

2    GigabitEthernet0/0/2        ROOT  FORWARDING      NONE

2    GigabitEthernet0/0/5        DESI  FORWARDING      BPDU

2    GigabitEthernet0/0/6        DESI  FORWARDING      BPDU <lsw4>

 5.4.2.5 业务实现相关配置

LSW2 MSTP 相关配置如下:

# sysname LSW2 #

vlan batch 10 20 30 40

#

stp instance 1 root primary stp instance 2 root secondary stp bpdu-protection

#

#

error-down auto-recovery cause bpdu-protection interval 30

#

#

stp region-configuration  region-name niuhai  instance 1 vlan 10 20  instance 2 vlan 30 40

active region-configuration

#

#

interface GigabitEthernet0/0/1

port hybrid tagged vlan 10 20 30 40

#

interface GigabitEthernet0/0/2

port hybrid tagged vlan 10 20 30 40

#

interface GigabitEthernet0/0/3

port hybrid tagged vlan 10 20 30 40 #

LSW3 MSTP 相关配置如下:

# sysname LSW3 #

vlan batch 10 20 30 40

#

stp instance 1 root secondary stp instance 2 root primary

stp bpdu-protection

#

#

error-down auto-recovery cause bpdu-protection interval 30

#

#

stp region-configuration  region-name niuhai  instance 1 vlan 10 20  instance 2 vlan 30 40  active region-configuration #

#

interface GigabitEthernet0/0/1

port hybrid tagged vlan 10 20 30 40

#

interface GigabitEthernet0/0/2

port hybrid tagged vlan 10 20 30 40

#

interface GigabitEthernet0/0/3

port hybrid tagged vlan 10 20 30 40 #

LSW1 MSTP 相关配置如下:

# sysname LSW1 #

vlan batch 10 20 30 40

#

stp bpdu-protection

#

#

error-down auto-recovery cause bpdu-protection interval 30

#

#

stp region-configuration  region-name niuhai  instance 1 vlan 10 20  instance 2 vlan 30 40

active region-configuration

#

#

interface GigabitEthernet0/0/1

port hybrid tagged vlan 10 20 30 40

#

interface GigabitEthernet0/0/2

port hybrid tagged vlan 10 20 30 40

#

interface GigabitEthernet0/0/3  port hybrid pvid vlan 10  port hybrid untagged vlan 10  stp bpdu-filter enable  stp edged-port enable

#

interface GigabitEthernet0/0/4  port hybrid pvid vlan 20  port hybrid untagged vlan 20  stp bpdu-filter enable

stp edged-port enable

#

interface GigabitEthernet0/0/5  port hybrid pvid vlan 30  port hybrid untagged vlan 30  stp bpdu-filter enable

stp edged-port enable

#

interface GigabitEthernet0/0/6  port hybrid pvid vlan 40  port hybrid untagged vlan 40  stp bpdu-filter enable

stp edged-port enable #

LSW4 MSTP 相关配置如下:

# sysname LSW4 #

vlan batch 10 20 30 40

#

stp bpdu-protection

#

#

error-down auto-recovery cause bpdu-protection interval 30

#

#

stp region-configuration  region-name niuhai  instance 1 vlan 10 20  instance 2 vlan 30 40

active region-configuration

#

#

interface GigabitEthernet0/0/1

port hybrid tagged vlan 10 20 30 40

#

interface GigabitEthernet0/0/2

port hybrid tagged vlan 10 20 30 40

#

interface GigabitEthernet0/0/3  port hybrid pvid vlan 10  port hybrid untagged vlan 10  stp bpdu-filter enable

stp edged-port enable

#

interface GigabitEthernet0/0/4  port hybrid pvid vlan 20  port hybrid untagged vlan 20  stp bpdu-filter enable

stp edged-port enable

#

interface GigabitEthernet0/0/5  port hybrid pvid vlan 30  port hybrid untagged vlan 30  stp bpdu-filter enable

stp edged-port enable

#

interface GigabitEthernet0/0/6  port hybrid pvid vlan 40  port hybrid untagged vlan 40

stp bpdu-filter enable

stp edged-port enable #

 6 多进程

MISTPMulti-Instance Spanning Tree Protocol,多进程生成树协议。为了解

决流量过于集中的问题,除了可以采用 MSTP 的多实例,还可以使用 MISTP。MISTP 是标准协议,我们的实验当中发现华为设备可以支持,但是在 CISCO 的网站和相关的资料中没有找到其支持多进程的信息。

在一台交换机上运行多个 STP 进程,不同的进程都可以服务不同的网络(或 VLAN),每一个进程又可以运行不同的协议,比如进程 1 运行 STP,进程 2 运行 RSTP,进程 3 运行 MSTP,在运行 MSTP 的进程 3 中,还可以运行多实例。多进程配置最重要的两个步骤如下,其它配置内容与我们前面介绍的一样,不多赘述。

 6.1 创建并启用STP进程

STP 的配置具体配置与前面一样,这里只介绍一下进程创建。如下:

[lsw2]stp process ?

INTEGER<1-15>  The identifier of the MSTP process

[lsw2]stp process

 6.2 把接口绑定到进程一个接口可以绑定多个进程,甚至把它设置成共享链路。如下:

[lsw2-GigabitEthernet0/0/1]stp binding process 1 ?

link-share  Binding the process with link-share method   to          Range of processes   <cr>

[lsw2-GigabitEthernet0/0/1]stp binding process 1

  1. MCheck

这是在较老的一些软件系统版本中,使用华为设备做 STP 与 RSTP 互操作时需要注意的事项,在新的软件版本中不存在这个问题,在生产中使用时需要关注一下。STP 与 RSTP 具有互操作性,实现互操作的办法是把运行 RSTP 的端口自动自动转为 STP。于是就引入了一个新的问题:如果连接在这个接口上的运行 STP 的设备不在线了,接口不会自动回到 RSTP 模式,需要人工进行干预。

需要执行 MCheck 操作的场景有两种:

1)运行 STP 的设备不在了; 2)运行 STP 的设备切换为 RSTP 模式。

操作方法:

[lsw1]int gig 0/0/1

[lsw1-GigabitEthernet0/0/1]stp mcheck ?

<cr>

[lsw1-GigabitEthernet0/0/1]stp mcheck

  1. PVST&VBST

PVST 和 VBST 都是为每一个 VLAN 运行一个生成树实例的协议,分别属于

CISCO 公司和华为公司私有,有互操作性。虽然我们并不打算做这两个协议的实验,但是注意事项还是要说一下的,毕竟它又跟前面的协议有所不同。

 8.1 PVST

PVST,Per-VLAN Spanning Tree,每 VLAN 生成树协议,为每一个 VLAN 运行一个生成树实例,CISCO 私有的协议。

PVST 允许设置特定的端口模式,主要目的是为了减少端口转换状态(阻塞),以加快收敛速度。

  1. PortFast,这个端口端接了一台确定的终端设备,而不是一台交换机,并且确保这个端口如果禁用了 STP 后不会产生环路;
  2. UplikFast,只用在网络末端的接入交换机,或者用冗余链路直接相连的交换机,而且至少有一条链路处于阻塞状态,其它场景均不适用;
  3. BackboneFast,可以在所有的交换机上使用,以检测非直连链路失效。

(参考 CCNA 学习指南(中文第六版,电子工业出版社))

需要注意的是 CISCO 的 PVST 系列与标准的 STP/RSTP 等不能够互操作。

 8.2 VBST

VBST,VLAN Based Spanning Tree,基于 VLAN 的生成树协议,是华为公司私有的协议,与 CISCO 公司的 PVST 有异曲同工之妙,而且可以标准的 STP/RSTP 等互操作。

以华为官方文档的说法,它的优点主要有两个:

  1. 克服了 RSTP 的流量不均衡问题;
  2. 解决了 MSTP 概念抽象和配置复杂的问题。从生产中的实用性来说,VBST 确实有很大的优势。不管是 PVST 还是 VBST,本质上都是为每一个 VLAN 运行一个生成树的技术,如果 VLAN 数量太多,两者都有可能增加交换机系统资源消耗,当然必须是VLAN 数量大到一定程度才会表现出来,具体的 VLAN 数我无法给出,这跟实际使用的交换机的性能有关。虽然说通常情况下都不会有问题,但是如果你部署了这个技术,还是请你一定要留心一下你的交换机的 CPU 和内存占用。从更大一个视角,即从环网保护的角度来看,如果是纯华为设备场景,还可以选择 SEP,Smart Ethernet Protection,智能以太网保护,其最大优势是支持与STP、RSTP、MSTP、RRPP 协议混合组网,并且部署简单。
  3. Smart Link

Smart Link 只能算得上是一个提供链路可靠性的解决方案,它并不能够解决整个以太网络的环路问题,它是一种主备技术,通过与不同的 VLAN 进行映射可以达到负载均衡的目的,应用 Smart Link 的接口不能够运行 STP。此技术华为私有技术。

  1. 总结

写这篇文档的目的是通过以上讨论,让读者更深层地了解二层网络运行原理和

机制等,以及存在的问题和应对的策略,尤其重要的是要对二层网络所存在的问题要有一个深刻的认识,如果这篇文档能够让你从思想意识上注意到下面几点,我辛苦写这篇文档,也值得了。

简单的、容易理解的技术不是太完美,多少存在着一些问题;似乎完美解决问题的技术又太过于复杂,可能带来运行效率的下降,同时不便于理解和实现。

    1. 为避免网络发生环路,一定要开启 STP;
    2. 为增加网络的可用性,一定要使用 RSTP;
    3. 在多 VLAN 场景,最好使用 MSTP,其实就算是只有一个 VLAN,使用MSTP 也不为过,几乎所有的设备出厂已经默认开启了基于 RSTP 的单实例MSTP;
    1. 适当地操纵网桥优先级,避免性能较差的设备被选为根桥,避免过多的STP 实例使用同一个根桥;
    1. 为让网络快速收敛并保持稳定,应对终端接口不运行 STP,并在每一台交换机上开启 BPDU 保护;
    2. 如果网络出现闪断和性能下降,有可能就是 STP 的问题,查一下它的运行状态;
    3. 以太网环网保护的协议还有很多,STP 的性能也不是最好的,根据不同的

应用场景,选择适合自己的,但 STP 是目前各厂家支持最好,应用是最广泛的;

  1. 最小化二层网络,/25 位掩码的网络可能已经是你真正需要的最大的网络了。
  2. STP 在生产中基本不用,文档中介绍它主要是为了介绍 RSTP 需要,生产实践中用户对数据量的需求和 ARP 原因等,一般都不会规划太大的二层网络,通常的做法是把二层网络尽可能缩小,设备的冗余就做堆叠,直连设备线路的冗余就做 LACP 绑定,通过以上两项措施,二层环路基本上就没有了,但可靠性却并没有减少,只是降低了实现的复杂度,至于 STP 等相关的技术,大家普遍关注得并不多,除非是比较大的二层组网。

读书笔记(13)STP相关推荐

  1. PHP-SOCKETS读书笔记1-3

    学习PHP2个月了,收获挺多.不过和别人不同的是,我更喜欢SOCKET.PHP在SOCKET这方面的文章太少了.所以决定写一系列PHP-SOCKET读书笔记.一直从最基本写到SOCKET_RAW. 实 ...

  2. 数论概论读书笔记 13.素数的计数

    素数的计数 素数有无穷多个 且算术级数的素数 由狄利克雷定理知也有无数个 现在的问题是对于一段区间,其间到底有多少个素数呢?或者说大致比例是多少呢? 下表可以直观的感觉一下素数的分布 定理13.1(素 ...

  3. DAMA数据管理知识体系指南-读书笔记13

    第13章 数据质量 一.引言 数据质量管理包括在整个生命周期制定标准,在数据创建.转换和存储过程中完善质量,以及根据标准度量数据来管理数据.数据质量管理不是一个项目,而是一项持续性工作.它包括项目和维 ...

  4. JavaScript DOM编程艺术 - 读书笔记1-3章

    1.JavaScript语法 准备工作 一个普通的文本编辑器,一个Web浏览器. JavaScript代码必须通过Html文档才能执行,第一种方式是将JavaScript代码放到文档<head& ...

  5. 8086处理器的无条件转移指令——《x86汇编语言:从实模式到保护模式》读书笔记13

    本博文是对原书8.3.10的内容的总结. 一.相对短转移 指令格式是: jmp short 标号 标号也可以替换成具体的数值(标号和数值是等价的),例如 jmp short 0x2000 说明: (1 ...

  6. APUE读书笔记-13守护进程(05)

    转载于:https://blog.51cto.com/quietheart/829450

  7. 程序的加载和执行(一)——《x86汇编语言:从实模式到保护模式》读书笔记21

    程序的加载和执行(一) 本文及之后的几篇博文是原书第13章的学习笔记. 本章主要是学习一个例子,对应的代码分为3个文件: ;代码清单13-1;文件名:c13_mbr.asm;文件说明:硬盘主引导扇区代 ...

  8. 进入保护模式(二)——《x86汇编语言:从实模式到保护模式》读书笔记14

    首先来段题外话:之前我发现我贴出的代码都没有行号,给讲解带来不便.所以从现在起,我要给代码加上行号.我写博客用的这个插入代码的插件,确实不支持自动插入行号.我真的没有找到什么好方法,无奈之下,只能按照 ...

  9. Swing学习系列 -- Swing读书笔记目录

    为了便于二次查找,学习,特列出Swing的目录如下 ++ Swing读书笔记 1-1Swing常用的package ++ Swing读书笔记 1-3版面管理器(Layout Menager) 1-3- ...

  10. Android开发艺术探索 读书笔记

    啥也不说了,@主席的<Android开发艺术探索>真是业界良心之作,不得不看!感谢主席,膜拜主席!主席主席,我要跟你生猴子!(>^ω^<) 读书笔记中若有任何问题请留言告知,谢 ...

最新文章

  1. c语言实现数码管显示qq号,各位大神,如何用C语言实现在数码管上实现1234同时亮...
  2. 稀疏矩阵按列转置核心代码
  3. php开发编程中心,Php编程
  4. 基本概念之dos和cmd的区别
  5. 【职场】公司利益和个人利益,永远不可能完全一致
  6. java拉丁正方形_LeetCode JAVA解题---824. 山羊拉丁文
  7. 【PAG组件】-从解码渲染层面对比 PAG 与 lottie
  8. Vue.js 表单校验插件
  9. 《JEECG_v3 开发手册》文档发布通知
  10. 【Flink】Flink PipelineExecutor 体系
  11. Yahoo数据仓库架构简介
  12. Code Review 效率低?来试试智能语法服务
  13. 【路径规划】基于matlab帝国企鹅算法求解机器人栅格地图避障路径规划问题【含Matlab源码 784期】
  14. [USACO DEC13] 牛棒球
  15. 动作识别0-02:mmaction2(SlowFast)-官方数据训练测试-ucf101
  16. C# 使用 itextsharp
  17. 【Audio】WAV音频文件格式结构解析
  18. northwind数据库mysql下载_SQLEXPRESS 2012 安装NorthWind和Pub数据库
  19. 如何用python画爱心型线_python心形_python 心形_python 心形线 - 云+社区 - 腾讯云
  20. Ardunio开发实例-MLX90614红外测温仪

热门文章

  1. ubuntu下安装搜狗输入法
  2. 在SQL Server2012上搭建Northwind详细教程,SQL2000SampleDb.msi的资源
  3. oracle学习视频
  4. jsp网页视频播放器
  5. Unicode字符集与多字节字符集
  6. 游戏中MD5加密的一些作用
  7. 基于竞争的MAC协议
  8. Matlab 2019b AudioToolBox设备环境测试
  9. 测试用例的几种常见设计方法
  10. webhook机器人php源码,机器人之钉钉机器人webhook 对接 ThinkPHP3.2 实现Bug告警通知...