MSTP im Richtfunknetz

Dieser Text beschäftigt sich mit den Möglichkeiten, die sich durch die Verwendung von MSTP in Richtfunknetzen ergeben, sowie ihrer praktischen Umsetzung. Zunächst aber etwas Kontext zur Motivation der dann folgenden technischen Details.

Anforderungen an das Richtfunknetz

Redundanz

Das Richtfunknetz soll auch redundante Verbindungen enthalten. Dies soll vor allem vermeiden, dass das Netz durch den Ausfall einer einzelnen Verbindung oder einzelner Standorte partitioniert wird. Potentiell bedeuten mehr Links aber auch mehr insgesamt verfügbare Bandbreite innerhalb des Netzes und weniger Umwege für Datenpakete, die zwischen den Standorten unterwegs sind. Die Möglichkeit von beliebigen Topologien (statt nur schleifenfreien = baumförmigen) macht auch das Wachstum des Netzes flexibler. So ähnlich wie bei den “klassischen” Freifunk-adhoc-Meshes in der Luft, die sich leicht erweitern lassen und damit in Nachbarschaften ausbreiten können.

Layer 2

Das Richtfunknetz soll nicht als reiner Zubringer zu einem zentralen Uplink konzipiert werden, sondern auch mehrere Uplinks gut nutzen können. Außerdem sollte es flexibel genug sein, um weitere Nutzungsmöglichkeiten für die Bevölkerung im Viertel und dann perspektivisch in der ganzen Stadt zu eröffnen. Dies macht eine auf das gesamte Richtfunknetz ausgedehnte Layer 2 Infrastruktur wünschenswert, weil dadurch das Richtfunknetz den Nutzungen gegenüber konzeptionell neutraler wird. Für die Nutzungen stellt das Richtfunknetz VLANs zur Verfügung, die zwischen den jeweils beteiligten Standorten geschaltet werden.

Layer 3

An Orten wie Berlin gibt es bereits eine vermaschte Richtfunkinfrastruktur. Das Berliner Richtfunknetz stellt aber (unseres Wissens) keine Layer 2 Infrastruktur zur Verfügung, die sich über das ganze Netz erstreckt. Ein VLAN existiert nur zwischen benachbarten Standorten, d.h. auf der Richtfunkstrecke, die diese verbindet. Der Zusammenhang des gesamten Netzes wird durch Routing (Layer 3) hergestellt: an jedem Standort befindet sich je ein Router, der zu den benachbarten (d.h. durch Richtfunkstrecken verbundenen) Routern je eine Punkt-zu-Punkt-Verbindung (P2P) aufbaut (über das o.g. streckenspezifische VLAN), und darüber ein Layer 3 Routingprotokoll spricht. Dieses Konzept hat den Vorteil, die Richtfunkstrecken direkt im Routing abzubilden (als P2P-Link mit eigener Metrik) und damit optimales Routing zu ermöglichen, incl. Ausnutzung der Redundanz (wie sie im Berliner Richtfunknetz bereits vorliegt).

Warum ein STP (Spanning Tree Protocol)?

(Wer selbst noch keine Erfahrung mit STP gemacht hat, sollte sich vor dem Weiterlesen die Begriffe Spannbaum und Spanning Tree Protocol aneignen.)

In Hamburg wird das Berliner Konzept leicht abgewandelt benutzt. Statt OLSR wird B.A.T.M.A.N. verwendet, und letzterer operiert auf Layer 2. Das macht hier allerdings keinen wesentlichen Unterschied, denn Routing ist Routing, auch wenn damit Layer 2 Frames geroutet werden. (Das ist ähnlich wie bei den IEEE Standards 802.11s und SPB, und insofern könnte man auch den “B.A.T.M.A.N.-Luftswitch” zur Realisierung der Idee von beliebigen Nutz-VLANs zwischen Richtfunkstandorten benutzen. Allerdings ist B.A.T.M.A.N. kein IEEE Standard, sodass er eine komplizierte Mechanik darstellt, mit der u.a. die eigentlichen Nutz-Frames gekapselt und fragmentiert werden, um dann über IEEE Standards transportiert zu werden. Es handelt sich um die Emulation eines Switches, der gegenüber einer in Hardware gegossenen Layer 2 Infrastruktur also notwendig suboptimal ist. Damit sollen die Verdienste von B.A.T.M.A.N. nicht kleingeredet werden, aber es geht hier um das Konzept einer optimalen Layer 2 Infrastruktur.) Entscheidend ist jedenfalls, dass in beiden Fällen (Berlin und Hamburg) die Richtfunkstrecken als P2P-Links im Routing abgebildet werden.

In einem scheinbar winzigen Detail unterscheiden sich die beiden Konzepte aber doch noch: in Hamburg ist ein Management-VLAN konfiguriert, das sich offenbar auf das gesamte dortige Richtfunknetz erstreckt. So etwas ist erstens sehr praktisch für den Betrieb des Netzes und zweitens ein Anwendungsbeispiel für unsere obige Anforderung einer “auf das gesamte Richtfunknetz ausgedehnten Layer 2 Infrastruktur”. Der praktische Vorteil eines Management-VLANs besteht insb. darin, dass man alle Geräte der Infrastruktur unmittelbar auf Layer 2, d.h. ohne Routing, erreichen kann - zB um Probleme beim Routing zu lösen. Doch der Vorteil bringt auch einen Nachteil.

Linkabschaltungen

Wenn man nämlich ein “globales” Management-VLAN auf Layer 2 haben möchte, dann muss ein STP gefahren werden! Denn sonst gibt es auf Layer 2 Broadcastschleifen in diesem Management-VLAN, die das (gesamte) Richtfunknetz unbrauchbar machen können (und werden;). Daher wird in Hamburg offenbar RSTP auf den Richtfunkstrecken aktiviert (s. Dokumentation der Hamburger Switchkonfiguration).

Sobald also redundante Links vorhanden sind, müssen diese durch ein STP soweit abgeschaltet werden, bis nur noch eine Netztopologie ohne Kreise vorliegt (also ein Baum). RSTP (und STP) schalten Switchports an redundanten Links komplett für Nutztraffic ab, um die fatalen Broadcastschleifen zu verhindern. Die aktiven, d.h. nicht abgeschalteten Switchports bilden einen Spannbaum, sodass trotz der Abschaltungen alle Geräte auf Layer 2 erreicht werden können.

Welche Switchports (und damit Richtfunkstrecken) konkret abgeschaltet werden, kann man durch die Konfiguration von Präferenzen für Root Bridge und Portkosten beeinflussen. Aber trotzdem ist eine solche Abschaltung ein Layer 2 Artefakt, das ganz offensichtlich das optimale Routing des Nutztraffics vereitelt: denn Pakete, die optimalerweise über eine durch (R)STP abgeschaltete (aber ansonsten funktionierende!) Richtfunkverbindung laufen würden, müssen jetzt einen Umweg nehmen.

Wenn die Verbindungen eines solches Richtfunknetzes genug Bandbreite bei geringer Latenz bieten, dann bemerkt man eine solche Abschaltung vielleicht gar nicht. (In Hamburg bilden die real ex. Richtfunkstrecken vmtl. noch einen Baum, sodass (bisher) gar keine Abschaltung erforderlich ist.) Wenn man aber wie in Dortmund ein neues Richtfunknetz mit den obigen Anforderungen konzipiert, dann wäre es schon gut, Suboptimalitäten wie insb. komplette Linkabschaltungen von vorneherein zu vermeiden.

MSTP

Um komplette Linkabschaltungen durch (R)STP in einem Layer 2 Netz mit Redundanz zu vermeiden, hat man zZ wohl nur eine (für Freifunk-Communities erschwingliche;) Wahl: MSTP, das Multiple Spanning Tree Protocol.

Mehrfache Spannbäume - das klingt gut, weil Viel hilft viel, ist aber zunächst nur eine Idee und noch keine konkrete Lösung. Wir versuchen im Folgenden, eine Lösung mit MSTP zu entwickeln, welche die beiden bisher genannten entgegengesetzten Extreme in einem Layer 2 Richtfunknetz gleichzeitig realisiert:

  1. Ein “globales” Management-VLAN.

  2. VLANs je Punkt-zu-Punkt-Verbindung, über die geroutet wird, sodass jede Richtfunkstrecke auf einen P2P-Link im Routing abgebildet wird. Alle funktionierenden Richtfunkstrecken können für das Routing benutzt werden.

Die Gegensätzlichkeit der Extreme sieht man bei folgender Formulierung vmtl. leichter:

  1. Das gewünschte Artefakt heißt “ein an allen Standorten verfügbares VLAN”, und alles andere ist gleichgültig.

  2. Keine Artefakte, insb. keine Linkabschaltungen, sondern optimales Routing. Layer 2 ist ansonsten gleichgültig.

Oder noch knapper:

  1. Ein VLAN mit maximaler Ausdehnung (dieses VLAN ist auf allen Links konfiguriert).

  2. VLANs mit minimaler Ausdehnung (jedes der VLANs ist genau auf einem Link konfiguriert, und auf jedem Link ist genau eines der VLANs konfiguriert).

Lösungsidee

Das Management-VLAN

Das Management-VLAN kommt in eine eigene MST-Instanz. In dieser Instanz werden per Spanning Tree Verfahren natürlich Links abgeschaltet um Layer 2 Schleifen zu verhindern. Das ist notwendig, aber man erreicht das Ziel eines “globalen” Management-VLANs. Solange das Richtfunknetz nicht durch den Ausfall von Richtfunkstrecken partitioniert wird, bleiben alle Geräte der Infrastruktur erreichbar.

Die unvermeidlichen Linkabschaltungen betreffen nur die VLANs dieser MST-Instanz, also das Management-VLAN. Andere VLANs sind davon nicht betroffen - das ist das entscheidende Argument für die Verwendung von MSTP.

Die P2P-VLANs

Alle P2P-VLANs (über die das optimale Routing laufen soll) existieren nur auf je einem Link (um Router zu verbinden). Wenn man nun die Nutz-VLANs einfach alle in der MST-Instanz 0 belässt (das ist der default), dann gibt es doch wieder Linkabschaltungen. Denn in diesem Fall ist ein einzelner Spannbaum (der CIST = Common and Internal Spanning Tree) für alle Links zwischen den Standorten zuständig, und dann müssen redundante Links (in der MST-Instanz 0) abgeschaltet werden.

Es werden also die P2P-VLANs auf redundanten Links deaktiviert, aber genau das wollten wir wg. des resultierenden suboptimalen Routings vermeiden. Daher müssen wir die P2P-VLANs “irgendwie” auf mehrere MST-Instanzen so verteilen, dass es nicht zur Deaktivierung von P2P-VLANs kommt.

Die Verteilung der P2P-VLANs auf MST-Instanzen

Abstrakt lässt sich die Lösung sehr leicht spezifizieren: Man verteilt alle Kanten des Verbindungsgraphen so auf Spannbäume, dass jede Kante zu (mindestens) einem Spannbaum gehört. Ein solcher Spannbaumum umfasst (per Definition) alle Knoten des Graphen, d.h. alle Switches der MST-Region. (Ein P2P-VLAN, das Teil eines Spannbaums, d.h. einer MST-Instanz ist, wird nicht abgeschaltet. Wenn kein P2P-VLAN durch MSTP abgeschaltet wird, ist optimales Routing möglich.)

Man könnte nun ganz einfach hingehen, und für jedes P2P-VLAN eine eigene MST-Instanz anlegen. Der Standard sieht bis zu 64 mögliche MST-Instanzen vor. Damit käme man schon recht weit (eben bis zu 64 Richtfunkstrecken) - wenn da nicht der klamme Geldbeutel wäre, der mit den üblichen Switches zZ nur 8 MST-Instanzen erlaubt.

Wir stehen also vor folgender Frage: Wie verteilt man die P2P-VLANs auf möglichst wenige MST-Instanzen, sodass es nicht zu Linkabschaltungen kommt?

Zur Veranschaulichung hier für einen K4 eine minimale Verteilung der Kanten auf Spannbäume:

I1: A-B-C-D
I2: B-D-A-C

Und für einen K6:

I1: A-C-E-F-B-D
I2: C-F-A-B-E-D
I3: E-A-D-C-B
        +-F

Notation:

A,B,C,D,E,F: Knoten eines K6

A-B: Kante zwischen den Knoten A und B

In: Spannbaum MST-Instanz n

(Siehe auch die graphischen Darstellungen weiter unten beim Konstruktionsalgorithmus.)

Die Konstruktion der MST-Instanzen

Definition:

Zerlegung eines Graphen G in Spannbäume

:= eine Menge von Spannbäumen des Graphen G, wobei jede Kante von G in mindestens einem Spannbaum enthalten ist.

Praktisch bedeutet das Finden einer solche Zerlegung eine Möglichkeit, die Spannbäume in dem Layer 2 Netz so zu wählen, dass jede Kante zu (mindestens) einem von ihnen gehört. Und dann repräsentiert diese Kante (als Teil eines Spannbaums) einen aktiven Link, über den Nutztraffic transportiert werden kann. Damit kommt es nicht mehr zur Vollabschaltung irgendeines Richtfunklinks, sondern alle P2P-VLANs sind aktiv.

Vollständige und unvollständige Graphen

Wir betrachten das Zerlegungsproblem im Folgenden nur noch für Vollständige Graphen. Praktisch gesehen bieten diese das Maximum an Redundanz für eine Netzwerkinfrastruktur - aber dafür auch ein Maximum an Linkabschaltungen bei STP: von den n * (n - 1) / 2 Kanten des Kn werden alle bis auf n - 1 Kanten durch STP abgeschaltet, also fast alle. Wenn es bei einem Kn trotz STP gelingt, mit einer gewissen Zerlegung alle Links aktiv zu haben, dann erst recht für Graphen mit n Knoten, die weniger Kanten (Links) haben. Das klingt spontan plausibel, aber schauen wir sicherheitshalber genauer hin.

Aus einer Zerlegung für den Kn kann eine Zerlegung für einen Graphen G konstruiert werden, der auch n Knoten, aber weniger Kanten hat:

Entfernt man eine Kante des Kn, so wird der Spannbaum, zu dem diese gehörte, unzusammenhängend. Anders gesagt: er zerfällt in zwei Teilbäume. Nun kann man diese Partitionierung durch Hinzunahme einer beliebigen (noch vorhandenen) Kante, welche die beiden Teilbäume verbindet, aufheben und erhält wieder einen Spannbaum. (Gäbe es keine solche Kante, dann wäre der gesamte Graph partitioniert, aber wir betrachten hier sinnvollerweise nur zusammenhängende Graphen G.) Die Ersatzkante, die statt der entfernten Kante nun in den Spannbaum aufgenommen wird, gehörte aufgrund der Definition von “Zerlegung” bereits zu einem anderen Spannbaum (einer anderen MST-Instanz), und tut dies auch weiterhin. Das stört aber nicht, weil es durch diese “Doppelaktivierung” ja zu keiner Linkabschaltung kommt.

Dieser Vorgang lässt sich wiederholen, bis man soviele Kanten aus dem Kn entfernt hat, dass genau G übrigbleibt. Das Verfahren kann dazu führen, dass ein Spannbaum mit einem anderen zusammenfällt, wodurch sich die Anzahl der Spannbäume in der Zerlegung um eins verringert. (Umso besser, das spart Konfigurationsarbeit und lässt mehr MST-Instanzen übrig, die für spätere Erweiterungen des Richtfunknetzes oder zusätzliche Layer 2 Nutzungen noch zur Verfügung stehen.)

Vermutung: einen vollständigen Graphen mit n Knoten (Kn) kann man in n/2 Spannbäume zerlegen

Dabei ist n eine gerade Zahl. (Bei ungeradem n betrachtet man den Kn als Teilgraph des Kn+1, denn dann ist n+1 gerade, und wenn (n+1)/2 Spannbäume für einen Kn+1 ausreichen, dann erst recht für einen Kn, siehe das obige Verfahren für unvollständige Graphen.)

Beweis (konstruktive Induktion)

Notation

n: Anzahl der Knoten des betrachteten Graphen
Kn: vollständiger Graph mit n Knoten
V(G): Menge der Knoten eines Graphen G (Knotenmenge)
v1 … vn: die einzelnen Knoten eines Graphen mit n Knoten
(vi, vj): Kante zwischen den Knoten vi und vj (i ≠ j)
M1, M2: Teilmengen einer Knotenmenge
|M|: Anzahl der Elemente der Menge M
m1, m2: ein einzelner Knoten aus der Menge M1 bzw. M2

Induktionsanfang

Für n=2 reicht 2/2 = 1 Spannbaum. Das ist trivial, da der K2 nur eine Kante hat.

Induktionsvoraussetzung

Kn sei in n/2 Spannbäume zerlegbar.

Induktionsschritt (= Konstruktionsalgorithmus)

  1. Man teilt die Knotenmenge von Kn in zwei gleich große Teilmengen M1 und M2
    V(Kn) = { v1, …, vn } = M1 ∪ M2, wobei |M1| = |M2| = n/2
    Dann ist V(Kn+2) = M1 ∪ M2 ∪ { vn+1, vn+2 }

  2. Jeder der n/2 Spannbäume von Kn wird um je eine Kante zu vn+1 und vn+2 erweitert, wobei vn+1 mit einem Knoten aus M1 und vn+2 mit einem Knoten aus M2 verbunden wird. Das Resultat ist ein Spannbaum von Kn+2.

  3. Den Spannbaum n/2 + 1 bildet man aus der Kante (vn+1, vn+2), sowie den Kanten (vn+1, m2) für alle Knoten m2 aus M2, und entsprechend (vn+2, m1) für alle m1 aus M1.

Damit sind alle Kanten, die durch die Erweiterung des Kn zum Kn+2 hinzugekommen sind, Teil einer der mit 2. bzw. 3. konstruierten Spannbäume von Kn+2. Kn+2 lässt sich also in n/2 + 1 Spannbäume zerlegen, wenn eine Zerlegung von Kn in n/2 Spannbäume bekannt ist.

Fazit

Da die Induktionsvoraussetzung für n = 2 gilt, folgt aus der wiederholten Anwendung des Induktionsschritts, dass sich für alle geraden n der Kn in n/2 Spannbäume zerlegen lässt, q.e.d.

Die Umsetzung mit realen Switches

Die in einem Testaufbau des K6 benutzten Switchkonfigurationen sind in einem Unterordner dokumentiert. Dabei wurden die MSTP-fähigen Geräte TL-SG3210 (sw1, sw2), TL-SG3424 (sw3, sw6) sowie TL-SG2008 (sw4, sw5) verwendet. Die für MSTP irrelevanten Teile der Konfiguration sind dort zwecks besserer Übersicht weggelassen.

Für das “globale” Management-VLAN wird die VLAN-ID 2005 verwendet, die zur MST-Instanz 1 gehört. Die P2P-VLANs verteilen sich auf die MST-Instanzen 2, 3 und 4. Die zweistelligen IDs der P2P-VLANS haben als erste bzw. zweite Ziffer die Nummern der beiden Switches, die durch diesen P2P-Link verbunden werden. D.h. VLAN 23 liegt auf dem Link, der Switch 2 mit Switch 3 verbindet:

hostname "MSTP-sw2"
[...]
interface gigabitEthernet 1/0/3
[...]
  switchport trunk allowed vlan 23,2005

Den Kanten des Spannbaums (einer MST-Instanz) entsprechen die Zeilen der folgenden Form:

hostname "MSTP-sw2"
[...]
interface gigabitEthernet 1/0/3
[...]
  spanning-tree mst instance 3 port-priority 128 cost 1000

Das bedeutet, dass port 3 von Switch 2 zur MST-Instanz 3 gehört. Die cost 1000 ist nämlich erheblich kleiner gewählt als die default cost von 20000 (für Gigabitports).

Alle anderen Kanten des K6 gehören zwar auch zur MST-Region und könnten Teil des Spannbaums (der MST-Instanz 3) werden, spielen aber praktisch keine Rolle wegen ihrer hohen cost Werte (20000 versus nur 1000 für die wie oben konfigurierten Kanten). D.h. sie werden abgeschaltet, sodass nur die Kanten mit cost 1000 Teil des Spannbaums werden, also von MSTP aktiv geschaltet werden, d.h. Nutztraffic über Richtfunkstrecken transportieren.

Welche ports in welchen Instanzen zum Spannbaum gehören sollen (d.h. auf cost 1000 konfiguriert werden) ergibt sich durch den oben im Induktionsschritt beschriebenen Algorithmus. (Wenn man ihn auf Papier ausführt, bringt die Verwendung von Buntstiften zur Kennzeichnung der verschiedenen Spannbäume sogar noch mehr Spaß:-)

Zur praktischen Überprüfung des theoretischen Ergebnisses (“Seelig, die nicht glauben, und doch sehen!”) liegt bei jedem der sechs Switches auf port 8 jedes der fünf P2P-VLANs auf, das diesen Switch mit einem Nachbarswitch verbindet. Somit kann man mit Layer 3 Geräten, die an diese Testports angeschlossen und auf das jeweilige P2P-VLAN konfiguriert werden, per ping überprüfen, ob ein P2P-VLAN wirklich aktiv ist, also nicht durch MSTP geblockt wird, q.e.d.

Linkausfälle

Weiter oben im theoretischen Teil wurde gezeigt, wie man aus einer Zerlegung des Kn eine solche für einen (unvollständigen) Graphen mit n Knoten, aber weniger Kanten, ableiten kann. Dieses Verfahren ist leider keine Lösung für das Problem unbeabsichtigter Linkausfälle, die zB aus physikalischen Gründen oder wegen technischer Defekte auftreten. Denn die o.g. resultierende Zerlegung ist die Grundlage für die Konfiguration der MST-Instanzen. Man will aber nicht wegen temporärer Ausfälle von Richtfunkstrecken alle Switchkonfigurationen ändern. (Und üblicherweise ist ausgerechnet bei einem Ausfall gerade niemand am Gerät, um den Ausfall mitzubekommen und darauf zu reagieren - Freifunk hat schließlich kein 24/7 NOC;) Was also passiert bei einem Linkausfall?

Bei einer Topologieänderung wie einem Linkausfall wird MSTP aktiv und sorgt dafür, dass statt des unzusammenhängend gewordenen (ex-)Spannbaums ein neuer Spannbaum gebildet wird. Diese neue MST-Instanz hat die gleiche Root Bridge wie bisher, da ein Linkausfall nichts an den Root Bridge Prioritäten ändert. Weil die Portkosten für diese Instanz so gewählt wurden, dass der (gemäß Konstruktionsalgorithmus) gewünschte Spannbaum dabei herauskommt, wird sich an dem Rest des alten Spannbaums, der die Root Bridge enthält, nichts ändern. D.h. in diesem Bereich kommt es nicht zu Linkabschaltungen.

Aber was passiert mit Wegen zu den Knoten, die durch den Linkausfall von der Root Bridge abgetrennt wurden? Diese haben zwar untereinander noch Verbindungen mit cost 1000, aber nicht mehr zum anderen Teil des (ex-)Spannbaums. MSTP wird sie nun so mit dem anderen Teil verbinden, dass die Wegekosten (als Summe der jeweiligen Portkosten auf dem Weg) zur Root Bridge für jeden Knoten minimiert werden. Bei der obigen default-Konfiguration für die Portkosten aller Links, die nicht zum geplanten Spannbaum der Instanz gehören, wird (in einem Kn) jeder der abgetrennten Knoten direkt mit der Root Bridge verbunden werden. Das bedeutet aber, dass die bisherigen cost 1000 Verbindungen zwischen den abgetrennten Knoten in dieser MST-Instanz geblockt werden. Also kommt es zur Deaktivierung aller P2P-VLANs im abgetrennten Bereich dieser Instanz - also kein optimales Routing mehr.

(Der Vollständigkeit halber sollte erwähnt werden, dass (genau) eine Deaktivierung an dem Knoten, dessen Link Richtung Root Bridge gerade ausgefallen ist, nicht notwendigerweise auftritt. Wenn zB der ausgefallene Link eine direkte Verbindung dieses Knotens mit der Root Bridge war, dann kann im neuen Spannbaum der Weg von diesem Knoten zur Root Bridge im ersten Schritt weiterhin über einen cost 1000 Link verlaufen, d.h. zu einem Nachbarn im abgetrennten Teil des (ex-)Spannbaums. Und erst von diesem weiter über einen Link mit cost 20000 zur Root Bridge führen. Dann hat der gesamte Weg die Kosten 21000, und das ist das Minimum für den Knoten an dem ausgefallenen Link. Dabei bleibt also das P2P-VLAN zwischen diesen beiden Nachbarn auch im neuen Spannbaum aktiv. Aber das ist ein günstiger Einzelfall, weshalb wir im Folgenden den allgemeineren Fall der tatsächlichen Linkabschaltungen als Kollateralschaden eines Linksausfalls betrachten.)

Bei kurzen Ausfällen wird man vmtl. mit solchen kollateralen Linkabschaltungen leben können - die Router können sich ja immer noch erreichen, nur halt über weniger Links, als auf Layer 1 noch möglich wäre, d.h. das Routing macht im Bereich des zunächst abgetrennten Teilbaums eigentlich unnötige Umwege. Aber wäre es prinzipiell doch möglich, bei Linkausfall auch dort noch optimal über P2P-VLANs zu routen? Dazu müsste man MSTP dazu bringen, den neuen Spannbaum so aufzubauen, dass er den abgetrennten Teil des (ex-)Spannbaums über genau eine Kante mit dem Teil verbindet, in dem sich die Root Bridge befindet. Wie wir dem MSTP unsere Wünsche zur Spannbaumbildung mitteilen können, wissen wir schon: über die Portkosten. Um zu erreichen, dass der abgetrennte Teil unverändert Teil des neuen Spannbaums wird, müssen die Portkosten für die betrachtete Instanz also so gewählt werden, dass es für alle abgetrennten Knoten der günstigste Weg zur Root Bridge ist, die cost 1000 Verbindungen weiterhin zu benutzen. Das geht aber nicht, wenn alle abgetrennten Knoten die gleichen Kosten für eine Kante zur Root Bridge bzw. deren Teil des (ex-)Spannbaums haben, denn dann wäre es ein Umweg, von einem der abgetrennten Knoten aus zunächst über einen von den anderen abgetrennten Knoten zu gehen - die Wegekosten dafür wären ja mindestens um 1000 größer als bei dem direkten Weg vom betrachteten Knoten ausgehend direkt zur Root Bridge bzw. zu deren Teil des (ex-)Spannbaums.

Also muss man die Portkosten für die potentiellen Ersatzkanten unterschiedlich wählen, wobei ihre jeweilige Differenz größer sein muss als die größten Wegekosten innerhalb des abgetrennten Teils. Diese Wegekosten können höchstens (n - 2) * 1000 betragen, und zwar dann, wenn die Root Bridge als einzelner Knoten durch Linkausfall abgetrennt wird. Wenn der wieder anzubindende Teil des (ex-)Spannbaums einen linearen Graphen bildet, der die abgetrennten n - 1 Knoten umfasst, wird das Kostenmaximum von (n - 2) * 1000 erreicht. Also kann man für n < 10 als Differenz 10000 nehmen, und den einzelnen Ersatzkanten die Portkosten 10000, 20000, 30000, …, k * 10000 konfigurieren. Dann haben je zwei von diesen Kanten einen Unterschied von mindestens 10000 bei ihren Portkosten. Dabei ist k = (n * (n - 1) / 2) - (n - 1) die Zahl der möglichen Ersatzkanten, also aller Kanten des Kn ohne die n - 1 für den Spannbaum präferierten (die ja cost 1000 haben). Der Übersichtlichkeit halber kann man alternativ die in der obigen Konfiguration für den K6 verwendeten zweistelligen P2P-VLAN IDs mit 10000 multiplizieren, um die Portkosten des zugehörigen Links (als Ersatzkante in einer Instanz) zu konfigurieren. (Nach diesem Schema sollte auch eine automatische Generierung der entsprechenden Switchkonfigurationen leicht möglich sein, durch welche das optimale Routing bei Linkausfall dann praktisch umgesetzt wird.)

Bei einer auf diese Weise verfeinerten Konfiguration wird MSTP bei Linkausfall aus den Ersatzkanten, die die beiden getrennten Teile verbinden, diejenige mit dem geringsten x * 10000 Wert für die Portkosten wählen. Da die beiden getrennten Teile des (ex-)Spannbaums Teil des neuen Spannbaums werden, werden also keine präferierten Links (cost 1000) abgeschaltet, d.h. alle (auf Layer 1) noch funktionierenden P2P-VLANs der betrachteten Instanz bleiben (auf Layer 2) aktiv. Es ist also auch bei Linkausfall weiterhin optimales Routing über die noch funktionierenden Kanten (Richtfunkstrecken) möglich.