-
STP技术
以太网交换网络上为了进行链路备份 ,通常 会使用冗余链路, 但是使用冗余链路会在 交换网络上形成环路, 并导致广播风暴以及MAC地址表不稳定等故障现象。生成树协议(STP)运行于以太网交换机上, 为解决网络中的环路问题在网络上修剪出一棵无环的树 , 并在主链路出现故障后自动启用备份链路, 使网络工作正常 。最新的STP标准由1998年发布的IEEE8 02.1D标准文档定义 本节将针对STP的基本工作过程进行详细介绍, 具体可概括为以下5点内容。
-
STP产生的背景
-
STP的工作原理
-
STP的协议报文
-
RSTP的工作机制
-
MSTP的工作机制
-
-
二层环路
交换机基于MAC地址表进行转发,MAC地址表说明了目的MAC地址和目的端口的对应关系。如图所示,假设PCA向PCB发送一个数据帧,此数据帧的目的MAC地址设置为PCB的MAC地址00-OD-56-BF-88-20。交换机会执行以下动作。
(1)交换机SWA接收到此数据帧之后需要查找MAC地址表 ,根据MAC地址表中的记录将数据帧从 E0/1口向外转发 。交换机在转发数据帧的时候 ,对数据帧不做任何修改 。如果交换机接收到的是一 个广播数据帧或者是目标地址不在MAC地址表中的数据帧,则向所有端口转发(源端口除外 )。
(2)交换机SWB接收到了此数据帧之后查找MAC地址表,根据MAC地址表中的记录,将数据从EO/3端口上转发出去。此次转发仍然不会对数据帧做任何修改。
(3)PCB接收到数据帧之后查看目的MAC地址,由于目的MAC地址为接收者本身 ,所以PCB处理此数据帧并上送上层协议处理数据帧所携带的数据。
如果为了保证网络运行的稳定性,在以太网交换网络上使用冗余链路进行了链路备份,如图所示
在使用了冗余链路后,出现了二层交换网络的环路,引发了广播风暴,MAC地址表不稳定等问题。
-
广播风暴
如图所示:交换机SWA 的 E0/1和SWB 的 E0/1 相连,SWA的 E0/2和SWB 的 E0/2 相连。
根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播数据帧,则向所有其他端口转发,而且交换机在转发数据帧的时候,对数据帧不做任何修改。
假设SWA从E0/3 接口接收到一个广播帧.根据交换机的转发原则,应该向除 E0/3 外的所有端口转发该广播帧,包括E0/1和E0/2接口(在本例中,只考虑从E0/2接口发出的广播报文)。当该广播帧从SWA的E0/2转发到交换机SWB 后,SWB会通过E0/1向SWA继续转发该广播帧。这样该广播帧就会沿着SWA-E0/2-SWB-E0/2-SWB-E0/1-SWA-E0/1-SWA-E0/2…无限转发下去。反方向SWA-E0/1- SWB-E0/1-SWB-E0/2-SWA-E0/2 -SWA-E0/1…也是一样的。
因此, 如果交换网络中存在环路,尽管PCA发送的广播报文是有限的几个广播报文, 但这些广播帧会在二层网络中被无限期地转发。而且广播帧在经过交换机转发时会进行复制,从而导致广播帧数量越来越多,造成链路堵塞,这就是所谓的广播风暴。
-
MAC地址表不稳定
交换机是根据 MAC地址表进行转发的,MAC地址表在交换机启动时是空的.交换机有一个学习MAC地址表的过程 ,根据接收到的数据帧的源地址和接收端口的对应关系来进行学习。
在存在环路的二层网络中,MAC地址表也会变得不稳定,如图所示。
PCA向外发送了一个数据帧,假设此数据帧的源MAC地址在网络中所有交换机 的MAC地址表中都暂时不存在。SWA收到此数据帧之后,在MAC地址表中生成一个MAC地址表项,00-00-56-BF-88-10,对应端口为E0/3。
由于SWA的MAC地址表中没有对应此数据帧目的MAC地址的表项,则SWA将此数据帧同时从E0/1和E0/2 端口转发出去。此时数据 包被发送到 SWB,由于SWB的MAC地址表中也没有对应此数据帧目的MAC地址的表项, 则从E0/1接口接收到的数据帧会被从E0/2接口发送回SWA。
SWA 从E0/4接收到此数据帧之后,会在MAC地址表中删除原有的相关表项.生成一个新的表项,00-00-56-BF-88-10,对应端口为E0/2。如果此时PCA再次发送一个数据帧,则SWA在接收到该数据帧后又会将MAC地址的表项改回E0/3接口。
在整个数据转发流程中, 交换机上的MAC地址表会一直重复这个过程,MAC地址表也会一直处于动荡学习的过程中。
因此,二层环路造成了MAC地址表不稳定,在重复的学习中还会导致错误的MAC地址表项,如上图所示。在某些时候,MAC地址表中 00-00-56-BF-88-10对应的接口会是 E0/1或者 E0/2。
如上所述,存在环路结构的二层网络会导致广播风暴 、MAC地址表不稳定等问题,这些都会导致网络运行异常。那么是否意昧着应该尽力去避免二层环路的结构呢?或者,反过来说,二层的环路结构,对于二层网络的组网结构能否提供一些正面的作用呢?
从网络的可靠性方面考虑,存在冗余链路的环路结构更能满足客户业务的可靠性需求。如上述的组网中,即使E0/1接口链路中断,仍然能通过E0/2接口进行数据的转发,从而实现对用户业务的保护。
环路结构能够提供二层业务的保护, 但环路结构的存在也可造成广播风暴等问题。那么,能不能做到在网络正常的时候,冗余链路不处于工作状态,整个网络中不存在环路结构,而当网络出现链路或者端口故障的时候,冗余链路恢复工作来保证网络的正常运行呢?如图所示,在正常情况下,SWB的端口E0/20处于阻塞状态,整个网络是无环的网络。当SWA的E0/20端口出现故障的时候,协议检测到故障,把SWB的E0/20端口状态转为正常工作状态, 从而保证整个网络业务的正常运行。
为了要实现链路的冗余备份,又不引起二层链路的环路,在此引入了生成树协议( STP)。
-
-
STP工作原理
STP主要用于在存在环路结构的二层网络中构建一个无环的树形的二层拓扑,协议由IEEE 802.1D定义。
-
基本术语。
STP定义了根桥(Root Bridge)、 根端口(Root Port) 、 指定端口(Designated Port) 、路径开销(Path Cost)等概念。通过构造一棵无环的树的方法达到裁剪冗余的环路的目的, 同时实现链路备份和路径最优化。
-
桥ID(bridge id)
由于早期用于连接不同终端的二层网络设备只有两个端口, 功能类似 "桥" 的概念, 因此被称为 "网桥"。后来, 网桥被具有更多端口、 同时也可隔离冲突域的交换机所取代。但在部分场景的描述中, 有时仍然用 "网桥" 的概念来进行描述,但实际指的是交换机设备。本章节中, 涉及 "桥" 的概念描述,都可以描述为 "交换机" ,譬如 桥ID ,也可描述为 交换机ID ,"根桥" 也可描述为 "根交换机" 。
在二层网络中用"桥ID" 来描述网络中的交换机。一个"桥ID"由两部分组成, 前16位表示的是交换机的优先级,后48位表示的是交换机的MAC地址, 如图所示。桥ID的优先级可以人为设定,默认取值32768 。
-
根桥
根桥( Root Bridge )是桥ID最小的交换机,可以认为是树形二层拓扑的根。对于STP来说,网络中所有的交换机选举出一个根交换机,然后,其他交换机角色和端口角色的选举,都会参考根桥的判断来进行选择。除了根桥外,网络中其余所有的交换机都称为非根交换机
-
端口开销
端口开销( Port Cost)表示数据从该端口发送时的开销值,也即出端口的开销。STP认为从一个端口接收数据是没有开销的。交换机的每个端口都有一个端口开销值。 端口的开销和端口的带宽有关,带宽越高,开销越小。华为平台中,百兆端口的开销值为200。
-
根端口
根端口( Root Port)是指从一个非根交换机到根交换机总开销最小的路径所经过的本地端口。 这个最小的总开销值也称为交换机的根路径开销( Root Path Cost )。
-
端口ID
端口ID ( Port Identifier )是用于区分描述交换机上不同端口的。
端口ID的定义方法有多种, 下图中给出了其中的两种常见定义。第一种定义中, 高4位是端口优先级,低12位是端口号。第二种定义中,高8位是端口优先级,低8位是端口编号,端口优先级默认取值为128。
-
指定端口
STP为每个网段选出一个指定端口( Designated Port )。 指定端口为每个网段转发发往根交换机方向的数据,并且转发由根交换机方向发往该网段的数据。
-
预备端口
既不是根端口也不是指定端口的交换机端口称为预备端口(Alternate Port)。 预备端口不转发数据,处于阻塞状态。 但被阻塞的端口仍会监昕STP帧 , 以便链路出现故障后快速恢复被阻塞端口,将流量引导到保护路径上。
-
网桥协议数据单元
在STP计算中, 交换机之间需要交换信息,并利用这些信息进行STP的根交换机、 根端口等选举。承载STP信息交换的报文被称为网桥协议数据单元(Bridge Protocol Data Unit, BPDU )报文。
-
生成树的工作原理
了解如何实现对于端口的冗余保护。当网络正常的时候, 关闭冗余的链路接口,防止环路;当网络出现故障的时候,开放冗余端口,形成保护。
为达到这个目的,STP首先选举出了一个根交换机,然后在其余的非根交换机上选择出一个根端口。接着在每一段链路上选举出一个指定的端口,最后既不是根端口也不是指定端口的端口,就成为预备端口,被置为阻塞状态。
-
根桥选举
根桥是整个STP树形拓扑的根节点。要进行STP生成树的计算,首先要确定的就是根桥。运行STP的交换机之间的根桥选举,是借助了BPDU报文进行的信息交互。在BPDU报文中,包含了BID的信息。
每台交换机初始启动后,都认为自己是根桥,并且,会在发送给别的交换机的BPDU报文中宣告自己是根桥。当交换机接收到从其他交换机发送过来的BPDU报文时,会将自己的桥ID和BPDU中的根桥ID进行比较,拥有较小桥ID的交换机被选举为根桥。
交换机之间不断交互BPDU报文,同时也不断对桥ID进行比较,最终整个交换机网络会选举出一台拥有最小桥ID的交换机作为整个网络的根桥。如图所示,交换机SWA,SWB,SWC都使用了默认优先级32768。按照之前的描述,根桥的选举, 是对不同交换机的桥ID进行比较, 而桥ID又是由优先级和交换机的MAC地址组成的。所以,在交换机优先级相同的情况下, 就需要使用MAC地址进行比较了。图示中,SWA拥有最小的MAC地址, 因此被选举为根桥。
-
根端口选举
在选定了根桥后, 其余交换机都被称为非根桥。在部署了冗余链路的网络中,一台非根桥交换机上可一能存在多条去往根交换机的路径。在这些路径中,STP会选出条最优的路径,负责转发该非根桥交换机到根桥交换机的数据。该路径在非根交换机上的本地端口,称为根端口。
根端口作为非根交换机与根交换机之间进行报文交互的端口,在一台非根交换机上是唯一的。
根端口所在的路径是去往根交换机的最优路径。衡量路径是否最优,一个重要的依据是路径开销。在之前描述STP术语的时候,提过路径开销和端口开销两个概念,而路径开销即为该路径上所有出端口的端口开销的总和。端口的开销和端口的带宽有关,带宽越高,开销越小,如表所示:
根端口的选举,首先比较端口去往根交换机的路径开销,最小的路径开销所在的端口即为根端口,根端口的路径开销,称为根路径开销(Root Path Cost);如果多个端口的路径开销相同,则比较端口上行交换机的桥ID,上行设备桥ID较小的端口作为根端口;如果上行交换机的桥ID相同,再比较上行交换机的端口ID,上行交换机端口ID较小的端口作为根端口。
在下图中,SWA为根交换机,其余交换机为非根交换机,图中交换机所涉及的STP选举参数都为默认参数。SWB和 SWC去往根交换机的路径分别有两条,在使用相同链路带宽的情况, 譬如都是GE链路(1 Gbit/s),那么SWB和SWC的去往根交换机的两个方向的路径开销分别为20和40,SWB和SWC的根端口通过比较路径开销就能够得到。
在某些情况下,无法通过路径开销的方式得出根端口,那么遵循根端口的选举原则,继续比较上行交换机的桥ID和上行交换机的端口ID。
-
指定端口选举
根端口的选举确定了非根交换机和根交换机通信路径的唯一性,但对于交换机之间的互联网段来说,去往根交换机的路径也存在有多条。如上图中,LANC上的数据通过SWB去往根交换机,也可以通过SWC去往根交换机。指定端口的选举,既是为了确定每个网段的唯一的一个负责转发该网段数据的接口,该指定端口所在的交换机也被称为该网段的指定交换机。
指定端口的选举,首先比较该网段连接端口所属交换机的根路径开销,越小越优先;如果根路径开销相同,则比较所连接端口所属交换机的交换机标识,越小越优先;如果根路径开销相同,交换机标识也相同,则比较所连接的端口的端口标识,越小越优先。
下图中,STP为每个网段选出一个指定端口。
对于根交换机来说,所有端口都是所连接网段的指定端口。因此LANA和LANB的指定端口都在SWA上。LAND和LANE都只连接了一个交换机端口,此端口即为指定端口。
对于LANC来说,同时连接到两个交换机端口,并且两个交换机的根路径开销相同,因此需要比较两个端口所在交换机的交换机标识。由于SWB的交换机标识比SWC小( MAC地址更小),因此LANC的指定端口在SWB上。
(4)阻塞预备端口
在完成根端口和指定端口的选举后, 交换机上所有的既非根端口,也非指定端口的端口, 统称为预备端口。
为防止环路,STP会将交换机上的预备端口进行逻辑阻塞。被逻辑阻塞的端口,无法转发用户数据帧,但可以接收并处理STP的BPDU报文。一旦网络出现故障。借助STP的重新收敛,能够放开部分阻塞端口,实现业务的保护。
如上图所示,SWC连接LANC的端口既非根端口,也非指定端口,因此,该端口被称为预备端口,STP会将该端口的数据转发阻塞, 从而构建出树形的拓扑。最终的逻辑拓扑结构如下图
当网络发生故障时,譬如SWA和SWC之间链路发生故障时,STP重新进行选举,SWC的预备端口会被选举为根端口,恢复数据转发的能力,从而实现对网络的保护此时的逻辑拓扑结构如下图
-
生成树的端口状态。
STP通过根端口、指定端口、预备端口的选举,构建了无环的树形拓扑各端口的状态描述总结如表所示
根端口(Root Port):去往根桥路径最近的端口,这个最近的衡量是靠RootPath Cost来判定的 有关Path Cost的计算,是每当一个端口收到一个BPDU后.会在该BPDU所指示的Path Cost上加上该端口的Port Path Cost(这是可以人为配置的)。比较RootPath Cost最小的端口就是根端口,如果有两条开销相同的路径,那么就选择上行交换机BID较小的.如果上行交换机BID相同,那么就选择上行交换机PID较小的。
指定端口(Designated Port):一个LAN里面负责转发BPDU的端口。
预备端口(Alternate Port):被对方的指定端口抑制的端口预备端口不转发任何报文.但接收BPDU,监听网络变化。
除了端口角色之外, STP同样对于端口的状态进行了定义,如表所示:
端口正常启用之后, 端口首先进入Listening状态, 开始生成树的计算过程。如果经过计算, 端口角色需要设置为预备端口( Alternate Port ),则端口状态立即进入Blocking状态。
如果经过计算,端口角色需要设置为根端口(Root Port)或指定端口( Designated Port),则端口状 态在等待一个时间周期之后从Listening 状态进入Learning 状态, 然后继续等待一个时间周期之后,从 Learning状态进入Forwarding状态,正常转发数据帧。端口状态的迁移过程如图
1端口代表被选为指定端口或者根端口
2端口被选为预备端口
3端口从学习过渡到转发所经过时间周期。此时间周期被称为转发时延,默认为15s。
在上图的端口状态迁移中,如果端口是被禁用,则端口立即进入Disabled状态;如果端口被选举为预备端口,端口也立即进入Blocking状态;但如果端口是被选举为根端口或者指定端口, 即端口是从不转发状态进入转发状态 ,那么在进入转发状态之前,端口需要等待两次Forward Delay的间隔。Forward Delay的设置, 主要是为了防止临时环路。
如下图所示,初始时候,SWA为根交换机,SWD的E0/2接口为备用接口,被逻辑阻塞。但网络变化,需要让SWC成为新的根交换机。经过重新选举,SWB的E0/2接口成为新的备用接口,而SWD的E0/2成为了新了根端口。如果Forward Delay为0,那么一旦SWD的E0/2接口被选举为新的根端口,将马上恢复数据转发的能力。而此时,SWB的E0/2接口不一定来得及进入Blocking状态,这时候网络中会出现临时环路。为了防止临时环路的出现,定义了Forward Delay,端口在被选举为根端口或者指定端口时,并不立即进入转发状态。
在STP中,定义的Forwad Delay的时间间隔是15S,再加上STP自身的收敛时间,网络从阻塞状态变成可转发状态,花费的时间估计会达到50 s左右。在某些场景中,50s的收敛时间不能满足业务的要求,为了尽量加快STP的收敛时间,IEEE另外定义了 802.1w 快速生成树协议( Rapid Spanning Tree Protocol, RSTP),用于实现 STP的快速收敛。
-
-
BPDU报文
STP生成树的计算,根端口 指定端口的选举,都是借助于BPDU报文来进行信息的传递和交换的。 在向整网泛洪STP拓扑信息的过程中, 会涉及两种BPDU:配置BPDU 和TCN BPDU。
BPDU报文采用IEEE802.3的封装格式,以多播的方式发送,多播地址为01-80-c2-00-00-00。默认每2s发送一个BPDU报文。
更多的BPDU的内容作为一个运维开发我也就了解到这里即可。
-
RSTP
快速生成树协议(RSTP)是STP的升级版本,与STP相比,最显著的特点就是通过新的机制,加快了收敛速度。
STP运行于交换机上,通过在交换网络中修剪出一棵无环的树,解决了交换网络中的环路问题。但是STP在网络拓扑变化之后的收敛速度非常慢.已经无法适应现行网络的要求。因此,为了尽量加快STP的收敛时间,IEEE另外定义了802.1w规范来描述RSTP,用于实现STP的快速收敛。
-
MSTP
不同于RSTP的快速收敛,多生成树协议(Multiple Spanning Tree Protocol, MSTP)用于解决启用了VLAN的交换网络中的环路问题。2005年版本的IEEE 802.10为MSTP当前的标准文挡。
1.单生成树的弊端
如果在二层网络上部署STP的同时也启用了VLAN, 那么就有可能导致部分VLAN路径不通无法使用流量分担,次优二层路径等问题。
-
部分VLAN路径不通
如图所示,SWC连接终端网段,上行使用两条链路连接SWA和SWB。配置VLAN2通过两条 链路上行,配置VLAN3只通过一条链路上行。
为了解决VLAN2的环路,需要运行生成树,在运行单个生成树的情况下,假设SWC与SWB相连的端口成为预备端口,进入Disearding状态。此时,VLAN3的路径被断开,无法上行到SWB。
-
无法使用流量分担
如图下图所示SWC连接终端网段,上行使用两条链路分别连接SWA和SWB来实现流量分担。为了实现流量分担,在SWC上配置的两条上行链路为Trunk 链路,配置的两条链路上都通过所有VLAN, SWA和SWB之间的链路也配置 为Trunk链路,并通过所有VLAN。将VLAN2的三层接口配置在SWA上,将VLAN3的三层接口配置在SWB 上。
理想情况下,VLAN2和VLAN3使用不同的链路上行到相应的三层接口,可是 如果网络中只有一个生成树,swc和SWNSWB F斤形成的环路会被打开,例如,SWC连接到SWB的接口成为预备端口(Alternate Port) ,并处于Discarding状态,则VLAN2和VLAN3的数据都只能通过一条上行链路上行到SWA,不能实现流量分担。
-
次优二层路径
如上图所示,STP的运行除了无法使用流量分担以外,还导致了另外一个问题, 就是次优二层路径。VLAN3的三层接口被配置在SWB上,但由于SWC 上行SWB的端口被阻塞,导致VLAN3的访问数据必须走SWC-SWA-SWB。所以,VLAN3到达三层接口的路径就是次忧的,最忧的路径应当是直接上行到SWB.
2.MSTP的基本概念
MSTP允许将一个或多个VLAN映射到一个多生成树实例(MST Instance)上,MSTP为每个MST Instance单独计算根交换机 单独设置端口状态,即在网络中计算多个生成树。
每个MST Instance都使用单独的RSTP算法,计算单独的生成树。
如下图中,在网络中配置两个MST Instance,VLAN2映射到MST Instance 1, VLAN3映射到MST Instance 2。
通过修改交换机上不同MST Instance的交换机优先级,可以将不同的交换机设置成不同MST Instance 的根交换机。在下图中,SWA为MST Instance 1的根交换机;SWB为MST Instance 2的根交换机。
启用了多生成树之后, 可以看出,VLAN2的数据直接上行到SWA, VLAN3的数据直接上行到SWB。如此,流量分担就可以实现了,某些VLAN路径不可达的问题也可以解决了,二层路径次优的问题也可以得以解决。
更多的MSTP的知识就不再叙述。
-
-
STP故障案例分析
STP协议,在存在环路结构的二层网络中构建了一个无环路的树形的二层拓扑,RSTP加快了STP的协议收敛速度,MSTP解决了启用了多VLAN的交换机网络中的环路问题。下面通过一个案例加深对STP的理解。
案例:未配置STP边缘端口导致终端业务中断。
如下图所示,在SwitchA,Switch B和 Switch C这3台交换设备上使能STP。当拓扑稳定后,Switch A为根交换机,Switch C接口GE0/0/2 为Alternate接口阻塞。Switch A主备倒换后,发现交换网络上的部分终端出现业务流量中断现象。
故障原因分析:
Switch A设备在主备倒换的时候,为了防止环路的出现,设备会重新进行STP计算。而连接PC的接口也参与了STP计算,在主备倒换后,连接PC的接口仍然是指定接口,但是需要经过段学习时间才能转发业务报文。
某些终端设备在自动获取IP地址的时候,只发送有限的几个(通常情况下是4个)请求分配IP的消息,而此时,交换机端口未设置成边缘端口,网络重新收敛需要30s的时间,期间端口不转发数据,因此把终端发送的IP地址请求消息都丢弃了。在发送4个请求分配IP的消息没有收到回应后,终端获取IP地址失败,无法上网,导致了故障的发生。
故障解决办法:
解决该类型故障的思路可以从以下两个方面考虑。
(1)加快交换机的收敛速度,譬如部署RSTP,配置边缘端口 。
(2)从终端的角度解决,重启终端设备的网卡,重新发起IP地址请求 。