生成树协议是一种二层管理协议,它通过选择性地阻塞网络中的冗余链路来消除二层环路,同时还具备链路备份的功能。与众多协议的发展过程一样,生成树协议也是随着网络的发展而不断更新的,从最初的 STP(Spanning Tree Protocol,生成树协议)到 RSTP(Rapid Spanning Tree Protocol,快速生成树协议),再到最新的 MSTP(Multiple Spanning Tree Protocol,多生成树协议)。
(1)STP的协议报文
STP 采用的协议报文是 BPDU(Bridge Protocol Data Unit,桥协议数据单元),也称为配置消息。STP 通过在设备之间传递 BPDU 来确定网络的拓扑结构。BPDU 中包含了足够的信息来保证设备完成生成树的计算过程。STP 协议的 BPDU 分为以下两类:
• 配置 BPDU(Configuration BPDU):用来进行生成树计算和维护生成树拓扑的报文。
• TCN BPDU(Topology Change Notification BPDU,拓扑变化通知 BPDU):当拓扑结构发
生变化时,用来通知相关设备网络拓扑结构发生变化的报文。
BPDU 中包含有足够的信息来保证设备完成生成树的计算过程,其中包括:
• 根桥 ID:由根桥的优先级和 MAC 地址组成;
• 根路径开销:到根桥的路径开销;
• 指定桥 ID:由指定桥的优先级和 MAC 地址组成;
• 指定端口 ID:由指定端口的优先级和该端口的全局编号组成;
• Message Age:配置消息在网络中传播的生存期;
• Max Age:配置消息在设备中的最大生存期;
• Hello Time:配置消息的发送周期;
• Forward Delay:端口状态迁移的延迟时间
(2)STP的基本概念
1) 根桥
树形的网络结构必须有树根,于是 STP 引入了根桥(Root Bridge)的概念。根桥在全网中有且只有一个,而且根桥会根据网络拓扑的变化而改变,因此根桥并不是固定的。
在网络初始化过程中,所有设备都视自己为根桥,生成各自的配置 BPDU 并周期性地向外发送;但当网络拓扑稳定以后,只有根桥设备才会向外发送配置 BPDU,其它设备则对其进行转发。
2) 根端口
所谓根端口,是指非根桥设备上离根桥最近的端口。根端口负责与根桥进行通信。非根桥设备上有且只有一个根端口,根桥上没有根端口。
3) 指定桥与指定端口
对于一台设备而言,与本机直接相连并且负责向本机转发配置消息的设备为指定桥,指定桥向本机转发配置消息的端口为指定端口。对于一个局域网而言,负责向本网段转发配置消息的设备为指定桥,指定桥向本网段转发配置消息的端口为指定端口。
路径开销是 STP 协议用于选择链路的参考值。STP 协议通过计算路径开销,选择较为“强壮”的链路,阻塞多余的链路,将网络修剪成无环路的树型网络结构。
(3) STP的基本原理
STP 算法实现的基本过程如下:
1) 初始状态
各设备的各端口在初始时会生成以本设备为根桥的配置消息,根路径开销为 0,指定桥 ID 为自身设备 ID,指定端口为本端口。
2) 选择根桥
网络初始化时,网络中所有的 STP 设备都认为自己是“根桥”,根桥 ID 为自身的设备 ID。通过交换配置消息,设备之间比较根桥 ID,网络中根桥 ID 最小的设备被选为根桥。
3) 选择根端口和指定端口
a、非根桥设备将接收最优配置消息的那个端口定为根端口
b、设备根据根端口的配置消息和根端口的路径开销,为每个端口计算一个指定端口配置消息:
• 根桥 ID 替换为根端口的配置消息的根桥 ID;
• 根路径开销替换为根端口配置消息的根路径开销加上根端口对应的路径开销;
• 指定桥 ID 替换为自身设备的 ID;
• 指定端口 ID 替换为自身端口 ID。
c、设备将计算出的配置消息与角色待定端口自己的配置消息进行比较:
• 如果计算出的配置消息更优,则该端口被确定为指定端口,其配置消息也被计算出的配置消息替换,并周期性地向外发送;
• 如果该端口自己的配置消息更优,则不更新该端口的配置消息并将该端口阻塞。该端口将不再转发数据,且只接收不发送配置消息
配置消息优先级的比较规则如下:
• 根桥 ID 较小的配置消息优先级较高;
• 若根桥 ID 相同,则比较根路径开销:将配置消息中的根路径开销与本端口对应的路径开销相加,二者之和较小的配置消息优先级较高;
• 若根路径开销也相同,则依次比较指定桥 ID、指定端口 ID、接收该配置消息的端口 ID 等,上述值较小的配置消息优先级较高。
RSTP 由 IEEE 制定的 802.1w 标准定义,它在 STP 基础上进行了改进,实现了网络拓扑的快速收敛。其“快速”体现在,当一个端口被选为根端口和指定端口后,其进入转发状态的延时在某种条件下大大缩短,从而缩短了网络最终达到拓扑稳定所需要的时间。
RSTP 中,根端口的端口状态快速迁移的条件是:本设备上旧的根端口已经停止转发数据,
而且上游指定端口已经开始转发数据。
• 在 RSTP 中,指定端口的端口状态快速迁移的条件是:指定端口是边缘端口(即该端口直接与用户终端相连,而没有连接到其它设备或共享网段上)或者指定端口与点对点链路(即两台设备直接相连的链路)相连。如果指定端口是边缘端口,则指定端口可以直接进入转发状态;如果指定端口连接着点对点链路,则设备可以通过与下游设备握手,得到响应后即刻进入转发状态。
(1) STP 和 RSTP 存在的不足
STP 不能快速迁移,即使是在点对点链路或边缘端口,也必须等待两倍的 Forward Delay 的时间延迟,端口才能迁移到转发状态。RSTP 可以快速收敛,但是和 STP 一样存在以下缺陷:局域网内所有网桥共享一棵生成树,不能按VLAN 阻塞冗余链路,所有 VLAN 的报文都沿着一棵生成树进行转发。
(2)MSTP 的特点
MSTP 由 IEEE 制定的 802.1s 标准定义,它可以弥补 STP、RSTP 的缺陷,既可以快速收敛,也能使不同 VLAN 的流量沿各自的路径转发,从而为冗余链路提供了更好的负载分担机制。MSTP 的特点如下:
• MSTP 通过设置 VLAN 与生成树的对应关系表(即 VLAN 映射表),将 VLAN 与生成树联系起来。并通过“实例”的概念,将多个 VLAN 捆绑到一个实例中,从而达到了节省通信开销和降低资源占用率的目的。
• MSTP 把一个交换网络划分成多个域,每个域内形成多棵生成树,生成树之间彼此独立。
• MSTP 将环路网络修剪成为一个无环的树型网络,避免报文在环路网络中的增生和无限循环,同时还提供了数据转发的多个冗余路径,在数据转发过程中实现 VLAN 数据的负载分担。
• MSTP 兼容 STP 和 RSTP
(1)MSTP中的基本概念
1)MST 域(Multiple Spanning Tree Regions,多生成树域)是由交换网络中的多台设备以及它们之间的网段所构成。这些设备具有下列特点:
• 都使能了生成树协议;
• 域名相同;
• VLAN 与 MSTI 间映射关系的配置相同;
• MSTP 修订级别的配置相同;
• 这些设备之间有物理链路连通。
一个交换网络中可以存在多个MST域,用户可以通过配置将多台设备划分在一个MST域内。
2)MSTI
一个MST域内可以通过MSTP生成多棵生成树,各生成树之间彼此独立并分别与相应的VLAN对应,每棵生成树都称为一个MSTI(Multiple Spanning Tree Instance,多生成树实例)。
3) VLAN 映射表
VLAN映射表是MST域的一个属性,用来描述VLAN与MSTI间的映射关系。MSTP就是根据VLAN映射表来实现负载分担的.
4) CST
CST(Common Spanning Tree,公共生成树)是一棵连接交换网络中所有MST域的单生成树。
如果把每个MST域都看作一台“设备”,CST就是这些“设备”通过STP协议、RSTP协议计算生成的一棵生成树。
5) IST
IST(Internal Spanning Tree,内部生成树)是MST域内实例号为0的生成树,它是一个特殊的MSTI,所有VLAN缺省都映射到MSTI 0 上。
6) CIST
CIST(Common and Internal Spanning Tree,公共和内部生成树)是一棵连接交换网络内所有设备的单生成树,所有MST域的IST再加上CST就共同构成了整个交换网络的一棵完整的单生成树,即CIST。
7) 域根
域根(Regional Root)就是MST域内IST或MSTI的根桥。MST域内各生成树的拓扑不同,域根也可能不同。
8) 总根
总根(Common Root Bridge)就是CIST的根桥。
(2)端口角色
MSTP计算过程中涉及到的主要端口角色有以下几种:
• 根端口(Root Port):在非根桥上负责向根桥方向转发数据的端口就称为根端口,根桥上没有
根端口。
• 指定端口(Designated Port):负责向下游网段或设备转发数据的端口就称为指定端口。
• 替换端口(Alternate Port):是根端口和主端口的备份端口。当根端口或主端口被阻塞后,
替换端口将成为新的根端口或主端口。
• 备份端口(Backup Port):是指定端口的备份端口。当指定端口失效后,备份端口将转换为新的指定端口。当使能了生成树协议的同一台设备上的两个端口互相连接而形成环路时,设备会将其中一个端口阻塞,该端口就是备份端口。
• 边缘端口(Edge Port):不与其它设备或网段连接的端口就称为边缘端口,边缘端口一般与用户终端设备直接相连。
• 主端口(Master Port):是将 MST 域连接到总根的端口(主端口不一定是域根),位于整个域到总根的最短路径上。主端口是 MST 域中的报文去往总根的必经之路。主端口在
IST/CIST 上的角色是根端口,而在其它 MSTI 上的角色则是主端口。
• 域边界端口(Boundary Port):是位于 MST 域的边缘、并连接其它 MST 域或 MST 域与运行 STP/RSTP 的区域的端口。主端口同时也是域边界端口。在进行 MSTP 计算时,域边界端口在 MSTI 上的角色与 CIST 的角色一致,但主端口除外——主端口在 CIST 上的角色为根端口,在其它 MSTI 上的角色才是主端口。
(3)MSTP在设备上的实现
MSTP 同时兼容 STP 和 RSTP。STP 和 RSTP 的协议报文都可以被运行 MSTP 协议的设备识别并应用于生成树计算。设备除了提供 MSTP 的基本功能外,还从用户的角度出发,提供了如下便于管理的特殊功能:
• 根桥保持;
• 根桥备份;
• 根保护功能;
• BPDU 保护功能;
• 环路保护功能;
• 防 TC-BPDU 攻击保护功能;
• BPDU 拦截功能;
• 支持接口板的热插拔,同时支持主控板与备板的倒换。
生成树的工作模式有以下三种:
• STP 兼容模式:设备的各端口都将向外发送 STP BPDU。
• RSTP 模式:设备的各端口都向外发送 RSTP BPDU,当某端口发现其对端设备上运行 STP
时,该端口会自动迁移到 STP 兼容模式。
• MSTP 模式:设备的各端口都向外发送 MSTP BPDU,当某端口发现其对端设备上运行 STP
时,该端口会自动迁移到 STP 兼容模式。
stp mode {stp|rstp|mstp} //缺省为MSTP模式
stp region-configuration //进入MST域试图
region-name name //缺省情况下,MST域的域名为设备的MAC地址
instance instance-id vlan vlan-list //缺省情况下,所有VLAN都映射到MSTI 0上
active region-configuration //激活MST域的配置
dis stp region-configuration
两台或多台使能了生成树协议的设备若要属于同一个 MST 域,必须同时满足以下两个条件:第一是选择因子(取值为 0,不可配)、域名、修订级别和 VLAN 映射表的配置都相同;第二是这些设备之间的链路相通。
• 在配置 MST 域的相关参数(特别是 VLAN 映射表)时,会引发生成树的重新计算,从而引起网络拓扑的振荡。为了减少网络振荡,新配置的 MST 域参数并不会马上生效,而是在使用 active region-configuration 命令激活,或使用命令 stp enable 使能生成树协议后才会生效.
stp root primary/secondary // STP/RSTP模式下配置当前设备为根桥/备份根桥
stp instance instance-id root primary/secondary //MSTP模式下配置当前设备为根桥/备份根桥
用户可以为每棵生成树指定一个根桥,而无需关心设备的优先级配置。当设备一旦被配置为根桥或者备份根桥之后,便不能再修改该设备的优先级。
• 也可以通过配置设备的优先级为 0 来实现将当前设备指定为根桥的目的。
stp priority 0
stp instance 1 priority 0
stp max-hops hops // 缺省为20
stp bridge-diameter diameter //缺省为7
在配置了网络直径之后,系统会通过计算自动将设备的 Hello Time、 Forward Delay 和 Max Age三个时间参数设置为最优值。
• 每个 MST 域将被视为一台设备,且网络直径配置只对 CIST 有效(即只能在总根上生效),而对MSTI 无效。
通常情况下,不建议通过本配置直接调整上述三个时间参数。由于这三个时间参数的取值与网络规模有关,因此建议通过调整网络直径,使生成树协议自动调整这三个时间参数的值。当网络直径取缺省值时,这三个时间参数也分别取其各自的缺省值。
本配置只需在根桥设备上进行,整个交换网络中的所有设备都将采用根桥设备的配置值。
int g0/0/0
stp edged-port enable
在设备没有使能 BPDU 保护的情况下,如果被设置为边缘端口的端口上收到来自其它端口的BPDU,则该端口会重新变为非边缘端口。此时,只有重启端口才能将该端口恢复为边缘端口。对于直接与终端相连的端口,请将该端口设置为边缘端口,同时使能 BPDU 保护功能。这样既能够使该端口快速迁移到转发状态,也可以保证网络的安全。
• 在同一个端口上,环路保护功能、根保护功能和边缘端口这三种配置之间两两互斥,且只有先配置的才能生效。
int g0/0/1
stp cost 200 //STP/RSTP模式配置
stp instance 1 cost 200 //MSTP模式配置
stp enable //全局使能,缺省为关闭状态
int g0/0/0
stp enable //可选,端口缺省为使能状态
生成树保护功能有以下四种:
• BPDU 保护功能
• 根保护功能
• 环路保护功能
• 防 TC-BPDU 攻击保护功能
对于接入层设备,接入端口一般直接与用户终端(如 PC)或文件服务器相连,此时接入端口被设置为边缘端口以实现这些端口的快速迁移;当这些端口接收到配置消息(即 BPDU)时系统会自动将这些端口设置为非边缘端口,重新计算生成树,引起网络拓扑结构的变化。这些端口正常情况下应该不会收到 STP 的配置消息。如果有人伪造配置消息恶意攻击设备,就会引起网络震荡。生成树协议提供了 BPDU 保护功能来防止这种攻击:设备上使能了 BPDU 保护功能后,如果边缘端口收到了配置消息,系统就将这些端口关闭,同时通知网管这些端口已被生成树协议关闭。被关闭的端口在经过一定时间间隔之后将被重新激活,这个时间间隔就是定时检测时间间隔。
stp bpdu-protection //缺省为关闭状态
生成树的根桥和备份根桥应该处于同一个域内,特别是对于 CIST 的根桥和备份根桥,网络设计时一般会把 CIST 的根桥和备份根桥放在一个高带宽的核心域内。但是,由于维护人员的错误配置或网络中的恶意攻击,网络中的合法根桥有可能会收到优先级更高的配置消息,这样当前合法根桥会失去根桥的地位,引起网络拓扑结构的错误变动。这种不合法的变动,会导致原来应该通过高速链路的流量被牵引到低速链路上,导致网络拥塞。
为了防止这种情况发生,生成树协议提供了根保护功能:对于使能了根保护功能的端口,其在所有MSTI 上的端口角色只能为指定端口。一旦该端口收到某 MSTI 优先级更高的配置消息,立即将该MSTI 端口设置为侦听状态,不再转发报文(相当于将此端口相连的链路断开)。当在 2 倍的 Forward Delay 时间内没有收到更优的配置消息时,端口会恢复原来的正常状态。
int g0/0/1
stp root-protection //缺省为关闭状态
(3)配置环路保护功能
依靠不断接收上游设备发送的 BPDU,设备可以维持根端口和其它阻塞端口的状态。但是由于链路拥塞或者单向链路故障,这些端口会收不到上游设备的BPDU,此时下游设备会重新选择端口角色,收不到 BPDU 的下游设备端口会转变为指定端口,而阻塞端口会迁移到转发状态,从而交换网络中会产生环路。环路保护功能会抑制这种环路的产生。在使能了环路保护功能的端口上,其所有 MSTI 的初始状态均为 Discarding 状态:如果该端口收到了 BPDU,这些 MSTI 可以进行正常的状态迁移;否则,这些 MSTI 将一直处于 Discarding 状态以避免环路的产生。
int g0/0/1
stp loop-protection
(4)配置防TC-BPDU攻击保护功能
设备在接收到 TC-BPDU(网络拓扑发生变化的通知报文)后,会执行转发地址表项的刷新操作。在有人伪造 TC-BPDU 恶意攻击设备时,设备短时间内会收到很多的 TC-BPDU,频繁的刷新操作给设备带来很大负担,给网络的稳定带来很大隐患。通过在设备上使能防 TC-BPDU 攻击保护功能,可以避免频繁地刷新转发地址表项。当使能了防TC-BPDU 攻击保护功能后,如果设备在单位时间(固定为十秒)内收到 TC-BPDU 的次数大于 stp tc-protection threshold 命令所指定的最高次数(假设为 N 次),那么该设备在这段时间之内将只进行 N 次刷新转发地址表项的操作,而对于超出 N 次的那些 TC-BPDU,设备会在这段时间过后再
统一进行一次地址表项刷新的操作。这样就可以避免频繁地刷新转发地址表项.
system-view
stp tc-protection enable //缺省为使能状态
stp tc-protection shreshold number //缺省值为6,在固定单位时间(10s)内,收到TC-BPDU立即刷新转发地址表的最高次数为6
dis stp abnormal-port //显示被生成树保护功能阻塞的端口
dis stp down-port //显示被生成树保护功能down掉的端口
dis stp regin-configuration //显示当前生效的MST域配置消息
dis stp root //显示所有生成树的根桥信息