Spanning Tree Protocol - IEEE 802.1D-1998

 

Algorytm protokołu Spanning Tree wybiera jeden punkt referencyjny dla całej sieci, a następnie lokalizuje wszystkie połączenia do niego. Kiedy połączenia te zostaną już zlokalizowane, decyduje które z nich mają pozostać aktywne, a które trzeba chwilowo zablokować. Połączenia które zostały zablokowane pozostaną w takim stanie do czasu awarii połączenia podstawowego, kiedy to algorytm przywróci je do stanu aktywności. Poniżej został zobrazowany efekt działania algorytmu STP (Spanning Tree Protocol).


Co robi STP i po co go stosować 

Jedną z najpopularniejszych technologii warstwy drugiej, jaka stosowana jest w dzisiejszych sieciach LAN/MAN, a coraz częściej nawet WAN, jest technologia Ethernet (IEEE 802.3). Niestety, technologia ta sama w sobie nie umożliwia budowania sieci z nadmiarowymi połączeniami. Z punktu widzenia technologii Ethernet, tworzą one pętle w których ruch będzie krążył w nieskończoność. W efekcie ubocznym, powodować to będzie destabilizację tablic przełączania i dodatkowe obciążenie ruchem. Dotyczy to nie tylko połączeń pomiędzy przełącznikami tworzącymi pętlę, ale też połączeń do innych urządzeń w sieci. W technologii Ethernet nie ma odpowiednika dla funkcjonalności, jaką pełni pole Time To Live/Hop Limit w protokole IPv4/IPv6.

Do problemu tego wrócimy jeszcze w innym artykule, gdzie pokażemy jak omawiane w tym dziale protokoły radzą sobie z pętlami nie tylko wewnątrz sieci, ale także realizowanymi na jej brzegu. Chodzi o pętle, które tworzone są przez proste przełączniki lub na prostych przełącznikach, które nie obsługują tych protokołów. Omawiane tutaj protokoły nie tylko mają swoją rolę w budowie aktywnej topologii pomiędzy przełącznikami, gdzie istnieją nadmiarowe połączenia, ale są także świetną ochroną przed wszelkiego rodzaju pętlami od strony użytkowników sieci. Zabezpieczają one przed unieruchomieniem sieci w przypadku nieuważnego wpięcia dodatkowego okablowania i urządzeń.

Poniżej został zobrazowany efekt, wysłania do sieci z nadmiarowym połączeniem 1 pakietu rozgłoszeniowego. Pakiet taki będzie transmitowany na wszystkie porty, oprócz tego, na którym został odebrany. Warto zwrócić uwagę nie tylko na rosnącą ilość pakietów, ale także na to, że tablica przełączająca przełącznika uczy się na podstawie źródłowego adresu MAC z ramki. Zatem nie dość, że adres MAC komputera H4 flapuje (pojawia się i znika) pomiędzy 3 portami, to dodatkowo losowa część ruchu może do niego nie docierać od razu lub w ogóle.

Jednym z rozwiązań wyżej opisanego problemu są protokoły drzew opinających, działające w warstwie drugiej modelu OSI (ang. Open System Interconnection). Umożliwiają one tworzenie redundantnych połączeń w sieciach przełączanych opartych o technologię Ethernet. Dzięki protokołom drzew opinającym, te redundantne połączenia mogą być wykorzystane jednocześnie do rozkładu ruchu, a w przypadku awarii połączenia podstawowego dla danej grupy ruchu, przejmować jego rolę.

Protokoły drzew opinających używane w warstwie drugiej modelu OSI są dość szerokim zagadnieniem, stąd w tym artykule skupimy się na przedstawieniu ich oficjalnej implementacji, która to jest domyślnie uruchomiona na większości przełączników Ethernet. Mowa o protokole STP (ang. Spanning Tree Protocol) opisanym w IEEE 802.1D-1998. Warto zaznaczyć, iż STP może działać również na innych technologiach warstwy drugiej modelu OSI, opisanych w dokumentach IEEE 802. Nie jest ograniczony w swojej implementacji do technologii Ethernet.


Enkapsulacja BPDU 

Algorytm Spanning Tree jest algorytmem rozproszonym, który wykonuje się jednocześnie na wielu urządzeniach w sieci. Aby możliwa była jego praca, STP musi umożliwiać wymianę informacji pomiędzy obsługującymi go urządzeniami. Do wymiany tych informacji stosowane są dwa rodzaje pakietów BPDU (ang. Bridge Protocol Data Unit)Configuration BPDU oraz Topology Change Notification BPDU. Configuration BPDU będziemy nazywali zamiennie wiadomością konfiguracyjną. Budowa tych pakietów została przedstawiona poniżej, niemniej poszczególne pola zostaną omówione w dalszej części artykułu.

Configuration BPDU wykorzystywane jest podczas tworzenia aktywnej topologii sieci, a TCN BPDU w trakcie wykrycia w niej zmian. Wszystkie pakiety BPDU, przenoszone przy użyciu technologii Ethernet korzystają z enkapsulacji IEEE 802.3. Wartość pola SSAP (ang. Source Service Access Point) oraz DSAP (ang. Destination Service Access Point) w nagłówku LLC wynosi 0x42.

Wartość 0x42 ma unikalną właściwość, wygląda tak samo bez względu na wykorzystywaną kolejność bitów w oktecie - 0100 0010 - dzięki czemu unikamy zamieszania w środowiskach gdzie stosowane jest przełączanie z tłumaczeniem np. pomiędzy Token Ring, a Ethernet – SR/TLB (ang. Source-Routing/Translational Bridging).

Do transmisji BPDU stosowane są operacje tylko Typu 1 LLC, stąd pole Control zawiera wartość 0x03 (Unnumbered Information). Ramka wysyłana jest z MAC (ang. Media Access Control) adresu portu przełącznika (każdy port przełącznika posiada unikalny adres MAC), na MAC adres multicastowy 0180.C200.0000. Wszystko co jest zaadresowane na ten adres, trafia do warstwy wyższej obsługującej protokoły działające na przełączniku i nie jest bezpośrednio przekazywane na inne porty przełącznika. 


Budowa aktywnej topologii

Pierwszym etapem tworzenia aktywnej topologii jest wybór przełącznika głównego (ang. Root Bridge). Względem niego będzie budowana cała topologia. Wybór realizowany jest w oparciu o unikalny identyfikator przełącznika BID - Bridge Identifier. Pole Bridge Identifier ma 8 oktetów i składa się z dwóch części. Mniej znaczące 6 oktetów zawiera adres MAC przełącznika, co gwarantuje unikalność identyfikatora w odrębie sieci. Bardziej znaczące 2 oktety (ang. Bridge Priority) umożliwiają ręczne ustalenie priorytetu przełącznika (0-65535), co umożliwia wpłynięcie na tworzoną topologię. Zalecana przez organizację IEEE domyślna wartość pola priorytetu przełącznika to 32768 (Bridge Priority). Budowę oraz umiejscowienie pola BID można zobaczyć poniżej.

Im mniejsza numerycznie jest wartość BID przełącznika, tym ma on wyższy priorytet. Przełącznikiem głównym w sieci zostanie ten, który posiada najwyższy priorytet, czyli najmniejszą wartość BID. Przyjęliśmy, że najniższą numerycznie wartość identyfikatora przełącznika w naszej topologii ma przełącznik S1, a identyfikatory pozostałych przełączników zapisane są w relacji mniejszości S1 < S2 < S3 < S4 < S5 < S6 < S7. 

Po wybraniu przełącznika głównego, algorytm przechodzi do kolejnego etapu. Następuje wybór jednego przełącznika desygnowanego (ang. Designated Bridge) dla każdego z segmentów sieci i określane są role portów. Role określają relacje/umiejscowienie portów względem przełącznika głównego, oraz to czy mogą one przenosić ruch. Każdy z portów przełącznika otrzymuje jedną z trzech ról:

  • Port główny („Root Port”) - R - jest to port na przełączniku, przez który prowadzi najlepsza droga do przełącznika głównego (port ten prowadzi w kierunku korzenia drzewa opinającego). Port ten przekazuje ruch.
  • Port desygnowany („Designated Port”) - D - jest to port w segmencie sieci, przez który prowadzi najlepsza droga do przełącznika głównego (port ten należy do przełącznika desygnowanego danego segmentu sieci i prowadzi on w kierunku liści drzewa opinającego). Port ten przekazuje ruch.
  • Port alternatywny („Alternate Port”) - A - są to wszystkie porty, które nie są portami głównymi ani desygnowanymi. Porty te nie przekazują ruchu. 

Przełącznikiem oraz portem desygnowanym dla danego segmentu sieci zostaje ten, który proponuje segmentowi sieci najniższy koszt dotarcia do przełącznika głównego (ang. Root Path Cost). Koszt ten zawiera w sobie sumę kosztów z portów głównych, na drodze od przełącznika głównego do przełącznika odbierającego Configuration BPDU. Dla uproszenia, koszty wszystkich połączeń w naszej topologii są takie same. Poniżej widać zestawienie zawierające zalecane przez organizację IEEE wartości kosztów.

 

Wszystkie włączone porty przełącznika głównego otrzymują rolę portów desygnowanych (D). Portem głównym (R) na przełączniku desygnowanym zostaje ten, którego wartość kosztu ścieżki do przełącznika głównego jest najniższa. Jeżeli istnieją dwa porty, które oferują identyczny koszt dotarcia do przełącznika głównego, wtedy dodatkowo brane pod uwagę są wartości pól Bridge Identifier z Configuration BPDU (mniejsza numerycznie wartość zwycięża).

Wyobraźmy sobie teraz sytuację, w której pomiędzy przełącznikiem S4 i S7 znajdują się dwa połączenia. Configuration BPDU wysłane przez porty przełącznika S4, będzie zawierało te same wartości Root Path Cost i Bridge Identifier. W takim przypadku, dodatkowo brane są pod uwagę wartości PID (Port Identifier) z otrzymanych Configuration BPDU. Parametr ten składa się z dwóch oktetów, podzielonych na dwie części. Mniej znaczący 1 oktet zawiera unikalny w ramach przełącznika identyfikator portu, przy czym wartość zero nie jest wykorzystywana. Bardziej znaczący 1 oktet daje możliwość ręcznego przypisania priorytetu portowi (0-255), co umożliwia wpłynięcie na tworzoną topologię (zalecana przez organizację IEEE domyślna wartość to 128).

Im mniejsza numerycznie jest wartość PID portu, tym ma on wyższy priorytet. Kiedy rozpatrywany jest ten parametr w celu wyboru portu głównego lub desygnowanego, to zostanie nim ten port, który odbierze Configuration BPDU z PID o najwyższym priorytecie, czyli najmniejszej numerycznie wartości PID. W naszym przykładzie przyjęliśmy relację PID(S4(P1)) < PID(S4(P2)).

Może też zdarzyć się sytuacja, w której wartości PID z otrzymanych Configuration BPDU będą takie same. Załóżmy, że pomiędzy przełącznikiem S4 i S7 znajduje się przełącznik nie obsługujący protokołu STP lub koncentrator (ang. hub). Przełącznik S4 jest do niego wpięty jednym kablem, a przełącznik S7 dwoma. Otrzymywane Configuration BPDU na obydwóch portach przełącznika S7 zawiera te same wartości parametrów Root Path Cost, BID i PID. Poniższy rysunek obrazuje taką sytuację.

W takim przypadku brane pod uwagę są lokalne wartości PID portów, które zawsze gwarantują rozstrzygnięcie wyboru. W naszym przykładzie przyjęliśmy relację PID(S7(P1)) < PID(S7(P2)). W taki sposób zostaje zbudowana aktywna topologia. Jeśli dojdzie w niej do zmian, to część lub jej całość będzie musiała zostać zweryfikowana i cała lub część procedury wykonywana jest na nowo.


Wektor priorytetu

Poniżej znajduje się podsumowanie pięciu reguł rozstrzygających, wykorzystywanych podczas budowy aktywnej topologii. Nazywane są one wektorem priorytetu (ang. Priority Vector).

  1. Preferowana mniejsza wartość Root Identifier (RID) z otrzymanego Configuration BPDU
  2. Preferowana mniejsza wartość Root Path Cost (wartość z Configuration BPDU + koszt portu).
  3. Preferowana mniejsza wartość Bridge ID z otrzymanego Configuration BPDU.
  4. Preferowana mniejsza wartość Port ID z otrzymanego Configuration BPDU.
  5. Preferowana mniejsza wartość Port ID portu lokalnego przełącznika.

Powyższe reguły sprawdzane są zawsze w tej samej kolejności. Jeśli wcześniejsza reguła wyłoni zwycięzcę, to pozostałe nie są już sprawdzane. Na wektor priorytetu można patrzeć jak na jedną dużą liczbę, której najbardziej znaczącym elementem jest Root Bridge Identifier. Ma on największy wpływ na wartość tej liczby, jako iż mieści się w jej najbardziej znaczących bitach. 


Port i jego stan

Zanim porty będą mogły rozpocząć typową pracę, tj. uczenie się adresów MAC i przekazywanie ramek, muszą jeszcze przejść przez kilka stanów. Porty, które otrzymały rolę portu alternatywnego, przechodzą do stanu Blocking. Pozostałe porty, które będą uczestniczyły w aktywnej topologii (porty desygnowane i główne) przechodzą przez stany Listening, Learning do stanu Forwarding. Porty wyłączone znajdują się w stanie Disabled. Przejście portu do stanu przekazywania zostało zilustrowane na poniższym obrazku. Widać na nim, iż jest ono opóźniane każdorazowo o czas Forward Delay, którego domyślna wartość wynosi 15 sekund.

Stan każdego z portów określa jak powinien wyglądać proces odbioru oraz transmisji ramek, Configuration BPDU oraz to czy port powinien uczestniczyć w aktywnej topologii. Każdy z portów może znajdować się w jednym z pięciu stanów: Blocking, Listening, Learning, Forwarding oraz Disabled. Poniżej stany te zostały opisane bardziej szczegółowo:

  • Blocking - port znajdujący się w tym stanie nie bierze udziału w procedurze przekazywania ramek oraz uczeniu tablicy przełączania. Zabezpiecza to przed duplikacją ramek, gubieniem ramek, burzami rozgłoszeniowymi oraz niestabilnością tablic przełączania. Port ten nie wysyła BPDU, ale powinien je odbierać. Do tego stanu port może przejść z dowolnie innego stanu na skutek odebrania BPDU informującego o tym że inny z portów, jest portem desygnowanym segmentu sieci, do której zapięty jest ten port. Ze stanu Blocking port może wyjść na skutek minięcia licznika protokołu na tym lub innym porcie dla przetrzymywanej wiadomości konfiguracyjnej i wejść do stanu Listening. Dodatkowo ze stanu Blocking port może przejść do stanu Disabled poprzez ręczne jego wyłączenie.
  • Listening - w tym stanie port przygotowuje się do przekazywania ramek, przy czym funkcja ta, jak i funkcja uczenia tablicy przełączania, ze względu na możliwość powstania chwilowej pętli są zablokowane (aktywna topologia nie jest jeszcze ustabilizowana). Port ten może wysyłać i odbierać BPDU i jest brany pod uwagę podczas wyliczania aktywnej topologii. Podczas tego stanu odbywa się wyliczanie aktywnej topologii. Do tego stanu port przełącznika przechodzi ze stanu Blocking na skutek odpowiedniej reakcji STP, określającej że port ten powinien przekazywać ramki lub na skutek minięcia licznika wiadomości konfiguracyjnej. Ze stanu Listening port może wyjść poprzez minięcie odpowiedniego licznika protokołu i wejść do stanu Learning. Wejść do stanu Blocking na skutek odebrania BPDU informującego o tym że inny z portów, jest portem desygnowanym segmentu sieci, do której zapięty jest ten port. Dodatkowo ze stanu Listening port może przejść do stanu Disabled poprzez ręczne jego wyłączenie.
  • Learning - w tym stanie port przygotowuje się do przekazywania ramek, przy czym funkcja ta, ze względu na możliwość powstania chwilowej pętli w tym stanie, jest zablokowana (aktywna topologia nie jest jeszcze ustabilizowana). Funkcja uczenia tablicy przełączania jest aktywna, dzięki czemu możemy zminimalizować efekt niepotrzebnego przesyłania niektórych ramek na wszystkie porty, kiedy tablica przełączania jest jeszcze niepełna. Port ten może wysyłać i odbierać BPDU i jest brany pod uwagę podczas wyliczania aktywnej topologii. Do tego stanu port przełącznika przechodzi ze stanu Listening na skutek minięcia odpowiedniego licznika. Ze stanu Learning port może wyjść poprzez minięcie odpowiedniego licznika protokołu i wejść do stanu Forwarding. Wejść do stanu Blocking na skutek odebrania BPDU informującego o tym że inny z portów, jest portem desygnowanym segmentu sieci, do której zapięty jest ten port. Dodatkowo ze stanu Learning port może przejść do stanu Disabled poprzez ręczne jego wyłączenie.
  • Forwarding - port w tym stanie realizuje funkcje przełączania ramek oraz uczenia tablicy przełączania. Port ten może wysyłać i odbierać BPDU i jest brany pod uwagę podczas wyliczania aktywnej topologii. Do tego stanu port przełącznika przechodzi ze stanu Learning na skutek minięcia odpowiedniego licznika. Ze stanu Forwarding port może wejść do stanu Blocking na skutek odebrania BPDU informującego o tym że inny z portów, jest portem desygnowanym segmentu sieci, do której zapięty jest ten port. Dodatkowo ze stanu Forwarding port może przejść do stanu Disabled poprzez ręczne jego wyłączenie.
  • Disabled - port w tym stanie nie realizuje funkcji przełączania ramek, uczenia tablicy przełączania oraz żadnych operacji STP. Port ten nie wysyła oraz nie odbiera BPDU i nie jest brany pod uwagę podczas wyliczania aktywnej topologii. Do tego stanu można wejść z jakiegokolwiek stanu po przez ręczne wyłączenie portu.

W klasycznej implementacji STP, rola portu jest powiązana z jego stanem. Port który jest w stanie Blocking lub Listening odrzuca ramki i nie uczy się adresów MAC. Jest to realizacja dokładnie takich samych funkcji. Różni te porty ich rola. Port alternatywny nie uczestniczy w aktywnej topologii, stąd zawsze jest w stanie Blocking. Port który jest w stanie Listening otrzymał rolę portu desygnowanego lub głównego i uczestniczy w aktywnej topologii. Port desygnowany i główny nigdy nie przebywa w stanie Blocking w klasycznym STP. 


Generowanie Configuration BPDU

Na początku każdy z przełączników zakłada, że sam jest korzeniem drzewa opinającego. Wynika to z faktu, że przełącznik ten nie usłyszał jeszcze o żadnym innym przełączniku w sieci. Zatem jego BPDU jest najlepsze, we wszystkich segmentach sieci, do których przyłączone są jego porty. W związku z tym, że wszystkie uruchomione porty przełącznika głównego, są portami desygnowanymi, to przenosi on je do stanu Listening, rozpoczyna przez nie transmisję Configuration BPDU. Wiadomości te transmitowane są co czas Hello Time, której domyślna wartość wynosi 2 sekundy. Dzięki takiemu podejściu, przełączniki mogą usłyszeć się w każdym z segmentów i mogą wspólnie wybrać przełącznik główny. Stan ten obrazuje pierwszy obrazek na poniższym rysunku "Zaraz po włączeniu". 

W stabilnej topologii, Configuration BPDU generowane są tylko przez przełącznik główny co czas Hello Time. Pozostałe przełączniki, generują je tylko na skutek wcześniejszego odebrania Configuration BPDU na swoim porcie głównym. Zostało to zobrazowane na rysunku podpisanym "Stabilna topologia". Podejście takie sprawia, że sieć łatwo może zrekonfigurować się w przypadku utraty połączenia do korzenia drzewa opinającego. Możliwe jest to, dzięki zaimplementowaniu mechanizmu starzenia się Configuration BPDU, który realizowany jest w oparciu o pole Message Age i Max Age. Zostało to także zobrazowane dwa rysunki wyżej, gdzie widać stan przejścia portu przez różne stany i strzałkę, oznaczającą minięcie licznika przetrzymywanej wiadomości konfiguracyjnej. Proces starzenia się wiadomości konfiguracyjnej ilustruje poniższy rysunek.

  

Wartości czasów Forward Delay (domyślnie 15 sekund), Hello Time (domyślnie 2 sekundy) oraz Max Age (domyślnie 20 sekund) można skonfigurować na każdym z przełączników. Niemniej, w stabilnej topologii wykorzystywane są tylko wartości, jakie zostały ustawione na przełączniku głównym. Wstawia on je do wysyłanego Configuration BPDU i są one przekazywane bez zmian w kierunku liści drzewa opinającego.


Zbieżność sieci 

Końcowa wartość licznika ważności wiadomości konfiguracyjnej, ustawiana jest zawsze na wartość pola Max Age. Początkowa wartość tego licznika, ustawiana jest na wartość pola Message Age. Realizowane jest to dla każdego portu, który odbiera Configuration BPDU. Jeśli Max Age ma standardową wartość 20 sekund i odebraliśmy Configuration BPDU z wartością pola Message Age równą 2, to wiadomości konfiguracyjna straci ważność po 18 sekundach. Do powyższej sytuacji może dojść, kiedy pomiędzy dwoma przełącznikami znajduje się koncentrator lub przełącznik nie obsługujący STP. Przełącznik przestaje wtedy odbierać Configuration BPDU, ale nadal widzi że link w stronę przełącznika głównego jest aktywny. Dopiero po minięciu licznika czasu ważności wiadomości konfiguracyjnej, port może przejść do stanu Listening i przez stan Learning, udać się do stanu Forwarding.

Z powyższego wynika, że w najbardziej niekorzystnym przypadku, potrzeba aż 50 sekund do ustabilizowania się topologii w przypadku awarii. Natomiast, gdy przełączniki są uruchamiane pierwszy raz lub gdy zostanie wykryta zmiana w topologii, to potrzebne jest tylko 30 sekund. Jeżeli port zmieni status na "down", to można od razu przeterminować na nim wiadomość konfiguracyjną. 

Przyjmuje się, że domyślny czas stabilizacji aktywnej topologii w klasycznym STP wynosi od 30 do 50 sekund. 


Podsumowanie

W związku z długością artykułu, został tutaj przedstawiony tylko fragment zagadnień, jakie odnoszą się do protokołów STP. Będziemy temat ten rozwijać w kolejnych artykułach. O ile istnieją już nowsze wersje protokołu STP, to na dużej ilości przełączników wciąż domyślnie działa opisana tutaj, klasyczna wersja protokołu STP. Wynika to z potrzeby zgodność wstecz, ze starszymi urządzeniami. Oprócz tego, cała zawarta tutaj terminologia, jak najbardziej jest potrzeba do zrozumienia działania nowszych wersji protokołu STP.

Pomimo wykonywania się algorytmu jednocześnie na wielu urządzeniach i wielokrotnych zmianach stanu sieci, końcowa topologia STP jest przewidywalna i mamy wpływ na jej budowę. Czas zbieżności jest dość długi, niemniej można go zoptymalizować o czym będzie można przeczytać w kolejnych artykułach.


Zapraszamy do kontaktu drogą mailową This email address is being protected from spambots. You need JavaScript enabled to view it. lub telefonicznie +48 797 004 932.