二层环路导致的问题
1、广播风暴,交换机转发BUM报文的机制导致,数据帧没有防环机制。
BUM报文是指(B: boradcast、U:未知DMAC单播帧、M:组播)
2、 mac地址表震荡,生成错误MAC地址表项, 导致转发出现错误
3、重复数据帧接收,如果存在大量的广播帧,导致网络性能下降甚至是不可用,终端设备也会消耗大量CPU资源处理广播。
STP协议的所有角色都是通过比较BPDU的参数选举出来的。
STP定义每个交换机都有一个BID来标识自己。
BID=pri+mac
pri默认值32768
pri取值有2种标准
1、0-65535
2、0-61440 华为采用0-61440,但pri取 值必须是4096倍数。
ROOT桥:发送最好BPDU的交换机。
RP(根端口) :非根桥上接收最好BPDU的端口
DP(指定端口):链路.上发送最好BPDU的端口
AP(备用端口):即不是RP也不是DP的端口,被block。
DP端口要么对着RP,要么对着AP;RP的对端一定是DP。
什么是最好的BPDU?
BPDU中4个选举参数
RID:当前根桥的BID
RPC:对于根桥来说RPC永远等于0,对于非根桥来说RPC是自己根端口到根桥的路径开销之和。
BID:发送BPDU设备的BID
PID:由端口优先级+端口id组成,优先级的取值为0-240,默认值128,取16的倍数。
最好BPDu的选举机制:
1、比较RID ,RID越小越优
2、如果RID相同,则比较RPc路径和,越小越优
3、如果RPC路径和相同,则比较BID,越小越优
4、如果BID相同,则比较PID,越小越优
5、如果PID相同,则比较自身PID (特殊场景下,比如接个HUB)
非根桥根据根端口的配置消息计算DP端口的配置消息。
STP算法实现的基本过程
初始状态
由于每个桥都认为自己是根桥,所以在每个端口所发出的BPDU中,根桥字段都是用各自的BID,Root Path Cost字段是累计的到根桥的开销,发送者BID是自己的BID,端口PID是发送该BPDU端口的端口ID。
选择根桥
网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的设备ID。通过交换配置消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。
选择根端口和指定端口
根端口和指定端口的选择过程如表1所示。
步骤 |
过程 |
---|---|
1 |
非根桥设备将接收最优配置消息(最优配置消息的选择过程如表2所示)的那个端口定为根端口 |
2 |
设备根据根端口的配置消息和根端口的路径开销,为每个端口计算一个指定端口配置消息:
|
3 |
设备将计算出的配置消息与角色待定端口自己的配置消息进行比较:
|
步骤 |
过程 |
---|---|
1 |
每个端口将收到的配置消息与自己的配置消息进行比较:
|
2 |
设备将所有端口的配置消息进行比较,选出最优的配置消息 |
STP算法实现举例
一旦根桥、根端口和指定端口选举成功,整个树形拓扑就建立完毕了。下面结合例子说明STP算法实现的具体过程。
图1 STP算法实现过程组网图及计算后的拓扑
-------[CIST Global Info][Mode MSTP]------- stp协议的模式
CIST Bridge :32768.4c1f-cc15-4234 交换机自身的BID
Config Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20 管理员配置的时间参数
Active Times :Hello 2s MaxAge 20s FwDly 15s MaxHop 20 设备实际实施的时间参数
CIST Root/ERPC :32768.4c1f-cc15-2166 / 20000 根桥BID,如果该值和自身的BID相同,则该交换机为根桥,/ERPC 根端口到根桥的RPC(路径开销),根桥为0
CIST RegRoot/IRPC :32768.4c1f-cc15-4234 / 0 对于STP协议来说无意义,用于MSTP中
CIST RootPortId :128.2 根端口(端口2),根桥为0
BPDU-Protection :Disabled
TC or TCN received :9
TC count per hello :0
STP Converge Mode :Normal
Time since last TC :0 days 17h:18m:52s
Number of TC :10
forwarding :转发数据,学习MAC地址,处理BPDU
learning :不转发数据,学习MAC地址,处理BPDU
listening :不转发数据,不学习MAC地址,处理BPDU
blocking :不转发数据,不学习MAC地址,接受BPDU
disable :接口被down
稳定的STP网络只有2种状态,既forwarding和blocking
一个blocking状态的RP过着DP至少需要30秒才能进入到forwarding状态
1、非根桥的RP失效,并存在AP时,AP成为新的RP,并经历30s进入转发状态。
2、非根桥的RP失效,但不存在AP时,此时交换机认为自己失去了到根桥的所有路径,于是该交 换机将自身作为根桥,发送以自己为根的BPDU;下游交换机需要等待20s将之前的BPDU老 化, 再处理该BPDU,此时需要50s恢复网络。(标准STP是需要等待20s的老化时间 ,华为 的STP改进后,不会等待20s的老化时间,而是收到该BPDU后会立即处理该BPDU)
3、非根桥的RP正常,但是因为间接链路故障导致收不到BPDU(根端口到根桥中间有个HUB,根桥到HUB之间的链路故障),是需要等待20s的老化时间后,交换机认为自己失去了到根桥的所有路径,于是该交换机将自身作为根桥,发送以自己为根的BPDU;因为RP收不到BPDU,下游交换机也是收不到BPDU的,相当于下游交换机也间接性的共同等待20s的老化时间,所以直接处理该BPDU,此时需要50s恢复网络。
网络中发生拓扑变化时,例如链路中断或接口异常Down等情况,由于MAC地址的老化时间的存在(缺省为5分钟),如果不及时通知上游设备,则可能会导致上游设备的报文在这段时间内一直向一个不可达的链路发送。如图1所示,正常情况下,S1和S2之间的链路被阻塞,由A到B的流量依次流经S1、S3、S4和S2。如果S3和S4之间的链路发生故障,流量则由S1直接转发到S2,但是在S1上,仍然存在指向S3的MAC地址表项,因此在此MAC地址表项老化前,流量还会转发给S3,这样就可能导致流量的丢失。此时就需要拓扑变化机制来将拓扑的变更及时通知到整个STP网络。
图1 MAC地址未老化导致流量丢失
STP拓扑变化处理过程如图2所示。
图2 TCN的发送和TC的泛洪
PS:
TCA = 0 TC = 0 表示:周期性发送的BPDU(默认2秒)
TCA = 1 TC = 0 表示:确认TCN 配置BPDU(告诉下游我收到了,不要发TCN了)
TCA = 0 TC = 1 表示:TC 配置BPDU
TCA = 1 TC = 1 表示既是:确认TCN 配置BPDU,也是 TC 配置BPDU
STP协议MAC地址表刷新机制:
STP协议最早认为任何端口进入到forwarding状态或者进入disable状态时,认为STP拓扑发生变化,后来STP对拓扑发生变化的定义做出了优化:
TC BPDU的缺点,容易造成MAC地址表项的提前老化(包括正确的MAC地址),造成大量的未知单播帧的泛洪;但是当边缘端口启用以后,端口会立刻进入forwarding状态,并且不会被认为拓扑发生变化,所以就不会发送TC BPDU,保证MAC地址的稳定性,减少未知单播帧的泛洪,保证网络的稳定性。
forwarding delay 作用:
1、确定listening和forwarding所需的时间。
2、收到TC BPDU报文后Mac地址表老化的时间。
只有在根桥交换机更改有效!!但是不建议修改
标准STP 是由根桥发送BPDU,非根桥不能主动发送BPDU。
华为STP根桥发送BPDU,非根桥也可以主动发送BPDU(华为从RSTP引入)
华为的STP协议引入了大量的RSTP的特点:
为什么在监听和学习状态需要Forwarding delay 的等待时间?
监听状态的15s是为了避免STP协议在收敛过程中产生临时环路,让BPDU能有足够的时间在整个网络进行传递。
监听状态期间,MAC地址表受TC BPDU的影响会进行提前老化,清除错误的MAC地址信息,导致错误的MAC地址老化也导致空闲MAC地址老化,如果此时要转发数据帧就会导致大量未知目的MAC地址的单播帧泛洪的现象,影响网络性能,那么继续牺牲15s的收敛时间,设计出学习状态能让交换机在此期间重新构建正确的MAC地址表项,减少单播帧在STP收敛期间产生大量的泛洪行为。
基于这两种原因,STP协议的收敛是完全依赖计时器来完成的,收敛速度慢,为了解决临时环路和收敛期间单播帧泛洪,需要等待30s。
STP是单生成树,在存在多个VLAN的网络中,所有VLAN共享一棵树,导致链路利用率不高,访问路径存在次优,不合适的trunk放行配置导致部分VLAN不通。
STP 单实例 RSTP 单实例 MSTP 多实例 厂家都存在私有的基于VLAN的STP,但并没有成为标准。 思科 PVSTP PVSTP+ 华为 VBST 实现和友商PVSTP的兼容
P/A 在点到点全双工的链路上让DP和RP端口快速进入转发状态,同时也不会产生临时环路。
P/A机制协商的前提:
DP端口处于discarding状态时,发送(P=1 ,A=1)BPDU RP收到DP的(P=1,A=1)的BPDU后,会进行同步置位。
同步置位:discarding掉所有的非边缘端口(非边缘指点端口,RP端口) 边缘端口,AP端口由于不会引入额外环路,默认认为已经同步置位; 同步置位完成后,RP发送(P=0,A=1 )BPDU并将端口置为转发状态,上游DP收到RP的(P=0,A=1) BPDU后,认为下游的RP已经处于无环拓扑并转发状态,于是自己将端口状态立即过渡到转发状态。DP端口处于discarding状态,对端是AP端口时,AP端口不会配合DP进行P/A协商,导致DP端口30s后进入到转发状态。
注意:
DP端口处于discarding状态,对端是AP时,AP端口不会配置DP进行P/A协商,导致DP端口30s后才进入到forwarding状态,但是这并不会影响任何主机。
为什么P/A机制只能发生在点到点全双工的链路上,而且上下游最终的端口角色时DP和RP?
如果知道半双工链路上只有两台设备,可以强制启用半双工链路进行协商
两端接口敲命令: stp point-to-point {auto |force-false | force-true }
实现RSTP快速收敛的因素:
拓扑变化引起的问题:
RSTP拓扑变化机制(上图):
RSTP BPDU
注意:当RSTP的交换机收到STP BPDU,该端口将回退为STP的端口,失去快速收敛的特性。
状态标志位组合:
端口角色标志位组合:
问:根桥上只有指定端口吗?
非也!特殊场景下 比如连接HUB的情况下会出现BP端口
边缘端口也会发送BPDU,防止下行网络中产生环路的问题:
边缘端口发送BPDU能够防环,但不能实现所有场景都能防环:
边缘端口的好处:
指定交换机:链路上DP端口所在的交换机就是这条链路的指定端口。
MSTP
MSTP配置,对于同一个多生成树区域以下三个参数必须相同,且所有拥有相同域配置的MSTP交换机必须连续:
注意:Digest:配置摘要,长度为16字节;相同区域的交换机应当维护相同的VLAN到MST instance的映射表,可是MST配置表太大(8192字节),不适合在交换机之间相互发送,此字段是使用MD5算法从MST 配置表中算出的摘要信息。
Revision Level:修订级别,长度为两个字节,默认取值为0;由于Configuration Digest 是MST配置表的摘要信息,因此又很小的可能MST配置表不同但摘要信息却相同的情况,这会导致本来不在同一个区域的交换机认为在同一区域中,此字段是一个额外的标识字段,建议不同区域使用不同的数值,以消除上述可能错误的情况。
MSTP特点: