生成树和快速生成树 - STP

STP 识别网络中的链路并关闭冗余链路,防止桥接网络上可能出现的网络环路和广播辐射。STP 还为活动链路故障时的自动故障转移提供冗余链路。Cumulus Linux 默认对 VLAN 感知桥接和传统桥接启用 STP。

更改以下 STP 设置时请谨慎,以防止 STP 环路避免问题。

STP 模式

Cumulus Linux 支持 VLAN 感知桥接和传统桥接的 STP。

VLAN 感知桥接的 STP 模式

VLAN 感知桥接 在以下模式下运行:

  • RSTP 模式,该模式跨所有 VLAN 创建生成树的单个实例。RSTP 是默认模式。
  • PVRST 模式,该模式为每个 VLAN 创建生成树的单个实例,并提供改进的链路带宽利用率。

为 VLAN 感知桥接配置模式

RSTP 是 VLAN 感知桥接的默认模式。您可以将模式更改为 PVRST。

您无法为多个 VLAN 感知桥接配置 PVRST 模式。

以下示例在 br_default 桥上设置 PVRST 模式

cumulus@switch:~$ nv set bridge domain br_default stp mode pvrst
cumulus@switch:~$ nv config apply

要将模式恢复为默认设置 (RSTP),请运行 nv unset bridge domain <bridge> stp mode 命令。

/etc/network/interfaces 文件中的 bridge stanza 下添加 mstpctl-pvrst-mode yes,然后运行 ifreload -a 命令。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
    bridge-ports swp1 swp2
    hwaddress 44:38:39:22:01:b1
    bridge-vlan-aware yes
    bridge-vids 10 20
    bridge-pvid 1
    bridge-stp yes
    mstpctl-pvrst-mode yes
...
cumulus@switch:~$ ifreload -a

运行时配置(高级)

运行时配置是非持久性的,这意味着您在此处创建的配置在您重新启动交换机后不会持久存在。

要在运行时将 STP 模式设置为 PVRST

cumulus@switch:~$ sudo mstpctl setmodepvrst

要将模式恢复为默认设置 (RSTP),请运行 sudo mstpctl clearmodepvrst 命令。

PVRST 规模

您可以配置的最大 PVRST 实例数为 300 个 VLAN,带 24 个端口。rpvst trap 组的默认转发速率和突发速率为 2000 pps,如下面的 nv show system control-plane policer rpvst 命令输出所示

cumulus@switch:~$ nv show system control-plane policer rpvst
                 operational  applied
---------------  -----------  -------
burst            2000         2000
rate             2000         2000
state            on           on
statistics
  policer-cbs    11
  policer-cir    2000
  policer-id     22
  to-cpu-bytes   0
  to-cpu-pkts    0
  trap-group-id  4
  violated-pkts  0

如果您启用 PVRST 模式,您必须修改 rpvst trap 组设置,以通过将转发速率和突发速率设置为 7200 pps 来扩展到最大 PVRST 实例数

cumulus@switch:~$ nv set system control-plane policer rpvst rate 7200
cumulus@switch:~$ nv set system control-plane policer rpvst burst 7200
cumulus@switch:~$ nv config apply
  1. 编辑 /etc/cumulus/control-plane/policers.conf 文件以将 copp.rpvst.ratecopp.rpvst.burst 参数更改为 7200

    cumulus@switch:~$ sudo nano /etc/cumulus/control-plane/policers.conf
    ...
    copp.rpvst.enable = TRUE
    copp.rpvst.rate = 7200
    copp.rpvst.burst = 7200
    ...
    
  2. 运行以下命令以应用更改

    cumulus@switch:~$ /usr/lib/cumulus/switchdctl --load /etc/cumulus/control-plane/policers.conf
    

传统桥接的 STP 模式

传统桥接 在以下模式下运行:

  • PVST 模式,该模式为桥创建生成树实例。
  • PVRST 模式,该模式支持每个生成树实例的 RSTP 增强功能。要将 PVRST 与传统桥接一起使用,您必须创建与未标记的本机 VLAN 相对应的桥接,并且所有物理交换机端口必须是同一 VLAN 的一部分。

  • 为了获得最大的互操作性,当连接到具有本机 VLAN 配置的交换机时,您必须将本机 VLAN 配置为 VLAN 1。
  • NVUE 不提供配置传统模式桥接的命令。

STP 互操作性

本节讨论 STP 互操作性。

RSTP 和 STP 互操作性

如果运行 RSTP (802.1w) 的桥接接收到通用 STP (802.1D) BPDU,它会自动回退到 802.1D。

RSTP 和 PVRST 互操作性

RSTP 域在本机 VLAN 上发送 BPDU,而 PVRST 在每个 VLAN 上以及 IEEE BPDU 一起发送 BPDU。为了使这两种协议协同工作,您需要在 RSTP 到 PVRST 域之间的链路上启用本机 VLAN;生成树根据本机 VLAN 参数构建。

RSTP 协议不在其他 VLAN 上发送或解析 BPDU,而是在网络上泛洪 BPDU,使 PVRST 域能够维护其生成树拓扑并提供无环路网络。

  • 要启用网络中正确的 BPDU 交换,请确保允许 RSTP 和 PVRST 域之间的链路上的所有参与 PVRST 域的 VLAN。
  • 当将 RSTP 与现有 PVRST 网络一起使用时,您需要在 PVRST 域上定义根桥。降低 PVRST 域上的优先级或将 RSTP 交换机的优先级更改为更高的数字。
  • 当使用 RSTP 将 VLAN 感知桥接连接到专有的 PVST+ 交换机时,您必须在互连它们的所有 802.1Q 中继上允许 VLAN 1,无论配置的本机 VLAN 如何。只有 VLAN 1 才能使交换机将 BPDU 帧寻址到 IEEE 组播 MAC 地址。

RSTP 和 MST 互操作性

RSTP 与 MST 无缝协作,创建生成树的单个实例,该实例在本机 VLAN 上传输 BPDU。

RSTP 将 MST 域视为一个巨型交换机,而 MST 将 RSTP 域视为不同的区域。为了确保区域之间的正确通信,MST 创建了一个 CST,它连接所有边界交换机并形成 MST 域的整体视图。由于 CST 中的更改必须反映在所有区域中,因此 RSTP 树存在于 CST 中,以确保 RSTP 域上的更改在 CST 域中。RSTP 域上的拓扑更改会影响网络的其余部分,但会将 RSTP 域中发生的每个更改通知 MST 域,从而确保无环路网络。

通过更改相关 MST 交换机上的优先级,在 MST 域内配置根桥。当 MST 检测到 RSTP 链路时,它会回退到 RSTP 模式。MST 域选择到 CST 根桥成本最低的交换机作为 CIST 根桥。

带 MLAG 的 RSTP

多个生成树实例使交换机能够负载均衡并为不同的 VLAN 使用不同的链路。使用 RSTP,只有一个生成树实例。为了更好地利用链路,您可以在连接到 MST 域的交换机上配置 MLAG,并将这些接口设置为 MLAG 端口。MST 域认为它连接到单个交换机,并利用连接到它的所有链路。负载均衡取决于端口通道哈希机制,而不是不同的生成树实例,并使用 RSTP 到 MST 域之间的所有链路。有关配置 MLAG 的信息,请参阅多机箱链路聚合 - MLAG

可选配置

以下部分提供可选的配置命令。

生成树优先级

如果您在默认模式 (RSTP) 下为 VLAN 感知桥接运行 STP,并且您有多个生成树实例(MSTI 0,也称为公共生成树或 CST),您可以设置桥接的树优先级。优先级最低的桥接是根桥。优先级必须是介于 061440 之间的数字,并且必须是 4096 的倍数。默认值为 32768

如果您正在运行 MLAG 并且有多个桥接,则两个对等交换机上所有桥接的 STP 优先级必须相同。

以下示例将树优先级设置为 8192

cumulus@switch:~$ nv set bridge domain br_default stp priority 8192
cumulus@switch:~$ nv config apply

/etc/network/interfaces 文件中的 bridge stanza 下配置树优先级 (mstpctl-treeprio),然后运行 ifreload -a 命令。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto bridge
iface bridge
    # bridge-ports includes all ports related to VxLAN and CLAG.
    # does not include the Peerlink.4094 subinterface
    bridge-ports bond01 bond02 peerlink vni13 vni24 vxlan4001
    bridge-pvid 1
    bridge-vids 13 24
    bridge-vlan-aware yes
    mstpctl-treeprio 8192
...
cumulus@switch:~$ ifreload -a

运行时配置(高级)

运行时配置是非持久性的,这意味着您在此处创建的配置在您重新启动交换机后不会持久存在。

运行 sudo mstpctl settreeprio <bridge> <MSTI> <priority> 命令

cumulus@switch:~$ sudo mstpctl settreeprio br_default 0 8192

Cumulus Linux 仅支持 MSTI 0。它不支持 MSTI 1 到 15。

端口路径成本

您可以配置桥接中接口的路径成本,以影响生成树转发路径。您可以指定介于 1 和 200000000 之间的值。

对于 PVRST 模式,VLAN 的端口成本优先于端口的成本。如果您未配置 VLAN 的端口成本,则 Cumulus Linux 会将端口成本应用于 VLAN 中的所有接口。如果您未配置 VLAN 的端口成本或端口的成本,则 Cumulus Linux 会根据链路速度确定端口成本。

以下示例将路径成本设置为 4000。

cumulus@switch:~$ nv set interface swp1 bridge domain br_default stp path-cost 4000
cumulus@switch:~$ nv config apply

/etc/network/interfaces 文件的接口 stanza 下添加 mstpctl-portpathcost 参数。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp1
iface swp1
    mstpctl-bpduguard yes
    mstpctl-portadminedge yes
    mstpctl-portpathcost 4000
...

运行时配置(高级)

运行时配置是非持久性的,这意味着您在此处创建的配置在您重新启动交换机后不会持久存在。

要在运行时将路径成本设置为 4000

cumulus@switch:~$ sudo mstpctl setportpathcost br_default swp1 4000

PVRST 桥接优先级

您可以设置 VLAN 的生成树桥接优先级。优先级必须是介于 4096 和 61440 之间的数字,并且必须是 4096 的倍数。默认值为 32768。

以下示例将 VLAN 10 的桥接优先级设置为 4096,将 VLAN 20 的桥接优先级设置为 61440

cumulus@switch:~$ nv set bridge domain br_default stp vlan 10 bridge-priority 4096
cumulus@switch:~$ nv set bridge domain br_default stp vlan 20 bridge-priority 61440
cumulus@switch:~$ nv config apply

以下示例将 VLAN 10、20 和 30 的桥接优先级设置为 61440

cumulus@switch:~$ nv set bridge domain br_default stp vlan 10,20,30 bridge-priority 61440
cumulus@switch:~$ nv config apply

要为 VLAN 范围设置桥接优先级,请使用连字符 (-)。例如,要将 VLAN 10 到 VLAN 30 的桥接优先级设置为 61440

cumulus@switch:~$ nv set bridge domain br_default stp vlan 10-30 bridge-priority 61440
cumulus@switch:~$ nv config apply

/etc/network/interfaces 文件的 bridge stanza 下添加 bridge-stp-vlan-priority 参数,然后运行 ifreload -a 命令。

以下示例将 VLAN 10 的桥接优先级设置为 4096,将 VLAN 20 的桥接优先级设置为 61440

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
    bridge-ports swp1 swp2
    hwaddress 44:38:39:22:01:b1
    bridge-vlan-aware yes
    bridge-vids 10 20
    bridge-pvid 1
    bridge-stp yes
    mstpctl-pvrst-mode yes
    bridge-stp-vlan-priority 10=4096 20=61440
...
cumulus@switch:~$ ifreload -a

以下示例将 VLAN 10、20 和 30 的桥接优先级设置为 61440

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
    bridge-ports swp1 swp2
    hwaddress 44:38:39:22:01:b1
    bridge-vlan-aware yes
    bridge-vids 10 20
    bridge-pvid 1
    bridge-stp yes
    mstpctl-pvrst-mode yes
    bridge-stp-vlan-priority 10=61440 20=61440 30=61440
...
cumulus@switch:~$ ifreload -a

要为 VLAN 范围设置桥接优先级,请使用连字符 (-)。例如,要将 VLAN 10 到 VLAN 30 的桥接优先级设置为 61440

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
    bridge-ports swp1 swp2
    hwaddress 44:38:39:22:01:b1
    bridge-vlan-aware yes
    bridge-vids 10 20
    bridge-pvid 1
    bridge-stp yes
    mstpctl-pvrst-mode yes
    bridge-stp-vlan-priority 10-30=61440
...
cumulus@switch:~$ ifreload -a

PVRST 定时器

您可以设置以下 PVRST 定时器:

  • 最大寿命,这是交换机在丢弃 STP 信息之前保留 STP 信息的最大时长。您可以设置介于 6 到 40 秒之间的值。默认值为 20 秒。
  • Hello 时间,这是向其他交换机广播 Hello 消息的频率。您可以设置介于 1 到 10 秒之间的值。默认值为 2 秒。
  • 转发延迟,这是将生成树状态从阻塞更改为转发之前的延迟。您可以设置介于 4 到 30 秒之间的值。默认值为 15 秒。

最大寿命定时器必须等于或小于两倍的转发延迟减去一秒(bridge max age <= 2 * bridge foward delay - 1 second)。

以下示例将 VLAN 10、20 和 30 的最大寿命设置为 6 秒,Hello 时间设置为 4 秒,转发延迟设置为 4 秒。

cumulus@switch:~$ nv set bridge domain br_default stp vlan 10,20,30 max-age 6
cumulus@switch:~$ nv set bridge domain br_default stp vlan 10,20,30 hello-time 4 
cumulus@switch:~$ nv set bridge domain br_default stp vlan 10,20,30 forward-delay 4
cumulus@switch:~$ nv config apply

要为 VLAN 范围设置 PVRST 定时器,请使用连字符 (-)。例如 nv set bridge domain br_default stp vlan 10-30 max-age 6

/etc/network/interfaces 文件中的 bridge stanza 下添加 bridge-stp-vlan-maxagebridge-stp-vlan-hellobridge-stp-vlan-fdelay 参数,然后运行 ifreload -a 命令。

以下示例将 VLAN 10、20 和 30 的最大寿命设置为 6 秒,Hello 时间设置为 4 秒,转发延迟设置为 4 秒。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
    bridge-ports swp1 swp2
    hwaddress 44:38:39:22:01:b1
    bridge-vlan-aware yes
    bridge-vids 10 20
    bridge-pvid 1
    bridge-stp yes
    mstpctl-pvrst-mode yes
    bridge-stp-vlan-priority 10=4096
    bridge-stp-vlan-hello 10=4 20=4 30=4
    bridge-stp-vlan-fdelay 10=4 20=4 30=4
    bridge-stp-vlan-maxage 10=6 20=6 30=6
...
cumulus@switch:~$ ifreload -a

要为 VLAN 范围设置 PVRST 定时器,请使用连字符 (-)。例如 bridge-stp-vlan-hello 10-30=4

PVRST 端口设置

您可以为每个 VLAN 配置接口端口优先级和路径成本,以影响生成树转发路径。您可以指定介于 1 和 200000000 之间的路径成本。您可以指定介于 0 和 240 之间的优先级;该值必须是 16 的倍数。

以下示例将 VLAN 10 的路径成本设置为 4000,优先级设置为 240。

cumulus@switch:~$ nv set interface swp1 bridge domain br_default stp vlan 10 path-cost 4000
cumulus@switch:~$ nv set interface swp1 bridge domain br_default stp vlan 10 priority 240
cumulus@switch:~$ nv config apply

/etc/network/interfaces 文件的接口 stanza 下添加 mstpctl-port-vlan-path-costmstpctl-port-vlan-priority 参数

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp1
iface swp1
    bridge-access 10
    mstpctl-bpduguard yes
    mstpctl-portadminedge yes
    mstpctl-port-vlan-path-cost 10=4000
    mstpctl-port-vlan-priority 10=240
...

PortAdminEdge(PortFast 模式)

PortAdminEdge 等同于其他供应商提供的 PortFast 功能。它启用或禁用桥接中端口的初始边缘状态。所有具有 PortAdminEdge 的端口都绕过侦听和学习状态,直接进入转发状态。

如果您不将 PortAdminEdge 模式与 BPDU 保护 一起使用,则会导致环路。

您通常将边缘端口配置为简单终端主机的接入端口。在数据中心中,边缘端口连接到服务器,这些服务器传递标记和未标记的流量。

以下示例命令为 swp5 配置 PortAdminEdge 和 BPDU 保护

cumulus@switch:~$ nv set interface swp5 bridge domain br_default stp admin-edge on
cumulus@switch:~$ nv set interface swp5 bridge domain br_default stp bpdu-guard on
cumulus@switch:~$ nv config apply

/etc/network/interfaces 文件中的交换机端口接口 stanza 下配置 PortAdminEdge 和 BPDU 保护,然后运行 ifreload -a 命令。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp5
iface swp5
    mstpctl-bpduguard yes
    mstpctl-portadminedge yes
...
cumulus@switch:~$ sudo ifreload -a

运行时配置(高级)

运行时配置是非持久性的,这意味着您在此处创建的配置在您重新启动交换机后不会持久存在。

要在运行时配置 PortAdminEdge 和 BPDU 保护,请运行以下命令

cumulus@switch:~$ sudo mstpctl setportadminedge br2 swp1 yes
cumulus@switch:~$ sudo mstpctl setbpduguard br2 swp1 yes

PortAutoEdge

PortAutoEdge 是对标准 PortAdminEdge (PortFast) 模式的增强,它允许自动检测边缘端口。PortAutoEdge 启用和禁用端口在桥接中自动转换到边缘状态和从边缘状态转换。

边缘端口和接入端口并不相同。边缘端口直接转换到转发状态,并跳过侦听和学习阶段。当边缘端口链路状态更改时,不会生成上游拓扑更改通知。接入端口仅转发未标记的流量;但是,边缘端口没有这样的限制,边缘端口可以转发标记和未标记的流量。

当具有 PortAutoEdge 的端口接收到 BPDU 时,该端口将停止处于边缘端口状态,并转换为正常 STP 端口。当接口不再接收 BPDU 时,该端口将变为边缘端口,并在恢复转发之前经历丢弃和学习状态。

Cumulus Linux 默认启用 PortAutoEdge。

以下示例命令禁用 swp1 上的 PortAutoEdge

cumulus@switch:~$ nv set interface swp1 bridge domain br_default stp auto-edge off
cumulus@switch:~$ nv config apply

编辑 /etc/network/interfaces 文件中的交换机端口接口 stanza,添加 mstpctl-portautoedge no 行,然后运行 ifreload -a 命令。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp1
iface swp1
    alias to Server01
    # Port to Server02
    mstpctl-portautoedge no
...
cumulus@switch:~$ sudo ifreload -a

以下示例命令重新启用 swp1 上的 PortAutoEdge

cumulus@switch:~$ nv set interface swp1 bridge domain br_default stp auto-edge on
cumulus@switch:~$ nv config apply
编辑 /etc/network/interfaces 文件中的交换机端口接口 stanza,删除 mstpctl-portautoedge no,然后运行 ifreload -a 命令。

BPDU 保护

您可以配置 BPDU 保护 以保护生成树拓扑免受未经授权的设备影响转发路径。例如,如果您向叶交换机的接入端口添加新主机,并且主机发送 STP BPDU,则 BPDU 保护可防止环境中出现不希望的拓扑更改。

以下示例命令为 swp5 设置 BPDU 保护

cumulus@switch:~$ nv set interface swp5 bridge domain br_default stp bpdu-guard on
cumulus@switch:~$ nv config apply

编辑 /etc/network/interfaces 文件中的交换机端口接口 stanza,添加 mstpctl-bpduguard yes 行,然后运行 ifreload -a 命令。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp5
iface swp5
    mstpctl-bpduguard yes
...
cumulus@switch:~$ sudo ifreload -a

要查看端口是否已启用 BPDU 保护,或者端口是否接收到 BPDU

cumulus@switch:~$ nv show bridge domain br_default stp
cumulus@switch:~$ mstpctl showportdetail br_default
bridge:swp5 CIST info
  enabled            no                      role                 Disabled
  port id            8.001                   state                discarding
  external port cost 305                     admin external cost  0
  internal port cost 305                     admin internal cost  0
  designated root    8.000.6C:64:1A:00:4F:9C dsgn external cost   0
  dsgn regional root 8.000.6C:64:1A:00:4F:9C dsgn internal cost   0
  designated bridge  8.000.6C:64:1A:00:4F:9C designated port      8.001
  admin edge port    no                      auto edge port       yes
  oper edge port     no                      topology change ack  no
  point-to-point     yes                     admin point-to-point auto
  restricted role    no                      restricted TCN       no
  port hello time    10                      disputed             no
  bpdu guard port    yes                     bpdu guard error     yes
  network port       no                      BA inconsistent      no
  Num TX BPDU        3                       Num TX TCN           2
  Num RX BPDU        488                     Num RX TCN           2
  Num Transition FWD 1                       Num Transition BLK   2
  bpdufilter port    no
  clag ISL           no                      clag ISL Oper UP     no
  clag role          unknown                 clag dual conn mac   0:0:0:0:0:0
  clag remote portID F.FFF                   clag system mac      0:0:0:0:0:0

如果端口接收到 BPDU,它将进入 protodown 状态,这会导致接口上的本地 OPER DOWN(载波丢失)。Cumulus Linux 还将 protodown 原因设置为 bpduguard,并在 /var/log/syslog 中记录日志消息。

要显示端口 protodown 的原因,请运行 ip -p -j link show <interface> 命令。

cumulus@switch:~$ ip -p -j link show swp5

要从 protodown 状态恢复,请使用 NVUE nv action clear interface <interface> bridge domain <domain> stp bpduguardviolation 命令或 Linux mstpctl clearbpduguardviolation <bridge> <interface> 命令从接口中删除 protodown 原因和 protodown。

  • 如果连接的终端站上的配置未解决,则启动禁用的端口不会纠正问题。
  • 如果在接口处于 protodown 状态时从桥接中删除该接口,则必须使用 ip link set <interface>> protodown off protodown_reason stp off 命令从 protodown 状态恢复。

桥接保证

在运行 RSTP 的点对点链路上,如果您想检测单向链路并将端口置于丢弃状态,您可以通过启用端口类型网络在端口上启用桥接保证。然后,端口处于桥接保证不一致状态,直到它收到来自对等方的 BPDU。您需要在链路的两端配置端口类型网络以实现桥接保证。

Cumulus Linux 默认禁用桥接保证。

以下示例命令在 swp1 上启用桥接保证

cumulus@switch:~$ nv set interface swp5 bridge domain br_default stp network on
cumulus@switch:~$ nv config apply

编辑 /etc/network/interfaces 文件中的交换机端口接口 stanza,添加 mstpctl-portnetwork yes 行,然后运行 ifreload -a 命令。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp5
iface swp5
    mstpctl-portnetwork yes
...
cumulus@switch:~$ sudo ifreload -a

运行时配置(高级)

运行时配置是非持久性的,这意味着您在此处创建的配置在您重新启动交换机后不会持久存在。

要在运行时启用桥接保证,请运行 mstpctl

cumulus@switch:~$ sudo mstpctl setportnetwork br1007 swp1.1007 yes

cumulus@switch:~$ sudo mstpctl showportdetail br1007 swp1.1007 | grep network
  network port       yes                     BA inconsistent      yes

要监控桥接保证消息的日志,请运行以下命令

cumulus@switch:~$ sudo grep -in assurance /var/log/syslog | grep mstp
  1365:Jun 25 18:03:17 mstpd: br1007:swp1.1007 Bridge assurance inconsistent

BPDU 过滤器

您可以在交换机端口上启用 bpdufilter,这将双向过滤 BPDU。这会在端口上禁用 STP,因为没有 BPDU 通过。

使用 BDPU 过滤器有时会导致第 2 层环路。请谨慎使用此功能。

以下示例命令在 swp6 上配置 BPDU 过滤器

cumulus@switch:~$ nv set interface swp6 bridge domain br_default stp bpdu-filter on
cumulus@switch:~$ nv config apply

编辑 /etc/network/interfaces 文件中的交换机端口接口 stanza,添加 mstpctl-portbpdufilter yes 行,然后运行 ifreload -a 命令。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp6
iface swp6
    mstpctl-portbpdufilter yes
...
cumulus@switch:~$ sudo ifreload -a

运行时配置(高级)

运行时配置是非持久性的,这意味着您在此处创建的配置在您重新启动交换机后不会持久存在。

要在运行时启用 BPDU 过滤器,请运行 mstpctl。例如

cumulus@switch:~$ sudo mstpctl setportbpdufilter br100 swp1.100=yes swp2.100=yes

受限角色

要在桥接中启用接口以承担受限角色

cumulus@switch:~$ nv set interface swp1 bridge domain br_default stp restrrole on
cumulus@switch:~$ nv config apply

编辑 /etc/network/interfaces 文件中的交换机端口接口 stanza,添加 mstpctl-portrestrrole yes 行,然后运行 ifreload -a 命令。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto swp6
iface swp6
    mstpctl-portrestrrole yes
...
cumulus@switch:~$ sudo ifreload -a

强制版本设置

默认情况下,交换机发送 RSTP 类型 2 BPDU。当您需要与其他系统互操作时,您可以将交换机配置为发送 BPDU 类型 0 STP 配置 BPDU。

cumulus@switch:~$ nv set bridge domain br_default stp force-protocol-version stp
cumulus@switch:~$ nv config apply

要将设置更改回默认设置,请运行 nv set bridge domain <domain> stp force-protocol-version rstp 命令。

编辑 /etc/network/interfaces 文件中的 bridge stanza,添加 mstpctl-forcevers stp 行,然后运行 ifreload -a 命令。

cumulus@switch:~$ sudo nano /etc/network/interfaces
...
auto br_default
iface br_default
    hwaddress 08:00:27:60:36:0b
    bridge-vlan-aware yes
    bridge-vids 10
    bridge-pvid 1
    bridge-stp yes
    bridge-mcsnoop no
    mstpctl-forcevers stp
    mstpctl-pvrst-mode yes
...
cumulus@switch:~$ sudo ifreload -a

要将设置更改回默认设置,请将 bridge stanza 中的行更改为 mstpctl-forcevers rstp,然后运行 ifreload -a 命令。

其他 STP 设置

下表描述了 Cumulus Linux 中可用的其他 STP 配置参数。您可以通过编辑 /etc/network/interfaces 文件手动设置这些可选参数。Cumulus Linux 不为这些参数提供 NVUE 命令。

IEEE 802.1D802.1Q 规范描述了 STP 参数。有关 mstpctl 和其他供应商之间的 STP 参数配置的比较,请阅读此知识库文章

参数描述
mstpctl-maxage设置桥接的最大寿命(秒)。默认值为 20。最大寿命定时器必须等于或小于两倍的转发延迟减去一秒(bridge max age <= 2 * bridge foward delay - 1 second)。
将此参数添加到 /etc/network/interfaces 文件的 bridge stanza。
如果您在 PVRST 模式下运行 STP,请参阅 VLAN 感知桥接的 PVRST 模式
mstpctl-fdelay设置桥接转发延迟时间(秒)。默认值为 15。两倍的转发延迟减去一秒必须大于或等于最大寿命(2 * bridge foward delay - 1 second >= bridge max age)。
将此参数添加到 /etc/network/interfaces 文件的 bridge stanza。
如果您在 PVRST 模式下运行 STP,请参阅 VLAN 感知桥接的 PVRST 模式
mstpctl-maxhops设置桥接的最大跳数。默认值为 20。
将此参数添加到 /etc/network/interfaces 文件的 bridge stanza。
此参数不适用于 PVRST 模式。
mstpctl-txholdcount设置桥接传输保持计数。默认值为 6 秒。
将此参数添加到 /etc/network/interfaces 文件的 bridge stanza。
在 PVRST 模式下,传输保持计数适用于 VLAN 中的每个接口。
mstpctl-hello设置桥接 Hello 时间(秒)。默认值为 2。
将此参数添加到 /etc/network/interfaces 文件的 bridge stanza。
如果您在 PVRST 模式下运行 STP,请参阅 VLAN 感知桥接的 PVRST 模式
mstpctl-portp2p启用或禁用桥接中接口的点对点检测模式。
将此参数添加到 /etc/network/interfaces 文件的接口 stanza。
mstpctl-portrestrtcn启用或禁用桥接中的接口以传播接收到的拓扑更改通知。默认值为否。
将此参数添加到 /etc/network/interfaces 文件的接口 stanza。
mstpctl-treeportcost将生成树端口成本设置为 0 到 255 之间的值。默认值为 0。
将此参数添加到 /etc/network/interfaces 文件的接口 stanza。
此参数仅适用于 RSTP 模式。

/etc/network/interfaces 文件中设置 STP 参数后,请务必运行 sudo ifreload -a 命令。

故障排除

显示桥接的 STP 状态

cumulus@switch:~$ nv show bridge domain br_default stp state
   operational  applied
   -----------  -------
   up           up

显示桥接接口的配置信息

cumulus@switch:~$ nv show interface swp1 bridge domain br_default
               operational  applied
-------------  -----------  -------
access         10           10     
learning       on           on     
stp                                
  admin-edge   on           on     
  auto-edge    on           on     
  bpdu-filter  off          off    
  bpdu-guard   on           on     
  network      off          off    
  path-cost    20000               
  restrrole    off          off    
  [vlan]                           
  state        forwarding 

显示桥接接口的 STP 配置信息

cumulus@switch:~$  nv show interface swp1 bridge domain br_default stp
             operational  applied
-----------  -----------  -------
admin-edge   on           on     
auto-edge    on           on     
bpdu-filter  off          off    
bpdu-guard   on           on     
network      off          off    
path-cost    20000               
restrrole    off          off    
[vlan]                           
state        forwarding

要显示桥接的 STP 信息,请运行 nv show bridge domain br_default stp 命令。

以下示例显示 PVRST 模式下的输出

cumulus@switch:~$ nv show bridge domain br_default stp
Bridge
    mode    : pvrst
Vlan              Bridge ID               HelloTime   MaxAge      FwdDly   
        Priority         MAC-addr        (seconds)    (seconds)   (seconds)  
-----  ------------------------------    ----------  ----------  ----------
1      32769   44:38:39:22:01:7A            2           20          15     
10     4106    44:38:39:22:01:7A            4           6           4      
20     61460   44:38:39:22:01:7A            2           20          15     
30     32798   44:38:39:22:01:7A            2           20          15 

以下示例显示 RSTP 模式下的输出

cumulus@switch:~$ nv show bridge domain br_default stp
Bridge
    mode    : rstp
    priority: 32768
    state   : up
Bridge ID                priority    : 32768   mac-address       : 44:38:39:22:01:8A   
Designated Root ID       priority    : 32768   mac-address       : 44:38:39:22:01:8A   root-port  : -
Timers                   hello-time  : 2s      forward-delay     : 15s                 max-age    : 20s
Max Hops                 max-hops    : 20      
Topology Change Network  count       : 1       time since change : 838s
                         change port : swp3    last change port  : swp2

Interface info: swp1
---------------------------------
port-id            : 128.1(priority: 128, num: 1)
role               : Designated
state              : forwarding
port-path-cost     : 20000
fdb-flush          : no
disputed           : no
...

显示桥接中 VLAN 的 PVRST 信息

cumulus@switch:~$ nv show bridge domain br_default stp vlan
Bridge Vlan: 1
--------------------------------------------------------------------------
Bridge ID                priority    : 32769   mac-address       : 44:38:39:22:01:B1   
Designated Root ID       priority    : 32769   mac-address       : 44:38:39:22:01:B1   root-port  : -
Timers                   hello-time  : 2s      forward-delay     : 15s                 max-age    : 20s
Topology Change Network  count       : 0       time since change : 1152s
                         change port : None    last change port  : None

Bridge Vlan: 10
--------------------------------------------------------------------------
Bridge ID                priority    : 4106    mac-address       : 44:38:39:22:01:B1   
Designated Root ID       priority    : 4106    mac-address       : 44:38:39:22:01:B1   root-port  : -
Timers                   hello-time  : 4s      forward-delay     : 4s                  max-age    : 6s
Topology Change Network  count       : 1       time since change : 1147s
                         change port : swp2    last change port  : swp1

Bridge Vlan: 20
--------------------------------------------------------------------------
Bridge ID                priority    : 32788   mac-address       : 44:38:39:22:01:B1   
Designated Root ID       priority    : 32788   mac-address       : 44:38:39:22:01:B1   root-port  : -
Timers                   hello-time  : 2s      forward-delay     : 15s                 max-age    : 20s
Topology Change Network  count       : 1       time since change : 1147s
                         change port : swp2    last change port  : swp1

显示特定桥接 VLAN 的 PVRST 信息

cumulus@switch:~$ nv show bridge domain br_default stp vlan 10
Bridge ID                priority    : 4106    mac-address       : 44:38:39:22:01:B1   
Designated Root ID       priority    : 4106    mac-address       : 44:38:39:22:01:B1   root-port  : -
Timers                   hello-time  : 4s      forward-delay     : 4s                  max-age    : 6s
Topology Change Network  count       : 1       time since change : 1174s
                         change port : swp2    last change port  : swp1

Interface info: swp1
---------------------------------
port-id            : 8.001
role               : Designated
state              : forwarding
port-path-cost     : 20000
tx-hold-count      : 6
port-hello-time    : 4s
fdb-flush          : no
disputed           : no

Interface info: swp2
---------------------------------
port-id            : 8.002
role               : Designated
state              : forwarding
port-path-cost     : 20000
tx-hold-count      : 6
port-hello-time    : 4s
fdb-flush          : no
disputed           : no

显示桥接中端口的 STP 信息

cumulus@switch:~$ nv show bridge domain br_default stp port
Interface Info: bond1
--------------------------------------------------------------------------
enabled              : yes         mcheck            : no
admin-edge-port      : no          bpdu-guard-port   : no
auto-edge-port       : yes         bpdu-filter-port  : no
oper-edge-port       : yes         bpdu-guard-error  : no
admin-port-path-cost : 0           restricted-tcn    : no
port-path-cost       : 20000       restricted-role   : no
network-port         : no          ba-inconsistent   : no
clag-role            : primary     clag-system-mac   : 44:38:39:BE:EF:AA
clag-isl             : no          clag-isl-oper-up  : no
clag-dual-conn-mac   : 00:00:00:00:00:00

Interface Info: bond2
--------------------------------------------------------------------------
enabled              : yes         mcheck            : no
admin-edge-port      : no          bpdu-guard-port   : no
auto-edge-port       : yes         bpdu-filter-port  : no
oper-edge-port       : yes         bpdu-guard-error  : no
admin-port-path-cost : 0           restricted-tcn    : no
port-path-cost       : 20000       restricted-role   : no
network-port         : no          ba-inconsistent   : no
clag-role            : primary     clag-system-mac   : 44:38:39:BE:EF:AA
clag-isl             : no          clag-isl-oper-up  : no
clag-dual-conn-mac   : 00:00:00:00:00:00

Interface Info: bond3
--------------------------------------------------------------------------
enabled              : yes         mcheck            : no
admin-edge-port      : no          bpdu-guard-port   : no
auto-edge-port       : yes         bpdu-filter-port  : no
oper-edge-port       : yes         bpdu-guard-error  : no
admin-port-path-cost : 0           restricted-tcn    : no
port-path-cost       : 20000       restricted-role   : no
network-port         : no          ba-inconsistent   : no
clag-role            : primary     clag-system-mac   : 44:38:39:BE:EF:AA
clag-isl             : no          clag-isl-oper-up  : no
clag-dual-conn-mac   : 00:00:00:00:00:00
...

显示特定桥接端口的 STP 信息

cumulus@switch:~$ nv show bridge domain br_default stp port swp1
enabled              : yes         mcheck            : no
admin-edge-port      : no          bpdu-guard-port   : no
auto-edge-port       : yes         bpdu-filter-port  : no
oper-edge-port       : yes         bpdu-guard-error  : no
admin-port-path-cost : 0           restricted-tcn    : no
port-path-cost       : 20000       restricted-role   : no
network-port         : no          ba-inconsistent   : no
clag-role            : primary     clag-system-mac   : 44:38:39:BE:EF:AA
clag-isl             : no          clag-isl-oper-up  : no
clag-dual-conn-mac   : 00:00:00:00:00:00

要显示桥接的根 ID 和根成本,请运行 nv show bridge domain <bridge> stp root 命令。

以下命令显示 PVRST 模式的输出

cumulus@switch:~$ nv show bridge domain br_default stp root
instance             root-id                root-cost  hello-time  fwd-dly     max-age      root-port
           Priority        MAC-addr                     (seconds)   (seconds)   (seconds)  
-------- --------------------------------  ----------  ----------  ----------  ----------  ----------
1        32769   44:38:39:22:01:7A            0           2           15          20          -      
10       4106    44:38:39:22:01:7A            0           4           4           6           -      
20       61460   44:38:39:22:01:7A            0           2           15          20          -      
30       32798   44:38:39:22:01:7A            0           2           15          20          -    

以下命令显示 RSTP 模式的输出

cumulus@switch:~$ nv show bridge domain br_default stp root
instance             root-id                root-cost  hello-time  fwd-dly     max-age      root-port
          Priority        MAC-addr                     (seconds)   (seconds)   (seconds)  
-------- --------------------------------  ----------  ----------  ----------  ----------  ----------
CIST     32768      44:38:39:22:01:8A            0           2           15          20          -      

显示网桥的 STP 计数器

cumulus@switch:~$ nv show bridge domain br_default stp counters
port  tx-bpdu  rx-bpdu  tx-tcn  rx-tcn  fwd-trans  blk-trans  tx-pvst-tnl-bpdu  rx-pvst-tnl-bpdu
----  -------  -------  ------  ------  ---------  ---------  ----------------  ----------------
swp1  182      0        0       0       1          0          91                0               
swp2  296      0        2       0       2          1          297               0               
swp3  296      0        7       0       4          7          539               0

显示网桥中所有被阻塞的端口

cumulus@switch:~$ nv show bridge domain br_default stp blocked-ports

要显示 mstpd 网桥端口状态,请运行 mstpctl showstpport <bridge> 命令。

以下命令显示 RSTP 模式的输出

cumulus@switch:~$ sudo mstpctl showstpport br_default
 E swp1  8.001 forw 8.000.44:38:39:22:01:8A 8.000.44:38:39:22:01:8A 8.001 Desg
 E swp2  8.002 forw 8.000.44:38:39:22:01:8A 8.000.44:38:39:22:01:8A 8.002 Desg
 E swp3  8.003 forw 8.000.44:38:39:22:01:8A 8.000.44:38:39:22:01:8A 8.003 Desg

以下命令显示 PVRST 模式的输出

cumulus@switch:~$ sudo mstpctl showstpport br_default
 E swp1 
  ---PTP Info---
Port: swp1 vid: 1
8.001  8.001.44:38:39:22:01:8A 8.001.44:38:39:22:01:8A 8.001 Desg
state: forw
  ---PTP Info---
Port: swp1 vid: 10
8.001  1.00A.44:38:39:22:01:8A 1.00A.44:38:39:22:01:8A 8.001 Desg
state: forw
  ---PTP Info---
Port: swp1 vid: 20
8.001  F.014.44:38:39:22:01:8A F.014.44:38:39:22:01:8A 8.001 Desg
state: forw
  ---PTP Info---
Port: swp1 vid: 30
8.001  8.01E.44:38:39:22:01:8A 8.01E.44:38:39:22:01:8A 8.001 Desg
state: forw
 E swp2 
...

要显示网桥域的 STP 信息,包括 STP 计数器,请运行 sudo mstpctl showstpall 命令。

以下命令显示 RSTP 模式的输出

cumulus@switch:~$ sudo mstpctl showstpall 

Global info 
  debug level       2

BRIDGE: br_default, Br_index: 58

Spanning-tree enabled protocol rstp
Bridge Parameters for br_default
  enabled                    yes
  force protocol version     rstp
  tx hold count              6
  hello time                 2s
  bridge forward delay       15s
  bridge max age             20s
  max hops                   20
  migrate_time               3s
  ageing time                300s
  if_index: 58, name: br_default, up: yes, vlan_filter: yes uptime: 1244
---CIST info---
  bridge id       8.000.44:38:39:22:01:8A
  designated root 8.000.44:38:39:22:01:8A
  regional root   8.000.44:38:39:22:01:8A
  path cost     0          internal path cost   0

  root port         none
  root max age       20        s
  root forward delay 15        s
  time since topology change 1239s
  topology change count      1
  topology change            no
  topology change port       swp3
  last topology change port  swp2
  PRSSM_state: role_selection
...

以下命令显示 PVRST 模式的输出

cumulus@switch:~$ sudo mstpctl showstpall 

Global info 
  debug level       2

BRIDGE: br_default, Br_index: 58

Spanning-tree enabled protocol rapid-pvst
Bridge Parameters for br_default
  enabled                    yes
  force protocol version     rstp
  tx hold count              6
  migrate_time               3s
  ageing time                300s
  if_index: 58, name: br_default, up: yes, vlan_filter: yes uptime: 141
---Bridge Vlan 1---
  bridge id       8.001.44:38:39:22:01:8A
  priority      32769      
  forward delay       15         
  Max_Age       20         
  Hello_Time       2          
  designated root 8.001.44:38:39:22:01:8A
  root path cost     0          
  root port         none
  root max age       20        s
  root forward delay 15        s
  time since topology change 141s
  topology change count      0
  topology change            no
  topology change port       None
  last topology change port  None
  PRSSM_state: role_selection
---Bridge Vlan 10---
  bridge id       1.00A.44:38:39:22:01:8A
  priority      4106       
  forward delay       4          
  Max_Age       6          
  Hello_Time       4          
  designated root 1.00A.44:38:39:22:01:8A
  root path cost     0          
  root port         none
  root max age       6         s
  root forward delay 4         s
  time since topology change 136s
  topology change count      1
  topology change            no
  topology change port       swp3
  last topology change port  swp2
  PRSSM_state: role_selection
  ...

要显示网桥状态,请运行 brctl show 命令

cumulus@switch:~$ sudo brctl show
  bridge name     bridge id               STP enabled     interfaces
  br_default      8000.001401010100       yes             swp1
                                                          swp2
                                                          swp3

mstpd 是在 Cumulus Linux 上与 STP 交互的首选实用程序。brctl 也为 STP 提供某些工具;但是,它们不如 mstpd 完整,并且 brctl 的输出有时会产生误导。

注意事项

在删除接口或网桥上的 VLAN 之前,必须先删除 PVRST VLAN 配置。

以下示例删除 PVRST VLAN 10 配置,然后从网桥中删除 VLAN 10

cumulus@switch:~$ nv unset bridge domain br_default stp vlan 10
cumulus@switch:~$ nv unset bridge domain br_default vlan 10

以下示例删除 PVRST VLAN 10 配置,然后从 swp1 中删除 VLAN 10

cumulus@switch:~$ nv unset interface swp1 bridge domain br_default stp vlan 10
cumulus@switch:~$ nv unset interface swp1 bridge domain br_default vlan 10