网工必会stp /rstp /mstp (笔记)

二层环路导致的问题

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算法实现的基本过程

  1. 初始状态

    由于每个桥都认为自己是根桥,所以在每个端口所发出的BPDU中,根桥字段都是用各自的BID,Root Path Cost字段是累计的到根桥的开销,发送者BID是自己的BID,端口PID是发送该BPDU端口的端口ID。

  2. 选择根桥

    网络初始化时,网络中所有的STP设备都认为自己是“根桥”,根桥ID为自身的设备ID。通过交换配置消息,设备之间比较根桥ID,网络中根桥ID最小的设备被选为根桥。

  3. 选择根端口和指定端口

  1. 根端口和指定端口的选择过程如表1所示。

    表1 根端口和指定端口的选择过程

    步骤

    过程

    1

    非根桥设备将接收最优配置消息(最优配置消息的选择过程如表2所示)的那个端口定为根端口

    2

    设备根据根端口的配置消息和根端口的路径开销,为每个端口计算一个指定端口配置消息:

    • 根桥ID替换为根端口的配置消息的根桥ID;
    • 根路径开销替换为根端口配置消息的根路径开销加上根端口对应的路径开销;
    • 发送者BID替换为自身设备的ID;
    • 发送端口PID替换为自身端口ID。

    3

    设备将计算出的配置消息与角色待定端口自己的配置消息进行比较:

    • 如果计算出的配置消息更优,则该端口被确定为指定端口,其配置消息也被计算出的配置消息替换,并周期性地向外发送;
    • 如果该端口自己的配置消息更优,则不更新该端口的配置消息并将该端口阻塞。该端口将不再转发数据,且只接收不发送配置消息。
    表2 最优配置消息的选择过程

    步骤

    过程

    1

    每个端口将收到的配置消息与自己的配置消息进行比较:

    • 如果收到的配置消息优先级较低,则将其直接丢弃,对自己的配置消息不进行任何处理;
    • 如果收到的配置消息优先级较高,则用该配置消息的内容将自己配置消息的内容替换掉;
    • 如果收到的配置消息和自己的一样,则将其直接丢弃。

    2

    设备将所有端口的配置消息进行比较,选出最优的配置消息

STP算法实现举例

一旦根桥、根端口和指定端口选举成功,整个树形拓扑就建立完毕了。下面结合例子说明STP算法实现的具体过程。

图1 STP算法实现过程组网图及计算后的拓扑

网工必会stp /rstp /mstp (笔记)_第1张图片

 交换机参数

dis 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
 

网工必会stp /rstp /mstp (笔记)_第2张图片

  1. 端口Up或使能了STP,会从Disabled状态进入到Blocking状态。
  2. 端口被选举为根端口或指定端口,会进入Listening状态。
  3. 端口的Forward Delay定时器超时,会进入Learning/Forwarding状态。
  4. 端口不再是根端口或指定端口时,会进入Blocking状态。
  5. 端口Down或者去使能STP时,就进入Disabled状态。

端口状态

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恢复网络。

  STP拓扑变化机制

网络中发生拓扑变化时,例如链路中断或接口异常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 /rstp /mstp (笔记)_第3张图片

STP拓扑变化处理过程如图2所示。

图2 TCN的发送和TC的泛洪

网工必会stp /rstp /mstp (笔记)_第4张图片

  1. T点接口发生变更后,下游设备会不间断地向上游设备发送TCN BPDU报文。
  2. 上游设备收到下游设备发来的TCN BPDU报文后,只有指定端口处理TCN BPDU报文。其它端口也有可能收到TCN BPDU报文,但不会处理。
  3. 上游设备会把配置BPDU报文中的Flags的TCA=1,然后发送给下游设备,告知下游设备停止发送TCN BPDU报文。
  4. 上游设备复制一份TCN BPDU报文,向根桥方向发送。
  5. 重复步骤1、2、3、4,直到根桥收到TCN BPDU报文。
  6. 根桥把配置BPDU报文中Flags的TC=1和TCA=1后发送,TC=1是为了通知下游设备老化桥MAC地址表项,TCA=1是为了通知下游设备停止发送TCN BPDU报文。

PS:

  • TCN BPDU报文主要用来向上游设备乃至根桥通知拓扑变化。
  • 置位的TCA标记的配置BPDU报文主要是上游设备用来告知下游设备已经知道拓扑变化,通知下游设备停止发送TCN BPDU报文。
  • 置位的TC标记的配置BPDU报文主要是上游设备用来告知下游设备拓扑发生变化,请下游设备直接删除桥MAC地址表项,从而达到快速收敛的目的。

网工必会stp /rstp /mstp (笔记)_第5张图片

 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地址表刷新机制:

  • 当交换机收到TC BPDU后将自身所有端口(边缘端口除外)的MAC地址表的老化时间会从300秒设置为forwarding delay 15s ,TC BPDU会持续由根桥发送35s的时间
  • 边缘端口标准STP是不支持的,但是华为的STP协议支持边缘端口的设置。

STP协议最早认为任何端口进入到forwarding状态或者进入disable状态时,认为STP拓扑发生变化,后来STP对拓扑发生变化的定义做出了优化:

  1. 当端口进入到forwarding状态认为拓扑发生变化(边缘端口除外),而DP端口进入disable状态不认为拓扑发生变化
  2. RP失效会认为拓扑发生变化,RP恢复到forwarding 状态后,并且有一个指定端口在转发状态,此RP也会拓扑发生变化发送TCN BPDU。

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的特点:

  1. 非根桥可以主动发送BPDU
  2. 收到次级BPDU立即老化
  3. 边缘端口(边缘端口也会发送BPDU,防止下行网络中产生环路的问题,收到自己发出的BPDU会block端口,收到其他交换机发出的BPDU会参与STP计算,实现破环,但又有临时环路的风险)

 网工必会stp /rstp /mstp (笔记)_第6张图片

 为什么在监听和学习状态需要Forwarding delay 的等待时间?

        监听状态的15s是为了避免STP协议在收敛过程中产生临时环路,让BPDU能有足够的时间在整个网络进行传递。

        监听状态期间,MAC地址表受TC BPDU的影响会进行提前老化,清除错误的MAC地址信息,导致错误的MAC地址老化也导致空闲MAC地址老化,如果此时要转发数据帧就会导致大量未知目的MAC地址的单播帧泛洪的现象,影响网络性能,那么继续牺牲15s的收敛时间,设计出学习状态能让交换机在此期间重新构建正确的MAC地址表项,减少单播帧在STP收敛期间产生大量的泛洪行为。

基于这两种原因,STP协议的收敛是完全依赖计时器来完成的,收敛速度慢,为了解决临时环路和收敛期间单播帧泛洪,需要等待30s。

STP是单生成树,在存在多个VLAN的网络中,所有VLAN共享一棵树,导致链路利用率不高,访问路径存在次优,不合适的trunk放行配置导致部分VLAN不通。

为了解决STP收敛慢,开发出了RSTP,为了解决RSTP单树弊端,开发出了MSTP。

STP                单实例                                                                                                                        ​​​​​​​ RSTP             单实例                                                                                                                          MSTP             多实例                                                                                                                          厂家都存在私有的基于VLAN的STP,但并没有成为标准。                                                            思科        PVSTP        PVSTP+                                                                                                       华为        VBST        实现和友商PVSTP的兼容

RSTP针对STP的优化

P/A 在点到点全双工的链路上让DP和RP端口快速进入转发状态,同时也不会产生临时环路。

P/A机制协商的前提:

  1. DP端口处于discarding
  2. 点到点全双工链路
  3. DP端口对端是RP端口

 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 /rstp /mstp (笔记)_第7张图片

  • 半双工可能存在两个以上的链路
  • 根据P/A机制,发状态,如果下游接口有多台交换机,但上游交换机无法得知具体的交换机数量,那么就无法判断要收到多少个A置位的BPDU才能过渡到转发状态。
  • 可能存在瞬间环路的风险,如果当SW3的G0/0/2端口是转发状态,当DP 收到A置位的BPDU将端口过渡到转发状态,当HUB的E0/0/9新增链路,如果SW1和SW4 进行P/A机制协商过渡到转发状态,那么就可能存在临时环路。       
  • 如果下游选举发生后,发现自己的AP端口,则不会回应A置位的BPDU                                                             

如果知道半双工链路上只有两台设备,可以强制启用半双工链路进行协商

网工必会stp /rstp /mstp (笔记)_第8张图片

两端接口敲命令: stp point-to-point {auto |force-false | force-true }

实现RSTP快速收敛的因素:

  • P/A机制
  • 边缘端口
  • AP端口快速切换

拓扑变化引起的问题:

网工必会stp /rstp /mstp (笔记)_第9张图片

  • 在RSTP中检测拓扑发生变化只有一个标准:一个非边缘端口迁移到转发状态
  • 网络拓扑改变可能会导致交换机的MAC地址表产生错误
  • 如图,在稳定情况下,SWC的MAC地址表中对应PCA的MAC地址的端口是E1 ;如果SEB的E1端口发生了故障,而SWC的MAC地址表中与PCA的MAC对应的端口仍然是E1,则会导致数据转发丢失的问题。

网工必会stp /rstp /mstp (笔记)_第10张图片

RSTP拓扑变化机制(上图):

  • 当交换机感知到拓扑发生变化(非边缘端口过渡转发状态)
  • 在状态发生变化的本端口上发送TC置位 RST BPDU,时间为hello timer的2倍,一旦TC While Timer超时,则立即停止发送RST BPDU.
  • 收到TC RST BPDU的交换机清空所有端口上的MAC地址表项,除了边缘端口和收到TC RST BPDU的端口
  • 并继续泛洪TC RST BPDU ,如此反复,实现全网MAC地址表的更新
  • 边缘端口down掉或者恢复up,不会触发拓扑变更。

RSTP  BPDU

  • RST BPDU
  • TC RST BPDU

注意:当RSTP的交换机收到STP BPDU,该端口将回退为STP的端口,失去快速收敛的特性。

网工必会stp /rstp /mstp (笔记)_第11张图片

状态标志位组合:

  • 0        0        discarding
  • 1        1        forwarding
  • 0        1        learning 

端口角色标志位组合:

  • 0        0        保留组合,没有定义
  • 1        1        DP指定端口
  • 0        1        BP/AP 备份/阻塞端口
  • 1        0        RP根端口

问:根桥上只有指定端口吗?

非也!特殊场景下 比如连接HUB的情况下会出现BP端口

网工必会stp /rstp /mstp (笔记)_第12张图片

 边缘端口也会发送BPDU,防止下行网络中产生环路的问题:

  • 收到自己发出的BPDU会block本端口
  • 收到其他交换机发出的BPDU会参与STP计算,实现破环,但又有临时环路的风险

边缘端口发送BPDU能够防环,但不能实现所有场景都能防环:

  • 临时环路
  •  边缘端口下行网络存在不透传BPDU的交换机(交换机如果不支持STP,或者关闭了STP协议,这些交换机是不会透传BPDU的),而拓扑是环路拓扑,导致环路。

边缘端口的好处:

  • 快速进入转发状态,无盘工作站(PXE)或者DHCP获取IP地址的主机能够更快的接入网络(如果是普通端口到forwarding需要30s的过渡时间,可能会导致启动引导失败)
  • 边缘端口UP和DOWN不会导致交换机发送TCN或者TC BPDU,增强STP网络的稳定性
  • 边缘端口通常用于连接3层终端设备或路由器,防火墙路由设备。
  • 确保下行网络不存在2层环路的场景下可以使用边缘端口 

指定交换机:链路上DP端口所在的交换机就是这条链路的指定端口。

MSTP

MSTP配置,对于同一个多生成树区域以下三个参数必须相同,且所有拥有相同域配置的MSTP交换机必须连续:

  1. 定义MSTP域,在一个域中的交换机必须配置相同的域名
  2. 在同一个域中配置相同的修订级别
  3. 在同一个域中要有相同的instance 映射表
  • 激活域配置

注意:Digest:配置摘要,长度为16字节;相同区域的交换机应当维护相同的VLAN到MST instance的映射表,可是MST配置表太大(8192字节),不适合在交换机之间相互发送,此字段是使用MD5算法从MST 配置表中算出的摘要信息。

Revision Level:修订级别,长度为两个字节,默认取值为0;由于Configuration Digest 是MST配置表的摘要信息,因此又很小的可能MST配置表不同但摘要信息却相同的情况,这会导致本来不在同一个区域的交换机认为在同一区域中,此字段是一个额外的标识字段,建议不同区域使用不同的数值,以消除上述可能错误的情况。

MSTP特点:

  • 同一个域中基于instance维护生成树
  • 同一个域中不同的instance可以设置不同的根桥
  • 同一个域中可以针对不同的instance配置STP的参数
  • 同一个域中每个instance独立维护自己的STP树
  • 没有加入到instance中的VLAN,默认属于instance 0 (缺省实例)

你可能感兴趣的:(笔记,网络,运维)