Spanning Tree ist eins der grundlegenden Protokolle in Ethernet-Netzwerken. Es sorgt dafür, dass keine Netzwerkschleifen (Loops) entstehen, denn durch einen Broadcast-Sturm führen sie innerhalb kürzester Zeit zur Überlastung eines Netzwerksegments. Ethernet-Frames haben im Gegensatz zu IP-Paketen keine maximale Lebensdauer (Time to Live, TTL) und bewegen sich deshalb potenziell unendlich lange im Kreis.
Das Spanning-Tree-Protokoll erreicht die Schleifenfreiheit, indem es bestimmte Verbindungen zwischen Switches deaktiviert. Abbildung 1 zeigt drei Beispiele (A, B, C) für Netzwerktopologien, die ohne die Blockade einiger Switchports durch Spanning Tree zum Zusammenbruch des Netzwerks führen würden.
Variante A in Abbildung 1 bringt technisch keinen Vorteil und entsteht normalerweise nur aus Unachtsamkeit, meist über mehrere Switches hinweg. Die Varianten B und C hingegen sind oft gewünscht, um die Bandbreite zwischen zwei Switches zu vergrößern (Variante B), beziehungsweise um eine Redundanz für den Fall eines Kabelausfalls durch äußere Einflüsse – beispielsweise Bauarbeiten zwischen zwei Gebäuden – zu erreichen (Variante C). Die Blockade durch Spanning Tree in Variante B hebt die Bandbreitenbündelung zunächst auf.
Die Switch-Hersteller haben verschiedene, teils zueinander inkompatible Lösungen entwickelt, etwa »EtherChannel
«
, »PortChannel
«
, »virtual PortChannel
«
(Cisco) und »Trunk
«
(HP). Diese Technologien bündeln mehrere physische Ethernet-Verbindungen zu einer logischen (Variante D in Abbildung 1). Der Spanning Tree nimmt diese logische Verbindung beispielsweise als eine 2-GBit-Verbindung statt als zwei separate 1-GBit-Verbindungen wahr und blockiert daher keine der beiden.
Variante C lässt sich durch diese Technologien allerdings nicht optimieren. Hier empfiehlt sich der Einsatz einer anderen physischen Verkabelung, die die Dreiecksverbindung zwischen den Switches ersetzt.
Für jedes VLAN, also ein logisches Netzwerksegment, wird ein eigener Spanning Tree berechnet. Dieser Artikel beschränkt sich deshalb auf ein VLAN. Das Spanning-Tree-Protokoll existiert heute hauptsächlich in den Ausprägungen »Rapid Spanning Tree
«
(RST) und »Rapid per VLAN Spanning Tree
«
oder »Multiple Spanning Tree
«
(MST), da die ursprüngliche Form des Spanning Trees zu hohen Konvergenzzeiten und damit in komplexen Topologien zu Ausfällen von 30 bis 50 Sekunden führt.
Die Berechnung des Spanning Trees erfolgt in drei wesentlichen Schritten:
Es gibt verschiedene Rollen und Zustände (siehe Kasten "Rollen und Zustände der Switchports"), die ein Switchport einnehmen kann. Die Variante Rapid Spanning Tree fasst »Disabled
«
, »Blocking
«
und »Listening
«
zu »Discarding
«
zusammen.
Rollen und Zustände der Switchports
In einem Spanning Tree nimmt jeder Port eines Switches eine von vier möglichen Rollen ein:
Blocked
«
).Blocked
«
).Neben den beschriebenen Rollen gibt es vier Zustände, die ein Port nacheinander einnimmt: »Blocking
«
, »Listening
«
, »Learning
«
und »Forwarding
«
. Im zusätzlichen Zustand »Disabled
«
verwirft ein Port sämtliche Pakete. Das gilt auch in den ersten drei genannten Zuständen; in ihnen empfängt und verarbeitet ein Port ausschließlich sogenannte BPDUs (Bridge Protocol Data Units), die Informationen über das Netz und den Spanning Tree transportieren. In den Zuständen »Listening
«
und »Learning
«
überträgt ein Port solche Pakete auch weiter, in letzterem lernt er dazu die Adressen anderer Netzwerkteilnehmer. Nur im »Forwarding
«
-Modus schließlich leitet ein Port darüber hinaus auch Datenpakete weiter.
Damit Spanning Tree die Gesamttopologie berechnen kann, wird zunächst die »Root Bridge
«
gewählt. Sie bildet den Referenzpunkt des gesamten Spanning Tree und berechnet die Pfade und Einstellungen des Baums. Die Wahl der Root Bridge erfolgt aufgrund der »Bridge-ID
«
, die sich aus drei Bestandteilen zusammensetzt:
Die Bridge Priority liegt zwischen 0 und 61440 und ist in Schritten von 4096 konfigurierbar. Die System-ID und die MAC-Adresse sind nicht frei wählbar; MAC-Adressänderungen sind zwar möglich, aber nicht empfohlen. Je höher der Wert der Bridge Priority liegt, desto weniger kommt der entsprechende Switch als Root Bridge in Frage. Ein Switch mit der Bridge Priority 0 übernimmt höchstwahrscheinlich die Root Bridge, es sei denn, ein weiterer Switch im Netz hat ebenfalls diesen Wert.
Sollte mehr als ein Switch die gleiche minimale Bridge Priority besitzen, geben System-ID-Extension und MAC-Adresse den Ausschlag bei der Wahl zur Root Bridge. Dabei gewinnt der Kandidat mit den niedrigsten Werten. Erstere entspricht der VLAN-Nummer.
Bei den MAC-Adressen unterbieten ältere Switches oft ihre aktuellen Nachfolger, da viele Hersteller sie aufsteigend vergeben. Dadurch besteht die Gefahr, dass der älteste und potenziell schwächste Switch zur Root Bridge wird. Da Spanning-Tree-Berechnungen in großen Netzen aufwendig ausfallen, sollte hingegen ein möglichst leistungsfähiger Switch die Rolle der Root Bridge übernehmen.
Design-Guides der Hersteller empfehlen, die Root Bridge in der Aggregations- bzw. Distributionsebene zu platzieren, um kurze Konvergenzzeiten bei Ausfällen zu erreichen (Abbildung 2).
Auf Cisco-Switches erfolgt die Konfiguration der Bridge Priority mittels »spanning-tree vlan VLAN priority
«
oder alternativ mit dem Root-Bridge-Makro »spanning-tree vlan VLAN root [primary | secondary]
«
. Es konfiguriert die Priorität automatisch anhand der aktuell im Netz vorhandenen Root Bridge, läuft aber nur einmalig beim Aufruf und nicht dauerhaft im Hintergrund.
Der Austausch der Informationen über die Spanning-Tree-Topologie zwischen verschiedenen Switches erfolgt über sogenannte BPDUs (Bridge Protocol Data Unit). Grundsätzlich sendet und empfängt jeder Switchport BPDUs. Diese Eigenschaft bietet allerdings Angreifern die Möglichkeit, die Topologie auszulesen und mit gefälschten BPDUs zu verändern. Gegenmaßnahmen heißen BPDU-Guard und -Filter (siehe Kasten "BPDU-Guard und -Filter").
BPDU-Guard und -Filter
spanning-tree bpduguard enable
«
oder global mit »spanning-tree portfast bpduguarddefault
«
.spanning-tree bpdu-filter enable
«
im Interface oder global mit »spanning-tree portfast bpdufilter default
«
.Auch nachdem die Root Bridge gewählt und der gesamte Spanning Tree aktiv ist, können weitere Switches dem Netzwerk beitreten, beispielsweise bei der Installation eines neuen Stockwerk-Switches. Hat eins der neuen Geräte eine niedrigere Bridge Priority, würde es dann zur neuen Root Bridge. Das zöge allerdings eine Änderung der gesamten Netzwerktopologie und damit möglicherweise suboptimale Pfade sowie Performance-Engpässe nach sich.
Schutz gegen eine versehentliche oder auch böswillige Änderung der Root Bridge bietet der Root Guard [1].
Abbildung 3 zeigt eine Ausgangslage, in der Switch D zum Netzwerk hinzukommt. Unterbietet dessen Bridge Priority aus einem der genannten Gründe die der bisherigen Root Bridge, ändert sich die Topologie daraufhin wie in Abbildung 4.
Um diese Umstellung zu verhindern, konfiguriert man den Root Guard auf dem in Richtung Switch D weisenden Port von Switch C. Das Feature deaktiviert den betreffenden Switchport, sobald er eine BPDU mit einer zu niedrigen Bridge Priority empfängt.