1.STP的功能和原理
STP(生成树协议,Spanning Tree Protocol)主要是为了防止局域网中由于存在冗余链路而产生的环路问题。STP通过在交换机之间传递BPDU(Bridge Protocol Data Unit,桥协议数据单元)来发现环路,并选择性地阻塞某些端口,从而将网络结构修剪成无环路的树形结构。这样,即使网络具有冗余链路,也能保持网络的稳定性和数据传输的一致性。
1.1STP生成树协议使用的原因
举个例子,首先我们需要知道STP生成树协议是在5层网络模型中的第二层(数据链路层)作用的,在第二层中的设备Switch交换机上存在一个转发表(也叫做MAC地址表,就是将一个MAC地址与学习到的端口对应起来),转发表会正常的学习例如SW1要转发的数据帧要查找这张表来确定交给谁,是SW2或者是SW3,假设在转发表上是交给SW2,同理,当数据帧到达SW2时,也会查找SW2上的转发表进行确定发给谁,在都有明确发的送的对象时,数据会准确到达所要交付的设备,但是呢,在这个转发表中存在一个问题一,就是说一个数据帧要去的地方,转发表上还没有学习到,那么就引来一个概念,叫做泛洪(Flooding),当交换机收到广播帧或未知单播帧时,由于不知道目的MAC地址的具体位置,它会将帧发送到所有端口,这个过程称为泛洪,如图所知,当存在一个SW1,SW2,SW3中的转发表都没有的帧信息时,就会产生泛洪的问题,三个交换机互相发送大量的帧数据,会形成广播风暴(广播风暴是一种网络异常现象,当大量的广播流量充斥网络,占用大量带宽,导致正常业务无法进行,甚至使网络瘫痪),其实呢,广播风暴只是STP生成树协议使用的原因之一。
使用STP(生成树协议)的主要原因是为了解决网络中的环路问题。以下是使用STP协议的几个关键原因:
防止广播风暴:在存在环路的网络中,广播数据包会不断循环转发,导致网络拥塞和性能下降。STP通过创建无环路的树形拓扑结构,避免了广播风暴的发生。
冗余链路管理:在网络设计中,冗余链路是必要的,以提供备份路径和增加网络的可靠性。STP允许网络在拥有冗余链路的同时,通过阻断一些链路来防止环路的产生。
快速收敛:STP协议能够快速响应网络拓扑的变化,比如链路故障或新增链路。当网络结构发生变化时,STP能够迅速收敛,重新计算并调整网络拓扑,以确保网络的连通性。
路径优化:STP协议通过计算并选择成本最低的路径,优化了数据传输的效率。当活动路径出现问题时,STP可以快速切换到备用路径,保证数据传输的连续性。
提高网络稳定性:通过消除环路,STP减少了因环路引起的MAC地址表震荡问题,从而提高了网络的稳定性和可靠性。
支持高可用性:STP协议确保了在主用路径发生故障时,可以迅速激活备用链路,从而恢复网络连通性,支持网络的高可用性。
负载均衡:在某些STP变种(如MSTP)中,可以为不同的VLAN配置不同的生成树,实现负载均衡,优化网络资源的使用。
网络安全:STP协议通过控制端口状态,可以防止一些网络攻击,如通过环路进行的DOS攻击。
1.2 STP协议的分类
前面在分析STP协议使用的原因,或者也可称为STP协议能解决的问题中,提到了运用MSTP协议解决负载均衡这一问题,那么我们就简单聊聊STP协议族中还存在那些变种,后续呢我会详细讲解一下其他的几种。
STP协议主要有以下几种分类:
STP(Spanning Tree Protocol):这是最初的生成树协议,定义在IEEE 802.1D标准中。STP的主要作用是构建无环的树形网络拓扑,防止广播风暴,但它的收敛速度相对较慢。
RSTP(Rapid Spanning Tree Protocol):快速生成树协议,定义在IEEE 802.1W标准中。RSTP对STP进行了改进,提高了网络拓扑变化时的收敛速度,同时引入了端口角色的概念,以完善收敛机制。
MSTP(Multiple Spanning Tree Protocol):多生成树协议,定义在IEEE 802.1S标准中。MSTP允许在交换网络中形成多个生成树实例,每个实例可以为一组VLAN服务,从而实现负载均衡和优化流量路径。
PVST(Per-VLAN Spanning Tree):每个VLAN生成树协议,是一种专有的STP变体,它为每个VLAN实例化一个生成树,提供了类似于MSTP的功能,但是它是在特定厂商的设备上实现的。
PVST+(Per-VLAN Spanning Tree Plus):PVST的增强版本,提供了更多的优化特性,比如更好的端口优化和更快的收敛时间。
这些STP协议的变体都是为了解决不同网络环境下的环路问题,同时提供网络的高可用性和负载均衡能力。随着网络技术的发展,新的STP协议变种可能会继续出现以满足更复杂的网络需求。
1.3 STP的工作原理
STP的工作原理可以概括为以下几个关键步骤:
选举根桥:在所有运行STP的交换机中,通过比较桥ID(BID)来选举出根桥。桥ID由16位优先级(华为设备和cisco设备优先级默认为32768,范围为0~65535,且必须是4096的倍数)和48位MAC地址组成,具有最小桥ID的交换机成为根桥。根桥的两个端口为指定端口。
选举根端口:在非根桥上,每个交换机选举出一个根端口,这是到达根桥的最佳路径上的端口。判定的条件顺序:比较到达根桥的RPC(Root Path Cost)的大小,选取小的作为根端口;
当RPC大小相同时,比较对端的BID,BID小的为根端口;
前两个相同时,比较对端的PID,PID小的为根端口;
其他都相同时,比较本端的PID(由端口优先级和端口编号组成的,端口优先级是一个4位的字段,端口编号是一个12位的字段,端口优先级的取值范围是0到240,并且必须是16的整数倍,默认情况下,端口优先级通常是128,端口编号则是由系统分配的,通常不可以由用户配置,它占据了PID的低12位),PID小的为根端口。
选举指定端口:在每个网络段上,选举出一个指定端口来转发数据。如果一个端口既是根端口又是指定端口,则该端口处于转发状态。
选取条件的顺序:比较到达根桥的RPC(Root Path Cost)的大小,选取小的作为根端口;比较本端BID,小的为指定端口;比较本端的PID,小的为指定端口。
阻塞其他端口:除了根端口和指定端口外,其他端口会被置于阻塞状态,不参与数据转发,以避免环路的产生。
1.4 交换机端口的角色和状态
1.4.1 端口的角色
在STP(生成树协议)中,交换机端口可以扮演以下几种角色:
根端口(Root Port):在非根桥上,根端口是到达根桥路径成本最低的端口。每个非根桥只有一个根端口。
指定端口(Designated Port):指定端口是每个网络段上负责转发数据帧的端口。通常情况下,根桥的所有端口都是指定端口,除非根桥上存在物理环路。在其他网段上,只有一个端口会被选举为指定端口。
阻塞端口(Blocking Port):如果端口既不是根端口也不是指定端口,它将被置于阻塞状态,不参与数据帧的转发,但仍然会接收BPDU(Bridge Protocol Data Units)以监听网络状态。
禁用端口(Disabled Port):管理性关闭的端口,不参与STP计算,不转发数据帧,也不处理BPDU。
以下两种端口为RSTP协议中引入的概念,我会在STP协议变种协议中进行讲解。
预备端口(Alternate Port):在某些STP变体中,如RSTP(快速生成树协议),预备端口是那些当前没有被使用,但已经准备好在必要时接替指定端口或根端口的端口。
备份端口(Backup Port):同样是在RSTP中,备份端口是那些当前没有被使用,但作为指定端口的备份,可以在指定端口失败时接替其角色的端口。
1.4.2 端口状态
STP(生成树协议)中端口有五种状态,每种状态定义了端口在网络中的角色和行为。以下是STP中端口状态的描述:
Disabled(禁用):端口状态为Down,不处理BPDU(Bridge Protocol Data Units)报文,不学习MAC地址表,也不转发用户流量。这通常是因为端口被管理性关闭或链路故障。
Blocking(阻塞):端口处于阻塞状态时,不转发用户流量,不学习MAC地址表,但可以接收BPDU并进行处理。这种状态下的端口主要用于监听网络中的其他BPDU,以确定网络拓扑。
Listening(侦听):这是一个过渡状态,端口开始参与生成树计算,端口可以接收和发送BPDU,不学习MAC地址表,但不转发用户流量。此状态通常持续一段时间(由Forward Delay定时器决定),之后端口会进入Learning状态。
Learning(学习):在这个阶段,端口不转发用户流量,但开始建立无环的MAC地址转发表。端口继续接收和发送BPDU。这个状态也是过渡性的,持续一定时间后,端口将进入Forwarding状态。
Forwarding(转发):端口可以接收和发送BPDU,并开始转发用户流量,学习MAC地址表。只有被选举为根端口或指定端口的端口才能进入Forwarding状态,这意味着端口是活动网络拓扑的一部分。
五种状态的转换图,DP(根端口),RP(指定端口),AP(阻塞端口)
1.5 BPDU
在STP(生成树协议)中,BPDU(Bridge Protocol Data Unit)是交换机用来通信和维护生成树拓扑的关键信息的数据单元。以下是BPDU的相关信息:
BPDU的类型:BPDU主要分为两种类型,配置BPDU(Configuration BPDU)和TCN BPDU(Topology Change Notification BPDU)。
配置BPDU:用于选举根桥、确定端口角色以及维护生成树的稳定性。配置BPDU包含了STP所需的路径和优先级信息,如根桥ID、根路径开销、桥ID和端口ID。
TCN BPDU:当网络拓扑发生变化时发送,用于通知根桥和其他交换机拓扑变化,以便及时更新MAC地址表项。
BPDU的发送:根桥周期性地发送配置BPDU,非根桥在收到根桥的BPDU后,会在指定端口上复制并转发这些BPDU。
BPDU的作用:BPDU使得网络设备能够了解整个网络的拓扑结构,从而避免环路的产生并维护网络的稳定性。
BPDU的报文格式:BPDU包含多个字段,如BPDU类型、计时器、最大老化时间、Hello时间等。
BPDU保护:为了防止网络中的恶意攻击或配置错误,可以在交换机上配置BPDU保护,以忽略在不应期望的接口上收到的BPDU。
BPDU的发送间隔:通常由Hello Timer决定,其默认值是2秒。
BPDU的老化时间:BPDU报文在网络中的最大老化时间,默认为20秒,超过这个时间未更新的BPDU将被丢弃。
BPDU的访问时间:根桥发送BPDU的频率,通常每2秒一次。
BPDU是STP协议中的核心机制,通过BPDU的交换,网络设备能够协同工作,共同维护一个稳定无环的网络环境。
1.6 STP协议的缺点
尽管STP协议在防止广播风暴和MAC地址表震荡方面发挥了重要作用,但在实际应用中也存在一些问题和局限性:
拓扑收敛速度慢:当网络拓扑发生变化时,STP需要较长时间(通常为50-52秒)来完成拓扑收敛,这会影响流量传输和用户体验。
不能提供负载均衡:STP协议在处理环路时,通常将环路阻塞,导致该链路不能转发数据包,从而浪费了网络资源。
生成树算法复杂:STP算法包括选择根网桥、根端口和指定端口等步骤,过程复杂,需要交换机之间传递BPDU来完成计算。
根桥故障恢复时间长:如果根桥发生故障,需要较长时间(约等于Max Age加上两倍的Forward Delay时间,通常为50秒左右)来重新选举根桥并恢复网络。
直连链路故障恢复慢:在STP中,如果检测到根端口的链路发生物理故障,其替代端口需要经过两倍的Forward Delay时间后才能恢复到转发状态。
非直连链路故障处理:当非直连链路发生故障时,交换机可能需要等待Max Age定时器超时后才能重新计算STP,这也需要较长时间。
配置BPDU和TCN BPDU的处理:STP依赖于配置BPDU来选举根交换机和确定端口角色,以及TCN BPDU来缩短MAC表项的刷新时间,但这些机制可能导致处理延迟。
端口状态转换延时:STP中端口状态的转换(如从阻塞到转发)需要等待一定的延时(Forward Delay),这可能影响网络的快速恢复。
网络设计和配置复杂性:为了确保STP正常工作,需要对网络进行精心设计和配置,包括选择合适的根桥位置、调整路径开销等。
与其他厂商设备的兼容性问题:不同厂商的设备可能在STP实现上存在差异,导致在互联时可能出现兼容性问题。
这些问题限制了STP协议在现代网络中的性能和效率,因此,许多网络采用了RSTP(快速生成树协议)等改进的STP版本来解决这些问题,提高网络的收敛速度和稳定性。
2. H3C配置
新华三(H3C)交换机的STP(生成树协议)配置涉及多个方面,包括但不限于以下几个关键步骤:
开启STP特性: 使用命令 stp global enable
来开启STP特性,这是全局生效的设置。
配置STP工作模式: 可以通过命令 stp mode {stp|rstp|mstp|pvst}
来配置交换机的STP工作模式,其中stp
代表经典生成树协议,rstp
代表快速生成树协议,mstp
代表多生成树协议,而pvst
代表每VLAN生成树协议。
配置设备的优先级: 使用命令 stp [instance instance-id] priority priority
来配置设备的优先级,其中instance-id
是指定的实例ID,priority
是优先级值,可以影响根桥的选举。
配置端口为边缘端口: 边缘端口通常连接到终端设备,不会形成环路。使用命令 stp edged-port
可以配置端口为边缘端口,以实现快速迁移。
显示STP信息: 使用命令 display stp brief
可以显示STP的简要信息,包括端口状态、根桥信息等。
配置根桥保护: 为了防止新加入的设备影响根桥的地位,可以使用 stp root-protection
命令在指定端口上开启根桥保护。
配置环路保护: 使用 stp loop-protection
命令可以在指定端口上开启环路保护,防止由于网络拥塞或配置错误导致的环路问题。
配置TC保护: 为了防止伪造的TC-BPDU攻击,可以使用 stp tc-protection
命令开启TC保护。
配置MST域: 在MSTP模式下,需要配置MST域,包括设置域名、VLAN映射表和修订级别。使用 stp region-configuration
命令进入域配置模式,然后设置相关参数。
配置端口路径开销: 使用命令 stp cost cost-value
可以配置端口的路径开销,影响数据转发路径的选择。
配置端口优先级: 使用命令 stp port priority priority
可以配置端口的优先级,影响端口在生成树中的角色。
配置端口链路类型: 使用命令 stp point-to-point {auto|force-false|force-true}
可以配置端口的链路类型,影响快速迁移机制。
配置端口收发的MSTP报文格式: 使用命令 stp compliance {auto|dot1s|legacy}
可以配置端口发送的MSTP报文格式。
开启端口状态变化信息显示: 使用命令 stp port-loginstance0
可以开启端口状态变化信息显示,便于监控。
开启生成树协议: 在端口上开启STP协议,使用命令 stp enable
。
配置No Agreement Check功能: 使用命令 stp no-agreement-check
可以在根端口上开启No Agreement Check功能,避免与第三方厂商设备在快速迁移上的配合问题。
配置TC Snooping功能: 使用命令 stp tc-snooping
开启TC Snooping功能,提高网络稳定性。
配置生成树保护功能: 包括BPDU保护、根保护、环路保护等,使用相关命令如 stp loop-protection
开启特定保护功能。
配置端口角色限制功能: 使用命令 stp role-restriction
开启端口角色限制,防止端口被选为根端口。
配置端口透传生成树报文功能: 使用命令 stp transparent enable
开启端口透传生成树报文功能。
配置生成树的网管功能: 开启告警功能,使用命令 stp port-log
等。
这些配置步骤可以帮助网络管理员根据网络的需求和设备的能力来选择合适的配置选项,确保网络的稳定性和效率。