图解 STP

图解 STP_第1张图片

网络环路
现在我们的生活已经离不开网络,如果我家断网,我会抱怨这什么破网络,影响到我刷抖音、打游戏;如果公司断网,那老板估计会骂娘,因为会影响到公司正常运转,直接造成经济损失。网络通信中,通常是以一条链路能够正常工作为前提,如果链路断开或节点故障,那么互联的设备就无法正常通信了,这类网络问题叫做单点故障。没有备份的链路或节点,出现故障会直接断网。

图解 STP_第2张图片

如果要提供 7×24 小时不间断的服务,那就需要在网络中提前部署冗余。避免出现单点故障,合理的做法是在网络中的关键设备和关键链路添加冗余。在冗余的网络环境中,任意一条链路发生故障断开,都不会影响网络,直接使用其它链路继续转发数据,解决单点故障的隐患。

图解 STP_第3张图片

但同时也带来了另外的网络问题。这种组网会构成二层环路,会引发广播风暴、重复帧、MAC 地址漂移等问题,严重时会占满链路带宽,或打爆设备 CPU ,导致设备无法正常工作,最终造成网络瘫痪。当然,在实际的网络中,不少二层环路是由于人为的错误操作导致的,比如接错了网线。

图解 STP_第4张图片

举个例子:

大刘的主机想要与小美的主机进行通信,现在只知道小美主机的 IP 地址,不知道 MAC 地址。有 IP 地址,就可以通过 ARP 协议来获取小美主机的 MAC 地址。我们来看看有冗余的网络中数据交换的过程:

图解 STP_第5张图片

大刘主机向交换机 A 发送 ARP 广播帧,来解析小美主机的 MAC 地址;

图解 STP_第6张图片

交换机 A 收到广播帧后,查看自己的 MAC 地址表,没找到相应的表项,就向所有端口(除接收端口之外)泛洪这个广播帧。也就是向 G0/1 和 G0/2 两个端口泛洪广播帧;

图解 STP_第7张图片

交换机 B 和交换机 C 收到广播帧后,没有对应 MAC 地址表项,也将广播帧所有端口(除接收端口之外)泛洪出去;

图解 STP_第8张图片

小美主机终于收到了大刘发送的 ARP 广播帧,发现是查询自己的 MAC 地址后,小美主机将会通过单播帧返回自己的 MAC 地址;

图解 STP_第9张图片

这个过程看似正常,大刘主机发送的 ARP 广播帧顺利到达小美主机,小美主机也进行了响应,但是网络中广播帧的传输还没有结束。在第 3 步中,交换机 C 也把 ARP 广播帧泛洪到交换机 B 。这时交换机 B 就收到了两个相同的 ARP 广播帧,分别来自交换机 A 和交换机 C ,收到的广播帧都会泛洪出去。那么,小美主机也会收到两个相同的 ARP 广播帧,也就是重复帧。出现这种现象说明网络中存在不合理的冗余链路;

图解 STP_第10张图片

接下来我们看下交换机 C ,交换机 C 收到从交换机 A 发过来的广播帧,同时交换机 C 的 MAC 地址表添加一条表项,记录大刘主机 MAC 地址和端口 G0/0 的映射关系。交换机 C 又从交换机 B 收到相同的广播帧,大刘主机 MAC 地址的映射端口从 G0/0 变成 G0/1 。从不同的端口收到相同的数据帧,导致 MAC 地址表项发生变化的现象,就叫做 MAC 地址漂移,这种现象说明网络中可能存在环路。这样一来,交换机 C 就无法确定大刘主机到底位于自己的哪个端口;

图解 STP_第11张图片

主机收到广播帧,会进行解封装,查看上层的 IP 地址是否是发送给自己的,再进行下一步处理。交换机(只指二层交换机)收到广播帧,会直接进行泛洪。大刘主机发出的广播帧,经过交换机 A 后,从交换机 A 的 G0/1 口泛洪的广播帧,交换机 B 收到后再从 G0/2 口进行泛洪,交换机 C 收到广播帧后,又从 G0/0 口泛洪出去,结果广播帧回到了交换机 A ,交换机 A 再从 G0/1 进行泛洪,最终这个广播帧会一直逆时针、永无止境的进行泛洪;同理,交换机 A 从 G0/2 口进行泛洪的广播帧,也会按顺时针、无休止的在三台交换机上进行泛洪。这种广播帧不停泛洪的现象,叫做广播风暴。广播风暴不仅会大量消耗网络设备的带宽和 CPU 使用率,也会影响到主机。主机收到一个广播帧后,会解封装上送网络层去处理,大量的广播帧泛洪,很可能导致主机瘫痪。

图解 STP_第12张图片

通过这个简单的演示,我们看到了冗余链路带来的风险。重复帧、MAC 地址漂移和广播风暴,都是由一个广播帧引起的,可是网络中不可避免出现广播帧,也不能因为二层环路问题而忽略冗余链路增加网络可靠性的好处。

那么如何在保证网络冗余的情况下,消除二层环路呢?实际上交换机的二层环路是一个典型问题,解决方案也有不少。其中的一个解决方案就是 STP(生成树协议),能够阻断冗余链路来消除可能存在的环路,并且在网络故障时激活被阻断的冗余备份链路,恢复网络的连通性,保障业务的不间断服务。

图解 STP_第13张图片

当网络中部署了 STP 后,交换机之间会交互相关协议报文,并计算出一个无环路的网络拓扑。当网络存在环路时,STP 会将网络中的一个或多个接口进行阻塞,将环路网络结构修剪成无环路的树状网络结构。被阻塞的接口不再转发数据,这样二层环路问题便迎刃而解。STP 会持续监控网络拓扑状况,当网络拓扑发生变化时,STP 能够及时感知,并动态调整被阻塞接口,而无需人工干预。

图解 STP_第14张图片

STP 基本概念
STP 是用在局域网中消除数据链路层物理环路的协议,标准名称是 802.1D 。STP 带来的好处有:

消除环路:STP 可以通过阻塞冗余端口,确保网络无环且连通;

链路备份:当使用的链路因故障断开时,可以检测到这种情况,并自动开启阻塞状态的冗余端口,网络迅速恢复正常。

在了解 STP 的原理之前,我们先来看看几个专业术语:

1、桥 ID( Bridge ID ,BID )
在公司内我们使用资产编号标记不同的设备,在 STP 里我们使用不同的桥 ID 标识不同的交换机。每一台运行 STP 的交换机都有一个唯一的桥 ID 。桥 ID 一共 8 字节,包含 2 字节的桥优先级和 6 字节的桥 MAC 地址。桥优先级的值可以人为设定,默认值是 32768 。桥 MAC 地址通常是交换机默认 VLAN1 的 MAC 地址。

图解 STP_第15张图片

2、根桥( Root Bridge ,RB )
STP 要在整个二层网络中计算出一棵无环的 “ 树 ” ,树形成了,网络中的无环拓扑也就形成了。其中最重要的就是树根,树根明确了,“ 树枝 ” 才能沿着网络拓扑进行延伸。STP 的根桥就是这棵树的树根。当 STP 启动后,第一件事就是在网络中选举出根桥。在一个二层网络中,根桥只有一个,其余设备都是非根桥。当网络的拓扑发生变化时,根桥也可能会发生变化。

图解 STP_第16张图片

网络中桥 ID 最小的交换机将成为根桥。在比较桥 ID 大小时,首先比较的是桥优先级,桥优先级的值最小的交换机选为根桥;如果桥优先级相同,那么会比较 MAC 地址,MAC 地址最小的交换机选为根桥。

图解 STP_第17张图片

3、根路径开销( Root Path Cost ,RPC )
STP 交换机每一个端口都对应一个开销值,这个值表示数据通过端口发送时的开销,这个值与端口带宽有关,带宽越高,开销值越小。对于端口开销值的定义有不同的标准,通常设备默认使用 IEEE 802.1t 中定义的开销值,同时还支持其它标准,以便兼容不同厂家的设备。

图解 STP_第18张图片

非根桥到达根桥可能有多条路径,每条路径都有一个总开销值,也就是根路径开销( RPC ),这个值是通过这条路径所有出端口的开销值累加而来的。STP 不会计算入端口的开销,只在数据通过端口发出时,才计算这个端口的开销。对于根桥来说,根路径开销是 0 。

图解 STP_第19张图片

4、端口 ID( Port ID ,PID )
运行 STP 的交换机使用端口 ID 标识每个端口,端口 ID 主要用于选举指定端口。端口 ID 长度为 16 比特,其中前 4 比特是端口优先级,后 12 比特是端口编号。在进行比较时,先比较端口优先级,优先级小的端口优先;在优先级相同时,再比较端口编号,编号小的端口优先。通常情况下,端口编号无法改变,可通过设置端口优先级来影响生成树的选路。

图解 STP_第20张图片

5、BPDU
STP 协议使用 BPDU 报文进行交互,BPDU 包含与 STP 协议相关的所有信息,并且使用这些信息来完成生成树的计算。BPDU 是组播帧,地址为 0180-c200-0000 ,并由 STP 交换机产生、发送、接收、处理,终端主机不参与。BPDU 分为两种类型:

配置 BPDU( Configuration BPDU ):在 STP 的初始化过程中,每台交换机都会产生并发送配置 BPDU 。在 STP 树形成后的稳定期,只有根桥才会周期性地发送配置 BPDU ;相应的,非根桥会从自己的根端口收到配置 BPDU ,并更新自己的配置 BPDU ,再从指定端口发送出去。这个过程看起来像根桥发出的配置 BPDU 逐跳的经过了其它交换机。

图解 STP_第21张图片

配置 BPDU 的参数详情如下:

图解 STP_第22张图片

拓扑变化通知 BPDU( Topology Change Notification BPDU ):简称 TCN BPDU ,是非根桥通过根端口向根桥发送的。当非根桥检测到拓扑变化后,就会生成一个描述拓扑变化的 TCN BPDU ,并从自己的根端口发送出去。

图片

STP 树的生成
STP 的基本原理是在一个有二层环路的网络中,交换机通过运行 STP ,自动生成一个没有环路的网络拓扑。这个无环网络拓扑也叫做 STP 树( STP Tree ),树节点为某些交换机,树枝为某些链路。当网络拓扑发生变化时,STP 树也会自动地发生相应的改变。

图解 STP_第23张图片

STP 树的生成过程是:首先选举根桥,然后确定根端口和指定端口,最后阻塞备用端口。既然是选举,我们就看下参选者和选举范围。

图解 STP_第24张图片

STP 是通过比较 BPDU 中的信息进行选举的,最终的结果是:

在整个 STP 网络中,唯一的一个根桥被选举出来;

对于所有的非根桥,选举出根端口和指定端口,负责转发数据;落选的端口就是备用端口,处于阻塞状态,不能转发数据。

图解 STP_第25张图片

1、选举根桥
根桥是 STP 树的根节点。要生成一棵 STP 树,首先要确定一个根桥。根桥是整个二层网络的逻辑中心,但不一定是物理中心。

在 STP 交换机刚连接到网络时,每台交换机都以自己为根桥,从所有启动的端口发送 BPDU ,宣告自己是根桥。收到 BPDU 的交换机会比较 BPDU 中的根桥 ID 与自己的根桥 ID ,选择根桥 ID 值小的配置成自己 BPDU 中的根桥 ID 。交换机不停地交互 BPDU ,同时对根桥 ID 进行比较,直至选出一台根桥 ID 最小的交换机作为根桥。根桥会在固定的时间间隔发送 BPDU ,其它设备对 BPDU 进行转发,从而保证网络拓扑的稳定。

图解 STP_第26张图片

根桥交换机往往会承担这个网络中最大流量的转发工作,我们希望性能最高的交换机当选根桥交换机。但是 STP 在选举时,并不会把交换机的性能列入考量。为了让网络流量更合理的转发,可以通过配置桥优先级的值来影响根桥的选举。

图解 STP_第27张图片

同时,根桥是可以抢占的,在 STP 完成网络收敛后,如果网络中接入一台新的交换机,且新增交换机的优先级比根桥交换机更优,那么新增交换机会成为网络中新的根桥。同时,STP 将会重新收敛、重新计算网络拓扑,这个过程会引发网络震荡,对流量的正常转发造成影响。

2、选举根端口( Root Port ,RP )
根桥选举出来后,其它没有成为根桥的交换机称为非根桥。STP 会为每个非根桥选举一个根接口,也就是在交换机的所有端口中,选择距离根桥最近的一个端口,这就是根端口。

在 STP 树形成后的稳定期,根桥依然会周期性的向网络中发送 BPDU ,而非根桥的根端口会收到 BPDU ,并向指定端口发送出去。

那是如何选择根端口的呢?根桥周期性的发送 BPDU ,非根桥的所有端口都能收到 BPDU ,对比端口收到的 BPDU 中的参数值。

图解 STP_第28张图片

选择根路径开销( RPC )最小的端口;

图解 STP_第29张图片

如果 RPC 相同,那就选对端桥 ID( BID )最小的端口;

图解 STP_第30张图片

如果对端桥 ID 相同,那就选对端端口 ID( PID )最小的端口。

图解 STP_第31张图片

准确的说,选举根端口的目的是选举出 STP 网络中每台交换机上与根交换机通信效率最高的端口。

3、选举指定端口( Designated Port ,DP )
根端口确保了交换机到根桥的路径是唯一的,也是最优的。网络中的每条链路与根桥之间的路径也要是唯一且最优的。当一条链路中有两条或两条以上的路径到达根桥,就必须确定出一个唯一的指定端口,防止出现二层环路。指定端口不但是这条链路内所有端口中到达根桥的最优接口,还会向链路内发送 BPDU 。

虽然选举指定端口的范围和根端口不同,但是选举的原则是一致的。指定端口的选举同样会按照以下过程进行:

图解 STP_第32张图片

选择根路径开销( RPC )最小的端口;

如果 RPC 相同,那就选对端桥 ID 最小的端口;

如果对端桥 ID 相同,那就选对端端口 ID 最小的端口。

图解 STP_第33张图片

如果有人不小心将同一台交换机上的两个端口用网线连接起来,网络中就会产生环路。选举指定端口就是为了预防这种错误连接导致环路的情况。当出现这种连接时,STP 会以端口 ID 较小的端口作为指定端口,从而打破环路。

为什么根桥交换机的所有端口都是指定端口呢?

因为根桥交换机端口的根路径开销都是 0 ,根据选择选举原则,成为这条链路的指定端口。

4、阻塞备用端口( Alternate Port ,AP )
在确定了根端口和指定端口后,交换机上剩下的非根端口和非指定端口都叫做备用端口。备用端口是打破环路的关键,STP 会对这些备用端口进行逻辑阻塞。逻辑阻塞,是指端口不会接收或发送任何数据,但是会监听 BPDU 。当网络的一些端口出现故障时,STP 会让备用端口开始转发数据,用来恢复网络的正常通信。

图解 STP_第34张图片

三种端口的异同如下:

图解 STP_第35张图片

一旦备用端口被逻辑阻塞后,STP 树的生成过程就完成了。

STP 端口状态机
STP 不但定义了 3 种端口角色:根端口、指定端口、备用端口,还讲定义了 5 种端口状态:禁用状态、阻塞状态、侦听状态、学习状态、转发状态。

图解 STP_第36张图片

STP 交换机的端口启动时,首先会从禁用状态自动进入到阻塞状态。在阻塞状态,端口只能接收和分析 BPDU ,不能发送 BPDU 。如果端口选为根端口或指定端口,则会进入侦听状态,这时端口可以接收并发送 BPDU ,这种状态会持续一个 Forward Delay 的时间,默认是 15 秒。15 秒后端口会进入到学习状态,并持续一个 Forward Delay 的时间。学习状态的端口可以接收和发送 BPDU ,同时开始进行 MAC 地址学习,为数据转发做好准备。最后,端口由学习状态进入到转发状态,就开始进行数据转发。在整个状态的迁移过程中,端口一旦关闭或发生链路故障,就会进入到禁用状态;如果端口不再是根端口或指定端口,那么端口状态会立刻退回到阻塞状态。

图解 STP_第37张图片

在 STP 的生成过程中,为什么要有两个 Forward Delay 时间?

在侦听状态有一个 Forward Delay 的时间,是因为 BPDU 泛洪到全网需要一定的时间,STP 完成全网拓扑的计算同样需要时间,所以停留 15 秒让 STP 有充分的时间计算全网拓扑,避免网络中出现临时的环路。在学习状态又有一个 Forward Delay 的时间,是由于交换机的接口上未学习到任何 MAC 地址,需要时间学习 MAC 地址,避免网络中出现不必要的数据帧泛洪现象。停留 15 秒,为进入转发状态做好准备。

STP 时间参数
STP 定义了 3 个重要的时间参数。

Hello Time( Hello 时间 ):STP 交换机发送配置 BPDU 的时间间隔,默认是 2 秒。如果要修改时间参数,那么必须在根桥上修改才有效。

Forward Delay(转发延迟):接口从侦听状态进入学习状态,或从学习状态进入转发状态的延迟时间,默认值是 15 秒。避免在 STP 树的生成过程中可能出现的临时环路,或短暂的数据帧泛洪现象,分别在侦听和学习的端口状态各停留一个转发延迟时间。对于 STP 而言,一个阻塞端口选举为根接口或指定接口后,进入转发状态至少需要经历 30 秒的时间。

Max Age(最大生存时间):BPDU 的最大生存时间,也称为 BPDU 的老化时间,Max Age 的值由根桥指定,默认值是 20 秒。如果端口在 20 秒内收到 BPDU ,最大生存时间会重新计时;如果端口一直没收到 BPDU ,那么 BPDU 将会老化,设备会重新在端口上选择最优 BPDU ,也就是重新进行根接口的选举。

由于时间参数的设计,一个 STP 接口从阻塞状态进入到转发状态,可能需要 30 ~ 50 秒的时间,这段时间内,网络无法正常使用。

举例说明
图片

交换机 A 、B 、C 一起启动,各交换机的每个互联端口立即从禁用状态进入到阻塞状态。在阻塞状态的端口只能接收而不能发送 BPDU ,所以任何端口都收不到 BPDU 。在等待 Max Age 后,每台交换机都会认为自己是根桥,所有端口的角色都成为指定端口,并且端口的状态迁移为侦听状态。

交换机的端口进入到侦听状态后,开始发送自己产生的配置 BPDU ,同时也收到其它交换机发送的配置 BPDU 。

因为各个交换机发送 BPDU 的时间有一定的随机性,所以有可能交换机 B 和交换机 C 先选举根桥为交换机 B ,再收到交换机 A 的配置 BPDU ,最后选举出根桥为交换机 A 。因此,无论交换机开始的状态如何,也不管中间过程有多大差异,最终的结果总是确定且唯一的:桥 ID 最小的交换机会成为根桥。

端口在侦听状态持续 Forward Delay 的时间后,开始进入学习状态。由于交换机 C 的 G0/2 端口已经成为备用端口,所以状态也会变成阻塞状态。

各个端口(交换机 C 的 G0/2 端口除外)陆续进入学习状态后,会持续 Forward Delay 的时间。在这段时间里,交换机开始学习 MAC 地址和端口的映射关系,同时希望 STP 树在这个时间内能够完全收敛。

之后各个端口(交换机 C 的 G0/2 端口除外)相继进入转发状态,开始进行数据帧的转发。

STP 的改进和代替技术
在实际应用中,STP 有很多不足之处,RSTP/MSTP 对 STP 进行了哪些改良?有哪些其它技术用来代替生成树技术?在这里插入图片描述

你可能感兴趣的:(网络)