网络技术:PVST+ 和快速 PVST+

STP 生成树协议

在交换机之间配置冗余链路是很好的做法,因为一旦某个链路出现了故障,冗余链路可以防止整个网络的崩溃。但是网络传播的数据帧会在所有冗余链路上同时被泛洪开来,这会导致网络环路和从而导致如下的问题:

  1. MAC 数据库不稳定:当出现环路时,交换机的 MAC 地址表可能会使用广播帧不断更新;
  2. 广播风暴:由于广播流量是从交换机的每个端口转发出去,所有相连的设备都必须处理环路网络中洪泛的广播流量;
  3. 帧的多重传输:单播帧的多个副本传送到相同的目的站点。

路由选择协议可以防止在网络层形成网络环路,然而对于因交换机之间形成的环路无能为力。生成树协议 STP 可以防止在第 2 层交换式网络中形成环路,STP 会特意阻塞可能导致环路的冗余路径,以确保网络中所有目的地之间只有一条逻辑路径。端口处于阻塞状态时,用户数据将无法进入或流出该端口。不过,STP 用来防止环路的 BPDU(网桥协议数据单元)帧仍可继续通行。一旦需要启用此类路径来抵消网络电缆或交换机故障的影响,STP 就会重新计算路径,将必要的端口解除阻塞,使冗余路径进入活动状态。

根网桥

以下是 STP 协议的一些术语:

  • 根桥:根桥是指拥有最佳桥 ID 的网桥,网络中所有其他决策都需要基于与根桥的关系进行选择。
  • BPDU:指网络中所有交换机都需要相互交换的、用于根交换机选举的信息。
  • 桥 ID:STP 使用桥 ID 跟踪网络中的所有交换机,由桥优先级和桥MAC地址共同决定。
  • 非根桥:除了根桥外的所有网桥,非根桥会与所有的网桥交换 BPDU,更新 STP 拓扑数据库以防止环路。
  • 端口开销:存在多条链路时,端口开销用于确定最佳路径,取决于链路的带宽。

具有最低 BID 的交换机将作为根网桥,一开始所有交换机自称为根网桥,最终交换机互相交换 BPDU 达成一致。具体而言,每台交换机都会将包含其 BID 和根 ID 的 BPDU 帧转发到广播域中的邻接交换机。接收方交换机将其当前根 ID 与接收到的帧中标识的根 ID 进行比较。如果接收到的根 ID 较小,则接收方交换机使用较小的根 ID 更新其根 ID,然后将含有较小根 ID 的新 BPDU 帧转发给其他邻接交换机,最终具有最小 BID 的交换机被确定为生成树实例的根网桥。
为生成树实例选出根网桥后,STA 便开始确定到根网桥的最佳路径。交换机发送 BPDU 包括根路径开销,算法是将从交换机到根网桥的路径上沿途的每个端口开销加在一起。端口开销由端口的运行速度决定:

链路速度 开销
10 Gbit/s 2
1 Gbit/s 4
100 Mbit/s 19
10 Mbit/s 100

端口角色

STA 确定到每台交换机的最佳路径之后,会为相关交换机端口分配端口角色。端口角色描述了网络中端口与根网桥的关系,以及端口是否能转发流量。

端口角色 说明
根端口 在所有非根网桥交换机上最接近根网桥的交换机端口
指定端口 允许转发流量的非根端口,若网段的一端是根端口则另一端是指定端口,根网桥上的所有端口都是指定端口
替代端口和备用端口 替代端口和备用端口处于丢弃或阻塞模式
禁用端口 禁用端口是关闭的交换机端口

端口状态

交换机完成启动后,生成树便立即确定。如果交换机端口直接从阻塞状态转换到转发状态,而转换过程中没有关于完整拓扑的信息,那么端口会临时形成数据环路。为此 STP引入了 5 种端口状态:

端口状态 说明
阻塞状态 该端口是替代端口,不参与帧转发
侦听状态 侦听到根网桥的路径
学习状态 学习 MAC 地址,填充 MAC 地址表
转发状态 转发数据帧并且发送和接收BPDU帧
禁用状态 端口不参与生成树,不会转发帧

PVST+ 和快速 PVST+

最初的 802.1D 标准定义 STP 协议整个交换网络只有一个生成树实例,它有着如下 2 个缺点:

  1. 无法进行负载共享,一条上行链路必须阻塞所有 VLAN。
  2. CPU 闲置,只需要计算一个生成树实例,计算该实例后 CPU 闲置。

思科开发了 PVST+,使得交换机上的一个中继端口可以阻止某个 VLAN 并转发其他 VLAN,以此实施第 2 层负载均衡。与传统 STP 相比,PVST+ 环境中的交换机需要消耗更多的 CPU 进程和 BPDU带宽,这是因为 PVST+ 将为每个 VLAN 运行一个单独的
STP 实例。
快速 PVST+ 的工作方式和 PVST+ 差不多,不同在于快速 PVST+ 定义的端口状态包括 3 种:丢弃、学习和转发。如果端口被配置为替代端口或备用端口,则该端口可以立即转换到转发状态,而无须等待网络收敛。

配置 PVST+ 和快速 PVST+

实验拓扑


地址分配表

设备 接口 IP 地址 子网掩码 默认网关
S1 VLAN 99 172.31.99.1 255.255.255.0 不适用
S2 VLAN 99 172.31.99.2 255.255.255.0 不适用
S3 VLAN 99 172.31.99.3 255.255.255.0 不适用
PC1 NIC 172.31.10.21 255.255.255.0 172.31.10.254
PC2 NIC 172.31.20.22 255.255.255.0 172.31.20.254
PC3 NIC 172.31.30.23 255.255.255.0 172.31.30.254

交换机端口分配

端口 作业 网络
S1 F0/6 VLAN 30 172.17.30.0/24
S2 F0/18 VLAN 20 172.17.20.0/24
S3 F0/11 VLAN 10 172.17.10.0/24

配置 VLAN

使用相应的命令,在所有交换机上创建 VLAN 10、20、30、40、50、60、70、80 和 99。

S1(config)# vlan 10
S1(config-vlan)# vlan 20
S1(config-vlan)# vlan 30
S1(config-vlan)# vlan 40
S1(config-vlan)# vlan 50
S1(config-vlan)# vlan 60
S1(config-vlan)# vlan 70
S1(config-vlan)# vlan 80
S1(config-vlan)# vlan 99

S2(config)# vlan 10
S2(config-vlan)# vlan 20
S2(config-vlan)# vlan 30
S2(config-vlan)# vlan 40
S2(config-vlan)# vlan 50
S2(config-vlan)# vlan 60
S2(config-vlan)# vlan 70
S2(config-vlan)# vlan 80
S2(config-vlan)# vlan 99

S3(config)# vlan 10
S3(config-vlan)# vlan 20
S3(config-vlan)# vlan 30
S3(config-vlan)# vlan 40
S3(config-vlan)# vlan 50
S3(config-vlan)# vlan 60
S3(config-vlan)# vlan 70
S3(config-vlan)# vlan 80
S3(config-vlan)# vlan 99

为交换机端口分配 VLAN,进入对应的接口配置为接入模式划分 vlan。

S1(config)# interface f0/6
S1(config-if)# switchport mode access
S1(config-if)# switchport access vlan 30
S1(config-if)# no shutdown

S2(config)# interface f0/18
S2(config-if)# switchport mode access
S2(config-if)# switchport access vlan 20
S3(config-if)# no shutdown

S3(config)# interface f0/11
S3(config-if)# switchport mode access
S3(config-if)# switchport access vlan 10
S3(config-if)# no shutdown


使用相应的命令将每台交换机上的端口 F0/1 至 F0/4 配置为中继端口,并将这些中继端口分配给本地 VLAN 99。

S1(config)# interface range f0/1-4
S1(config-if-range)# switchport mode trunk
S1(config-if-range)# switchport trunk native vlan 99

S2(config)# interface range f0/1-4
S2(config-if-range)# switchport mode trunk
S2(config-if-range)# switchport trunk native vlan 99

S3(config)# interface range f0/1-4
S3(config-if-range)# switchport mode trunk
S3(config-if-range)# switchport trunk native vlan 99

为 3 台交换机的 vlan 99 配置 IP 地址:

S1(config)# interface vlan99
S1(config-if)# ip address 172.31.99.1 255.255.255.0

S2(config)# interface vlan 99
S2(config-if)# ip address 172.31.99.2 255.255.255.0

S3(config)# interface vlan 99
S3(config-if)# ip address 172.31.99.3 255.255.255.0

配置生成树和负载均衡

使用 spanning-tree mode 命令配置交换机,以使其将 PVST 用作 STP 模式。

S1(config)# spanning-tree mode pvst

S2(config)# spanning-tree mode pvst

S3(config)# spanning-tree mode pvst

如果要配置快速 PVST+,则 spanning-tree mode 命令的模式为 rapid-pvst。

S1(config)# spanning-tree mode rapid-pvst

S2(config)# spanning-tree mode rapid-pvst

S3(config)# spanning-tree mode rapid-pvst

将 S1 配置为 VLAN 1、10、30、50 和 70 的主根,将 S3 配置为 VLAN 20、40、60、80 和 99 的主根。将 S2 配置为所有 VLAN 的次根,以此实现负载均衡。

S1(config)# spanning-tree vlan 1,10,30,50,70 root primary

S2(config)# spanning-tree vlan 1,10,20,30,40,50,60,70,80,99 root secondary

S3(config)# spanning-tree vlan 20,40,60,80,99 root primary

使用 show spanning-tree 命令验证配置.

S1# show spanning-tree

S2# show spanning-tree

S3# show spanning-tree



配置 PortFast 和 BPDU 防护

当端口配置 PortFast 时端口会从阻塞状态直接切换为转发状态,从而跳过监听和学习状态,使得效率提高。

S1(config)# interface f0/6
S1(config-if-range)# spanning-tree portfast

S2(config)# interface f0/18
S2(config-if-range)# spanning-tree portfast

S3(config)# interface f0/11
S3(config-if-range)# spanning-tree portfast

由于配置的 PortFast 不应该收到 BPDU,此时如果就有可能产生环路,因此可以启用 BPDU 防护,在收到 BPDU 时把端口设置为错误禁用状态来保护。

S1(config)# interface f0/6
S1(config-if)# spanning-tree bpduguard enable

S2(config)# interface f0/18
S2(config-if)# spanning-tree bpduguard enable

S3(config)# interface f0/11
S3(config-if)# spanning-tree bpduguard enable

参考资料

《思科网络技术学院教程(第6版):扩展网络》,[加] Bob Vachon,[美] Allan Johnson 著,思科系统公司 译,人民邮电出版社
《CCNA 学习指南(第 7 版)》,[美] Todd Lammle 著,袁国忠 徐宏 译,人民邮电出版社

posted @ 2021-05-17 00:51  乌漆WhiteMoon  阅读(1840)  评论(0编辑  收藏  举报