生成树协议(一)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中包含了足够的信息来保证设备完成生成树计算,其中包含的重要信息如下:
在这里插入图片描述

字段长度说明
PID6字节协议ID
字段长度说明
PVI6字节STP协议版本(三种)
1. STP(802.1D)传统生成树   值为0
2. RSTP(802.1W)快速生成树  值为2
3. MSTP(802.1S)多生成树    值为3 
字段长度说明
BPDU Type1字节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)
字段长度说明
Flags1字节标记域
共有8bits,但是STP中只用了两位:最高位与最低位

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

字段长度说明
Root Path Cost4字节根路径开销
Bridge Identifier8字节发送者BID,本交换机的Bridge ID
Port Identifier2字节发送端口PID,发送该BPDU的端口ID
Message Age2字节该BPDU的消息年龄,以秒为单位
Max Age2字节消息老化年龄,以秒为单位,超时则认为到根交换机的链路故障(缺省20s)
Hello Time2字节发送两个相邻BPDU间的时间间隔,以秒为单位。(缺省2s)
Forward Delay2字节控制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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值