网络技术:PVST+ 和快速 PVST+
STP 生成树协议
在交换机之间配置冗余链路是很好的做法,因为一旦某个链路出现了故障,冗余链路可以防止整个网络的崩溃。但是网络传播的数据帧会在所有冗余链路上同时被泛洪开来,这会导致网络环路和从而导致如下的问题:
- MAC 数据库不稳定:当出现环路时,交换机的 MAC 地址表可能会使用广播帧不断更新;
- 广播风暴:由于广播流量是从交换机的每个端口转发出去,所有相连的设备都必须处理环路网络中洪泛的广播流量;
- 帧的多重传输:单播帧的多个副本传送到相同的目的站点。
路由选择协议可以防止在网络层形成网络环路,然而对于因交换机之间形成的环路无能为力。生成树协议 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 个缺点:
- 无法进行负载共享,一条上行链路必须阻塞所有 VLAN。
- 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 著,袁国忠 徐宏 译,人民邮电出版社