STP(生成树协议)研究(1):概述、产生背景、基础知识

一、概述

(一)为什么引入生成树协议

以太网中,为了进行链路备份,提高网络可靠性,通常会使用冗余链路但是使用冗余链路会在交换网络中产生环路,并导致广播风暴(<=广播帧或未知单播帧 &交换机转发原理)以及MAC地址表不稳定(<=广播帧或未知单播帧 &交换机学习原理&转发原理)等故障现象,从而导致用户通信质量较差,甚至通信中断。为解决交换网络中的环路问题,提出了生成树协议STP(Spanning Tree Protocol)。

(二)生成树协议是什么(从作用的角度概述)

生成树协议通过阻塞冗余链路,将网络修剪成树状,达到消除环路的目的;同时,当活动路径发生故障,生成树协议通过激活冗余链路,恢复通信(作用:消除环路、链路备份

(三)生成树协议的发展历程

1、生成树协议STP的2种含义

  1. 狭义的生成树协议STP,是指IEEE802.1D中定义的STP协议。
  2. 广义的生成树协议STP,包括IEEE802.1D中定义的STP、IEEE802.1W中定义的RSTP和IEEE802.1S中定义的MSTP。

2、3种生成树协议

目前,生成树协议支持如下:

(1)STP

IEEE于1998年发布的802.1D标准定义了STP。

STP是数据链路层的管理协议,用于二层网络的环路检测和预防。STP可阻塞二层网络中的冗余链路,将网络修剪成树状,达到消除环路的目的

但是,STP拓扑收敛速度慢,即使是边缘端口也必须等待2倍forward delay的延迟(缺省为30S),端口才能迁移到转发状态

(2)RSTP

IEEE于2001年发布的802.1W标准定义了RSTP。

RSTP在STP的基础上进行了改进,实现了网络拓扑快速收敛

RSTP和STP还存在一个共同的缺陷:由于局域网内所有的VLAN共享一棵生成树,因此,无法在VLAN间实现数据流量的负载均衡,还有可能造成部分VLAN的报文无法转发

RSTP向下兼容STP协议,可以混合组网。

(3)MSTP

IEEE于2002年发布的802.1S标准定义了MSTP。

MSTP把一个交换网络划分成多个,每个域内形成多棵生成树实例,生成树实例之间彼此独立,同时,每个域都有一个生成树实例与VLAN映射表每个生成树实例都对应着一个或多个VLAN,而每个VLAN只能属于一个生成树实例

MSTP不仅能实现消除环路冗余路径的作用,同时在数据转发过程中能够实现VLAN数据的负载均衡(确切地说是多生成树实例间的负载均衡)

MSTP兼容STP和RSTP。

 

 

3、3种生成树协议比较

生成树协议

特点

应用场景

STP

形成一棵无环路的树:解决广播风暴、MAC地址表不稳定,并实现冗余备份。

总结:消除环路;冗余路径

无需区分用户或业务流量(即无需划分VLAN),所有VLAN共享一棵生成树。

RSTP

形成一棵无环路的树:解决广播风暴、MAC地址表不稳定,并实现冗余备份;且收敛速度快。

总结:+收敛速度快

MSTP

形成一棵无环路的树:解决广播风暴、MAC地址表不稳定,并实现冗余备份;收敛速度快;多棵生成树在VLAN间实现负载均衡,不同VLAN的流量按照不同的路径转发。

总结:+可以实现VLAN数据的负载均衡

需要区分用户或业务流量(即划分VLAN),并实现负载分担不同的VLAN通过不同的生成树转发流量,每棵生成树之间相互独立。

 

总结记忆1-为什么:可靠性、冗余链路,环路、广播风暴、MAC地址表不稳定,STP

总结记忆2-是什么(作用):阻塞冗余链路,消除环路;故障时,激活冗余链路,恢复通信

总结记忆3-发展历程:狭义&广义STP;三种协议的发展历程(作用、缺陷和改进)

 

二、STP(狭义)

(一)STP出现的背景(为什么,是什么)

以太网交换网络中为了进行链路备份,提高网络可靠性,通常会使用冗余链路。但是使用冗余链路会在交换网络中产生环路,并导致广播风暴(广播帧或未知单播帧&交换机转发原理)以及MAC地址表不稳定(单播帧&交换机学习原理&转发原理)等故障现象,从而导致用户通信质量较差。

  1. 广播风暴

根据交换机的转发原则,如果交换机从一个端口上接收到的是一个广播帧,或者是一个目的MAC地址未知的单播帧,则会将这个帧向除源端口之外的所有其他端口转发。如果交换网络中有环路,则这个帧会被无限转发,此时便会形成广播风暴,网络中也会充斥着重复的数据帧

如下图所示,假如主机A向外发送了一个单播帧,并且此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在(即未知单播帧)。SWB接收到此帧后,将其转发到SWA和SWC,SWA和SWC也会将此帧转发到除了接收此帧的其他所有端口,结果此帧又会被再次转发给SWB,这种循环会一直持续,于是便产生了广播风暴。交换机性能会因此急速下降,并会导致业务中断

STP(生成树协议)研究(1):概述、产生背景、基础知识_第1张图片

 

  1. MAC地址表振荡(或称MAC地址表不稳定)

根据交换机的学习和转发原理,如果交换网络中有环路,则广播帧或未知单播帧会被无限转发,交换机的MAC地址表就会发生振荡

以下图为例,主机A向外发送一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在(即未知单播帧)。SWB收到此数据帧之后,在MAC地址表中生成一个MAC地址表项,00-01-02-03-04-AA,对应端口为G0/0/3,并将其从G0/0/1和G0/0/2端口转发。仅以SWB从G0/0/1端口转发此帧为例进行说明。SWA接收到此帧后,由于MAC地址表中没有对应此帧目的MAC地址的表项,所以SWA会将此帧从G0/0/2转发出去。SWC接收到此帧后,由于MAC地址表中也没有对应此帧目的MAC地址的表项,所以SWC会将此帧从G0/0/2端口发送回SWB,也会发给主机B。SWB从G0/0/2接口接收到此数据帧之后,会在MAC地址表中删除原有的相关表项,生成一个新的表项,00-01-02-03-04-AA,对应端口为G0/0/2此过程会不断重复,从而导致MAC地址表震荡

STP(生成树协议)研究(1):概述、产生背景、基础知识_第2张图片

为解决交换网络中的环路问题以及由环路导致的广播风暴、MAC地址表振荡等故障,提出了生成树协议STP(Spanning Tree Protocol)。

STP是一个用于局域网中消除环路的协议。运行该协议的交换设备通过彼此交互信息而发现网络中的环路,并适当对某些端口进行阻塞(即阻塞冗余链路)以消除环路

 

总结记忆1:为什么引入STP;是什么(作用角度:阻塞冗余链路、消除环路)

 

(二)STP的基本知识

1、STP的基本概念(回顾)

(1)BID(即交换机标识或桥标识)

IEEE802.1D标准中规定,BID是由桥优先级(16b)和桥MAC(48b)构成的。

主要用来进行根交换机选择、根端口选择、指定端口选择等。

BID越小越优先。

(2)PID(端口标识)

规定,PID是由端口优先级(4b)和端口号(12b)构成的。

主要用来进行根端口选择、指定端口选择等。

PID越小越优先。

(3)接口开销(Port Cost)

交换机的每个接口都有一个接口开销参数,此参数表示数据从该接口发送时的开销值,也就是数据的出接口开销

STP认为从一个接口接收数据是没有开销的

接口的开销和接口的带宽有关,带宽越高,开销越小

接口开销的计算标准有3种,分别是802.1d,802.1t和华为私有标准默认情况下采用802.1t标准。下图是各标准下的端口速率与开销值的对应关系表。(1000M<->20000

STP(生成树协议)研究(1):概述、产生背景、基础知识_第3张图片

(4)RPC(根路径开销)

有两种说法:

接口的根路径开销,指接口到根交换机的最小路径开销,即从接口到根交换机最小路径上的所有出接口开销之和

交换机的根路径开销,指交换机的各个端口到根桥的路径开销中最小的,也就是根端口到根桥的路径开销,也就是该路径上所有出接口开销之和。

说明:如果没明确指定的话,我们认为RPC就是交换机的根路径开销。

(5)RB(根桥/根交换机)

树形的网络结构必须有树根,于是STP引入了根桥(Root Bridge)的概念。

对于一个STP网络,根桥在全网中只有1个,它是整个网络的逻辑中心,但不一定是物理中心,根桥会根据网络拓扑的变化而变化。

根桥,就是BID最小的交换机,通过交互配置BPDU报文选出最小的BID

(6)根端口

根端口,就是去往根交换机路径开销最小的端口,即在一台设备上所有使能STP的端口中,到根交换机的路径开销最小者就是根端口。

根端口的一些特点:

每个非根交换机都有且仅有一个根端口,根交换机上没有根端口;

RP端口所在网段的上游端口一定是DP端口;

在进行端口角色计算过程中,先确定RP端口角色,再确定其他端口角色;

根端口的最终状态是转发状态,如果是STP模式,端口迁移到转发状态需要等待2个FD。

(7)指定端口

STP为每个网段选出一个指定端口,用于转发由根交换机方向发往该网段的数据,并且为每个网段转发发往根交换机方向的数据

指定端口的一些特点:

在根交换机上,所有的STP端口都是指定端口;

指定端口所在的交换机称为该网段的指定交换机;

指定端口的最终状态是转发状态,如果是STP模式,端口迁移到转发状态需要等待2个FD。

(8)预备端口(Alternate Port)

既不是根端口也不是指定端口的交换机端口称为预备端口,也称阻塞端口。

预备端口不转发数据,处于阻塞状态。

2、STP报文

运行STP协议的设备彼此交互的信息是BPDU报文。

BPDU报文被封装在以太网数据帧中,目的MAC是组播MAC01-80-C2-00-00-00,Length字段为MAC数据长度,后面是LLC头,IEEE为STP保留了DSAP和SSAP为0x42的值,Control为0x03,LLC之后是BPDU报文头。

STP(生成树协议)研究(1):概述、产生背景、基础知识_第4张图片

 

 

BPDU分为2大类,配置BPDU和拓扑改变通告BPDU。

(1)配置BPDU(作用;产生;格式)

配置BPDU是一种心跳报文,只要端口使能STP,则配置BPDU就会按照Hello timer周期性从指定端口发出(注意初始化和稳定后的区别);用来进行生成树计算和维护生成树拓扑

配置BPDU在以下3种情况下会产生:

  1. 收敛之前或初始化阶段:只要端口使能STP,配置BPDU就会按照Hello Time定时器规定的间隔从指定端口发出。
  2. 收敛之后或稳定后:只有根交换机主动发送配置BPDU;其它交换机的根端口收到配置BPDU后,会向自己的所有指定端口发送自己的配置BPDU
  3. 指定端口收到比自己差的配置BPDU时,会立刻向下游设备发送自己的配置BPDU。

(此机制可加速一个网段有次优设备接入时,加速其计算端口角色的过程。场景:两个交换机之间通过集线器相连,又加入了一个次优交换机,就会触发此机制)

 

另外,只有当发送者的BID或端口的PID两个字段中至少有一个和本交换机接收端口不同,BPDU报文才会被处理,否则丢弃。这样避免了处理和本端口信息一致的BPDU报文。

配置BPDU中包含了足够的信息来保证完成生成树的计算。其报文格式如下:

  1. 协议:固定为0。
  2. 版本:固定为0。
  3. 类型:取值为0x00时为配置BPDU,取值为0x80时为TCN BPDU。
  4. 标志位flag:占用1个字节,STP协议只用到了最低位TC和最高位TCA。
  5. RID:根桥ID,即发送该配置BPDU的交换机所认为的根交换机的BID。
  6. RPC:根路径开销,即发送该配置BPDU的交换机的RPC

说明:对于发送者来说,发送了一个配置BPDU,则里面的RPC是指发送该配置BPDU的交换机的RPC;对于接收者来说,接收到一个配置BPDU,则接收端口会将报文里的RPC与本端口的开销相加,得出接口的RPC)

  1. BID:指定交换机ID,即发送该BPDU的交换机标识。
  2. PID:指定端口ID,即发送该BPDU的交换机端口的端口标识。
  3. Message Age:该配置BPDU的年龄(即该配置BPDU消息存在了多久)。如果配置BPDU是根桥发出的,则此时Message Age为0;否则,Message Age是从根桥发出到当前桥接收到BPDU的总时间,包括传输延时等。但在实际实现中,配置BPDU报文经过一个桥,Message Age增加1。(后面再详细介绍,包括下面的3个字段)
  4. Max Age:配置BPDU在设备中的最大生存时间。
  5. Hello Time:指明了配置BPDU发送的周期。
  6. Forward Delay:端口状态迁移时间,也即端口状态listening和learning各自持续的时间。

(2)TCN BPDU

拓扑改变通告BPDU(即TCN BPDU),在设备检测到网络拓扑发生变化时才发出;用于通知上游设备拓扑结构发生改变了

TCN BPDU,指交换机感知到拓扑发生变化后向上游交换机发送的拓扑变化通知报文,直到根节点(默认2秒发送1次)。TCN BPDU在如下两种情况下会产生:

  1. 端口状态转变为Forwarding状态,且该设备上至少有一个指定端口(后半句在HedEx S12700中被删除了;个人认为,后半句没有也能产生)(场景:若SWB的RP端口发生故障,则其AP端口会被选举为新RP端口,迁移到Forwarding状态,满足TCN BPDU的触发条件。

STP(生成树协议)研究(1):概述、产生背景、基础知识_第5张图片

 

  1. 指定端口收到TCN BPDU,会向根桥方向复制TCN BPDU

 

扩展-------------------------------------------------

问题:华为S5700的STP下,发生故障的交换机会触发产生TCN BPDU?

猜测:发生故障的交换机并不一定触发产生TCN BPDU。

论证(实验采用华为S5700的STP):如下图所示,当SWB的RP故障,通过配置BPDU的交互重新进行STP计算,最终SWB的原DP端口变为RP端口,SWC的原AP端口变为DP端口。通过实验观察发现(华为STP):SWB不会触发产生TCN BPDU,SWC触发产生了TCN BPDU。

总结:在华为S5700的STP下,发生故障的交换机并不一定会触发TCN BPDU。

STP(生成树协议)研究(1):概述、产生背景、基础知识_第6张图片

 

报文的格式和作用是互相关联的。由于TCN BPDU只是通知上游交换机拓扑发生改变,所以TCN BPDU报文的格式非常简单,只有协议号、版本和类型3个字段。

 

3、STP端口状态及迁移

(1)为什么引入STP端口状态迁移机制

(或者说为什么RP/DP端口需要等待2倍的FD才迁移到转发状态?立即迁移到转发状态有什么问题?)

链路故障或者交换机某些配置信息(如BID、PID等)发生变化等,可能会引发网络重新进行生成树的计算(即重新选举端口角色等)。但是,用于重新计算的配置消息无法立刻传遍整个网络,或者说用于重新计算的配置消息无法同时传给所有网络设备,各网络设备接收到用于重新计算的配置消息的时间先后不一,所以各端口也不可能同时完成端口角色的转变。所以,存在这么一种情况:当生成树重新计算时,如果新选出的根端口和指定端口立刻迁移到转发状态开始转发数据,而恰好原“转发状态”的接口还没有迁移到“不转发状态”(原因:比如用于重新计算的配置消息还没到达),就可能出现临时环路。

结合以下案例理解可能出现的临时环路问题:

STP(生成树协议)研究(1):概述、产生背景、基础知识_第7张图片

上图中,初始状态下,SWA为根交换机,SWD的E0/2口为预备端口,不转发数据,SWB的E0/2口为指定端口,转发数据。假设修改SWC的优先级,使SWC成为新的根交换机,SWD的E0/2口成为新的根端口,转发数据,SWB的E0/2口成为新的预备端口,不转发数据。如下图所示。

STP(生成树协议)研究(1):概述、产生背景、基础知识_第8张图片

如果在SWB的E0/2口变为“不转发数据”之前,SWD的E0/2口已经变为了“转发数据”,这时网络中会出现临时环路。

解决这种临时环路问题的思路是:在一个接口从不转发状态进入转发状态之前(例如本例中的SWD的E0/2口),需要等待一个足够长的时间,以使全网范围内需要进入不转发状态的端口有足够的时间完成生成树的计算(即端口角色的选举),进入不转发状态。

为此,STP 引入了状态迁移机制,新选出的根端口和指定端口要经过2倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。

(关于为什么是2倍的Forward delay,即默认30秒?华为官方文档没有给出答案,网上有一种说法,参考https://wenku.baidu.com/view/b7d601f85ef7ba0d4a733b58.html

下面就看一看STP协议中端口状态和迁移机制。

(2)STP的5种端口状态

运行STP协议的设备上端口状态有5种:Disabled、Blocking、Listening、Learning、Forwarding。(如下是HedEx原表)

端口状态

目的

说明

Forwarding

端口既转发用户流量也处理BPDU报文。

只有根端口或指定端口才能进入Forwarding状态。

Learning

设备会根据收到的用户流量构建MAC地址表,但不转发用户流量。

过渡状态,增加Learning状态防止临时环路。

Listening

确定端口角色,将选举出根桥、根端口和指定端口。

过渡状态。

Blocking

端口仅仅接收并处理BPDU,不转发用户流量。

阻塞端口的最终状态。

Disabled(第四堡)

端口不仅不处理BPDU报文,也不转发用户流量。

端口状态为Down

解读:

  1. Disable:端口down时的状态;该状态下端口不转发用户流量,不学习MAC地址表,不接发BPDU报文。
  2. Blocking:预备端口(阻塞端口)的最终状态;该状态下端口不转发用户流量、不学习MAC地址表、只接收但不发送BPDU报文。
  3. Listening:过渡状态,用于选举根交换机,确定端口角色(根端口和指定端口等);该状态下端口不转发用户流量,不学习MAC地址表,接收并发送BPDU报文。
  4. Learning:过渡状态,设备根据收到的用户流量构建MAC地址表;该状态下端口不转发用户流量,但学习构建MAC地址表,接收并发送BPDU报文。
  5. Forwarding:根端口和指定端口的最终状态;该状态下端口正常转发用户流量,学习MAC地址表,接收并发送BPDU报文。

(3)端口状态迁移/转换

端口状态迁移机制如下图:(下图来自HedEx/S12700,与IA PPT和HedEx/S5700一致)

 

  1. 使能stp
  2. 选举端口角色,进入listening状态,即不学习Mac地址也不转发流量
  3. 经过一个forward delay后进入learning状态,学习Mac地址且不转发数据
  4. 经过一个forward delay 后进入forwarding状态

STP(生成树协议)研究(1):概述、产生背景、基础知识_第9张图片

(4)影响端口状态和端口收敛的3个参数/定时器

这3个参数/定时器是Hello time、Forward delay和max age,都需要在根交换机上配置,然后通过配置BPDU通告到全网

  1. Hello Time配置BPDU报文发送的时间间隔,用于检测链路是否存在故障当网络拓扑稳定之后,该计时器的修改只有在根交换机修改后才有效。新的根交换机会在发出的BPDU报文中填充适当的字段以向其它非根交换机传递该计时器修改的信息。但当拓扑改变之后,TCN BPDU的发送不受这个计时器的管理(TCN BPDU的发送间隔是2秒)
  2. Forward Delay。Forward Delay Timer指一个端口处于 Listening 和 Learning 状态的各自持续时间,默认是 15秒。即 Listening 状态持续 15 秒,随后 Learning 状态再持续 15 秒。这两个状态下的端口不转发用户流量,这正是 STP 用于避免临时环路的关键。

链路故障会引发网络重新进行生成树的计算,生成树的结构将发生相应的变化。但是重新计算得到的新配置消息无法立刻传遍整个网络,如果新选出的根端口和指定端口立刻就开始数据转发的话,可能会造成临时环路。为此,STP 采用了一种状态

迁移机制,新选出的根端口和指定端口要经过2倍的Forward Delay延时后才能进入转发状态,这个延时保证了新的配置消息传遍整个网络,从而防止了临时环路的产生。(这也是为什么引入状态迁移机制的原因)

  1. Max Age端口的BPDU报文的最大生存时间,默认为20秒Max Age可在根桥上通过命令人为改变,并通过配置BPDU传输,保证Max Age在整网中一致

非根交换机收到配置BPDU报文后,报文中的Message Age和Max Age会进行比较:如果Message Age小于Max Age,则该非根交换机继续转发配置BPDU报文;如果Message Age大于Max Age,则该配置BPDU报文将被老化。该非根交换机直接丢弃该配置BPDU,可认为网络直径过大

延伸--关于Message Age它是从根桥发出到当前交换机接收到BPDU的总时间,包括传输延时等。配置BPDU从根桥发出时,Message Age为0。在实际实现中,配置BPDU报文每经过一个交换机,Message Age增加1。如下图所示:

STP(生成树协议)研究(1):概述、产生背景、基础知识_第10张图片

(5)华为交换设备的不同点(了解即可)

华为交换设备默认处于MSTP模式,当从MSTP模式切换到STP模式,STP端口支持的端口状态仍然和MSTP支持的端口状态一样,支持的状态仅包括Discarding、Learning和Forwarding

华为交换机不再使用MaxAge来决定端口角色变化需要等待的超时时间。目前,华为交换机STP/RSTP的实现中,若收到次优BPDU,端口会立即处理并计算新的端口角色若接收不到BPDU,端口角色也会在至少3个Hello间隔后重新计算整个过程中MaxAge不再参与,加快了网络收敛速度

 

总结记忆1-基本概念:BID、PID、接口开销、RPC;RB、根端口、指定端口、预备端口

总结记忆2-报文格式:图;配置BPDU-何时产生、格式;TCN BPDU-何时产生(2个图)

总结记忆3-端口状态及迁移:

  1. 为什么引入端口状态及迁移机制(结合图,理解可能产生的问题及解决思路)
  2. 5种端口状态(临时/最终状态;转发数据、MAC学习、接发BPDU)
  3. STP端口状态机(结合图,复述过程)
  4. 3个参数/定时器(是什么;默认值;作用)---只有根交换机能修改

你可能感兴趣的:(网络,路由交换,路由协议,stp,网络,交换机,huawei)