什么是STP? STP是二层网络中用于消除环路的协议。
STP在IEEE制定的802.1D标准中定义,用于在局域网中消除数据链路层环路。STP可以通过计算,动态的阻断冗余链路。而当活动链路发生故障时,STP又可以激活冗余链路,恢复网络的连通,避免网络中断。
RSTP(快速生成树协议)的IEEE标准为802.1w,其消除环路的基本思想和STP保持一致。RSTP具备了STP的所有功能,支持RSTP的网桥可以和支持STP的网桥一同运行。
和STP相比,RSTP的改进之处包括:
当端口直接与用户终端相连,而没有连接到其他网桥或局域网网段上时,该端口即为边缘端口。 边缘端口连接的是终端,当网络拓扑变化时,边缘端口不会产生临时的环路,所以边缘端口可以略过两个Forward Delay时间,直接进入Forwarding状态,无需任何延时。 由于网桥无法自动判断端口是否直接与终端相连,所以用户需要手工将于终端连接的端口配置为边缘端口。
RSTP的端口连续三次接收到配置BPDU,则网桥认为该端口和STP网桥相连,该端口将切换到STP协议运行。切换到STP运行的RSTP端口将失去快速收敛特性。将STP设备放在网络边缘,将影响范围降到最小。
当运行STP的网桥移除后,由RSTP模式切换到STP模式的的端口仍将运行在STP模式。可以持续稳定的运行,方式模式的频繁切换,但是牺牲了收敛时间。如果要将STP模式切换回RSTP模式需要手工进行配置
开启全局生成树特性
[SW]stp global enable
选择生成树运行模式
[SW]stp mode rstp # stp | rstp | mstp | pvst
如果确定某个端口连接的部门不存在回路,则可关闭该端口的生成树功能
[SW-GigabitEthernet1/0/1]undo stp enable
桥ID(Bridge-priority)由桥优先级和MAC地址组成,默认优先级为32768,数值越小优先级越高,最小的为根桥。取值范围0~61440,步长为4096
[SW]stp priority 4096
根路径开销是STP确定根端口角色时用到的重要的参数。链路开销是由端口配置的cost值决定的。
[SW-GigabitEthernet1/0/1]stp cost 200
IEEE 802.1D和802.1t定义了不同速率和工作模式下的以太网链路(端口)开销,根据实际情况的网络运行状况优化了开销的数值定义,指定了私有标准。可以通过命令改变设备支持的端口开销标准
[SW]stp pathcost-standard dot1 #dot1d-1998 dot1t Legacy
端口ID由两部分组成:PortPriority(端口优先级)+ PortIndex(端口索引)
通过配置命令可以改变端口优先级,改变端口优先级可以改变端口ID的优劣,数值越小表示优先级越高。
取值范围为0~240,且步长为16。默认优先级为128。
[SW-GigabitEthernet1/0/1]stp port priority 16
STP中 Hello Time(发送配置BPDU的周期) 的配置需要注意:
通过命令改变Hello Time值,其中单位厘秒(1秒=100厘秒),默认值2秒。
[SW]stp timer hello 200
STP中配置 BPDU 的生存期为 Max Age 时需要注意:
通过命令改变Max Age值,单位为厘秒(1秒=100厘秒),默认值为20秒。
[SW]stp timer max-age 1000
STP为了防止临时环路,在端口由阻塞状态转向转发状态时设置了中间状态,并在状态切换需等待一定的时间,以保持与远端的设备状态切换同步。根桥的Forward Delay时间确定了状态迁移的时间间隔值。
如果当前设备是根桥,该设备会按照该设置值确定状态迁移时间间隔;非根桥采用根桥设置的Forward Delay参数。
配置时需要注意:
通过命令改变Forward Delay值,其中单位厘秒(1秒=100厘秒),默认值为15秒。
[SW]stp timer forward-delay 2000
网络直径指网络中任意两台终端设备之间通过的交换机数目的最大值。当用户配置设备的网络直径后,STP自动根据配置的网络直径将Hello Time、Forward Delay与Max Age设置为一个较优的值。当网络直径为默认值7时,对应的三个时间参数也分别为它们的默认值。
通过命令设定交换网络的网络直径,如设定交换网络的网络直径为5。
[SW]stp bridge-diameter 5
当端口直接与用户终端连接,该端口即为边缘端口。网络拓扑发生变化时,边缘端口不会产生临时环路。
通过命令配置端口为边缘端口:
[SW-GigabitEthernet1/0/1]stp edged-port
运行RSTP(或MSTP)的设备的端口连接着运行STP的设备,该端口会自动迁移到STP兼容模式下工作; 但是如果运行STP协议的设备被拆离,该端口不能自动恢复RSTP(或MSTP)模式下,需要手动操作迫使其迁移到RSTP模式下运行。
在系统视图下执行以下命令,使配置在全局生效;
[SW]stp global mcheck
在端口视图执行以下命令,则该配置只在当前端口生效;
[SW-GigabitEthernet1/0/1]stp mcheck
显示STP统计和状态信息:
[SW]dis stp [interface interface_list] [brief]
[SW]dis stp interface G1/0/1 brief
打开STP调试开关
debugging stp packet
第一步:配置各交换机优先级,SWC优先级为默认无需配置;
[SWA]stp priority 0
[SWB]stp priority 8192
[SWD]stp priority 4096
第二步:配置SWB的边缘端口;
[SWB]int G1/0/24
[SWB-GigabitEthernet1/0/24]stp edged-port
第三步:启动各交换机的生成树协议;
[SWA]stp global enable
[SWB]stp global enable
[SWC]stp global enable
[SWD]stp global enable
第四步:将生成树协议模式设置为RSTP;
[SWA]stp mode rstp
[SWB]stp mode rstp
[SWC]stp mode rstp
[SWD]stp mode rstp
第五步:查看SWB的STP信息
[SWA]dis stp
-------[CIST Global Info][Mode RSTP]-------
Bridge ID : 0.901a-37d6-0100
Bridge times : Hello 2s MaxAge 20s FwdDelay 15s MaxHops 20
[SWA]dis stp brief
MST ID Port Role STP State Protection
0 GigabitEthernet1/0/1 DESI FORWARDING NONE
0 GigabitEthernet1/0/2 DESI FORWARDING NONE
STP和RSTP的局限:
当STP/RSTP计算时,网桥上所有的VLAN共享一颗生成树,无法实现不同VLAN在多条Trunk链路上的负载分担,而当某条链路被阻塞后将不会承载任何流量,造成了带宽的极大浪费。
MSTP(Multiple Spanning Tree,多生成树协议),基于实例计算出多颗生成树,实例间实现负载分担。MSTP能使不同VLAN的流量沿各自的路径转发,从而利用冗余链路提供了更好的负载分担机制。
MSTP的基本思想是基于实例(Instance)计算出多个生成树,每一个实例可以包含一个或多个VLAN,每一个VLAN只能映射到一个实例。网桥通过配置多个实例,可以实现不同VLAN组之间的负载分担。
通过命令进入 MST 域视图后,可以对域的相关参数(域名、VLAN映射表以及修订级别)进行配置
由系统视图进入域配置视图
[SW]stp region-configuration
配置域名
[SW-mst-region]region-name name
配置修订级别
[SW-mst-region]revision-level level # INTEGER<0-65535> Revision level
缺省情况下,所有VLAN均对应到CIST(即实例0)上,不能将同一个VLAN映射到多个不同的实例上,当用户将一个已经映射的VLAN重新映射到一个不同的实例上,则自动取消原来的映射关系。
配置VLAN映射到MST实例,instance-id为实例的ID(取值0~32,0表示IST)
[SW-mst-region]instance 2 vlan 2
配置完域名、修订级别和VLAN映射关系后,需要激活MST域的配置,此时MSTP会重新计算生成树。
[SW-mst-region]active region-configuration
MSTP高级配置
当需要将某网桥设定为MST实例的根桥时,可以通过修改网桥在该实例中的优先级实现,也可以通过命令直接将网桥设置为实例中的首选根桥。
配置网桥为MST实例中的首选根桥,配置命令为:
如果配置时不输入instance intstance-id 参数,则所配置只在IST实例上有效,在一颗生成树实例中,生效的根桥只有一个;两台或两台以上的网桥被指定为同一颗生成树实例的根桥时,MSTP将选择MAC地址最小的网桥作为根桥。设置网桥为根桥后,用户不能再修改网桥的优先级
[SW]stp instance intstance-id root primary
指定网桥作为MST实例的备份根桥
可以在每个MST实例中指定一个到多个备份根桥。当根桥出现故障或关机时,备份根桥可以取代成为指定MST实例的根。如果设置了多个备份根桥,则MAC地址最小的备份根桥成为指定MST实例的根。
[SW]stp instance instance-id root secondary
MSTP兼容性配置
H3C设备端口可以识别/发送的MSTP BPDU格式有两种:
端口默认配置为自动识别方式【auto】,即端口可以自动识别这两种格式的MSTP BPDU,并根据识别结果确定发送BPDU格式,从而实现与对端设备的互通。
配置 MSTP BPDU 格式识别
[SW-GigabitEthernet1/0/1]stp compliance { auto | dot1s | legacy }
在设备上与对端MSTP协议的实现存在私有性差异的厂商设备相连的端口开启摘要侦听特性,可以实现与厂商设备在MST域内的完全互通
全局开启摘要侦听
[SW]stp global config-digest-snooping
端口开启摘要监听
[SW-GigabitEthernet1/0/1]stp config-digest-snooping
建议:不要在域边界端口开启摘要侦听,并且确保域内所有设备的VLAN和实例的映射关系一致。
RSTP与MSTP互联,在下游MSTP与RSTP相连端口开启No Agreement Check特性
No Agreement Check特性在端口配置,仅对该端口有效:
[SW-GigabitEthernet1/0/1]stp no-agreement-check
注意:不能在端口上同时启动环路保护、根桥保护、边缘端口中的任意两种。
正常情况下,边缘端口不会受到BPDU,如果有人伪造BPDU发送给一个边缘端口或意外将边缘端口连接运行STp的设备时,系统将从边缘端口转换成非边缘端口,从而导致生成树重新计算,将引起网络拓扑的震荡。
交换机上启动了BPDU保护功能以后,如果非边缘端口受到了BPDU,系统就将这些端口关闭。被关闭端口只能由网络管理人员恢复,建议在配置了边缘端口的交换机上配置BPDU保护功能。
BPDU保护功能在全局视图配置,例如配置交换机SWA的GE1/0/1端口为边缘端口启用BPDU保护:
[SWA]stp bpdu-protection #配置BPDU保护功能
[SWA]int G1/0/1
[SWA-GigabitEthernet1/0/1]stp edged-port #配置为边缘端口
由于维护人员错误的配置或网络中的恶意攻击,网络中的合法根桥有可能会收到优先级更高的BPDU,这样当前根桥会失去根桥的地位,引起网络拓扑结构的变动。假设原来的流量是经过高速链路转发的,这种不合法的变动,会导致原来通过高速链路的流量被牵引到低俗链路上,导致网络拥塞。
通过配置Root保护(根桥保护)功能可以防止这种情况发生。对于设置了 Root 保护功能的端口,端口角色只能保持为指定端口。一旦这种端口上收到了优先级高的BPDU,这些端口的状态将被设置为Listening状态,不再转发报文(相当于将此端口相连的链路端口)。端口会经历从Listening状态到Forwarding状态的转变,在此期间如果端口没有收到更优的BPDU,端口会恢复到原来的转发状态。
根桥保护命令在端口视图配置。如果网络中SWA为根桥,为防止接收到SWB发送的BPDU而导致根桥重新选举,可以在SWCE1/0/1配置根桥保护。
根桥保护配置命令:[SWC-Ethernet1/0/1]stp root-protection
由于链路拥塞或者单向链路故障,端口会收不到上游设备的BPDU报文,此时下游设备重新选择端口角色,会导致环路的产生。
环路保护机制
环路保护在端口试图配置,如果网络中SWA为根桥,为防止由于SWC和SWA之间的链路拥塞导致环路产生,可以在SWC 1/0/1配置环路保护。同理为防止SWC和SWB之间链路拥塞导致环路产生,可以在SWC 1/0/2端口配置环路保护。
[SWC-Ethernet1/0/1]stp loop-protection
[SWC-Ethernet1/0/2]stp loop-protection
交换机在收到TC-BPDU报文后,会执行MAC地址表项和ARP表项的删除操作(ARP表项是通过MAC地址表项的删除而更新的,不是直接删除)。如果有人伪造TC-BPDU报文恶意攻击交换机时,交换机会收到很多TC-BPDU的报文,频繁的删除操作会给交换机带来很大负担,给网络的稳定带来很大隐患。
TC保护机制
配置TC保护
使能防止TC-BPDU报文攻击的保护功能
[SW]stp tc-protection
配置门限值
缺省情况下,设备收到TC-BPDU报文后的一定时间内,允许收到TC-BPDU报文后立即删除转发地址表项的最高次数为6。