本帖最后由 山东_朱文鑫 于 2022-9-24 23:18 编辑
大家好,我是大白,正所谓老当益壮,宁移白首之心?穷且益坚,不坠青云之志。优质的帖子也在尽力中提供,也希望各位道友多多支持,让我引劫渡劫成功哈哈哈。
大白队口号就是:砸锅卖铁我最行,拼死拼活就要赢!!!!!!!!!!!!
今天不做技术分享,鉴于之前发的技术原理之网络广播风暴、MAC地址表震荡的原理说明以及实验验证的分享贴,对于专家的指点以及大家们的私信要求尽快的发布STP生成树协议的帖子,那好本次分享的就是网络技术原理分享实验验证之STP生成树协议,整个的STP生成树协议包含STP、RSTP、MSTP这三个部分,这三部分也是STP生成树协议的演变历程,其知识点较多,所以我们分三部讲完,每一部我都尽可能的去用实验进行完成验证。
由前几天的技术原理分享的帖子我们说过,由于路由路径的不明确混乱会导致网络环境下的网络环路,我们也在实验讲解的过程中说过MSTP在交换机上面是默认开启的,我们进行关闭MSTP后进行的网络环路验证设置,开启后MSTP就正常的数据交互且设备的负载也就没那么高了。
那么STP生成树协议是什么?为什么能够进行网络环路的解决?以及为什么会有STP、RSTP、MSTP?以及原理是什么?等等,我们带着这些问题开启今天的分享。
为什么会引入生成树协议?
以太网中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络中产生环路,并导致广播风暴(<=广播帧 &交换机转发原理)以及MAC地址表不稳定(<=单播帧 &交换机学习原理&转发原理)等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol)。
生成树的作用是什么?
生成树协议,通过阻塞二层网络中的冗余链路,将网络修剪成树状,达到消除环路的目的;同时,当活动路径发生故障,生成树协议通过激活冗余链路,恢复网络通信。(作用:消除环路、链路备份)
生成树的发展历城
生成树协议STP的2种含义
狭义的生成树协议STP,是指IEEE802.1D中定义的STP协议。
广义的生成树协议STP,包括IEEE802.1D中定义的STP、IEEE802.1W中定义的RSTP和IEEE802.1S中定义的MSTP。
3种生成树协议:STP、RSTP和MSTP
MSTP:IEEE于2002年发布的802.1S标准定义了MSTP。MSTP把一个交换网络划分成多个域,每个域内形成多棵生成树实例,生成树实例之间彼此独立,同时,每个域都有一个生成树实例与VLAN映射表,每个生成树实例都对应着一个或多个VLAN,而每个VLAN只能属于一个生成树实例。MSTP不仅能实现消除环路和冗余路径的作用,同时在数据转发过程中能够实现VLAN数据的负载均衡(确切地说是多生成树实例间的负载均衡)。MSTP兼容STP和RSTP。
STP为了什么而存在?
我们就拿之前讲过的广播风暴、MAC地址不稳定【交换机SWA从一个端口接收到的是一个广播帧,则向所有其它端口直接转发,如果交换网络中有环路,则广播帧会被无限期的转发,网络中会充斥大量广播报文,形成广播风波。】
PCA向外发送一个单播数据帧,假设此数据帧的目的MAC在网络中所有交换机的MAC地址表中都暂时不存在。
PCA向外发送一个单播数据帧,假设此数据帧的目的MAC在网络中所有交换机的MAC地址表中都暂时不存在。SWA收到后,在MAC地址表中生成一个MAC地址表项,00-0D-56-BF-88-10,端口号为E0/2。由于SWA的MAC地址表中没有此数据帧目的MAC的表项,所以SWA将此数据帧从其它所有接口(E0/3和E0/4)转发。又因为SWB的MAC地址表中没有此数据帧目的MAC的表项,所以从E0/5接口接收到的该数据帧会从E0/6接口发回SWA。SWA从E0/4接收到此数据帧后,会更新MAC地址表,生成一个新的表项,00-0D-56-BF-88-10,端口号为E0/4。这样不但造成了MAC地址表不稳定,而且还生成了错误的表项。
STP是什么?
为解决交换网络中的环路问题以及由环路导致的广播风暴、MAC地址表不稳定等故障,提出了生成树协议STP(Spanning Tree Protocol)。STP是一个用于局域网中消除环路的协议,运行该协议的交换设备通过彼此交互信息而发现网络中的环路,并适当对某些端口进行阻塞以消除环路;同时还能提供链路备份功能。
在深入了解STP生成树协议之前我们需要进一步补充一点基础知识:
BID(即交换机标识):BID是由桥优先级(16b)和桥MAC(48b)构成的。 PID(端口标识):PID是由端口优先级(4b)和端口号(12b)构成的。 接口开销:交换机的每个接口都有一个接口开销参数,此参数表示数据从该接口发送时的开销值,也就是数据的出接口开销。STP认为从一个接口接收数据是没有开销的。接口开销的计算标准有3种,分别是802.1d,802.1t和华为私有标准,默认情况下采用802.1t标准。
STP中需要知道的名词:
RPC(根路径开销):有两种说法, 接口的根路径开销,指接口到根交换机的最小路径开销,即该路径上的所有出接口开销之和。 交换机的根路径开销,指交换机的各个接口到根桥的路径开销中最小的,也就是根端口到根桥的路径开销,也就是该路径上所有出接口开销之和。(大家可以以如下拓扑进行计算)
RB(根桥/根交换机):即BID最小的交换机。
RP(根端口):即去往根交换机路径开销最小的端口。 每个非根交换机都有且仅有一个根端口,根交换机上没有根端口; RP端口所在网段的上游端口一定是DP端口; 根端口的最终状态是转发状态,如果是STP模式,端口迁移到转发状态需要等待2个FD。
DP(指定端口):STP为每个网段选出一个指定端口,用于转发由根交换机发往该网段的数据,并且为每个网段转发发往根交换机方向的数据。 在根交换机上,所有的STP端口都是指定端口; 指定端口所在的交换机称为该网段的指定交换机; 指定端口的最终状态是转发状态,如果是STP模式,端口迁移到转发状态需要等待2个FD。
AP(预备端口):既不是根端口也不是指定端口的交换机端口称为预备端口,也称阻塞端口。预备端口不转发数据,处于阻塞状态。
STP的报文格式:
运行STP协议的设备彼此交互的信息是BPDU报文。
BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC:01-80-C2-00-00-00,Length/Type字段为MAC数据长度,后面是LLC,再之后是BPDU报文。
BPDU分为2大类,配置BPDU和TCN BPDU。 配置BPDU,是用来进行生成树计算和维护生成树拓扑的报文,周期性从指定端口发出; TCN BPDU,当拓扑结构发生变化时,下游设备通知上游设备拓扑结构发生改变;
类型:取值为0x00时为配置BPDU,取值为0x80时为TCN BPDU。
标志位flag:占用1个字节,STP协议只用到了最高位TCA和最低位TC。
RID:发送该配置BPDU的交换机所认为的根交换机的标识。
RPC:发送该配置BPDU的接口的RPC,即该接口到根交换机的路径开销。
BID:发送该BPDU的交换机标识。
PID:发送该BPDU的交换机端口的端口标识。
Message Age:该配置BPDU的年龄(即该配置BPDU消息存在了多久)。如果配置BPDU是根桥发出的,则此时Message Age为0;否则,Message Age是从根桥发出到当前桥接收到BPDU的总时间,包括传输延时等。但在实际实现中,配置BPDU报文经过一个桥,Message Age加1。
Max Age:配置BPDU在设备中的最大生存时间,默认是20秒。
Hello Time:配置BPDU发送的周期。
Forward Delay:端口状态listening和learning各自持续的时间。
STP的报文格式 – 配置BPDU
在STP初始化过程中,每个交换机都主动发送配置BPDU。但在网络拓扑稳定之后,只有根交换机主动发送配置BPDU,其它交换机收到上游传来的配置BPDU后,才触发发送自己的配置BPDU。配置BPDU在以下3种情况下会产生: 只要端口使能STP,配置BPDU就会按照Hello Time定时器规定的间隔从指定端口发出。(收敛之前) 当根端口收到配置BPDU时,根端口所在设备会向自己的每一个指定端口复制一份配置BPDU。(收敛之后) 当指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的配置BPDU。(场景:当一个网段有次优设备接入时,加速其计算端口角色的过程)
STP的报文格式 – TCN BPDU
TCN BPDU,指交换机感知到拓扑发生变化时向上游交换机发送的拓扑变化通知报文,直到根节点(默认2秒发送1次)。TCN BPDU在如下2种情况下会产生: 端口状态转变为Forwarding状态,且该设备上至少有一个指定端口。(场景:若SWB的RP端口发生故障,则其AP端口会被选举为新RP端口,迁移到Forwarding状态,满足TCN BPDU的触发条件。)
TCN BPDU,指交换机感知到拓扑发生变化时向上游交换机发送的拓扑变化通知报文,直到根节点(默认2秒发送1次)。TCN BPDU在如下2种情况下会产生:
端口状态转变为Forwarding状态,且该设备上至少有一个指定端口。。 指定端口收到TCN BPDU,会向根桥方向复制TCN BPDU。
STP的端口迁机制
STP的端口状态及迁移
为什么引入STP端口状态及迁移机制?
链路故障或者交换机某些配置信息(如BID、PID等)发生变化等,可能会引发网络重新进行生成树的计算(即重新选举端口角色等)。但是,用于重新计算的配置消息无法立刻传遍整个网络,或者说用于重新计算的配置消息无法同时传给所有网络设备,各网络设备接收到用于重新计算的配置消息的时间先后不一,所以各端口也不可能同时完成端口角色的转变。所以,当生成树重新计算时,如果新选出的根端口和指定端口立刻迁移到转发状态开始转发数据,而恰好原“转发状态”的接口还没有迁移到“不转发状态”(原因:比如,用于重新计算的配置消息还没到达),就可能出现临时环路。
结合图示案例理解可能出现的临时环路问题:图中,初始状态下,SWA为根交换机,SWD的E0/2口为预备端口,不转发数据,SWB的E0/2口为指定端口,转发数据。假设修改SWC的优先级,使SWC成为新的根交换机,SWD的E0/2口成为新的根端口,转发数据,SWB的E0/2口成为新的预备端口,不转发数据。如图所2示。如果在SWB的E0/2口变为“不转发数据”之前,SWD的E0/2口已经变为了“转发数据”,这时网络中会出现临时环路。
解决这种临时环路问题的思路是:在一个接口从不转发状态进入转发状态之前(例如本例中的SWD的E0/2口),需要等待一个足够长的时间,以使全网范围内需要进入不转发状态的端口有足够的时间完成生成树的计算(即端口角色的选举),进入不转发状态。为此,STP 引入了状态迁移机制,新选出的根端口和指定端口要经过2倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。
STP的端口状态及迁移
STP的5种端口状态
Disable:端口down时的状态;不转发用户流量,不学习MAC地址表,不接发BPDU报文。
Blocking:预备端口(阻塞端口)的最终状态;不转发用户流量、不学习MAC地址表、只接收但不发送BPDU报文。
Listening:过渡状态,用于选举根交换机,确定端口角色(根端口和指定端口等);端口不转发用户流量,不学习MAC地址表,接收并发送BPDU报文。
Learning:过渡状态,设备根据收到的用户流量构建MAC地址表;端口不转发用户流量,但学习构建MAC地址表,接收并发送BPDU报文。
Forwarding:根端口和指定端口的最终状态;该状态下端口正常转发用户流量,学习MAC地址表,接收并发送BPDU报文。
1:端口初始化或者使能(进入阻塞状态)
2:端口被选举为根端口或指定端口(进入侦听状态)
3:经过Forward Delay间隔,默认15秒
4:端口不再是根端口、指定端口或者指定状态
5:端口被禁用或者链路失效
影响端口状态和端口收敛的3个参数/定时器:
Hello time、Forward delay和max age,都需要在根交换机上配置,然后通过配置BPDU通告到全网。
(1)Hello Time 配置BPDU报文发送的时间间隔,主要用于检测链路是否存在故障。当网络拓扑稳定之后,该计时器的修改只有在根交换机修改后才有效。当拓扑改变之后,TCN BPDU的发送不受这个计时器的管理(TCN BPDU的发送间隔是2秒)。
(2)Forward Delay 一个端口处于 Listening 和 Learning 状态的各自持续时间,默认是 15秒。 生成树重新计算,新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成临时环路。为此,STP 采用了一种状态迁移机制,新选出的根端口和指定端口要经过2倍的Forward Delay延时后才能进入转发状态。
(3)Max Age 端口的BPDU报文的最大生存时间,默认为20秒。Max Age可在根桥上通过命令人为改变,并通过配置BPDU传输,保证Max Age在整网中一致。非根交换机收到配置BPDU报文后,报文中的Message Age和Max Age会进行比较:如果Message Age大于Max Age,则该配置BPDU报文将被老化,直接丢弃,可认为网络直径过大。
华为交换机设备的不同点
华为交换设备默认处于MSTP模式,当从MSTP模式切换到STP模式,STP端口支持的端口状态仍然和MSTP支持的端口状态一样,支持的状态仅包括Discarding、Learning和Forwarding。
华为交换机不再使用MaxAge来决定端口角色变化需要等待的超时时间。目前,华为交换机STP/RSTP的实现中,若收到次优BPDU,端口会立即处理并计算新的端口角色;若接收不到BPDU,端口角色也会在至少3个Hello间隔后重新计算。整个过程中MaxAge不再参与,加快了网络收敛速度。
STP的拓扑计算:
1、STP算法实现的基本过程
STP算法实现的基本过程是指,一开始,网络中使能STP的设备都认为自己是根桥,所有STP设备通过交换配置BPDU,进行选举工作,选出根桥、根端口和指定端口。 这个过程主要是通过配置BPDU的4个字段实现的,分别是RID、RPC、发送者BID和发送端口PID。这4个字段构成了消息优先级向量{RID、RPC、发送者BID、发送端口PID},用来标识配置BPDU的优先级。
(1)初始状态 由于每个桥都认为自己是根桥,所以在每个端口所发出的BPDU中,RID字段都是用各自的BID,RPC字段是0,发送者BID是自己的BID,发送者PID是发送该BPDU端口的PID。
(2)选择根桥 网络初始化时,网络中所有的STP设备都认为自己是“根桥”,RID字段为自身的BID。通过交换配置BPDU报文,设备之间比较RID字段,值最小者被选为根桥。
(3)选择根端口和指定端口
步骤1:非根设备将接收最优配置BPDU报文的那个端口定为根端口。
步骤2:设备根据根端口的配置BPDU和根端口的开销,为每个端口计算一个指定端口配置消息,具体信息如下:RID,替换为根端口配置BPDU的RID;RPC,替换为根端口配置BPDU的RPC与根端口开销相加之和;发送者BID,替换为自身设备的BID;发送端口PID,替换为自身端口PID。
步骤3:设备将计算出的指定端口配置消息与角色待定端口自己的配置消息进行比较:
如果计算出的指定端口配置消息更优,则该端口被确定为指定端口,其配置消息也被计算出的配置消息替换,并周期性向外发送;
如果该端口自己的配置消息更优,则将该端口阻塞,并且不更新该端口的配置消息。该端口将不再转发数据,且只接收不发送配置消息。
根桥的选举规则是:BID最小的交换机成为根桥。
根端口的选举规则是:依次比较各端口的RPC、发送者BID、发送端口PID和接收端口PID,较小者对应的端口成为根端口;
指定端口的选举规则是:依次比较所在交换机的RPC、所在交换机的BID和本端口的PID,较小者对应的端口成为指定端口。
拓扑稳定后: 根桥仍然按照Hello Timer规定的时间间隔发送配置BPDU报文,非根桥设备从根端口收到配置BPDU报文,通过指定端口转发。如果接收到优先级比自己高的配置BPDU,则非根桥设备会根据收到的配置BPDU中携带的信息更新自己相应的端口存储的配置BPDU信息。
拓扑发生变化(过程以及时长):
案例解析:
根桥发生了故障: 下游交换机就无法收到来自根桥的配置BPDU报文。当Max Age定时器超时后(默认20秒),就会导致接口存储的配置BPDU失效。这时,非根交换机会认为根桥失效了,进而重新选举新的根桥,进行生成树的计算。这个场景中,从根桥发生故障到网络重新收敛大概需要50秒。
直连链路故障 如果SWB检测到RP端口的直连链路发生故障,则RP端口消失,SWB的所有端口角色重新计算,并把自己当成根桥,端口初始为DP/阻塞,开始通告自己的BPDU。经过30秒后,网络完成重新收敛,AP端口被选举为RP端口。这个场景中,从直连链路发生故障到网络重新收敛大概需要30秒。
如果SWB检测到RP端口的直连链路发生故障,则RP端口消失,SWB的所有端口角色重新计算,并把自己当成根桥,端口初始为DP/阻塞,开始通告自己的BPDU。SWC的AP端口收到次优BPDU后不做处理,等到端口缓存的更优BPDU老化超时(20秒)后,重新进行收敛,默认经过30秒后进入转发状态。从直连链路发生故障到网络重新收敛大概需要50秒。
拓扑变化可能导致MAC地址表错误及解决办法
如果拓扑发生变化,通过STP算法网络重新进行收敛,端口状态发生迁移,数据在交换机上的转发路径也应该随着发生变化。但缺省情况下,网络重新收敛一般需要30秒或50秒,而MAC地址表项老化需要300秒,因此在网络重新收敛后,这个MAC地址表就是错误的,这个旧的错误的MAC地址表项会影响数据的正常通信。所以,在拓扑发生变化后需要及时更新MAC地址表项。为此,引入了拓扑变化通知机制,通过该机制使网络中的交换机尽快知道拓扑发生了变化,加快MAC地址表更新。
假如BID关系是SWA<SWB<SWC,网络稳定后,SWB的MAC转发表如图所示。如果SWC的根端口产生故障,生成树重新收敛,之后,从主机A到主机B的帧就不能到达目的地。这是因为生成树重新收敛了,数据实际转发路径发生了变化,而MAC地址表项未变(300秒老化时间),老化之前,主机A发往主机B的帧到达SWB后,SWB会继续通过端口G0/0/1转发该数据帧,进而在SWA处中断。MAC地址表错误最长可导致300S的数据转发故障。
解决办法:当交换机感知到拓扑变化后,通过拓扑变化通知机制,使拓扑改变的信息在整个网络内泛洪,接收到拓扑改变消息的交换机会修改MAC地址表项的生存期为一个较短的数值(STP规定这个较短值为Forward Delay时长),等待一定时间后,再恢复MAC地址表的生存期。
注意:在华为STP实现中,是直接清空MAC地址表,所以不需要改变MAC地址生存期。
如上图所示,当拓扑发生变化后,STP工作过程如下:
1)在网络拓扑发生变化后,下游设备会不间断地向上游设备发送TCN BPDU报文(TCN从RP端口发出,间隔2秒,不受根交换机Hello timer的影响)。
2)上游设备收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文,其它端口也可能收到TCN BPDU,但不会处理。
3)上游设备会把配置BPDU的Flags的TCA位置1,然后发送给下游设备,当作对TCN的确认,否则下游设备会一直发送TCN报文。
4)同时,上游设备复制一份TCN BPDU报文,向根桥方向发送。
5)重复上述4个步骤,直到根桥收到TCN BPDU报文。
6)根桥收到TCN BPDU报文后,首先发送一个TCA置位、TC置位的配置BPDU报文(TCA置位是用于确认,告诉下游交换机停止发送TCN),泛洪到全网,其它交换机接收到后会将MAC地址表的生存时间修改为Forward Delay时长。(通过实验观察发现,华为STP实现时,将MAC地址表直接清空)
7)之后,根桥持续发送TC置位的BPDU,时间为Forward Delay+Max Age,默认35秒。
华为STP相对于标准的STP有部分改动:
华为STP实现中,若RP端口失效,最优的AP端口会立即成为RP端口,但STP状态迁移仍需30秒。
华为STP实现中,接收BPDU的端口若收到次优BPDU,会立即重新计算端口角色。这样虽然容易引起网络的振荡,但收敛时间减少了。
华为STP实现中,若端口收不到配置BPDU,等待至少3个Hello时间间隔,端口角色重新计算,不再等待MaxAge。可降低网络重新收敛所需要的时间。
华为STP实现中,拓扑改变通知机制也与标准STP不同。华为STP实现中,触发产生TCN是当端口(非边缘端口,华为STP可以配置边缘端口)进入转发状态时,而端口Down时并不会触发产生TCN(因为端口Down时,触发TCN没有意义);当TC置位的BPDU被交换机收到后,将交换机的桥表清空,这种方法能及时清除错误的MAC表项,但会导致网络产生过多的单播泛洪报文。
以华为交换机为案例的说明:
根桥故障
如果根桥发生了故障,下游交换机就无法收到来自根桥的配置BPDU报文。连续3次Hello时间间隔后,就会导致接口存储的配置BPDU失效。这时,非根交换机会认为根桥失效了,进而重新选举新的根桥,进行生成树的计算。这个场景中,从根桥发生故障到网络重新收敛大概需要3Hello+30秒。
直连链路故障
如果SWB检测到RP端口的直连链路发生故障,则RP端口消失,AP端口立即成为RP端口,状态为Discarding,不需要重新计算角色,但STP状态迁移所需时间为30秒。这个场景中,从直连链路发生故障到网络重新收敛大概需要30秒。
如果SWB检测到RP端口的直连链路发生故障,则RP端口消失,SWB的所有端口角色重新计算,并把自己当成根桥,端口初始为DP/阻塞,开始通告自己的BPDU。SWC的AP端口收到次优BPDU后立即发回自己的配置BPDU,重新进行收敛,默认经过30秒后进入转发状态。从直连链路发生故障到网络重新收敛大概需要30秒。
STP知识点比较多,所以要学习就需要耐心去学习,以上就是STP的知识,以案例为基础,大家可以自行根据我的叙述进行研究,思路打通了这个也就不难了。
以上就是本次的网络技术原理详解分享之STP(Spanning Tree Protocol)生成树协议基础补充篇,感谢大佬们的参阅,此贴先到这里后续会带上更加实用的帖子,感谢大家!
励志分享超清壁纸语句~~:
读书时,我愿在每一个美好思想的面前停留,就像在每一条真理面前停留一样。——爱默生
好的今天就到这里,老样子,感谢各位大神的参阅,孩子为了挣豆子不容易,孩子家里穷没豆子吃饭了!!! |