docs: bridge: add STP doc
Add STP part for bridge document. Reviewed-by: Florian Fainelli <florian.fainelli@broadcom.com> Signed-off-by: Hangbin Liu <liuhangbin@gmail.com> Acked-by: Nikolay Aleksandrov <razor@blackwall.org> Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
bcc1f84e4d
commit
567d260820
@ -47,6 +47,107 @@ Bridge sysfs
|
||||
The sysfs interface is deprecated and should not be extended if new
|
||||
options are added.
|
||||
|
||||
STP
|
||||
===
|
||||
|
||||
The STP (Spanning Tree Protocol) implementation in the Linux bridge driver
|
||||
is a critical feature that helps prevent loops and broadcast storms in
|
||||
Ethernet networks by identifying and disabling redundant links. In a Linux
|
||||
bridge context, STP is crucial for network stability and availability.
|
||||
|
||||
STP is a Layer 2 protocol that operates at the Data Link Layer of the OSI
|
||||
model. It was originally developed as IEEE 802.1D and has since evolved into
|
||||
multiple versions, including Rapid Spanning Tree Protocol (RSTP) and
|
||||
`Multiple Spanning Tree Protocol (MSTP)
|
||||
<https://lore.kernel.org/netdev/20220316150857.2442916-1-tobias@waldekranz.com/>`_.
|
||||
|
||||
The 802.1D-2004 removed the original Spanning Tree Protocol, instead
|
||||
incorporating the Rapid Spanning Tree Protocol (RSTP). By 2014, all the
|
||||
functionality defined by IEEE 802.1D has been incorporated into either
|
||||
IEEE 802.1Q (Bridges and Bridged Networks) or IEEE 802.1AC (MAC Service
|
||||
Definition). 802.1D has been officially withdrawn in 2022.
|
||||
|
||||
Bridge Ports and STP States
|
||||
---------------------------
|
||||
|
||||
In the context of STP, bridge ports can be in one of the following states:
|
||||
* Blocking: The port is disabled for data traffic and only listens for
|
||||
BPDUs (Bridge Protocol Data Units) from other devices to determine the
|
||||
network topology.
|
||||
* Listening: The port begins to participate in the STP process and listens
|
||||
for BPDUs.
|
||||
* Learning: The port continues to listen for BPDUs and begins to learn MAC
|
||||
addresses from incoming frames but does not forward data frames.
|
||||
* Forwarding: The port is fully operational and forwards both BPDUs and
|
||||
data frames.
|
||||
* Disabled: The port is administratively disabled and does not participate
|
||||
in the STP process. The data frames forwarding are also disabled.
|
||||
|
||||
Root Bridge and Convergence
|
||||
---------------------------
|
||||
|
||||
In the context of networking and Ethernet bridging in Linux, the root bridge
|
||||
is a designated switch in a bridged network that serves as a reference point
|
||||
for the spanning tree algorithm to create a loop-free topology.
|
||||
|
||||
Here's how the STP works and root bridge is chosen:
|
||||
1. Bridge Priority: Each bridge running a spanning tree protocol, has a
|
||||
configurable Bridge Priority value. The lower the value, the higher the
|
||||
priority. By default, the Bridge Priority is set to a standard value
|
||||
(e.g., 32768).
|
||||
2. Bridge ID: The Bridge ID is composed of two components: Bridge Priority
|
||||
and the MAC address of the bridge. It uniquely identifies each bridge
|
||||
in the network. The Bridge ID is used to compare the priorities of
|
||||
different bridges.
|
||||
3. Bridge Election: When the network starts, all bridges initially assume
|
||||
that they are the root bridge. They start advertising Bridge Protocol
|
||||
Data Units (BPDU) to their neighbors, containing their Bridge ID and
|
||||
other information.
|
||||
4. BPDU Comparison: Bridges exchange BPDUs to determine the root bridge.
|
||||
Each bridge examines the received BPDUs, including the Bridge Priority
|
||||
and Bridge ID, to determine if it should adjust its own priorities.
|
||||
The bridge with the lowest Bridge ID will become the root bridge.
|
||||
5. Root Bridge Announcement: Once the root bridge is determined, it sends
|
||||
BPDUs with information about the root bridge to all other bridges in the
|
||||
network. This information is used by other bridges to calculate the
|
||||
shortest path to the root bridge and, in doing so, create a loop-free
|
||||
topology.
|
||||
6. Forwarding Ports: After the root bridge is selected and the spanning tree
|
||||
topology is established, each bridge determines which of its ports should
|
||||
be in the forwarding state (used for data traffic) and which should be in
|
||||
the blocking state (used to prevent loops). The root bridge's ports are
|
||||
all in the forwarding state. while other bridges have some ports in the
|
||||
blocking state to avoid loops.
|
||||
7. Root Ports: After the root bridge is selected and the spanning tree
|
||||
topology is established, each non-root bridge processes incoming
|
||||
BPDUs and determines which of its ports provides the shortest path to the
|
||||
root bridge based on the information in the received BPDUs. This port is
|
||||
designated as the root port. And it is in the Forwarding state, allowing
|
||||
it to actively forward network traffic.
|
||||
8. Designated ports: A designated port is the port through which the non-root
|
||||
bridge will forward traffic towards the designated segment. Designated ports
|
||||
are placed in the Forwarding state. All other ports on the non-root
|
||||
bridge that are not designated for specific segments are placed in the
|
||||
Blocking state to prevent network loops.
|
||||
|
||||
STP ensures network convergence by calculating the shortest path and disabling
|
||||
redundant links. When network topology changes occur (e.g., a link failure),
|
||||
STP recalculates the network topology to restore connectivity while avoiding loops.
|
||||
|
||||
Proper configuration of STP parameters, such as the bridge priority, can
|
||||
influence network performance, path selection and which bridge becomes the
|
||||
Root Bridge.
|
||||
|
||||
User space STP helper
|
||||
---------------------
|
||||
|
||||
The user space STP helper *bridge-stp* is a program to control whether to use
|
||||
user mode spanning tree. The ``/sbin/bridge-stp <bridge> <start|stop>`` is
|
||||
called by the kernel when STP is enabled/disabled on a bridge
|
||||
(via ``brctl stp <bridge> <on|off>`` or ``ip link set <bridge> type bridge
|
||||
stp_state <0|1>``). The kernel enables user_stp mode if that command returns
|
||||
0, or enables kernel_stp mode if that command returns any other value.
|
||||
|
||||
FAQ
|
||||
===
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user