Jest to jeden z protokołów, które po prostu działają niezawodnie, a jedyne problemy, które mogą się pojawić, wynikają nie z błędów w protokole, lecz z projektowania naszej sieci.
Po co właściwie potrzebujemy tego protokołu?
Działający na warstwie 2 protokół łącza danych rozwiązuje problemy z ramkami oraz redundancją. Oczywiście wszyscy pragniemy redundancji, jednak z uwagi na obsługę ramek typu broadcast oraz unknown unicast (wszystkie takie ramki są przesyłane przez switch przez wszystkie interfejsy oprócz tego, na którym dana ramka została otrzymana), łatwo wprowadzić w nieład tablice adresów MAC (adres nadawcy ramki może pojawić się na różnych interfejsach) oraz wywołać burzę broadcastową (switche rozsyłają pakiety oraz je duplikują na wszystkich interfejsach).
Ze względu na brak mechanizmu kontroli czasu życia ramki w sieci (w warstwie 3 mamy TTL) raz wysłane dane mogą krążyć w sieci LAN bez końca (routery nie przekazują takich pakietów poza sieć).
Co zatem robi STP, aby temu zapobiec?
Tworzy drzewo połączeń między switchami, umożliwiając komunikację między nimi tylko jedną ścieżką (po wykryciu awarii jest możliwe przekazywanie ruchu alternatywną ścieżką, ale w danym momencie tylko jedna ścieżka jest aktywna).
Elekcja root switcha
Jak każde drzewo, również STP potrzebuje swojego korzenia (roota), od którego wszystko będzie się dalej rozchodzić. Jak tego dokonać?
Podczas elekcji switche komunikują się za pomocą specjalnych ramek BPDU – Bridge Protocol Data Unit, które zawierają Bridge ID składający się z priorytetu + rozszerzonego identyfikatora systemu (identyfikator VLANu) oraz adresu MAC.
Switch | Priorytet | MAC |
---|---|---|
S1 | 32769 | 0090.0C4E.0AA0 |
S2 | 32769 | 00D0.BC03.515B |
S3 | 32769 | 0030.A34B.5A28 |
Proces elekcji wygrywa switch z najniższym BID-em. Od teraz wszystkie porty wychodzące od tego switcha będą portami desygnowanymi i będą przekazywać cały ruch.
W naszej topologii S3 został wybrany rootem. Ponieważ wszystkie switche mają ten sam priorytet 32769, porównujemy adresy MAC.
Porty z S1 oraz S2 w stronę S3 są portami typu root. Dlaczego? Ponieważ posiadają najniższy koszt dotarcia do root switcha.
Prędkość portu | IEEE koszt w 1998 | koszt w 2004 I później |
---|---|---|
10Mbps | 100 | 2000000 |
100Mbps | 19 | 200000 |
1Gbps | 4 | 20000 |
10Gbps | 2 | 2000 |
100Gbps | N/A | 200 |
1Tbps | N/A | 20 |
W przypadku połączenia pomiędzy S1 i S2 z jednej strony mamy port typu designed, a z drugiej strony port typu blocking. Co istotne, port w stanie blocking nie przepuszcza ruchu, ale nadal odbiera i interpretuje ramki BPDU.
Dlaczego?
Ponieważ standardowo root switch rozsyła co sekundę ramki BDPU, które są przekazywane dalej w ramach drzewa STP. Jeżeli switch nie otrzyma takiej ramki w ciągu 20 sekund (10 x 2 sekundy – typowy dead interval), rozpoczyna rekalkulację drzewa STP, aby umożliwić dalszą komunikację w sieci.
Timer | Domyślna wartość | Opis |
---|---|---|
Hello | 2s | Czas pomiędzy wysłaniem kolejnych pakietów Hello przez root’a. |
MaxAge | 10x wartość timera Hello (20s) | Czas oczekiwania przez switch na pakiet Hello zanim rozpocznie przeliczanie STP |
Forward Delay | 15s | Czas jaki switch pozostaje w stanie listening oraz learning |
10Gbps | 2 | 2000 |
100Gbps | N/A | 200 |
1Tbps | N/A | 20 |
Stany portów w STP
Stany STP w skrócie informują, co port ma zrobić z otrzymanymi ramkami: czy powinien je dyskretnie odrzucić, przetworzyć czy przesłać dalej. Switch może przełączyć port przesyłający dane w stan blokowania. Jednak przełączenie portu, który odrzuca dane, do portu przesyłającego dane, wymaga przejścia przez kilka stanów: blokowanie -> nasłuchiwanie -> nauka -> przekazywanie.
Stan | Przesyła ramki z danymi? | „Uczy się” MAC adresów? |
---|---|---|
Blocking | Nie | Nie |
Listening | Nie | Nie |
Learning | Nie | Tak |
Forwarding | Tak | Tak |
Disabled | Nie | Nie |
1Tbps | N/A | 20 |
Port w stanie Listening usuwa wszystkie stare adresy MAC z tabeli, aby uniknąć pętli. Dodatkowo, w stanie Blocking dyskretnie odrzuca wszystkie pakiety.
Port w stanie Learning nadal nie przekazuje danych dalej, ale wpisuje odebrane źródłowe adresy MAC do tablicy.
Role portów w STP
Stany portów w STP są ściśle powiązane z ich rolami. W tabeli zawarłem informacje dotyczące występowania poszczególnych ról, ponieważ niektóre z nich zostały dodane jako nowość w RSTP.
Funkcja | Rola portu | STP/RSTP |
---|---|---|
Najlepszy link w kierunku root switch’a | Root Port | STP/RSTP |
Zastępuje root port w przypadku awarii linku | Alternate port | RSTP |
Port przenoszący traffic, w głąb domeny kolizyjnej | Designated port | STP/RSTP |
Zastąpi port desygnowany w przypadku awarii linku | Backup port | RSTP |
Administracyjnie położony port | Disabled | STP/RSTP |
1Tbps | N/A | 20 |
Ewolucja protokołu Spanning-Tree PVST+
Protokół Spanning-Tree zapobiega powstawaniu pętli poprzez umożliwienie przesyłania danych tylko przez porty desygnowane oraz root, a pozostałe przełącza w stan blokowania. W rezultacie tracimy możliwość wykorzystania pełnej przepustowości switcha lub nawet prostego równoważenia ruchu.
Cisco doszło do tego samego wniosku i stworzyło PVSTP+, co jest ulepszeniem protokołu STP poprzez tworzenie instancji spanning tree dla każdego VLANu.
Dzięki temu, poprzez odpowiednie manipulowanie kosztami, możemy przesyłać dane z różnych VLANów przez różne łącza. To zapewnia równoważenie obciążenia ruchem w sieci, nie rezygnując jednocześnie z redundancji.
Rapid Spanning Tree
Mimo że STP działa dobrze, zdarzają się sytuacje, w których ujawniają się jego niedoskonałości. Na przykład, gdy zawiedzie nam port typu desygnowanego, STP potrzebuje około 50 sekund!, aby przełączyć się z blokowania na przekazywanie pakietów (20 sekund oczekiwania na pakiety BPDU, 15 sekund nasłuchiwania, 15 sekund nauki). 50 sekund w XXI wieku to jak wieczność!
W celu rozwiązania tego problemu powstał protokół RSTP, którego działanie jest stosunkowo proste. Po wyborze root switcha wysyła on pakiet BPDU przez wszystkie porty i przełącza je w tryb odrzucania. Jeśli sąsiedni switch chce komunikować się przez dany port, odsyła pakiet BPDU i port zostaje odblokowany.
Proste, prawda? Dodatkowo przełączenie portu z trybu odrzucania pakietów na tryb przekazywania praktycznie następuje w kilka sekund (MaxAge wynosi 3x Hello).
Multiple Spanning Tree Protocol (MSTP)
MSTP jest zainspirowany protokołem MISTP (Multiple Instance STP) opracowanym przez firmę Cisco. Opracowany przez IEEE, umożliwia przypisanie kilku VLAN-ów do jednej instancji STP, co jest bardzo wygodne, gdy mamy wiele VLAN-ów i nadal chcemy zachować pełną kontrolę nad ruchem w sieci.
W urządzeniach Cisco MSTP jest implementowany jako MST i pozwala na utworzenie do 16 instancji RSTP.
Protokół | Standard | Konwergencja | Przeliczanie STP |
---|---|---|---|
STP | 802.1D | Wolna | Dla wszystkich VLAN’ów |
PVST+ | Cisco | Wolna | Dla każdego VLAN’u |
RSTP | 802.1W | Szybka | Dla wszystkich VLAN’ów |
Rapid PVST+ | Cisco | Szybka | Dla każdego VLAN’u |
MSTP | 802.1S, Cisco | Szybka | Dla każdej instancji |
Co jeszcze potrafi STP?
Postęp jest czymś całkowicie pożądanym i oczekiwanym nawet w przypadku elementów, które działają dobrze. Dlatego STP posiada kilka dodatków przyspieszających jego pracę oraz zwiększających bezpieczeństwo sieci.
- Portfast – Porty te natychmiast przechodzą w stan przekazywania danych i są od razu desygnowane, ponieważ zazwyczaj są to porty, do których podłączeni są użytkownicy końcowi, którzy nie powinni wpływać na naszą instancję STP.
- BPDUguard – Ustawia się na portach, które nie powinny otrzymywać BPDU. Jeśli port otrzyma ramkę BPDU, natychmiast przechodzi w stan error-disable.
- BPDU filter – Ustawia się na portach, które nie powinny przesyłać pakietów BPDU. Jeśli ustawimy BPDU filter na tym samym porcie co BPDUguard, ten drugi zostanie nadpisany.
- Root Guard – W przeciwieństwie do innych ulepszeń, root guard nie może być używany globalnie i musi być przypisany bezpośrednio do interfejsu. Root guard zapobiega temu, aby port zmienił stan z desygnowanego na root.