首页
归档
标签
分类
logokzhik.cn
首页
归档
标签
分类
友情链接

[计算机网络] 生成树协议(STP)的原理

2025-09-2910 0字(大约0分钟)
计算机网络
计算机网络
STP

在交换式以太网中为了提高网络的可靠性,一般会对网络中的链路进行备份。而这些冗余的线路如果不做处理很有可能会导致例如广播风暴等问题,也就是说在主要线正常的情况下阻塞一些冗余线路是很有必要的。

因此出现了 生成树协议(Spanning Tree Protocol) 它的出现就是为了消除二层网络中的环路。其核心思想就是将二层网络拓扑的图结构转换成树形结构,从而消除环路

阻塞冗余线路,消除二层环路

STP的选举流程与基本概念

基本概念

根桥与桥ID

上面介绍了,STP协议消除环路的核心思想是将图结构转换成树结构(也就是阻塞冗余的线路)。

那么既然是树形结构那么理应有一个节点是作为根节点而存在的。

在STP协议中这个根节点就叫做 根桥(Root Bridge) 。交换机之间会通过 桥ID(BID, Bridge ID) 来决定谁是根桥

桥ID的结构

开销与根路径开销

Cost (开销) 指是某台设备的某个端口到达对端设备的开销,收到端口带宽、双工模式等指标的影响,管理员可以修改开销值从而影响根端口的选举。

RPC(Root Path Cost,根路径开销) 指的某台交换机中某个端口到根桥的路径的开销总和,根端口的选举会受到这个的影响。

开销与根路径开销

端口ID

端口ID由优先级与端口编号组成,用来标识交换机的每一个端口,在某些情况下会影响根端口和指定端口的选举。

端口ID的格式

BPDU

BPDU(Bridge Protocol Data Unit, 网桥协议数据单元) 其实指的就是STP协议的报文,BPDU分为两类:配置BPDU 和 拓扑更改通知(TCN BPDU, Topology Change Notification)

端口角色

端口角色分为三种:根端口(RP,Root Port)、 指定端口(DP,Designated Port) 和 阻塞端口(BP,Blocking Port)。

  • 根端口: 非根桥上到根桥路径开销最小的端口,每台非根桥只有一个,负责接收来自根桥方向的 BPDU,并转发数据帧
  • 指定端口: 每条链路都会选举出一个指定端口,负责转发 BPDU 和数据帧,一般情况下根桥的端口都是指定端口
  • 阻塞端口: 既不是根端口也不是指定端口的端口,会接收 BPDU 但不转发数据帧

端口类别示意图

选举流程

整个选举的步骤其实并不多,也就分为以下几个步骤

  1. 选举根桥
  2. 选举根端口
  3. 选举指定端口
  4. 阻塞非根桥的非指定端口且非根端口的端口

1.选举根桥

交换网络中每台交换机都会发送包含自己的 BID(桥ID) 的 配置BPDU ,网络中BID最小的会被选举为根桥

2.选举根端口

交换机在确定根端口时,会在本地所有端口中进行逐步比较,规则如下:

  1. 比较根路径开销(RPC,Root Path Cost)

    开销值最小的端口选举为根端口

  2. 若有多个端口开销相同

    比较这些端口 对端设备的桥 ID(BID),BID 最小的端口选举为根端口。

  3. 若 BID 仍然相同

    比较 对端端口 ID(PID),PID 最小的端口选举为根端口。

  4. 若经过上述步骤仍未能唯一确定

    最终比较本交换机本地的 端口 ID(PID),最小的端口成为根端口。

根端口的选举逻辑

3.选举指定端口

和根端口的比较逻辑相似,只不过是在一条链路的两个交换机端口之间,必须选举出唯一的指定端口。比较顺序如下:

  1. 比较根路径开销(RPC)

    链路两端交换机的 根端口 RPC 值 相比,哪一端更小,该端口成为指定端口。

  2. 若 RPC 相同

    比较两端交换机的 桥 ID(BID),BID 更小的一端的端口成为指定端口。

  3. 若 BID 也相同

    比较两端的 端口 ID(PID),PID 更小的一端的端口成为指定端口。

!{tip 阻塞端口}

如果一个端口既不是根端口(RP),也不是指定端口(DP),那么该端口就会进入阻塞状态,成为阻塞端口(BP)

干预选举

拓扑图

!{warning}

接下来的配置例子使用的是Cisco Packet Tracer做模拟

但是Cisco的交换机上面运行的是Cisco的PVST协议,不是标准STP协议

不过选举流程是差不多的

干预根桥的选举

根据之前介绍过的根桥的选举机制,BID最小的交换机会成为根桥。BID的前两个字节为优先级,这两个字节表示的数字越小则意味着BID越小

配置优先级的命令为:

Switch(config)#spanning-tree vlan <VLAN ID> priority <0-61440> 
# 需要注意的是优先级需要为4096的倍数

除了配置优先级来干预选举,也可以直接使用以下配置命令来直接指定根桥

Switch(config)#spanning-tree vlan 1 root primary # 指定这台交换机为主要根桥
# 下面这条命令是将交换机配置为次要根桥,如果主要根桥寄了这台交换机就会顶上
Switch(config)#spanning-tree vlan 1 root secondary

假设需要将SW1设为根桥,那么我们可以直接将优先级设置为0

SW1(config)#do show spanning-tree
VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    32769
             Address     0002.4A96.0C39
             Cost        19
             Port        2(FastEthernet0/2) 
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    32769  (priority 32768 sys-id-ext 1)
             Address     0090.214B.80C7
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  20

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/1            Altn BLK 19        128.1    P2p
Fa0/2            Root FWD 19        128.2    P2p


SW1(config)#spanning-tree vlan 1 priority 0
SW1(config)#do show spanning-tree
VLAN0001
  Spanning tree enabled protocol ieee
  Root ID    Priority    1
             Address     0090.214B.80C7
             This bridge is the root # 注意这里,SW1现在以及成为根桥了
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec

  Bridge ID  Priority    1  (priority 0 sys-id-ext 1)
             Address     0090.214B.80C7
             Hello Time  2 sec  Max Age 20 sec  Forward Delay 15 sec
             Aging Time  20

Interface        Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
Fa0/1            Desg FWD 19        128.1    P2p
Fa0/2            Desg FWD 19        128.2    P2p

干预根端口的选举

干预根端口选举的方式需要视情况而论(因为根端口的选举流程RPC并不是唯一影响选举的因素),因为选举根端口最先比较的就是RPC,接下来介绍如何修改端口的开销值

SW3(config)#interface <端口号码>
SW3(config-if)#spanning-tree cost <开销值>

假设我们需要将SW2的 Fa0/2 设置为根端口,那么我们只需要将这个端口的开销值调低就行了

SW2(config)#interface f0/2
SW2(config-if)#spanning-tree cost 1

SW2(config-if)#do show spanning-tree interface f0/2
Vlan             Role Sts Cost      Prio.Nbr Type
---------------- ---- --- --------- -------- --------------------------------
VLAN0001         Root FWD 1         128.2     P2p

经过测试配置完后,过段时间 Fa0/2 就会被选举成根端口


[计算机网络] 生成树协议(STP)的原理

本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议。
转载请注明来自 www.kzhik.cn

CCBYNCSA
copyright

评论

kzhik's website


本站靠 Nodejs 和 Golang 以及我写的屎山代码居然运行了 0 天 0 时 0 分 0 秒

logo
赣ICP备2025064215号

Design & Built by kzhik

© 2025 kzhik. All rights reserved.

隐私政策友情链接RSS开往