Routing & Switching

STP - wszystko co musisz o nim wiedzieć

stp-spanning-tree-protocol
W: Routing & Switching

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).

Topologia trzech switchy z wyłączonym przez STP interfejsem, aby zapobiec powstawaniu pętli

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.

Per Vlan Spanning Tree - root switch na różnych przełącznikach

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).

💡
Cisco oczywiście udoskonaliło RSTP, umożliwiając korzystanie z zalet PVST+ dzięki czemu mamy Rapid PVST+

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
Multiple Spanning Tree MSTP
Działanie protokołu Spanning Tree polega na zapobieganiu tworzenia pętli w sieci. Jednakże prowadzi to do nieoptymalnego wykorzystania infrastruktury sieciowej. Problem ten został rozwiązany poprzez wprowadzenie PVST, gdzie każdy VLAN posiada własną instancję STP. Niemniej jednak, rozwiązując jedną kwestię, napotkaliśmy na kolejną. STP jest protokołem bardzo obciążającym CPU, a utrzymanie wielu

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.

Napisane przez
Rafał Rudewicz
Pasjonat sieci komputerowych i automatyzacji. CCNP Enterprise & DevNet Specialist. IP/MPLS SME. Dołącz do mnie, aby razem odkrywać fascynujący świat technologii!
Komentarze
Spis treści
Świetnie! Udało ci się pomyślnie zarejestrować.
Witaj z powrotem! Zalogowałeś się pomyślnie.
Pomyślnie subskrybowałeś Inna Sieć.
Twój link wygasł.
Sukces! Sprawdź swoją skrzynkę e-mailową, aby uzyskać magiczny link do logowania.
Sukces! Twoje informacje rozliczeniowe zostały zaktualizowane.
Twoje informacje rozliczeniowe nie zostały zaktualizowane.