生成树协议(一)STP协议原理简介:广播风暴、MAC地址表震荡实验、STP工作原理、BPDU简介、STP故障处理

环路引起的问题

为了提高网络可靠性,交换网络中通常会使用冗余链路。然而,冗余链路会给交换网络带来环路风险,并导致广播风暴以及MAC地址表不稳定等问题,进而会影响到用户的通信质量。
在这里插入图片描述

广播风暴

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

MAC地址表震荡

交换机是根据所接收到的数据帧的源地址和接收端口生成MAC地址表项的。
在这里插入图片描述
如上图,PC1向外发送一个单播帧,假设此单播帧的目的MAC地址在网络中所有交换机的MAC地址表中都暂时不存在。LSW2收到此数据帧之后,在MAC地址表中生成一个MAC地址表项,对应端口为G0/0/3,并将其从G0/0/1和G0/0/2端口转发。此例仅以SWB从G0/0/1端口转发此帧为例进行说明。
LSW1接收到此帧后,由于MAC地址表中没有对应此帧目的MAC地址的表项,所以LSW1会将此帧从G0/0/2转发出去。
LSW3接收到此帧后,由于MAC地址表中也没有对应此帧目的MAC地址的表项,所以LSW3会将此帧从G0/0/2端口发送回SWB,也会发给主机B。
LSW2从G0/0/2接口接收到此数据帧之后,会在MAC地址表中删除原有的相关表项,生成一个新的表项,对应端口为G0/0/2。此过程会不断重复,从而导致MAC地址表震荡。

实验证明

在这里插入图片描述
由于华为交换机设备默认开启MSTP(后面文章会讲到),所以我们在搭建完拓扑之后,虽然看上去有环路,但是已经被MSTP消除。所以再给PC配上IP地址之后两台PC是可以通信的,可以用ping验证:

PC1 ping PC2:
在这里插入图片描述

随便在交换机之间端口抓包,会发现MSTP报文传递。
在这里插入图片描述
在交换机每个端口关闭生成树协议:进入接口,关闭生成树协议:stp disable即可。
此时再用PC1pingPC2发现无法通信:
在这里插入图片描述
查看抓包程序:
注意:由于在eNSP中,模拟程序性能相较于实体设备差很多,所以在实际设备中广播量要大的多。在这里插入图片描述
此时进入LSW2,通过display mac-address不断查看交换机MAC地址表,发现MAC地址表
震荡:
在这里插入图片描述

STP(Spanning Tree Protocol)生成树协议

那么如何解决上述环路引起的问题呢?

非常的简单,三个交换机之间随机拔掉一根链路就可以了。这样环路是消除了,但是链路也没有了冗余备份的功能。(本来PC1到PC2有两条路可以走,现在就剩下一条了)。

既然物理的拔网线行不通,那么我就从逻辑上将交换机的一个端口堵塞掉(逻辑上的把网线),使一条链路不通。正常情况数据通信走主干道,若是主干道出现了问题,则逻辑堵塞的端口就恢复,备用链路就可以作为通信不就行了。
以上过程,就是STP生成树协议的工作原理。

生成树协议STP(Spanning Tree Protocol)可以在提高可靠性的同时又能避免环路带来的各种问题。​
STP通过阻塞端口来消除环路,并能够实现链路备份的目的。

STP主要作用

  1. 消除环路:通过阻断冗余链路来消除网络中可能存在的环路。
  2. 链路备份:当活动路径发生故障时,激活备份链路,及时恢复网络连通性。

STP中一些重要概念

Root(根桥、根交换机)

STP通过构造一棵树来消除交换网络中的环路。
每个STP网络中,都会存在一个根桥,其他交换机为非根桥。根桥或者根交换机位于整个逻辑树的根部,是STP网络的逻辑中心,非根桥是根桥的下游设备。当现有根桥产生故障时,非根桥之间会交互信息并重新选举根桥。

端口角色

STP中定义了三种端口角色:

1. 指定端口(DP)
2. 根端口(RP)
3. 预备端口/预备端口(AP)
  1. 指定端口:是交换机向所连网段转发配置BPDU的端口,每个网段有且只能有一个指定端口。一般情况下,根桥的每个端口总是指定端口。抑制对端发送BPDU,自己发送BPDU。
  2. 根端口:是非根交换机去往根桥路径最优的端口。在一个运行STP协议的交换机上最多只有一个根端口,但根桥上没有根端口。接收处理对端发送的BPDU报文。
  3. 阻塞端口:如果一个端口既不是指定端口也不是根端口,则此端口为预备端口。预备端口将被阻塞。接收对端发送BPDU报文,但是不处理。

BPDU

为了计算生成树,交换机之间需要交换相关的信息和参数,这些信息和参数被封装在BPDU(Bridge Protocol Data Unit)中。

BPDU有两种类型:

1. 配置BPDU
2. TCN BPDU
  1. 配置BPDU包含了桥ID、路径开销和端口ID等参数。STP协议通过在交换机之间传递配置BPDU来选举根交换机,以及确定每个交换机端口的角色和状态。在初始化过程中,每个桥都主动发送配置BPDU。在网络拓扑稳定以后,只有根桥主动发送配置BPDU,其他交换机在收到上游传来的配置BPDU后,才会发送自己的配置BPDU。
  2. TCN BPDU是指下游交换机感知到拓扑发生变化时向上游发送的拓扑变化通知。(下文拓扑变化中会讲到)

配置BPDU中包含了足够的信息来保证设备完成生成树计算,其中包含的重要信息如下:
在这里插入图片描述

字段 长度 说明
PID 6字节 协议ID
字段 长度 说明
PVI 6字节 STP协议版本(三种)
1. STP(802.1D)传统生成树   值为0
2. RSTP(802.1W)快速生成树  值为2
3. MSTP(802.1S)多生成树    值为3 
字段 长度 说明
BPDU Type 1字节 BPDU类型
1. 0x00:STP的Configuration BPDU:配置BPDU,负责建立,维护STP拓扑   
2. 0x80:STP的TCN BPDU(Topology Change Notification BPDU):传达拓扑变更 
3. 0x02:RST BPDU(Rapid Spanning-Tree BPDU)或者MST BPDU(Multiple Spanning-Tree BPDU)
字段 长度 说明
Flags 1字节 标记域
共有8bits,但是STP中只用了两位:最高位与最低位

1. TCA=1时:拓扑变化响应消息(拓扑变化确认)
2. TN=1时:拓扑变化消息
字段 长度 说明
Root Identifier 8字节 网桥ID
前两个字节时网桥优先级,后六个字节是网桥MAC地址。

字段 长度 说明
Root Path Cost 4字节 根路径开销
Bridge Identifier 8字节 发送者BID,本交换机的Bridge ID
Port Identifier 2字节 发送端口PID,发送该BPDU的端口ID
Message Age 2字节 该BPDU的消息年龄,以秒为单位
Max Age 2字节 消息老化年龄,以秒为单位,超时则认为到根交换机的链路故障(缺省20s)
Hello Time 2字节 发送两个相邻BPDU间的时间间隔,以秒为单位。(缺省2s)
Forward Delay 2字节 控制Listening和Learning状态的持续时间,以秒为单位

计时器

在这里插入图片描述
STP协议中包含一些重要的时间参数,这里举例说明如下:
Message Age是从根桥发送到当前交换机接收到BPDU的总时间,包括传输延时等。如果配置BPDU是根桥发出的,则Message Age为0。实际实现中,配置BPDU报文每经过一个交换机,Message Age增加1。
Max Age是指BPDU报文的老化时间,可在根桥上通过命令人为改动这个值。Max Age通过配置BPDU报文的传递,可以保证Max Age在整网中一致。非根桥设备收到配置BPDU报文后,会将报文中的Message Age和Max Age进行比较:如果Message Age小于等于Max Age,则该非根桥设备会继续转发配置BPDU报文。如果Message Age大于Max Age,则该配置BPDU报文将被老化掉。该非根桥设备将直接丢弃该配置BPDU,并认为是网络直径过大,导致了根桥连接失败。
(大致功能与IP报文中的TTL值相似,但是工作机制相反,TTL值每经过一个三层设备-1,MSG Age每经过一个交换机+1。)

STP选举过程(生成树形成过程)

STP选举过程非常的简单,通过构造一棵以根桥为根的逻辑树来消除环路。

  1. 选举根桥
  2. 每个非根交换机选举一个根端口
  3. 每条链路选举一个指定端口(有的地方也讲每个网段之间选举,但是感觉网段这个概念不太准确)
  4. 剩下的为阻塞端口,被阻塞

所有选举的过程都交互BPDU报文来完成。

根桥的选举

交换机启动后就自动开始进行生成树收敛计算。**默认情况下,所有交换机启动时都认为自己是根桥,自己的所有端口都为指定端口,这样BPDU报文就可以通过所有端口转发。**对端交换机收到BPDU报文后,会比较BPDU中的根桥ID和自己的桥ID。如果收到的BPDU报文中的桥ID优先级低,接收交换机会继续通告自己的配置BPDU报文给邻居交换机。如果收到的BPDU报文中的桥ID优先级高,则交换机会修改自己的BPDU报文的根桥ID字段,宣告新的根桥。

选举依据:桥ID(Bridge ID) ,STP中的每个交换机都会有一个桥ID(Bridge ID) 。

  1. 桥ID由16位的桥优先级(Bridge Priority)和48位的MAC地址构成。
  2. 取值范围是0~65535,默认值为32768。
  3. 桥优先级是可以配置的,配置必须是4096的倍数(步长4096)
  4. 优先级最高的设备(数值越小越优先)会被选举为根桥。如果优先级相同,则会比较MAC地址,MAC地址越小则越优先。

根端口的选举

在所有非根交换机上选举根端口。

分别依据该端口的根路径开销(RPC)、对端BID(Bridge ID)、对端PID(Port ID)和本端PID。

RPC:
交换机的每个端口都有一个端口开销(Port Cost)参数,此参数表示该端口在STP中的开销值。默认情况下端口的开销和端口的带宽有关,带宽越高,开销越小。从一个非根桥到达根桥的路径可能有多条,每一条路径都有一个总的开销值,此开销值是该路径上所有接收BPDU端口的端口开销总和(即BPDU的入方向端口),称为路径开销。非根桥通过对比多条路径的路径开销,选出到达根桥的最短路径,这条最短路径的路径开销被称为RPC(Root Path Cost,根路径开销),并生成无环树状网络。根桥的根路径开销是0

PID(端口ID):
运行STP交换机的每个端口都有一个端口ID,端口ID由端口优先级和端口号构成。

  1. 端口优先级取值范围是0到240,步长为16,即取值必须为16的整数倍。
  2. 缺省情况下,端口优先级是128。端口ID(Port ID)可以用来确定端口角色。

指定端口选举

在链路上抑制其他端口(无论是自己的还是其他设备的)发送BPDU报文的端口,就是该网段的指定端口。每个网段都应该有一个指定端口,根桥的所有端口都是指定端口(除非根桥在物理上存在环路如下图:此时G0/0/1与G0/0/2口选举根端口指定端口)。
在这里插入图片描述
选举依据:根路径开销(注意这里为该端口的交换机到达根桥最短路径)、本端BID、本端PID

网络收敛后,只有指定端口和根端口可以转发数据。其他端口为预备端口,被阻塞,不能转发数据,只能够从所连网段的指定交换机接收到BPDU报文,并以此来监视链路的状态。

端口状态转换

端口状态 解释 详情
Forwarding 转发状态 端口既可转发用户流量也可转发BPDU报文,只有根端口或指定端口才能进入Forwarding状态。
Learning 学习状态 (过程态 端口可根据收到的用户流量构建MAC地址表,但不转发用户流量。增加Learning状态是为了防止临时环路。
Listening 侦听状态(过程态 端口可以转发BPDU报文,但不能转发用户流量。
Blocking/(Discrading(华为设备中)) 阻塞状态 端口仅仅能接收并处理BPDU,不能转发BPDU,也不能转发用户流量。此状态是预备端口的最终状态。
Disabled 禁用状态 端口既不处理和转发BPDU报文,也不转发用户流量。 不收发任何报文

在这里插入图片描述由于STP没有确认机制,报文的传输需要时间,为了防止网络拓扑出现临时环路(上游收敛较快,下游收敛较慢,上游若是收敛完毕就开始转发数据可能会造成临时环路)。于是STP采用Forward Delay机制,来避免环路的产生(给下游交换机足够多的时间来收敛)。Forward Delay为15s,从Listening到Learning需要经过一个Forward Delay,从Learning到Forwarding需要经过一个Forward Delay共30s。

STP拓扑变化

根桥故障

在这里插入图片描述
在稳定的STP拓扑里,非根桥会定期收到来自根桥的BPDU报文。如果根桥发生了故障,停止发送BPDU报文,下游交换机就无法收到来自根桥的BPDU报文。如果下游交换机一直收不到BPDU报文,Max Age定时器就会超时(Max Age的默认值为20秒),从而导致已经收到的BPDU报文失效,此时,非根交换机会互相发送配置BPDU报文,重新选举新的根桥。根桥故障会导致50秒左右的恢复时间,恢复时间约等于Max Age加上两倍的Forward Delay收敛时间(50s)。

直连链路故障

在这里插入图片描述
此例中,SWA和SWB使用了两条链路互连,其中一条是主用链路,另外一条是备份链路。生成树正常收敛之后,如果SWB检测到根端口的链路发生物理故障,则其Alternate端口会迁移到Listening、Learning、Forwarding状态,经过两倍的Forward Delay后恢复到转发状态(30s)。

非直连链路故障

在这里插入图片描述
本例中,LSW1与HUB之间的链路发生了某种故障,LSW2因此一直收不到来自SWA的BPDU报文。等待Max Age定时器超时后,LSW2会认为根桥LSW1不再有效,并认为自己是根桥,于是开始发送自己的BPDU报文给LSW3,通知LSW3自己作为新的根桥。在此期间,由于LSW3的Alternate端口再也不能收到包含原根桥ID的BPDU报文。其Max Age定时器超时后,LSW3会切换Alternate端口为指定端口并且转发来自其根端口的BPDU报文给LSW2。所以,Max Age定时器超时后,LSW2、LSW3几乎同时会收到对方发来的BPDU。经过STP重新计算后,LSW2放弃宣称自己是根桥并重新确定端口角色。非直连链路故障后,由于需要等待Max Age加上两倍的Forward Delay时间,端口需要大约50秒才能恢复到转发状态。

拓扑变化导致MAC地址表错误

在这里插入图片描述
在交换网络中,交换机依赖MAC地址表转发数据帧。缺省情况下,MAC地址表项的老化时间是300秒。如果生成树拓扑发生变化,交换机转发数据的路径也会随着发生改变,此时MAC地址表中未及时老化掉的表项会导致数据转发错误,因此在拓扑发生变化后需要及时更新MAC地址表项。
本例中,SWB中的MAC地址表项定义了通过端口GigabitEthernet 0/0/3可以到达主机A,通过端口GigabitEthernet 0/0/1可以到达主机B。由于SWC的根端口产生故障,导致生成树拓扑重新收敛,在生成树拓扑完成收敛之后,从主机A到主机B的帧仍然不能到达目的地。这是因为MAC地址表项老化时间是300秒,主机A发往主机B的帧到达SWB后,SWB会继续通过端口GigabitEthernet 0/0/1转发该数据帧。
在这里插入图片描述
拓扑变化过程中,根桥通过TCN BPDU报文获知生成树拓扑里发生了故障。根桥生成TC用来通知其他交换机加速老化现有的MAC地址表项。
拓扑变更以及MAC地址表项更新的具体过程如下:

  1. SWC感知到网络拓扑发生变化后,会不间断地向SWB发送TCN BPDU报文。
  2. SWB收到SWC发来的TCN BPDU报文后,会把配置BPDU报文中的Flags的TCA位设置1,然后发送给SWC,告知SWC停止发送TCN BPDU报文。
  3. SWB向根桥转发TCN BPDU报文。
  4. SWA把配置BPDU报文中的Flags的TC位设置为1后发送,通知下游设备把MAC地址表项的老化时间由默认的300秒修改为Forward Delay的时间(默认为15秒,华为设备默认为0秒)。
  5. 最多等待15秒之后,SWB中的错误MAC地址表项会被自动清除。此后,SWB就能重新开始MAC表项的学习及转发操作。

配置命令

  1. 选择模式:
[SWA]stp mode ?

 mstp Multiple Spanning Tree Protocol (MSTP) mode
 rstp Rapid Spanning Tree Protocol (RSTP) mode
 stp  Spanning Tree Protocol (STP) mode

[SWA]stp mode stp      //华为设备默认模式为MSTP,所以选择STP需手动更改
  1. 配置交换机优先级stp priority [4096]。注意优先级步长为:4096。
  2. 也可以直接通过stp root primary指定根桥。原理是将交换机优先级修改成0
  3. 修改路径开销:stp cost [1000]。华为设备端口开销为20000
  4. 修改端口优先级 stp port priority [0]。注意端口优先级步长为16。
  5. 查看命令:display stp
发布了37 篇原创文章 · 获赞 31 · 访问量 4941

猜你喜欢

转载自blog.csdn.net/qq_46254436/article/details/105207041
今日推荐