Duxo Academy
Blog ›

STP na Cisco: po co Spanning Tree i jak wygrać root bridge

· 5 min czytania

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:

  1. Wybór przełącznika głównego (root bridge) — jeden przełącznik w całej sieci zostaje korzeniem drzewa.
  2. Wybór portu korzeniowego (root port, RP) — na każdym pozostałym przełączniku jeden port z najtańszą ścieżką do roota.
  3. 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.

  1. 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 uruchom show spanning-tree vlan 10 i znajdź linię „Root ID”. Sprawdź, który switch wygrał — porównaj priorytety i adresy MAC. Wynik zapisz.
  2. Na S1 wpisz spanning-tree vlan 10 priority 4096 i odczekaj chwilę.
  3. Powtórz show spanning-tree vlan 10 na 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.
  4. Włącz ping z 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.