生成树和快速生成树 - STP
STP 识别网络中的链路并关闭冗余链路,防止桥接网络上可能出现的网络环路和广播辐射。STP 还为活动链路故障时的自动故障转移提供冗余链路。Cumulus Linux 默认对 VLAN 感知桥接和传统桥接启用 STP。
更改以下 STP 设置时请谨慎,以防止 STP 环路避免问题。
STP 模式
Cumulus Linux 支持 VLAN 感知桥接和传统桥接的 STP。
VLAN 感知桥接的 STP 模式
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
编辑
/etc/cumulus/control-plane/policers.conf
文件以将copp.rpvst.rate
和copp.rpvst.burst
参数更改为 7200cumulus@switch:~$ sudo nano /etc/cumulus/control-plane/policers.conf ... copp.rpvst.enable = TRUE copp.rpvst.rate = 7200 copp.rpvst.burst = 7200 ...
运行以下命令以应用更改
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),您可以设置桥接的树优先级。优先级最低的桥接是根桥。优先级必须是介于 0 和 61440 之间的数字,并且必须是 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-maxage
、bridge-stp-vlan-hello
和 bridge-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-cost
和 mstpctl-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.1D 和 802.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