前面提到的 STP 协议以及 Cisco 的私有协议 PVST + 都属于单生成树 (SST) 协议, 也就是对于支持多 VLAN 的设备只能运行单一的生成树. 可以参考博文: Cisco 设备二层交换技术 --STP 协议详解
MSTP 是 IEEE 802.1s 中提出的一种 STP 和 VLAN 结合使用的新协议, 它既继承了 RSTP 端口快速迁移的优点, 又解决了 RSTP 中不同 VLAN 必须运行在同一棵生成树上的问题. 接下来我们详细了解一下 MSTP 协议.
MSTP 协议是一个公有的生成树协议, 在实际生产环境中得到了广泛的应用.
一, MSTP 概述
传统的生成树只能运行一个实例, 且收敛速度慢, RSTP 在传统 STP 基础上通过改进达到了加速网络拓补收敛的目的, 但是目前依然存在一些缺陷. 由于 STP 和 RSTP 在整个局域网中, 所有的 VLAN 共享一个生成树实例, 因此无法实现基于 VLAN 的负载均衡, 网络环境稳定状态下备份链路始终不能转发数据流量, 造成带宽的浪费! 如图:
当交换机 S1 为根网桥时, S2 和 S3 之间的链路将处于阻塞状态, 不能转发任何流量. 即使网络出现拥塞时, S2 和 S3 之间的链路也不可以被使用, 造成资源的浪费!
学过 Cisco 的朋友都知道 Cisco 的 PVST 技术是一种基于 VLAN 的生成树技术. 每个 VLAN 运行一个生成树, 可以重复使用所有的链路, 但是当企业生产环境中, 有很多 VLAN(比如 100 个 VLAN 时), 交换网络中就需要运行 100 多个生成树实例, 从而将大量占用交换设备的硬件资源及网络开销.
PVST 和 MSTP 的比较图:
下面详细介绍一下 --MSTP
MSTP 是多生成树技术, 允许在一个交换环境中运行多个生成树, 每个生成树成为一个实例. 实例之间的生成树彼此独立, 比如一个实例下的阻塞接口在另一个实例中可能是转发接口. 和 PVST 不同的是: MSTP 允许多个 VLAN 运行一个生成树实例. 大部分情况下, 运行多个生成树实例的好处就在于链路的负载分担, 但是当只有一个冗余链路时, 运行两个生成树实例完全可以实现负载均衡, 同时又能节约系统开销. 如图:
现实企业环境中, 网络环境中运行多个实例是非常常见的情况. 因为这样可以实现: 不同实例的根网桥在不同物理交换机上, 不但可以实现负载分担, 而且不会因为过多的实例而占用系统资源.
MSTP 将环形网络修剪成一个无环的树形网络, 避免广播风暴的发生, 同时还提供了数据转发的多个冗余路径, 在数据转发过程中实现 VLAN 数据的负载均衡. MSTP 还兼容 STP 和 RSTP.
MSTP 把一个交换网络划分成多个域, 每个域内形成多棵生成树, 生成树之间彼此独立. 每棵生成树成为一个多生成树实例(MSTI), 每个域称为一个 MST 域.
MSTP 通过设置 VLAN 映射表, 把 VLAN 和 MSTI 联系起来. 每个 VLAN 只能对应一个 MSTI, 即同一 VLAN 的数据只能在一个 MSTI 中传输, 而一个 MSTI 可以对应多个 VLAN. 这样就可以充分的利用网络带宽, 有效避免资源浪费!
二, MSTP 的基本原理
在 MSTP 中. 通过把整个互联的二层以太网划分成若干域. 在域内, 把其中的 VLAN 分成若干组, 每组具有相同的拓补结构, 然后定义若干 MSTI, 并把这些生成树实例和不同的 VLAN 映射起来!
所谓实例就是多个 VLAN 的一个集合. 通过将多个 VLAN 映射到一个实例, 可以节省通信开销和资源占用率. MSTP 各个实例拓补的计算相互独立, 在这些实例上可以实现负载均衡. 可以把多个相同拓补结构的 VLAN 映射到一个实例中, 这些 VLAN 在接口上的转发状态取决于接口在对应 MSTP 实例的状态.
如果仅仅是为了防止广播风暴等环路问题, 运行 CST 已经可以实现. 运行多实例的主要目的在于使其负载分担链路负载. 所以运行的生成树实例数量一般取决于冗余线路的数量, 如果只有一条冗余线路, 那么最好运行两个实例. 如果有两条冗余链路, 那么运行三个实例将是最好的选择, 并尽可能保证每个实例中流量相差不大.
1.MSTP 的网络层次
一个二层交换网络可以划分多个 MSTP 域, 每个生成树域可以划分成多个 MSTI, 每个实例中可以映射多个 VLAN. 为了让朋友更加详细的了解, 请看下图:
图中的 MSTP 网络中包含 3 个 MST 域, 分别是 A,B,C, 每个 MST 域中包含一个或多个 MSTI. 以 MSTP 域 B 为例, 包含两个 MSTI, 分别是 Instance1 和 Instance2.Instance1 和 VLAN1~5 映射; Instance2 和 VLAN6~10 映射.
2.MST 域
MST 域是多生成树域, 由局域网中的多台交换机及它们之间的网段构成. 一个局域网可以存在多个 MST 域, 各 MST 域之间在物理上直接或间接相连. 用户可以通过 MSTP 配置命令把多台交换机划分在同一个 MST 域内. MST 域中的交换机都启用了 MSTP, 配置相同的域名及 VLAN 映射表.
3.MSTI
一个 MST 域内可以运行多个 MSTI,MSTI 之间彼此独立, MSTI 可以与一个或者多个 VLAN 对应. 但一个 VLAN 只能与一个 MSTI 对应.
4. 端口角色
为了更好的理解端口的角色, 请看下图:
MSTP 中的角色主要有以下几种:
根端口: 非根交换机上到根交换机开销最小的端口就是该交换机的根端口. 根端口能够转发数据流量到根交换机; 图中 P3,P4,P8 为根端口.
指定端口: 该交换机向下游交换机发送 BPDU 或者数据流量的端口; 图中的 P1,P2,P6(R3 优先级高于 R2)端口为指定端口.
边缘端口: 位于网络最边缘处, 不参与生成树计算, 一般作为连接非交换机设备; 如终端服务器, PC 等.
预备端口: 从转发流量的角度来看, 预备端口提供了到达根交换机的一个备份链路. 其接口状态为阻塞, 不转发数据流量. 当根端口被阻塞时, 预备端口将成为新的根端口, 主要是为了备份根端口; 图中 P5 为预备端口.
备份端口: 当同一台交换机的两个端口互相连接时就会形成一个环路, 此时交换机会将其中一个端口堵塞, 备份端口就是被堵塞的端口; 从发送 BPDU 来看, 备份端口就是由于学习到本设备上的其他端口发送的 BPDU 而被堵塞的端口; 从转发用户流量来看, 备份端口作为指定端口的备份, 提供了一条从根交换机到叶节点 (非根交换机) 的备份链路; 主要是备份指定端口; 图中 P7 为指定端口.
MSTP 中的端口角色除了边缘端口外, 其他端口角色都参与 MSTP 的计算过程. 同一端口在不同的 MSTI 可以担任搞不同的角色.
5.MSTP 的端口状态
MSTP 的端口有以下三种:
Forwarding: 在这种状态下, 端口既转发用户流量, 又接收 / 发送 BPDU 报文, 称为转发状态;
Learning: 这是一种过渡状态. 在 Learning 状态下, 交换机会根据收到的用户流量, 学习 Mac 地址表, 但不转发用户流量, 所以称为学习状态. Learning 状态的端口接收 / 发送 BPDU 报文, 但不转发用户流量;
Discarding: 在这种状态下, 端口只接收 BPDU 报文, 称为丢弃状态;
三, MSTP 的保护功能
1.BPDU 保护
在交换机上, 通常将直接与用户终端或文件服务器等非交换机设备相连的端口配置为边缘端口, 以实现这些端口的快速收敛. 正常情况下, 这些端口不会收到 BPDU. 如果有人伪造 BPDU 恶意操作交换机, 当这些端口接收到 BPDU 是, 交换机会自动将这些端口设置为非边缘端口, 并重新进行生成树计算, 从而引起网络震荡.
启用 BPDU 保护功能后, 如果接口收到 BPDU 报文, 那么该接口将被自动 shutdown, 从而避免了后续的非法操作及由此带来的网络震荡. 配置的命令如下:
- [SW1]stp bpdu-protection
- // 启用 BPDU 保护
2. 根保护
由于管理失误或人为恶意操作, 网络中的合法交换机的端口可能会接收到优先级更高的 BPDU, 这将使目前网络中的根失去根的地位, 之后将重新计算生成树, 引起网络震荡, 还有可能造成网络拥塞. 为了防止以上情况的发生, 交换机提供根保护功能. 根保护功能维持端口的角色来保护根交换机的地位. 配置了根保护功能的端口, 在所有实例上的端口角色都保持为指定端口. 当端口收到优先级更高的 BPDU 时, 端口的角色不会变为非指定端口, 而是进入侦听状态, 不再转发报文. 经过足够长的时间, 如果端口一直没有再收到优先级较高的 BPDU, 端口则会恢复原本的正常状态. 配置命令如下:
- [SW1]int g0/0/1
- [SW1-GigabitEthernet0/0/1]stp root-protection
- // 开启根保护功能
3. 环路保护
根端口和其他阻塞端口状态会周期性地接收来自上游交换机的 BPDU. 当链路拥塞或者单向链路故障时, 这些端口无法接收来自上游交换机的 BPDU, 交换机会重新选择根端口. 原先的根端口会转变为指定端口, 而原先阻塞的端口会变成转发状态, 从而造成交换网络中可能产生环路. 环路保护功能会抑制这种环路的产生. 在启动了环路保护功能后, 如果根端口收不到来自上游的 BPDU, 根端口会被设置进入阻塞状态; 而阻塞端口则会一直保持在阻塞状态, 不再转发报文, 从而不会在网络中形成环路. 收到拓补变更的 BPDU 时, 端口才会被激活. 配置命令如下:
- [SW1]int g0/0/1
- [SW1-GigabitEthernet0/0/1]stp loop-protection
- // 启用环路保护功能
4.TC 保护
交换机在接收到 TC-BPDU 报文后, 会执行 Mac 地址表项和 ARP 表项的删除操作. 如果有人伪造 TC-BPDU 报文非法操作交换机, 交换机短时间内会收到很多 TCP-BPDU 报文, 频繁的删除操作会给设备造成很大的负担, 给网络的稳定带来很大的隐患, 启用 TC 保护功能后, 在单位时间内, MSTP 进程收到 TC 类型 BPDU 报文的数量大于配置的阈值, 那么 MSTP 进程只会处理阈值指定的次数. 对于其他超出阈值的 TC 类型 BPDU 报文, 定时器到期后, MSTP 进程只对其统一处理一次, 这样可以避免频繁的删除 Mac 地址表项和 ARP 表项, 从而达到保护交换机的目的. 配置命令如下:
- [SW1]stp tc-protection threshold 3
- // 启用 TC 保护, 并设置的阈值为 3
四, MSTP 的相关配置
1. 案例环境如下:
2. 案例要求
1. 所有交换机启用 MSTP 协议, 区域名称改为 huawei, 修改版本级别为 1;
2. 利用 MSTP 协议 VLAN10 和 VLAN20 的互访;
3.VLAN10 的流量走向: PC1→S3→S1→R1;
4.VLAN20 的流量走向: PC2→S3→S2→R1;
3. 案例实施
(1)配置客户端及路由器 IP 地址
配置客户端地址过程过程略! 配置路由器地址如下:
- [R1]int g0/0/1
- [R1-GigabitEthernet0/0/1]ip add 10.1.10.254 24
- [R1-GigabitEthernet0/0/1]int g0/0/0
- [R1-GigabitEthernet0/0/2]ip add 10.1.20.254 24
- // 华为设备接口默认是开启的, 也可以使用 undo shutdown 开启一下!
(2)配置 VLAN 及 Trunk
本次实验中, 客户机与交换机连接口为 Access 接口, 二层交换机与交换机连接口为 Trunk 接口, 二层交换机和路由器连接口为 Hybrid 接口. 常识: 路由器不可以识别带 VLAN 标签的数据帧.
S1 的配置如下:
- [S1]vlan batch 10 20
- [S1]int g0/0/2
- [S1-GigabitEthernet0/0/2]port link-type hybrid
- [S1-GigabitEthernet0/0/2]port hybrid untagged vlan 10
- [S1-GigabitEthernet0/0/2]port hybrid pvid vlan 10
- [S1-GigabitEthernet0/0/2]int g0/0/1
- [S1-GigabitEthernet0/0/1]port link-type trunk
- [S1-GigabitEthernet0/0/1]port trunk allow-pass vlan all
- [S1-GigabitEthernet0/0/1]int g0/0/3
- [S1-GigabitEthernet0/0/3]port link-type trunk
- [S1-GigabitEthernet0/0/3]port trunk allow-pass vlan all
- // 基础指令这里就不介绍什么意思了!
S2 的配置如下:
- [S2]vlan batch 10 20
- [S2]int g0/0/2
- [S2-GigabitEthernet0/0/2]port link-type hybrid
- [S2-GigabitEthernet0/0/2]port hybrid untagged vlan 20
- [S2-GigabitEthernet0/0/2]port hybrid pvid vlan 20
- [S2-GigabitEthernet0/0/2]int g0/0/1
- [S2-GigabitEthernet0/0/1]port link-type trunk
- [S2-GigabitEthernet0/0/1]port trunk allow-pass vlan all
- [S2-GigabitEthernet0/0/1]int g0/0/3
- [S2-GigabitEthernet0/0/3]port link-type trunk
- [S2-GigabitEthernet0/0/3]port trunk allow-pass vlan all
S3 的配置如下:
- [S3]vlan batch 10 20
- [S3]int g0/0/1
- [S3-GigabitEthernet0/0/1]port link-type trunk
- [S3-GigabitEthernet0/0/1]port trunk allow-pass vlan all
- [S3-GigabitEthernet0/0/1]int g0/0/2
- [S3-GigabitEthernet0/0/2]port link-type trunk
- [S3-GigabitEthernet0/0/2]port trunk allow-pass vlan all
- [S3-GigabitEthernet0/0/2]int g0/0/3
- [S3-GigabitEthernet0/0/3]port link-type access
- [S3-GigabitEthernet0/0/3]port default vlan 10
- [S3-GigabitEthernet0/0/3]int g0/0/4
- [S3-GigabitEthernet0/0/4]port link-type access
- [S3-GigabitEthernet0/0/4]port default vlan 20
(3)配置 MSTP
根据实验要求, 实验命令如下:
S1 的配置如下:
- [S1]stp mode mstp
- // 将交换机配置成 MSTP 模式
- [S1]stp region-configuration
- // 进入 MSTP 配置模式
- [S1-mst-region]region-name huawei
- // 配置域名为 huawei
- [S1-mst-region]revision-level 1
- // 配置版本等级为 1
- [S1-mst-region]instance 1 vlan 10
- // 将 VLAN10 加入实例 1 中
- [S1-mst-region]instance 2 vlan 20
- // 将 VLAN20 加入实例 2 中
- [S1-mst-region]active region-configuration
- // 激活配置(必须配置)
- [S1-mst-region]quit
- [S1]stp instance 1 root primary
- // 配置此交换机为实例 1 的主根
- [S1]stp instance 2 root secondary
- // 配置此交换机为实例 2 的备根
S2 的配置如下:
- [S2]stp mode mstp
- [S2]stp region-configuration
- [S2-mst-region]region-name huawei
- [S2-mst-region]revision-level 1
- [S2-mst-region]instance 1 vlan 10
- [S2-mst-region]instance 2 vlan 20
- [S2-mst-region]active region-configuration
- [S2]stp instance 1 root secondary
- [S2]stp instance 2 root primary
- // 命令与 S1 基本相似, 这里就不多说了!
S3 的配置如下:
- [S3]stp mode mstp
- [S3]stp region-configuration
- [S3-mst-region]region-name huawei
- [S3-mst-region]revision-level 1
- [S3-mst-region]instance 1 vlan 10
- [S3-mst-region]instance 2 vlan 20
- [S3-mst-region]active region-configuration
(4)验证
在 S3 上使用一下命令查看效果!
- [S3]display stp brief
- // 查看 STP 接口角色及状态信息
- 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
- 0 GigabitEthernet0/0/4 DESI FORWARDING NONE
- 1 GigabitEthernet0/0/1 ROOT FORWARDING NONE
- 1 GigabitEthernet0/0/2 ALTE DISCARDING NONE
- // 运行实例 1 时, g0/0/2 接口阻塞
- 1 GigabitEthernet0/0/3 DESI FORWARDING NONE
- 2 GigabitEthernet0/0/1 ALTE DISCARDING NONE
- // 运行实例 2 时, g0/0/1 接口阻塞
- 2 GigabitEthernet0/0/2 ROOT FORWARDING NONE
- 2 GigabitEthernet0/0/4 DESI FORWARDING NONE
可以自行验证效果! PC1 和 PC2 是可以通信的, 不管任何交换机之间任意一条线路故障, 也不会影响通信(模拟线路故障后, 稍微等一下再测试通信)!
来源: http://blog.51cto.com/14157628/2443851