今日学习状态:
⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐ ⭐⭐⭐⭐⭐
概述:之前的博文中简单的对OSPF网络路由协议的一些简单的配置命令与其最基本的功能的叙述,至于说后续的OSPF的高级特性我们在技术得以提升时再去做一线简单的概述。
今天我们先了解一下STP生成树协议,在计算机科学与技术相关的专业中,学校可能会上数据结构与算法这么一门学科,其中会了解到什么是生成树之类的知识点,然而我们今天来了解一下在计算机网络通讯结构中的STP(SPanning Tree Protocol,生成树协议)
背景介绍:
在早期的以太网链路中,为了提高网络的可靠性,通常会在交换机之间配置冗余链路。这样,当某条链路或交换机发生故障时,网络可以通过其他的链路继续保持连通性,从而避免单点故障导致的网络中断。然而,冗余链路的使用也带来了新的问题——网络环路。
网络环路引发的问题:
广播风暴:广播帧在环路中无线循环,导致宽带耗尽
MAC地址表振荡:交换机频繁更新MAC地址表,引发流量错误转发
多帧复制:同一数据帧被重复传输,造成数据混乱。
举个例子:
若两台交换机通过两台链路直接相连,广播帧可能沿链路A→B→A循环传播,导致全网瘫痪。
STP的概述:
STP(SPanning Tree Protocol,生成树协议)是一种用于局域网(LAN)的二层网络协议,主要用于防止网络中的环路问题并确保在冗余网络拓扑中能够提供冗余路劲的同时避免广播风暴,MAC地址振荡等不了后果。,逻辑上是阻塞了某些接口。
STP中的BPDU:
BPDU(Bridge Protocol Data Unit,桥协议数据单元)是生成树协议及其变体(RSTP、MSTP)中用于交换网络拓扑通信的关键数据包。
BPDU中携带着根桥的相关信息,且只有当网络拓扑发生变化时才会发生,每隔2s发送一次,老化时间为20s
在上面我们提到了根桥,那我们接下来去讲解一下关于STP的一些术语与选举:
关于STP的一些术语与选举:
根桥(Root Bridge):全网桥ID最优的交换
作用:发送BPDU
桥ID的选举:
优先级+背板MAC地址
优先级:默认为32768(思科会是默认优先级+sys-id-ext 1,所以会显示32769)
优先级越小越优
根端口(Root Port):
作用:接收BPDU,每一台非根桥设备有且只有一个
选举:
每个非根桥的端口都会计算到根桥的路径开销(Path Cost),路径开销最小的端口被选为根端口
如果路径开销相同,则比较端口的对端桥ID(Bridge ID)和端口ID(Port ID),选择较小的。
查询命令:
Switch>en
Switch#conf
Switch(config)#do show spanning-tree
指定端口(Designated Prot):
定义:指定端口是在每个网段上转发流量的端口,负责将数据转发到根桥方向。每条链路上有且只有一个。
作用:指定端口确保每个网段只有一个端口负责转发流量,从而避免环路。他负责将数据从本网段转发到根桥方向,同时阻止来自其他方向的数据,防止环路。
选举:
指定端口的选择也基于路径成本和桥ID。
每个网段上,路径成本最低且桥ID最小的端口将成为指定端口。
同样的命令,会显示出相关端口所对应的端口角色,这里都显示的DP端口:
阻塞端口(Blocking Port)也称AP口:
定义:阻塞端口是那些被STP算法关闭的端口,防止环路。
作用:阻塞端口不转发数据帧,但任然接收BPDU(桥协议数据单元)以维护生成树拓扑。当网络拓扑发生变化时,阻塞端口可能会发生转换为转发状态,以提供冗余路径。
状态:阻塞端口处于阻塞状态,不参与数据转发。这是STP防止环路的关键机制之一。
总结一下关于根桥、根端口、指定端口、阻塞端口,我们通常会对其不同端口进行简称:
根端口(RP)、指定端口(DP)、阻塞端口(AP)
其选举规则速记小卡片:
RP选举:
到根桥开销最小
发送方的桥ID越小(RP的发送方是对端)
发送方的端口ID越小越优
DP选举:
到达根桥的开销最小
发送方的桥ID越小越优(DP的发送方是其本身,因为其作用是转发BPDU)
发送方的端口ID越小越优
AP选举:
剩下的端口及为AP口。
我们会发现选举规则都是差不多的,其实在选举过程中都是以最优进行选举,这样可以进行选举的统一性,不会出现因为多条规则而导致出现重复的角色,我们将选举规则进行统一,不同的角色我选举都采用一个模式,一个规则,只是说两者之间的服务角色不同,重点标注的是唯一的不同点。
我们用一个简单的拓扑来对选举的规则进行深刻的掌握:
实验检验:

SW# | 优先级 | MAC地址 |
SW1 | 32769 | aabb.cc00.1000 |
SW2 | 32769 | aabb.cc00.2000 |
SW3 | 32769 | aabb.cc00.3000 |
SW4 | 32769 | aabb.cc00.4000 |
SW5 | 32769 | aabb.cc00.5000 |
先进行根桥的选举,根据规则
优先级+背板MAC地址
优先级:默认为32768(思科会是默认优先级+sys-id-ext 1,所以会显示32769)
优先级越小越优
我们发现所有的设备优先级相同,那么就要去对比背板MAC地址,当背板MAC地址越小时,则选举成功,对比发现SW1的背板MAC地址最小,则根桥为SW1。其次在命令的中SW1与其他Switch有不同点,比如说下图:SW1会存在命令:This bridge is the root。这就验证了我们的选举是正确的。
关于端口ID:
接下来选举RP,根据规则:
到根桥开销最小
发送方的桥ID越小(RP的发送方是对端)
发送方的端口ID越小越优
因为我们的RP主要作用是去接收根桥的BPDU,所以我选举的时候要从根桥(Root)出发,逐步采用规则进行选举,这点很重要,是前提哈!!!!!(所有规则建立在此基础上,紧扣该条规则)
由于RP是为了接收BPDU,发送方是SW1,SW1需要发送BPDU,如果根据发送方的端口ID小的规则,这里就会选取e0/2为RP,这对吗?当然错误。假如是e0/2端口,那么e0/2端口接收SW1发送的BPDU,那SW5如何接收来自SW1的BPDU呢?这显然是一个逻辑错误,怎么可以使得自己的端口去接收来自自己的BPDU呢,所以要让SW5接收来自SW1的BPDU,就需要选择发送端口ID小的链路的对端端口作为相互传输BPDU的为RP端口。(紧扣基础规则)
我们接下来看看后半段的拓扑对RP的选举:
运用发送方的桥ID越小越优,再次强调,RP的作用是接收BPDU哈,一定要紧扣主题,不然对这个选举的理解将会是公式化理解,遇到更为复杂的拓扑将我从下手
判断为RP再来进行DP的判定:
DP的判断在本拓扑里较为简单,DP主要是为了转发来自根桥的BPDU数据。
找到了RP、DP后剩下的端口则为AP,阻塞端口是那些被STP算法关闭的端口,防止环路
最终我们的判断:
SW# | 端口号 | RP | DP | AP |
SW1 | e0/0、e0/1、e0/2、e0/3 | e0/0、e0/1、e0/2、e0/3 | ||
SW2 | e0/0、e0/1 | e0/0 | e0/1 | |
SW3 | e0/0、e0/1 | e0/0 | e0/1 | |
SW4 | e0/0、e0/1 | e0/0 | e0/1 | |
SW5 | e0/0、e0/1 | e0/0 | e0/1 |
接下来我们来用命令检验自己的判断是否正确:
SW1:(e0/0、e0/1、e0/2、e0/3为DP)
SW2:(e0/0为RP、e0/1为DP)
SW3:(e0/0为RP、e0/1为AP)
SW4:(e0/0为RP、e0/1为DP)
SW5:(e0/0为RP、e0/1为AP)
我们发现满足我们的判断,完全正确。