STP生成树协议

203 阅读11分钟

前言

基于可靠性的考虑 局域网中通常会存在冗余链路 网络中也就产生了路径环路的问题 为了避免形成广播风暴 需要生成树来阻塞冗余链路 消除环路 当主链路故障时 又可以将冗余链路自动切换为转发状态。

知识准备

STP

桥协议数据单元

STP采用的协议报文时BPDU,BPDU中包含了足够的信息来完成生成树的计算

  1. 配置BPDU 用来进行生成树计算和维护生成树拓扑的报文
  2. TCN BPDU 当拓扑发生变化时,用来通知相关设备网络拓扑结构发生变化的报文

STP协议配置BPDU报文携带以下重要信息

  1. 根桥ID(root id)由根桥的优先级和mac地址(设备背板MAC)组成 通过比较根桥id stp决定谁是根桥
  2. 根路径开销(root path cost)到根桥最小的路径开销 如果时根桥,开销为0 非根桥为到达根桥最短路径开销之和
  3. 指定桥ID(desigenated bridge id)生成或转发BPDU的桥id 由桥id和mac地址(设备背板MAC)组成
  4. 指定端口ID(desigenated port id)发送BPDU的端口id,由端口优先级和端口索引号组成

各台设备的各个端口在初始时会生成以自己为根桥的配置消息,根路径开销为0。指定桥ID为自身设备ID,指定端口为本端口。各台设备都向外发送本设备的配置消息,同时也会收到其他设备发送的配置消息。通过比较这些配置消息,交换机进行生成树计算,选举根桥,决定端口角色。

  1. 对于整个stp,唯一的根桥被选举出来
  2. 对于所有非根桥,选举出根端口和指定端口

BPDU报文分析

image.png

  1. 使用组播地址 01-80-C2-00-00-00 image.png

  2. 根桥选举 image.png

    1. root identifier 发送此配置BPDU交换机所认为的根交换机的交换机标识
    2. root path cost 发送此配置BPDU交换机到达根交换机的最短路径总开销,含交换机根端口的开销,不含发送此BPDU的端口开销
    3. bridge identifier 发送此配置BPDU交换机的交换机标识
    4. port identifier 发送此配置BPDU交换机端口的端口标识

BPDU类型

  1. 配置BPDU:configuration

    1. **选举根交换机以及确定每个交换机端口的角色和状态
    2. **在初始化过程中,每个桥都主动发送配置BPDU
    3. **在网络拓扑稳定后 只有跟桥主动发送配置BPDU 其他交换机在收到上游传来的配置BPDU后 才会发送自己的配置BPDU
    4. **发送周期为 hello time 默认2秒 根桥发送BPDU间隔
    5. **老化时间为 max age 默认20秒 保持阻塞的最大时间(没有收到BPDU)
    6. **转发时间 forward delay 15秒 监听和学习的持续时间
    7. message age 配置BPDU每经过一个交换机,Message Age就会加1。如果Message Age 大于Max age,非跟桥就会丢弃该配置BPDU [原因:避免设备太多 stp性能太差]

image.png

image.png

  1. 拓扑变更通告BPDU-TCN BPDU

    1. 下游交换机感知到拓扑发生变化时想上游发送拓扑变化通知

确定端口角色

非根桥交换机在选举指定端口时,分别依据根路径开销、BID、PID

  1. 根桥上的所有端口为指定端口
  2. 每个非根桥选择根路径开销最小的那个端口为根端口,该端口到根桥的路径是此网桥到根桥的最佳路径
  3. 每个物理段选出根路径开销最小的那个网桥作为指定桥,该指定桥到该物理段的端口为指定端口,负责物理段的数据转发
  4. 既不是指定端口也不是根端口的端口置于阻塞状态,不转发普通以太网数据帧

image.png

根路径开销 [到达根桥的总开销 根桥开销为0]

根路径开销确定端口角色

image.png

桥ID作用 [本身的优先级+背板mac]

桥ID确定端口角色 上游指定桥ID最小的选举为指定桥,端口为指定端口

image.png

端口ID作用 [用于选举非根桥端口角色(是否阻塞) 先看开销 然后上游设备桥id 然后端口id]

如果非根桥多个端口经过相同的上游到达桥根,且路径开销相同,则协议比较端口所连上游桥ID,所连指定端口ID最小的选举为根端口

image.png

端口状态

  1. Disable 失效状态 不接收和发送任何报文 导致原因可能是端口物理状态为down或adm

  2. Blocking 处于这个状态的端口不能参与或转发数据报文,但是可以接收BPDU配置消息 不过不能发送配置消息,也不能进行地址学习

  3. listening 处于这个状态的端口不能参与数据转发,可以BPDU配置消息的接收 不学习mac

  4. learning 处于这个状态的端口不能参与数据转发,但是开始地址学习和BPDU配置消息的接收与发送与处理 学习mac

  5. forwarding 可以转发数据 地址学习 BPDU处理、发送与接收

  6. 在选举跟桥时候 所有接口都为阻塞状态discarding

  7. 然后进入listening状态,listening进入learning需要15s,learning进入forwarding需要15s[转发延迟forward delay]

STP故障

  1. 根桥故障 [根桥没有了 重新选举根桥]

    • 非根桥会在BPDU老化之后开始根桥的重新选举(20s)
    • 然后进行30s后链路收敛稳定
  2. 直连链路故障 [设备根端口没有,原阻塞端口变为根端口]

    • 检测到直连链路物理故障后,会将预备端口转换为根端口
    • 预备端口会在30s后恢复到转发状态 [原阻塞端口变为指定端口]
  3. 非直连链路故障 [设备根端口没有, 指定端口对端为阻塞端口]

image.png

  • 预备端口50s后恢复转发状态 SWB会认为自己是根桥 SWC不认为SWB为根桥 会保持阻塞状态 直至20s老化后 30s后变为指定端口
  1. 拓扑改变导致MAC地址表错误[TCN的应用]
    • mac地址表项的默认老化时间是300秒。在这段时间内,交换机无法将数据从其他端口转发
    • 为了拓扑变化与mac表项保持一致 在下游交换机拓扑发生变化时 向上游报送BPDU-TCN报文 上游发送TCA确认 直至根桥 根桥向下游发送TC[TC的通知所有下游交换机把MAC地址表记录老化时间从300秒改为15秒]

image.png

RSTP

RSTP减少了端口从阻塞到转发的时延,尽可能快的恢复网络连通性

端口状态[由原来的五个缩减到三个]

  1. discarding 不转发用户流量,不学习mac地址 [disable blocking listening]
  2. learing 不转发用户流量,学习mac地址
  3. forwarding 转发用户流量,学习mac地址

MSTP

MSTP可以在网络中定义多个生成树实例 每个实例对应多个VLAN 每个实例可维护自己独立的生成树,可以使不同的VLAN具有完全不同的生成树拓扑,不同的VLAN在相同的端口可以具有不同的状态

生成树基本配置

  1. 使能或关闭生成树
[Switch] stp enable
[Switch] stp disable

2. STP工作模式

[Switch] stp mode {stp|rstp|mstp}  // 默认mstp

3. 指定网桥优先级

[Switch] stp [instance <instance-id>] priority <priority> // 缺省32768

4. RSTP指定某端口为边缘端口

[Switch-g1/0/1] stp edged-port enable

5. 配置与维护

[Switch] display stp
[Switch] display stp brief  // stp简略信息
[Switch] display stp root  // 查看stp根桥 (MST-ID ROOT-BID 开销 根桥端口等信息)

MSTP配置举例

image.png

SWA配置

[SWA]vlan 10
[SWA-vlan10]qu
[SWA]vlan 20
[SWA-vlan20]qu
[SWA]interface GigabitEthernet1/0/1
[SWA-GigabitEthernet1/0/1]port link-type trunk
[SWA-GigabitEthernet1/0/1]port trunk permit vlan 10 20
[SWA-GigabitEthernet1/0/1]undo port trunk permit vlan 1
[SWA-GigabitEthernet1/0/1]qu
[SWA]interface GigabitEthernet1/0/2
[SWA-GigabitEthernet1/0/2]port link-type trunk
[SWA-GigabitEthernet1/0/2]port trunk permit vlan 10 20
[SWA-GigabitEthernet1/0/2]undo port trunk permit vlan 1
[SWA-GigabitEthernet1/0/2]qu
[SWA]interface Vlan-interface 10
[SWA-Vlan-interface10]ip address 192.168.1.1 24
[SWA-Vlan-interface10]qu
[SWA]interface Vlan-interface 20
[SWA-Vlan-interface20]ip address 192.168.2.1 24
[SWA-Vlan-interface20]qu

[SWA]stp mode mstp   // 修改stp模式 默认MSTP
[SWA]stp region-configuration
[SWA-mst-region]region-name H3C    // 配置区域名称[可选]
[SWA-mst-region]revision-level 1   // 修订版本 [可选]
[SWA-mst-region]instance 10 vlan 10    // 配置VLAN 10对应MSTI10
[SWA-mst-region]instance 20 vlan 20    // 配置VLAN 20对应MSTI20
[SWA-mst-region]active region-configuration    // 激活配置消息
[SWA-mst-region]qu
[SWA]

[SWA]stp instance 10 root primary   // 配置SWA为实例10首选根桥
[SWA]stp instance 20 root primary   // 配置SWA为实例20首选根桥

SWB配置

[SWB]vlan 10
[SWB-vlan10]port GigabitEthernet 1/0/3
[SWB-vlan10]qu
[SWB]interface GigabitEthernet1/0/1
[SWB-GigabitEthernet1/0/1]port link-type trunk
[SWB-GigabitEthernet1/0/1]port trunk permit vlan 10 20
[SWB-GigabitEthernet1/0/1]undo port trunk permit vlan 1
[SWB-GigabitEthernet1/0/1]qu
[SWB]interface GigabitEthernet1/0/2
[SWB-GigabitEthernet1/0/2]port link-type trunk
[SWB-GigabitEthernet1/0/2]port trunk permit vlan 10 20
[SWB-GigabitEthernet1/0/2]undo port trunk permit vlan 1
[SWB-GigabitEthernet1/0/2]qu

[SWB]stp mode mstp   // 修改stp模式 默认MSTP
[SWB]stp region-configuration
[SWB-mst-region]region-name H3C    // 配置区域名称[可选]
[SWB-mst-region]revision-level 1   // 修订版本 [可选]
[SWB-mst-region]instance 10 vlan 10    // 配置VLAN 10对应MSTI10
[SWB-mst-region]instance 20 vlan 20    // 配置VLAN 20对应MSTI20
[SWB-mst-region]active region-configuration    // 激活配置消息
[SWB-mst-region]qu
[SWB]

SWC配置

[SWC]vlan 20
[SWC-vlan20]port GigabitEthernet 1/0/3
[SWC-vlan20]qu
[SWC]interface GigabitEthernet1/0/1
[SWC-GigabitEthernet1/0/1]port link-type trunk
[SWC-GigabitEthernet1/0/1]port trunk permit vlan 10 20
[SWC-GigabitEthernet1/0/1]undo port trunk permit vlan 1
[SWC-GigabitEthernet1/0/1]qu
[SWC]interface GigabitEthernet1/0/2
[SWC-GigabitEthernet1/0/2]port link-type trunk
[SWC-GigabitEthernet1/0/2]port trunk permit vlan 10 20
[SWC-GigabitEthernet1/0/2]undo port trunk permit vlan 1
[SWC-GigabitEthernet1/0/2]qu

[SWC]stp mode mstp   // 修改stp模式 默认MSTP
[SWC]stp region-configuration
[SWC-mst-region]region-name H3C    // 配置区域名称[可选]
[SWC-mst-region]revision-level 1   // 修订版本 [可选]
[SWC-mst-region]instance 10 vlan 10    // 配置VLAN 10对应MSTI10
[SWC-mst-region]instance 20 vlan 20    // 配置VLAN 20对应MSTI20
[SWC-mst-region]active region-configuration    // 激活配置消息
[SWC-mst-region]qu
[SWC]

显示与维护

[SWA]display stp brief
 MST ID   Port                                Role  STP State   Protection
 0        GigabitEthernet1/0/1                DESI(指定端口)  FORWARDING(转发)  NONE
 0        GigabitEthernet1/0/2                DESI  FORWARDING  NONE
 10       GigabitEthernet1/0/1                DESI  FORWARDING  NONE
 10       GigabitEthernet1/0/2                DESI  FORWARDING  NONE
 20       GigabitEthernet1/0/1                DESI  FORWARDING  NONE
 20       GigabitEthernet1/0/2                DESI  FORWARDING  NONE
[SWA]

[SWB]display stp brief
 MST ID   Port                                Role  STP State   Protection
 0        GigabitEthernet1/0/1                ROOT  FORWARDING  NONE
 0        GigabitEthernet1/0/2                DESI  FORWARDING  NONE
 0        GigabitEthernet1/0/3                DESI  FORWARDING  NONE
 10       GigabitEthernet1/0/1                MAST  FORWARDING  NONE
 10       GigabitEthernet1/0/3                DESI  FORWARDING  NONE
[SWB]

[SWC]display stp brief
 MST ID   Port                                Role  STP State   Protection
 0        GigabitEthernet1/0/1                ROOT(根端口)  FORWARDING  NONE
 0        GigabitEthernet1/0/2                ALTE  DISCARDING(阻塞)  NONE
 0        GigabitEthernet1/0/3                DESI  FORWARDING  NONE
 20       GigabitEthernet1/0/1                MAST  FORWARDING  NONE
 20       GigabitEthernet1/0/3                DESI  FORWARDING  NONE
[SWC]

<PCA>ping -a 192.168.1.2 192.168.1.1
Ping 192.168.1.1 (192.168.1.1) from 192.168.1.2: 56 data bytes, press CTRL_C to break
56 bytes from 192.168.1.1: icmp_seq=0 ttl=255 time=1.064 ms
56 bytes from 192.168.1.1: icmp_seq=1 ttl=255 time=0.964 ms
56 bytes from 192.168.1.1: icmp_seq=2 ttl=255 time=0.765 ms
56 bytes from 192.168.1.1: icmp_seq=3 ttl=255 time=0.649 ms
56 bytes from 192.168.1.1: icmp_seq=4 ttl=255 time=0.960 ms

--- Ping statistics for 192.168.1.1 ---
5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.649/0.880/1.064/0.151 ms
<H3C>%Apr 28 15:37:06:134 2024 H3C PING/6/PING_STATISTICS: Ping statistics for 192.168.1.1: 5 packet(s) transmitted, 5 packet(s) received, 0.0% packet loss, round-trip min/avg/max/std-dev = 0.649/0.880/1.064/0.151 ms.

image.png