生成树协议STP和生成树算法STA详解

生成树协议STP

为了提高以太网的可靠性, 有时需要在两个以太网之间使用多台交换机来提供冗余链路
在增加冗余链路提高以太网的可靠性的同时, 却给网络引入了环路
网络中的广播帧将在网络中永久兜圈, 造成广播帧充斥整个网络, 网络资源被白白浪费, 而网络中的主机之间无法正常通信(注意: 若交换机的 CAM 表中没有待转发目的 MAC 地址的相关记录, 则单播帧也会引起类似的情况)。
为了避免广播帧在环路中永久兜圈, 交换机使用生成树协议(Spanning Tree Protocol, STP), 可以在增加冗余链路提高网络可靠性的同时, 又避免环路带来的问题。
生成树STP使用的标准是IEEE802.1D

生成树算法STA

生成树算法STA(Spanning Tree Algorithm)是生成树协议STP的核心。
他的实现目标是: 在包含有物理环路的网络中, 构建出一个能够连通全网各节点的树型无环逻辑拓扑
生成树算法的三个步骤:

  1. 选举根交换机
  2. 选举根端口
  3. 选举指定交换机并阻塞备用端口

注意: 所谓的”选举“是通过网络中各交换机相互发送生成树协议专用的数据帧BPDU来实现的。交换机何时发送BPDU以及BPDU中又包含着什么信息, 暂时不讨论, 这有助于我们更轻松地理解生成树算法的三个步骤。

选举根交换机

根交换机的选举条件: 网桥ID(BID)最小者当选
注意: 网桥是交换机的前身, 而交换机实质上就是个具有多个接口的网桥。

网桥ID(BID)由以下两部分构成:

  1. 优先级

    • 范围: 0 - 61440
    • 步长: 4096
    • 默认值: 32768
  2. 交换机的基本MAC地址

交换机一般都有多个端口,每个端口都有一个 MAC 地址, 除了每个端口的 MAC 地址外,交换机还有一个基本的 MAC 地址, 也就是VLAN1的MAC地址

网桥ID(BID)的比较方法:

  1. 优先级取值越小, 则网桥ID(BID)就越小。
  2. 若优先级相同, 则比较 MAC 地址, 从 MAC 地址的左侧依次比较每个位上的十六进制数值, 数值小的, 则网桥ID(BID)就小。

举例:
1

上图的5台交换机的BID的优先级都为默认值32768, 因此需要比较各自的基本 MAC 地址, 比较顺序是从左至右依次比较每个位上的十六进制数值。
可以得出交换机A的网桥ID(BID)最小, 因此交换机A被选举为根交换机。

选举根端口

在每个非根交换机上选举出一个根端口(Root Port), 并且只能是一个。

根端口RP用于接收根交换机发来的BPDU, 也用来转发普通流量。

根端口RP的选举条件:

  1. BPDU接收端口到根交换机的路径成本(Path Cost)最小。
链路带宽 成本值
4 Mb/s 250
10 Mb/s 100
16 Mb/s 62
100 Mb/s 19
1 Gb/s 4
10 Gb/s 2
  1. 对端的网桥ID(BID)最小。

  2. 对端的端口ID(PID)最小。

    • 优先级
      • 范围: 0 - 240
      • 步长: 16
      • 默认值: 128
    • 端口号

端口ID(PID)的比较方法:

  1. 首先比较端口的优先级,优先级取值越小,则端口ID(PID)就越小
  2. 其次比较端口号,端口号越小,则端口ID(PID)就越小

举例:

2

如上图, 首先找出非根交换机B的根端口, 它有编号为123的3个千兆端口:
端口1到根交换机A的最小路径成本为4;
端口2到根交换机A的最小路径成本为8;
端口3到根交换机A的最小路径成本为12;
因此千兆端口1就是非根交换机B的根端口。

非根交换机C的根端口选举过程与非根交换机B类似, 可以得出其千兆端口1就是根端口。

非根交换机D很显然只有千兆端口1和千兆端口2能成为根端口, 因为他的另外2个端口是百兆端口, 成本值远高于千兆端口。
非根交换机D的端口1到根交换机A的最小路径成本为8, 端口2到根交换机A的最小路径成本也为8, 显然只比较路径成本选举条件是无法选出谁是根端口,因此需要接着比较第2个选举条件, 也就是对端的网桥ID(BID)哪个最小。
非根交换机D的千兆端口1的对端为非根交换机B, 千兆端口2的对端为非根交换机C, 由于非根交换机C的网桥ID(BID)比非根交换机B的网桥ID(BID)小(优先级相等, MAC地址更小), 因此千兆端口2成为根端口。

非根交换机E, 在它的百兆端口1和百兆端口2中选出一个根端口, 它的端口1到根交换机A的最小路径成本为27, 端口2到根交换机A的最小路径成本也为27, 因为路径成本相等, 所以还需比较对端的网桥ID(BID), 然而端口1和端口2的对端都是交换机D, 因此网桥ID(BID)是同一个, 还是无法选出根端口, 因此还需要比较第3个条件, 也就是对端的端口ID(PID), 在本例中, 对端的端口ID(PID)的优先级都为默认的128, 因此还需要比较各端口号, 非根交换机D的百兆端口1的端口ID(PID)更小, 并且它是非根交换机E的百兆端口1的对端端口, 因此非根交换机E的百兆端口1被选为根端口。
到此, 所有非根交换机上的根端口就全部选举出来了。

选举指定端口并阻塞备用端口

在每个网段上选出一个指定端口DP(Designated Port), 并且只能是一个。

指定端口DP用于转发交换机发来的BPDU, 也用来转发普通流量。

指定端口DP的选举条件:

  1. 根交换机的所有端口都是指定端口DP。
  2. 根端口的的对端端口一定是指定端口DP。
  3. BPDU转发端口到根交换机的路径成本(Path Cost)最小。
  4. 本端的网桥ID(BID)最小。

剩余端口成为备用端口AP(Alternate Port), 将他们阻塞。

举例:

3

如上图, 根交换机A的所有端口都是指定端口(选举条件1)。由于根端口的对端端口一定是指定端口, 因此非根交换机C的端口3是指定端口, 非根交换机D的百兆端口1是指定端口。

现在还剩3个网段, 按前2个选举条件无法选出指定端口, 因此需要比较第三个条件。
此时来比较非根交换机E的百兆端口2与非根交换机D的百兆端口2, 从根交换机A到非根交换机D的百兆端口2的路径成本为8,从根交换机A到非根交换机E的百兆端口2的路径成本为27, 路径成本小的端口胜出, 因此非根交换机D的百兆端口2成为这个网段的指定端口;
再来比较非根交换机B的千兆端口3与非根交换机D的千兆端口1, 从根交换机A到非根交换机B的端口3的路径成本为4, 从根交换机A到非根交换机D的千兆端口1的路径成本为8, 路径成本小的端口胜出, 因此非根交换机B的端口3成为这个网段的指定端口;
最后还需在非根交换机B的千兆端口2和非根交换机C的千兆端口2中选出一个指定端口, 很显然这两个端口的路径成本都为4, 因此还需要比较本端的网桥ID(BID), 非根交换机C的网桥ID(BID)小于非根交换机B的网桥ID(BID), 因此非根交换机C的千兆端口2成为指定端口。
最后剩余的端口就都成为备用端口, 在本例中, 分别是非根交换机B的千兆端口2, 非根交换机D的千兆端口1, 非根交换机E的百兆端口2, 将备用端口阻塞, 就可以形成连通全网的逻辑上无环的树型拓扑。

总结

4

练习

4

点击展开答案

4

实验

拓扑:

使用3台思科2960交换机, 互连各自的快速以太网接口(即100BASE-T的速率, 成本为19)使其成为一个环型链路。

4

分析:

  1. 查看3台交换机网桥ID(BID)的优先级和基本MAC地址(VLAN 1的MAC地址):show spanning-tree vlan 1, 也可以使用 show interfaces vlan 1 查看基本MAC地址:
    • 思科的2960交换机使用的不是标准的生成树协议(IEEE 802.1D), 而是思科私有的VLAN生成树PVST。PVST协议可以简单地理解为在每一个VLAN上运行一个普通的STP协议, 并且生成树的三个步骤都是一致的。
    • 之所以查看VLAN 1的生成树是因为交换机的所有接口默认都属于VLAN 1。

S1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
S1>show spanning-tree vlan 1
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 0003.E4C3.9A8D
Cost 19
Port 1(FastEthernet0/1)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 000D.BD61.C9EA
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 20

Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/1 Root FWD 19 128.1 P2p
Fa0/2 Desg FWD 19 128.2 P2p

优先级:32769
基本MAC地址:000D.BD61.C9EA

S2:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
S2>show spanning-tree vlan 1
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 0003.E4C3.9A8D
This bridge is the root
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 0003.E4C3.9A8D
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 20

Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/1 Desg FWD 19 128.1 P2p
Fa0/2 Desg FWD 19 128.2 P2p

优先级:32769
基本MAC地址:0003.E4C3.9A8D

S3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
S3>show spanning-tree vlan 1
VLAN0001
Spanning tree enabled protocol ieee
Root ID Priority 32769
Address 0003.E4C3.9A8D
Cost 19
Port 2(FastEthernet0/2)
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec

Bridge ID Priority 32769 (priority 32768 sys-id-ext 1)
Address 00E0.A3D6.E826
Hello Time 2 sec Max Age 20 sec Forward Delay 15 sec
Aging Time 20

Interface Role Sts Cost Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/1 Altn BLK 19 128.1 P2p
Fa0/2 Root FWD 19 128.2 P2p

优先级:32769
基本MAC地址:00E0.A3D6.E826

从上面的命令输出中可以直接得出:

  1. 3台交换机的网桥ID(BID)优先级都为默认的32769(Priority 32769), 为什么不是32768? 因为思科的网桥ID(BID)的优先级默认为32768加上一个系统扩展ID(sys-id-ext);
  2. 3台交换机的链路成本值都为19(Cost 19);
  3. 根交换机的基本MAC地址是 0003.E4C3.9A8D, 即SW2;
  4. SW1的Fa0/1是根端口(Root), Fa0/2是指定端口(Dest);
  5. SW2的Fa0/1是指定端口(Dest), Fa0/2是指定端口(Dest);
  6. SW3的Fa0/1是备用端口(Altn), Fa0/1是根端口(Root);

按生成树算法STA的3个步骤来分析:

  1. 选举根交换机
    比较网桥ID(BID), 由于BID优先级都为默认的32769, 因此需要继续比较基本MAC地址, 基本MAC地址从SW1到SW2依次是:000d.bd61.c9ea, 0003.e4c3.9a8d, 00e0.a3d6.e826, 可得出根交换机是SW2。
  2. 选举根端口
    在非根交换机SW1, SW2上选举根端口RP, 先看SW1, 它的Fa0/1到根交换机SW2的最小路径成本为19, Fa0/2到根交换机SW2的最小路径成本为38, 因此SW1的Fa0/1成为根端口RP。再看SW2, 它的Fa0/1到根交换机SW2的最小路径成本为38, Fa0/2到根交换机SW2的最小路径成本为19, 因此SW1的Fa0/2成为根端口RP。
  3. 选举指定端口并阻塞备用端口
    按规律, 根交换机的SW1的所有端口都为指定端口, 此时还剩下SW1的Fa0/2和SW3的Fa0/1之间的网段待选举出一个指定端口并阻塞另一个备用端口, 从根交换机SW2到非根交换机SW1和SW3的待比较的端口的最小路径成本都为19, 因此还需要比较这两个端口的本段网桥ID(BID), 由于SW1的基本MAC地址小于SW3的, 因此SW1的Fa0/2成为指定端口, SW3的Fa0/1成为备用接口被阻断, 从拓扑图中也可以看到该端口的接口指示灯为橙色阻断状态。

参考:

  1. https://www.bilibili.com/video/BV1St411d7uD/?vd_source=deb821758a0881876f7c7207960d16d2

  2. https://support.huawei.com/enterprise/zh/doc/EDOC1000113971/aaa6dbe2