STP na Cisco: po co Spanning Tree i jak wygrać root bridge
Gdy podłączysz przełączniki (switch) tak, żeby było zapasowe łącze na wypadek awarii, w sieci pojawia się problem, którego router nie ma: pętla w warstwie 2. Rozwiązuje go protokół drzewa rozpinającego (Spanning Tree Protocol), w skrócie STP. W tym artykule pokażę, dlaczego pętla L2 potrafi położyć sieć w kilka sekund, jak STP wybiera przełącznik główny (root bridge) i dlaczego warto samemu zdecydować, kto nim zostanie — z komendami na Cisco i ćwiczeniem do przejścia w Packet Tracerze.
Dlaczego zapasowe łącze to zagrożenie
Sieci lokalne projektuje się z nadmiarowością: dwa przełączniki łączą się więcej niż jednym kablem, żeby awaria jednego łącza nie odcięła użytkowników. Ale ramka ethernetowa nie ma pola TTL, które w IP ogranicza życie pakietu. Gdy więc broadcast, np. zapytanie ARP, wpadnie w pętlę, będzie krążył w kółko i przy każdym przełączniku mnożył się, bo przełącznik rozsyła broadcast na wszystkie porty w danym VLAN-ie.
Efekt to burza broadcastowa (broadcast storm): łącza zapychają się kopiami tej samej ramki, tablice MAC rosną o błędne wpisy, a sieć przestaje działać praktycznie natychmiast. Dlatego nadmiarowe łącza trzeba jakoś logicznie wyłączyć — ale tak, żeby przy awarii wróciły. To właśnie robi STP (standard IEEE 802.1D).
Trzy wybory, które robi STP
STP włącza się na przełącznikach Cisco domyślnie. Cała jego logika to seria wyborów, po których topologia ma kształt drzewa — od korzenia po gałęzie, bez żadnej pętli:
- Wybór przełącznika głównego (root bridge) — jeden przełącznik w całej sieci zostaje korzeniem drzewa.
- Wybór portu korzeniowego (root port, RP) — na każdym pozostałym przełączniku jeden port z najtańszą ścieżką do roota.
- Wybór portów wyznaczonych (designated port, DP) — na każdym segmencie (każdym kablu) jeden port, który prowadzi ruch „w stronę” roota.
Porty, które przegrały, przechodzą w stan zablokowany (blocking): nie przepuszczają ramek, ale czekają na awarię. Gdy główne łącze padnie, STP odblokuje zapasowe i sieć dalej działa.
Jak wygrywa root bridge
Każdy przełącznik ma identyfikator Bridge ID, złożony z priorytetu i adresu MAC. Wygrywa najniższy. Priorytet domyślny to 32768, więc w sieci po wyjęciu z pudełek rootem zostaje przełącznik z najniższym MAC-em — czyli w praktyce przypadkowy wybór, na który nie masz wpływu.
To zła wiadomość, bo root bridge to centrum całej topologii: wszystkie ścieżki prowadzą przez niego, więc powinien to być najszybszy, najlepiej podłączony przełącznik w sieci — zwykle ten w serwerowni albo rdzeniu sieci, a nie stary switch na końcu korytarza. Dlatego w praktyce roota ustawia się ręcznie.
Do wymiany informacji o topologii przełączniki co 2 sekundy wysyłają ramki BPDU (Bridge Protocol Data Unit) na adres multicastowy. Po nich poznają, że ktoś ma niższy Bridge ID, że łącze znikło albo że pojawiło się nowe.
Koszt ścieżki i role portów
Gdy root jest już znany, każdy przełącznik liczy koszt swoich ścieżek do niego. Koszt zależy od prędkości łącza — im szybsze, tym tańsze: dla 100 Mb/s to 19, dla 1 Gb/s to 4. Port z najniższym łącznym kosztem do roota zostaje root portem.
Na każdym pojedynczym segmencie jeden koniec musi być portem designated — to ten, który jest bliżej roota (a przy równej odległości ten z niższym Bridge ID). Port, który przegrywa to porównanie, zostaje zablokowany.
Stany portu: skąd te 30 sekund
Klasyczny STP po włączeniu portu przechodzi przez stany: blocking (nasłuchuje BPDU, nie przekazuje ramek), listening (buduje topologię, ok. 15 s), learning (uczy się adresów MAC, ale jeszcze nie przekazuje ramek, ok. 15 s) i dopiero forwarding (normalna praca). Stąd słynne ~30–50 sekund czekania, zanim port przełącznika zacznie przepuszczać ruch — na egzaminie CCNA i w praktyce trzeba to znać.
Nowszy standard RSTP (Rapid Spanning Tree, 802.1w) skraca tę konwergencję do ułamków sekundy dzięki portom zapasowym (Alternate — zapasowy port korzeniowy) i Backup oraz negocjacji proposal-agreement między przełącznikami. Na współczesnym sprzęcie nie ma powodu zostawiać klasycznego STP.
Konfiguracja: ustaw roota po swojemu
Na Cisco włączysz szybki wariant i przypisziesz roota dla VLAN-u 10 tak:
S1(config)# spanning-tree mode rapid-pvst
S1(config)# spanning-tree vlan 10 root primary
Polecenie root primary samo obniża priorytet. Jeśli wolisz kontrolę, ustaw wartość ręcznie — musi być wielokrotnością 4096 i niższą niż u konkurentów:
S1(config)# spanning-tree vlan 10 priority 4096
Stan sprawdźisz jednym poleceniem:
S1# show spanning-tree vlan 10
W wyniku zobaczysz, który przełącznik jest rootem (linia „This bridge is the root”), a także role portów w skrótach: Root (port korzeniowy), Desg (port wyznaczony) i Altn (port zapasowy Alternate) — czyli port zablokowany.
Ćwiczenie: przekonaj się, że STP działa
W Packet Tracerze zrób trójkąt z trzech przełączników 2960: S1, S2 i S3, po jednym kablu między każdą parą. Do S2 i S3 podepnij po jednym komputerze. Potem na każdym przełączniku skonfiguruj porty łączące go z pozostałymi jako trunk (łącze zbiorcze), żeby rama z VLAN-u 10 przechodziła między przełącznikami. Na S2 zaczyna się tak:
S2(config)# vlan 10
S2(config)# interface fa0/1
S2(config-if)# switchport mode access
S2(config-if)# switchport access vlan 10
S2(config)# interface range fa0/23 - 24
S2(config-if-range)# switchport mode trunk
Porty fa0/23 i fa0/24 to przykład — użyj tych, którymi S2 łączy się z S1 i S3. Na S1 i S3 skonfiguruj trunki analogicznie, a access z VLAN-em 10 tylko na S3, na porcie z tamtym komputerem. Na każdym z trzech przełączników ustaw też spanning-tree mode rapid-pvst — bez tego przełączniki 2960 działają w klasycznym STP i przełączanie zapasowym łączem w kroku 4 potrwa kilkadziesiąt sekund, a nie ułamek.
- Nadaj komputerom adresy z jednej podsieci, np. 192.168.10.1 i 192.168.10.2 z maską 255.255.255.0, i sprawdź poleceniem
ping, że ruch między nimi działa. Na każdym przełączniku uruchomshow spanning-tree vlan 10i znajdź linię „Root ID”. Sprawdź, który switch wygrał — porównaj priorytety i adresy MAC. Wynik zapisz. - Na S1 wpisz
spanning-tree vlan 10 priority 4096i odczekaj chwilę. - Powtórz
show spanning-tree vlan 10na wszystkich trzech. S1 powinien być teraz rootem, a na jednym z pozostałych przełączników jeden z portów powinien mieć rolę Altn — to zablokowane łącze zapasowe. - Włącz
pingz komputera podpiętego do S2 na adres komputera pod S3, a potem rozłącz kabel na aktywnej ścieżce między nimi. Ruch przejdzie łączem, które przed chwilą było zablokowane — RSTP odblokuje je w ułamku sekundy.
Po tym ćwiczeniu show spanning-tree przestanie być dla ciebie czarną magiczną tablicą — zobaczysz w nim konkretne decyzje: kto jest rootem, którędy prowadzi drzewo i który port czeka na awarię. A na egzaminie CCNA pytania o wybór root bridge'a będziesz miał w kieszeni.