生成树协议STP和生成树算法STA详解
生成树协议STP和生成树算法STA详解
lololowe生成树协议STP
为了提高以太网的可靠性, 有时需要在两个以太网之间使用多台交换机来提供冗余链路。
在增加冗余链路提高以太网的可靠性的同时, 却给网络引入了环路。
网络中的广播帧将在网络中永久兜圈, 造成广播帧充斥整个网络, 网络资源被白白浪费, 而网络中的主机之间无法正常通信(注意: 若交换机的 CAM 表中没有待转发目的 MAC 地址的相关记录, 则单播帧也会引起类似的情况)。
为了避免广播帧在环路中永久兜圈, 交换机使用生成树协议(Spanning Tree Protocol, STP), 可以在增加冗余链路提高网络可靠性的同时, 又避免环路带来的问题。
生成树STP使用的标准是IEEE802.1D。
生成树算法STA
生成树算法STA(Spanning Tree Algorithm)是生成树协议STP的核心。
他的实现目标是: 在包含有物理环路的网络中, 构建出一个能够连通全网各节点的树型无环逻辑拓扑。
生成树算法的三个步骤:
- 选举根交换机
- 选举根端口
- 选举指定交换机并阻塞备用端口
注意: 所谓的”选举“是通过网络中各交换机相互发送生成树协议专用的数据帧BPDU来实现的。交换机何时发送BPDU以及BPDU中又包含着什么信息, 暂时不讨论, 这有助于我们更轻松地理解生成树算法的三个步骤。
选举根交换机
根交换机的选举条件: 网桥ID(BID)最小者当选。
注意: 网桥是交换机的前身, 而交换机实质上就是个具有多个接口的网桥。
网桥ID(BID)由以下两部分构成:
优先级
- 范围: 0 - 61440
- 步长: 4096
- 默认值: 32768
交换机的基本MAC地址
交换机一般都有多个端口,每个端口都有一个 MAC 地址, 除了每个端口的 MAC 地址外,交换机还有一个基本的 MAC 地址, 也就是VLAN1的MAC地址。
网桥ID(BID)的比较方法:
- 优先级取值越小, 则网桥ID(BID)就越小。
- 若优先级相同, 则比较 MAC 地址, 从 MAC 地址的左侧依次比较每个位上的十六进制数值, 数值小的, 则网桥ID(BID)就小。
举例:
上图的5台交换机的BID的优先级都为默认值32768, 因此需要比较各自的基本 MAC 地址, 比较顺序是从左至右依次比较每个位上的十六进制数值。
可以得出交换机A的网桥ID(BID)最小, 因此交换机A被选举为根交换机。
选举根端口
在每个非根交换机上选举出一个根端口(Root Port), 并且只能是一个。
根端口RP用于接收根交换机发来的BPDU, 也用来转发普通流量。
根端口RP的选举条件:
- 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 |
对端的网桥ID(BID)最小。
对端的端口ID(PID)最小。
- 优先级
- 范围: 0 - 240
- 步长: 16
- 默认值: 128
- 端口号
- 优先级
端口ID(PID)的比较方法:
- 首先比较端口的优先级,优先级取值越小,则端口ID(PID)就越小
- 其次比较端口号,端口号越小,则端口ID(PID)就越小
举例:
如上图, 首先找出非根交换机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的选举条件:
- 根交换机的所有端口都是指定端口DP。
- 根端口的的对端端口一定是指定端口DP。
- BPDU转发端口到根交换机的路径成本(Path Cost)最小。
- 本端的网桥ID(BID)最小。
剩余端口成为备用端口AP(Alternate Port), 将他们阻塞。
举例:
如上图, 根交换机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, 将备用端口阻塞, 就可以形成连通全网的逻辑上无环的树型拓扑。
总结
练习
点击展开答案
实验
拓扑:
使用3台思科2960交换机, 互连各自的快速以太网接口(即100BASE-T的速率, 成本为19)使其成为一个环型链路。
分析:
- 查看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 | S1>show spanning-tree vlan 1 |
优先级:32769
基本MAC地址:000D.BD61.C9EA
S2:
1 | S2>show spanning-tree vlan 1 |
优先级:32769
基本MAC地址:0003.E4C3.9A8D
S3:
1 | S3>show spanning-tree vlan 1 |
优先级:32769
基本MAC地址:00E0.A3D6.E826
从上面的命令输出中可以直接得出:
- 3台交换机的网桥ID(BID)优先级都为默认的32769(Priority 32769), 为什么不是32768? 因为思科的网桥ID(BID)的优先级默认为32768加上一个系统扩展ID(sys-id-ext);
- 3台交换机的链路成本值都为19(Cost 19);
- 根交换机的基本MAC地址是 0003.E4C3.9A8D, 即SW2;
- SW1的Fa0/1是根端口(Root), Fa0/2是指定端口(Dest);
- SW2的Fa0/1是指定端口(Dest), Fa0/2是指定端口(Dest);
- SW3的Fa0/1是备用端口(Altn), Fa0/1是根端口(Root);
按生成树算法STA的3个步骤来分析:
- 选举根交换机
比较网桥ID(BID), 由于BID优先级都为默认的32769, 因此需要继续比较基本MAC地址, 基本MAC地址从SW1到SW2依次是:000d.bd61.c9ea, 0003.e4c3.9a8d, 00e0.a3d6.e826, 可得出根交换机是SW2。 - 选举根端口
在非根交换机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。 - 选举指定端口并阻塞备用端口
按规律, 根交换机的SW1的所有端口都为指定端口, 此时还剩下SW1的Fa0/2和SW3的Fa0/1之间的网段待选举出一个指定端口并阻塞另一个备用端口, 从根交换机SW2到非根交换机SW1和SW3的待比较的端口的最小路径成本都为19, 因此还需要比较这两个端口的本段网桥ID(BID), 由于SW1的基本MAC地址小于SW3的, 因此SW1的Fa0/2成为指定端口, SW3的Fa0/1成为备用接口被阻断, 从拓扑图中也可以看到该端口的接口指示灯为橙色阻断状态。
参考: