《STP 全网最详解》属于博主的“生成树”专栏中,想要了解更多关于“RSTP”和“MSTP”的内容请点击主页面跳转到相应“生成树”专栏,博主会持续更新,以打造出”生成树”的全网最详细的知识体系。
一.前言
- 以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络上产生环路,引发广播风暴以及MAC地址表不稳定等故障现象从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol)。
- 运行STP协议的设备通过彼此交互信息发现网络中的环路,并有选择的对某个接口进行阻塞,最终将环形网络结构修剪成无环路的树形网络结构,从而防止报文在环形网络中不断循环,避免设备由于重复接收相同的报文造成处理能力下降。
二.生成树技术概述
1.技术背景:二层交换机网络的冗余性与环路
- 随着局域网规模的不断扩大,越来越多的交换机被用来实现主机之间的互连。如图,接入层交换机单链路上联,则存在单链路故障,也就是如果这根上联链路发生故障,交换机下联用户就断网了。另一个问题的单点故障,也就是交换机如果宕机,交换机下联用户也就断网了。
- 为了解决此类问题,交换机在互连时一般都会使用冗余链路来实现备份。冗余链路虽然增强了网络的可靠性,但是也会产生环路,而环路会带来一系列的问题,继而导致通信质量下降和通信业务中断等问题。
2.技术背景:人为错误导致的二层环路
3.二层环路带来的问题
- 问题一:广播风暴
- 根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧,或者是个目的MAC地址未知的单播帧,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧。
- 本例中,SW3收到了一个广播帧将其进行泛洪,SW1和SW2也会将此帧转发到除了接收此帧的其他所有端口,结果此帧又会被再次转发给SW3,这种循环会一直持续,于是便产生了广播风暴。交换机性能会因此急速下降,并会导致业务中断。
- 问题二:MAC地址表漂移
- 交换机是根据所接收到的数据帧的源地址和接收端口生成MAC地址表项的。
- 本例中,SW3收到一个广播帧泛洪,SW1从GE0/0/1接口接收到广播帧后学习且泛洪形成MAC地址5489-98EE-788A与GE0/0/1的映射;SW2收到广播帧后学习且泛洪SW1再次从GE0/0/2收到源MAC地址为5489-98EE-788A的广播帧并进行学习,548998EE-788A会不断地在GE0/0/1与GE0/0/2接口之间来回切换,这被称为MAC地址漂移现象。
4.初始生成树协议
- 在以太网中,二层网络的环路会带来广播风暴,MAC地址表震荡,重复数据帧等问题,为解决交换网络中的环路问题,提出了STP。
- STP通过构造一棵树来消除交换网络中的环路。
- 运行STP算法,判断网络中存在环路的地方并阻断几余链路,将环路网络修剪成无环路的树型网络,从而避免了数据帧在环路网络中的增生和无穷循环。
5.生成树能够动态响应网络拓扑变化调整阻塞接口
- 如图,交换机上运行STP协议,:会通过报文监控网络的拓扑结构,正常情况下是将SW3上的一个接口进行阻塞(Block),从而打破环路,当监控到SW1与SW3之间出现链路故障,则恢复阻塞端口进入转发状态。
6.二层及三层环路
7.生成树协议在园区网络中的应用位置
8.STP概述
- STP是一个用于局域网中消除环路的协议。
- 运行该协议的设备通过彼此交互信息而发现网络中的环路,并对某些接口进行阻塞以消除环路。
- STP在网络中运行后会持续监控网络的状态,当网络出现拓扑变更时,STP能够感知并目进行自动响应,从而使得网络状态适应新的拓扑结构,保证网络可靠性。
- 由于局域网规模的不断增长,生成树协议已经成为了当前最重要的局域网协议之一。
三.STP的基本概念及工作原理
1.STP的基本概念:桥ID
- 在STP中,每一台交换机都有一个标示符,叫做Bridge ID或者桥ID,桥ID由16位的桥优先级(Bridge Priority)和48位的MAC地址构成。在STP网络中,桥优先级是可以配置的,取值范围是0~65535,默认值为32768,可以修改但是修改值必须为4096的倍数。优先级最高的设备(数值越小越优先)会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先。
- 如图,需要在该网络中选举根桥,首先比较三台交换机的桥优先级,桥优先级都为4096,再比较三台交换机的MAC地址,谁小谁优先,最终选择SW1为根桥。
2.STP的基本概念:根桥
- 树形的网络结构必须有树根,于是STP引入了根桥(Root Bridge)概念。
- 对于一个STP网络,根桥在全网中只有一个,它是整个网络的逻辑中心,但不一定是物理中心。根桥会根据网络拓扑的变化而动态变化。
- 网络收敛后,根桥会按照一定的时间间隔产生并向外发送配置BPDU,其他设备仅对该报文进行处理,传达拓扑变化记录,从而保证拓扑的稳定。
3.STP的基本概念:cost
- 交换机的每个端口都有一个端口开销(Port Cost)参数,此参数表示该端口在STP中的开销值。默认情况下端口的开销和端口的带宽有关,带宽越高,开销越小。
- 华为交换机支持多种STP的路径开销计算标准,提供多厂商场景下最大程度的兼容性。缺省情况下,华为交换机使用IEEE 802.1t标准来计算路径开销。
4.STP的基本概念:cost的计算方法
5.STP的基本概念:RPC
- 从一个非根桥到达根桥的路径可能有多条,每一条路径都有一个总的开销值,此开销值是该路径上所有接收BPDU端口的端口开销总和(即BPDU的入方向端口),称为路径开销。非根桥通过对比多条路径的路径开销,选出到达根桥的最短路径,这条最短路径的路径开销被称为RPC,并生成无环树状网络。根桥的根路径开销是0。
6.STP的基本概念:Port ID
- 运行STP交换机的每个端口都有一个端口ID,端口ID由端口优先级和端口号构成。端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。缺省情况下,端口优先级是128。端口ID可以用来确定端口角色。
7.STP的基本概念:BPDU
- 为了计算生成树,交换机之间需要交换相关的信息和参数,这些信息和参数被封装在BPDU中。
- BPDU有两种类型:配置BPDU和TCN BPDU。
- 配置BPDU包含了桥ID、路径开销和端口ID等参数。STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态。在初始化过程中,每个都主动发送配置BPDU。在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。
- TCN BPDU是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。
8.配置BPDU的报文格式
9.配置BPDU的比较规则
- STP操作:
- 1.选举一个根桥。
- 2.每个非根交换机选举一个根端口。
- 3.每个网段选举一个指定端口。
- 4.阻塞非根、非指定端口。
- STP中定义了三种端口角色:指定端口,根端口和预备端口:
- 指定端口是交换机向所连网段转发配置BPDU的端口,每个网段有且只能有一个指定端口。一般情况下,根桥的每个端口总是指定端口。
- 根端口是非根交换机去往根桥路径最优的端口。在一个运行STP协议的交换机上最多只有一个根端口,但根桥上没有根端口。
- 如果一个端口既不是指定端口也不是根端口,则此端口为预备端口。预备端口将被阳塞。
10.配置BPDU转发过程
- 交换机在刚启动时都认为自己是根桥,互相发送配置BPDU进行STP运算。
11.STP的计算过程1:选举根桥
- 什么是根桥?
- 根桥是STP树的根节点。
- 要生成一棵STP树,首先要确定出一个根桥。
- 根桥是整个交换网络的逻辑中心,但不一定是它的物理中心。
- 当网络的拓扑发生变化时,根桥也可能发生变化。(抢占)
- 选举过程:
- STP交换机初始启动之后,都会认为自己是根桥,并在发送给其他交换机的BPDU中宣告自己为根桥。因此,此时BPDU中的根桥ID为各自设备的网桥ID。
- 当交换机收到网络中其他设备发送来的BPDU后,会比较BPDU中的根桥ID和自己的BID.
- 交换机不断交互BPDU,同时对BID进行比较,最终选举一台BID最小的交换机作为根桥,其他的则为非根桥。
- 如图:根桥的选举先比较优先级,交换机SW1、2、3的优先级相等,则比较MAC地址,也优选最小的,所以SW1的BID最小,因此SW1为根桥,SW2和SW3为非根桥。
- 注意
- 根桥的角色可抢占。当有更优的BID的交换机加入网络时,网络会重新进行STP计算选出新的根桥。
12.STP的计算过程2:选举根端口
- 什么是根端口?
- 一个非根桥设备上会有多个端口与网络相连,为了保证从某台非根桥设备到根桥设备的工作路径是最优且唯一的,就必须从该非根桥设备的端口中确定出一个被称为“根端口”的端口,由根端口来作为该非根桥设备与根桥设备之间进行报文交互的端口。
- 在选举出根桥后,根桥仍然持续发送BPDU,而非根桥将持续不断的收到根桥发送的BPDU。因此,在所有非根桥上选举一个距离根桥“最近”的端口(根端口),在网络收敛后,根端口将不断的收到来自根桥的BPDU。
- 即:根端口保证了交换机与根桥之间工作路径的唯一性和最优性。
- 注意:一个非根桥设备上,最多只能有一个根端口。
- 选举过程:
- 交换机有多个端口接入网络,各个端口都会收到BPDU报文:,报文中会携带“Root ID RPC、BID、PID"等关键字段,端口会针对这些字段进行PK。
- 首先比较根路径开销(RPC),STP协议把根路径开销作为确定根端口的重要依据。RPC值越小,越优选,因此交换机会选RPC最小的端口作为根端口。
- 当RPC相同时,比较上行交换机的BID,即比较交换机各个端口收到的BPDU中的BID值越小,越优选,因此交换机会选上行设备BID最小的端口作为根端口。
- 当上行交换机BID相同时,比较上行交换机的PID,即比较交换机各个端口收到的BPDU中的PID,值越小,越优先,因此交换机会选上行设备PID最小的端口作为根端口。
- 当上行交换机的PID相同时,则比较本地交换机的PID,即比较本端交换机各个端口各自的PID,值越小,越优先,因此交换机会选端口PID最小的端口作为根端口。
13.STP的计算过程3:在每条链路上选举一个指定端口
- 什么是指定端口?
- 网络中的每个链路与根桥之间的工作路径必须是唯一的且最优的。当一个链路有两条0及以上的路径通往根桥时(该链路连接了不同的交换机,或者该链路连接了同一台交换机的不同端口),与该链路相连的交换机(可能不止一台)就必须确定出一个唯的指定端口。
- 因此,每个链路(Link)选举一个指定端口,用于向这个链路发送BPDU。
- 注意:一般情况下,根桥上不存在任何根端口,只存在指定端口。
- 选举过程:
- 指定端口也是通过比较RPC来确定的,选择RPC最小的作为指定端口,如果RPC相同,则比较BID和PID。
- 首先比较根路径开销(RPC),值越小,越优选,因此交换机会选RPC最小的端口作为指定端口。
- 若RPC相等,则比较链路两端交换机的BID,值越小,越优选,因此交换机会选BID最小的交换机的端口作为指定端口。
- 若BID相等,则比较链路两端端口的PID,值越小,越优选,因此交换机会选PID最小的交换机的端口作为指定端口。
- 指定端口也是通过比较RPC来确定的,选择RPC最小的作为指定端口,如果RPC相同,则比较BID和PID。
14.STP的计算过程4:阻塞非指定端口
- 什么是非指定端口(预备端口)?
- 在确定了根端口和指定端口之后,交换机上所有剩余的非根端口和非指定端口统称为预备端口。
- 阻塞非指定端口
- STP会对这些非指定端口进行逻辑阻塞,即这些端口不能转发由终端计算机产生并发送的帧(用户数据帧)
- 一旦非指定端口被逻辑阻塞后,STP树(无环路工作拓扑)就生成了。
- 注意:
- 非指定端口可以接收并处理BPDU。
- 根端口和指定端口既可以接收和发送BPDU,也可以转发用户数据帧。
15.STP的接口状态
16.STP的接口状态迁移
- 图中所示为STP的端口状态迁移机制,运行STP协议的设备上端口状态有5种:
- Forwarding:转发状态。端口既可转发用户流量也可转发BPDU报文,只有根端口或指定端口才能进入Forwarding状态。
- Learning:学习状态。端口可根据收到的用户流量构建MAC地址表,但不转发用户流量。增加Learning状态是为了防止临时环路
- Listening:侦听状态。端口可以转发BPDU报文,但不能转发用户流量。
- Blocking:阻塞状态。端口仅仅能接收并处理BPDU,不能转发BPDU,也不能转发用O.户流量。此状态是预备端口的最终状态。
- Disabled:禁用状态。端口既不处理和转发BPDU报文,也不转发用户流量。
17.拓扑变化——根桥故障
- 根桥故障:
- 在稳定的STP网络,非根桥会定期收到来自根桥的BPDU报文。
- 如果根桥发生了故障,停止发送BPDU,下游交换机就无法收到来自根桥的BPDU报文。
- 如果下游交换机一直收不到BPDU报文,Max Age计时器(缺省:20s)就会超时,从而导致已经收到的BPDU报文失效,此时,非根桥会互相发送配置BPDU,重新选举新的根桥。
- 端口状态:
- SW3的预备端口,20s后会从Blocking状态进入到Listening状态,再进入Learning状态,最终进入到Forwarding状态,进行用户流量的转发。
- 收敛时间:
- 根桥故障会导致50s左右的恢复时间,等于Max Aqe加上2倍的Forward Delay收敛时间。
18.拓扑变化——直连链路故障
- 直连链路故障:
- 当两台交换机间用两条链路互连时,其中一条是主用链路,另一条为备用链路。
- 当网络稳定时,交换机SW2检测到根端口的链路发生故障(端口状态变为Down)则其备用端口会进入用户流量转发状态。
- 端口状态变化过程:
- 备用端口会从Blocking状态,迁移到Listening-Learning-Forwarding状态。
- 收敛时间:直连链路故障,备用端口会经过30s后恢复转发状态。
19.拓扑变化——非直连链路故障
- 非物理链路故障
- 在稳定的STP网络,非根桥会定期收到来自根桥的BPDU报文。
- 若SW1与SW2之间的链路发生了某种故障(非物理故障),因此SW2一直收不到来自根桥SW1的BPDU报文,MaxAqe计时器(缺省:20s)就会超时,从而导致已经收到的BPDU报文失效。
- 此时,非根桥SW2会认为根桥失效,并且认为自己是根桥,从而发送自己的配置BPDU给SW3,通知SW3自己是新的根桥。
- SW3收到SW2发来的非最优的BPDU,会将从SW1收到的最优的BPDU转发给SW2。
- 因此,SW2发现SW3发来的BPDU更优,就放弃宣称自己是根桥并重新确定端口角色。
- 端口状态:
- SW3预备端口20S后会从Blocking状态进入到Listening状态,再进入Learning状态最终进入到Forwarding状态,进行用户流量的转发。
- 收敛时间:
- 非物理链路故障会导致50s左右的恢复时间,等于MaxAqe加上2倍的Forward Delay收敛时间。
20.拓扑改变导致MAC地址表错误1
- 在交换网络中,交换机依赖MAC地址表转发数据帧。缺省情况下,MAC地址表项的老化时间是300秒。如果生成树拓扑发生变化,交换机转发数据的路径也会随着发生改变,此时MAC地址表中未及时老化掉的表项会导致数据转发错误,因此在拓扑发生变化后需要及时更新MAC地址表项。
- 本例中,SW2中的MAC地址表项定义了通过端口GigabitEthernet 0/0/1可以到达主机A,通过端口GigabitEthernet 0/0/3可以到达主机B。由于SW3的根端口产生故障,导致生成树拓扑重新收敛,在生成树拓扑完成收敛之后,从主机A到主机B的帧仍然不能到达目的地。这是因为MAC地址表项老化时间是300秒,主机A发往主机B的帧到达SW2后,SW2会继续通过端口GigabitEthernet 0/0/3转发该数据帧。
20.拓扑改变导致MAC地址表错误2
- 拓扑变化过程中,根桥通过TCN BPDU报文获知生成树拓扑里发生了故障。根桥生成TC用来通知其他交换机加速老化现有的MAC地址表项。
- 拓扑变更以及MAC地址表项更新的具体过程如下:
- SW3感知到网络拓扑发生变化后,会不间断地向SW2发送TCN BPDU报文。
- SW2收到SW3发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的TCA位设置1,然后发送给SW3,告知SW3停止发送TCN BPDU报文。
- SW2向根桥转发TCN BPDU报文。
- SW1把配置BPDU报文中的Flags的TC位设置为1后发送,通知下游设备把MAC地址表项的老化时间由默认的300 s修改为Forward Delay的时间(默认为15s)。
- 最多等待15 s之后,SW2中的错误MAC地址表项会被自动清除。此后,SW2就能重新开始MAC表项的学习及转发操作。
四.STP的基础配置
关于STP、RSTP、MSTP的相关实验博主会持续更新在“生成树”专栏中,请持续关注!