Il tuo indirizzo IP è 162.158.78.211     

Spanning Tree Protocol

Scritto da Alessio Carta il . Inserito in Livello 2 - collegamento . Visite: 24308

In molte situazioni è utile collegare tra loro più switch, per garantire l’espansione della rete; è utile avere anche dei collegamenti ridondati, poiché se un cavo che collega tra loro due switch si rompe oppure le porte dove è connesso hanno dei problemi, la comunicazione tra host sui differenti switch viene a mancare.

I collegamenti ridondati vanno però gestiti con attenzione, perché possono creare dei cicli infiniti (loop) all'interno della rete, generando frame duplicati o peggio dei broadcast storm (letteralmente tempeste di broadcast). Per capire meglio, vediamo cosa succede quando viene inviato un frame in modalità broadcast, osservando le sequenze qui sotto.

 

 

Il server (sul lato sinistro) invia un messaggio in broadcast:

 

Lo switch S1 inoltrerà il frame su tutte le porte, tranne quella di arrivo:

 

Lo switch S2 riceve 2 frame e li elabora. Quello che arriva sull’interfaccia 0/24, essendo di tipo broadcast, verrà replicato su tutte le porte tranne la 0/24 (quella di arrivo). Lo stesso avviene per il frame arrivato sull’interfaccia 0/23, replicato su tutte le porte tranne la 0/23 (quella di arrivo). A questo punto 2 frame identici ripartono verso le interfacce dello switch S1:

 

Sullo switch 1 i 2 frame in arrivo saranno duplicati a causa del meccanismo appena descritto, ossia ognuno di essi sarà inoltrato verso tutte le porte dello switch tranne quella di arrivo. Il server riceverà messaggi broadcast duplicati, in quantità crescente, in ciclo continuo e infinito:

 

L'algoritmo STP (Spanning Tree Protocol) si occupa proprio di risolvere questo problema, fornendo un meccanismo per la disattivazione dei collegamenti ridondanti in una rete commutata. STP è un protocollo relativamente autosufficiente e richiede  configurazioni minime.  Alla loro accensione, gli switch con STP abilitato controllano la rete  per verificare l'esistenza di percorsi ciclici (loop): se vengono rilevati, alcune porte di collegamento vengono bloccate, spezzando in questo modo l’anello generato dai percorsi ridondati. Le altre porte vengono lasciate attive per la trasmissione delle trame.

STP definisce un albero che attraversa tutti gli switch della rete. Per evitare i loop nello switching, lo Spanning Tree Protocol:

  • forza alcune interfacce ad uno stato di blocco o standby
  • lascia le altre interfacce nello stato di inoltro
  • riconfigura la rete attivando il percorso lasciato in standby, nel caso in cui il percorso principale non fosse più disponibile

STP prevede la presenza di uno switch designato come root, detto root bridge, ovvero radice dello spanning tree. Il root bridge comunica con altri switch utilizzando particolari trame dette BPDU, Bridge Protocol Data Units, inviate in multicast ogni 2 secondi a tutti gli altri switch. Le trame BPDU contengono varie informazioni, di seguito descritte:

 

  • Protocol ID: indica il tipo di protocollo (STP); è sempre 0.
  • Version ID: indica la versione del protocollo STP; è 0 per STP 802.1D.
  • Type: indica il tipo di messaggio BPDU; è sempre 0.
  • Flags: include i bit TC=Topology Change, TCN e TCA.
  • Root ID: identifica il root bridge; è composto da 2 byte, che sono la priorità, più altri 6, che costituiscono l'indirizzo MAC dello switch riconosciuto come root bridge.
  • Patch Cost: costo totale del percorso per raggiungere il root bridge; questo campo viene aggiornato dopo ogni passaggio sugli switch;
  • Bridge ID (BID): è l'identificatore del bridge che ha ritrasmesso la BPDU; è composto da 2 byte, che sono la priorità, più altri 6, che sono l'indirizzo MAC dello switch.
  • Port ID: è l'identificatore della porta da cui è stata trasmessa la BPDU. E’ composto da due byte: il primo indica la priorità, mentre il secondo è l'identificativo della porta.
  • Message Age: è il tempo trascorso dalla generazione della BPDU, quindi indica da quanto tempo si è eletto il Root Bridge.
  • Max Age: se Message Age supera questo tempo limite, la BPDU viene scartata, e viene rilanciata l'elezione.
  • Hello Time: tempo che intercorre fra la generazione di due BPDU.
  • Forward Delay: indica il tempo di permanenza nello stato di listening prima di passare nello stato di learning e nello stato di learning prima di passare nello stato di forwarding.

 

Il valore del Path Cost indicato nella BPDU rappresenta la velocità di un link. In base allo standard 802.1d del 1998, questo valore aveva le seguenti corrispondenze:

Banda Costo STP
4 Mbit/s 250
10 Mbit/s 100
16 Mbit/s 62
100 Mbit/s 19
1 Gbit/s 4
2 Gbit/s 3
10 Gbit/s 2

Con lo standard 802.1d del 2004, per il path cost sono stati introdotti valori a 32 bit, consentendo maggior granularità nell'assegnazione dei costi. Le corrispondenze sono state aggiornate come indicato nella tabella sotto:

Banda Costo STP
4 Mbit/s 5,000,000
10 Mbit/s 2,000,000
16 Mbit/s 1,250,000
100 Mbit/s 200,000
1 Gbit/s 20,000
2 Gbit/s 10,000
10 Gbit/s 2,000

 

Gli stati delle porte

Appena uno switch con STP abilitato si avvia, ogni porta può attraversare una serie di 5 stati:

  1. disabled
  2. blocking (blocco)
  3. listening (ascolto)
  4. learning (apprendimento)
  5. forwarding (trasmissione)

Lo stato di disabled si ha quando l'amministratore disabilita la porta dello switch con il comando shutdown. In base allo stato in cui si trova la porta, i corrispondenti LED  sullo switch cambiano da una luce arancione lampeggiante ad una luce verde fissa. Possono passare fino a 50 secondi prima che una porta sia pronta per trasmettere trame. L'esistenza di questi stati è motivata dal fatto che se un collegamento si interrompe, uno switch  potrebbe reagire ed inoltrare il traffico prima che la convergenza sia completa in tutta la rete. Questo può creare percorsi doppi e physical loops. Per evitare ciò lo switch mette le porte in due stati transizionali, prima di passare dal blocking al forwading. Questi stati sono appunto listening e learning; il primo mette il bridge in ascolto di BPDU contenenti soluzioni migliori, l'altro impara la nuova posizione dei MAC address per scrivere la nuova MAC address table. Nel caso di caduta di qualche link, sarà necessario far ripartire l'algoritmo STP, quindi è necessario che anche le porte blocked possano ricevere BPDU. A questo punto si è praticamente generato un albero, raggiungendo lo scopo di non avere problemi di loop.

 

 

I ruoli delle porte

Per la definizione dei ruoli delle porte sono previsti 3 passaggi fondamentali:

  1. elezione del root bridge
  2. elezione delle root port
  3. elezione delle designated port

1. Il root bridge viene eletto in base al valore presente nel campo Bridge Identifier (BID) della BPDU: “vince” lo switch con il valore minore. Come già indicato, il BID è composto da 2 byte di Bridge Priority (di default 32768, modificabile dall'amministratore entro un range 0-65535) più 6 byte costituiti dal MAC-address. Ad esempio, se uno switch ha come MAC address AA-11-BB-22-CC-33, il BID sarà 32768:AA-11-BB-22-CC-33. Se si vuol forzare l'elezione del root bridge in favore di uno switch specifico, è sufficiente variare al ribasso la sua priorità. All’inizio, ogni switch ritiene di essere il root bridge: genera quindi una BPDU, impostando nel campo Root ID il proprio identificatore. In questa fase si ha che Root ID = Bridge ID. Il frame viene quindi inoltrato a tutte le porte. Quando un altro switch riceve una BPDU, confronta il Root ID ricevuto con il proprio Bridge ID; se  il proprio Bridge ID è inferiore, lo switch continuerà a ritenersi root, proseguendo nell’invio delle BPDU e propagando il proprio identificativo come root; se invece il valore ricevuto è minore, lo switch riconoscerà il nuovo root e invierà le BPDU inserendo il Root ID corretto. In base a questo meccanismo, dopo un po' di tempo tutti gli switch sapranno chi è il root bridge.

2. Tutti gli apparati che non sono diventati root bridge, avranno una porta configurata come root port, ossia una porta che connette lo switch al root bridge tramite il link a minor costo. Ogni switch calcola il percorso più breve verso il root bridge stesso. Le BPDU inviate dal root avranno un costo pari a 0. Uno switch che riceve una BPDU dal root vi aggiunge il costo della porta tramite cui ha ricevuto la BPDU stessa (vedere tabella sul valore del Patch Cost nei paragrafi precedenti). A questo punto verificherà su quale delle sue interfacce riceve la BPDU con costo minore: l'interfaccia con questa caratteristica diventerà root port. Di seguito tutti gli switch, tramite il meccanismo appena descritto, identificheranno la propria root port. In caso porte di pari costo, viene scelta quella col minor Port ID, costituito da una priorità (di default 128) e dal numero della porta. Ad esempio, una Fa0/3 avrà un Port ID di 128.3.

Nell'esempio proposto, dopo l'elezione del root bridge vinta dallo switch S2, prendendo in considerazione lo switch S1 vediamo  che esso può ricevere BPDU su tutte e due le interfacce 1/1 e 1/2. Le BPDU ricevute sulla 1/1 avranno un costo pari a 0,  a cui va sommato il costo della porta stessa; quelle ricevute sulla 1/2 avranno un costo pari a quello della porta 1/1 di S3, a cui va sommato il costo della stessa 1/2 di S1. La root port di S1 sarà pertanto la 1/1.

 

 

3. Secondo il protocollo STP, ogni segmento di rete può avere una sola porta designata, tecnicamente detta designated port. Questa porta permette l'inoltro del traffico verso il root bridge. La designated port è quella con root path cost inferiore e, in caso di parità, quella appartenente allo switch con BID inferiore. Le altre porte che si affacciano sullo stesso segmento di rete divengono delle blocked ports, in grado di ricevere BPDU ma non di inoltrare traffico.

 

 

Topology change

Con lo Spanning Tree a regime, le BPDU vengono emesse solo dai Root Bridge. Se nel periodo di tempo indicato dal campo Max Age non si ricevono BPDU, viene rilanciata l'elezione tramite un processo di topology change. Si verifica un cambio nella topologia quando una porta di trunk nello stato di forwarding va in down, oppure quando uno switch ha una nuova porta che passa nello stato di forwarding. Lo switch che rileva l'evento invia verso il root bridge una trama di TCN, Topology Change Notification; il root Bridge informa tutti gli switch della rete del cambiamento in corso, dando via ad una rinegoziazione dell'STP.

 

I tempi dello spanning tree

Gli switch con STP attivo inviano le BPDU nella rete ogni 2 secondi. STP rimane in continuo ascolto per verificare tramite queste BPDU che non vi siano collegamenti interrotti o loop in rete. Se si verifica l'interruzione di un collegamento, STP interviene per cambiare le porte dallo stato di blocked a quello di forwarding o viceversa. Il cambiamento però non è istantaneo. Il ricalcolo dei percorsi migliori nella rete varia dai 30 ai 50 secondi per ogni switch; in questo intervallo di tempo, nelle porte interessate da STP, i dati non possono transitare.

Schematizzando:

  1. Le porte iniziano ad operare in uno stato di blocking (arancione fisso), per impedire la formazione di un loop; trascorrono sino a 20 secondi prima di passare allo stato di listening.
  2. Nello stato di listening (arancione lampeggiante), si possono ricevere BPDU dagli switch vicini; tuttavia, non sono concessi  l'inoltro di trame e l'apprendimento dei mac-address. Trascorrono 15 secondi per il passaggio allo stato di learning: in questo tempo viene verificata la presenza di altre porte in trunk con le quali si potrebbero generare dei loop. Se c’è un loop si ritorna nello stato di blocking, altrimenti si passa allo stato di learning.
  3. Quando la porta si trova nello stato di learning (arancione lampeggiante), si possono ricevere BPDU dagli switch vicini;  non è ancora concesso l'inoltro di trame, ma si possono apprendere i mac-address. Trascorrono 15 secondi per il passaggio allo stato di forwarding.
  4. Lo stato di forwarding (verde lampeggiante) è l'ultimo della serie; la porta inoltra le trame, riceve BPDU, apprende mac-address.

Per alcune applicazioni questo tempo di attesa potrebbe essere eccessivo; inoltre l'intervento frequente di STP per modificare l'albero è sintomo di problemi, ed ha un impatto negativo sulle operazioni in rete. Esistono comunque diverse soluzioni per ridurre al minimo i tempi di ricalcolo da parte di STP. Le principali sono PortFast, UplinkFast e BackboneFast, di proprietà Cisco; non essendo standard aperti, non possono essere utilizzati in reti con switch di marche diverse. Vediamole nel dettaglio:

PortFast
La funzione PortFast di STP permette ad una porta di passare immediatamente allo stato di forwarding, saltando gli stati intermedi di listening e learning. L'uso di PortFast è utile nel collegamento diretto tra una porta ed una workstation o un server, permettendo a tali macchine un accesso immediato alla rete, senza le attese dovute ai tempi di convergenza di STP.

UplinkFast
Accelera la scelta di una nuova root port quando un collegamento salta.

BackboneFast
Fornisce una veloce convergenza nel caso in cui si presenti un cambiamento nella topologia di STP. E' una funzione usata spesso ai livelli Distribution e Core Layers, dove più switch sono interconnessi tra loro.

Commenti  

# iheartbutterytaste 2017-08-06 13:17
Have fun with your Mii on the Nintendo social program.
Rispondi
# Simone 2017-07-20 23:09
Ciao, grazie e complimenti per l'articolo.
Ho un quesito: Ho uno scenario nel quale 2 switch ritengono di essere entrambi root bridge nonostante abbiano priority diverse e stessa modalità operativa. Questi 2 switch sono "uniti" tramite MPLS, dunque 2 router. Questo può essere la spiegazione per la quale entrambi sono root?
Grazie.
Rispondi
# pixel gun 3d tricks 2017-04-19 22:19
Many individuals which carry the game, they'll simply make use of
the hack cheat.
Rispondi
# vit 2017-04-03 10:19
complimenti per la chiarezza e
grazie per l'evidente impegno

vit
Rispondi
# Dario 2014-09-27 15:27
Ciao Alessio,
per prima cosa ti faccio i miei complimenti per la chiarezza delle spiegazioni, ora passo ad una domanda.
Ho preso in mano ora IPV6 e riflettendo sul fatto che non esiste più il traffico di broadcast (mi pare di avere capito grazie all'introduzion e del nuovo Anycast) mi domando se in una rete mesh totalmente IPV6 ha ancora ragione di esistere lo spanning tree (che nasce proprio con lo scopo di evitare il broadcast storming).
Grazie.
Dario
Rispondi
# Straniero ICMP 2013-04-11 12:37
ciao ale

dovresti aggiornare i valori del path Cost ;)

10gbps 2
1gbps 4
100mbps 19
10mbps 100
Rispondi
# Alessio 2013-04-11 15:53
Ciao, i valori che indichi tu sono relativi al vecchio standard 802.1d del 1998, poi aggiornati con la versione 2004. Ho inserito questo particolare all'interno dell'articolo, in modo che sia più chiaro. Per qualsiasi perplessità, puoi far riferimento allo standard ufficiale, scaricabile qui: standards.ieee.org/.../....
Rispondi
# Straniero ICMP 2013-04-11 18:59
HAi proprio ragione,

il libro di CCNA dal quale stò studiano, non riporta correttamente l'ordine degli aggiornamenti,
per i volori che ho citato mi dice che sono i costi rivisti, mentre
volori come 10gbps -1#1Gbps-1#100M bps-10#10Mbps-1 00; sono i costi precedenti, a quegli che ho citato.
Il libro è stato scritto nel 2008. dovrebbe essere aggiornato.
Mi informerò per vedere con quale IOS sono stati aggiornati, i nuovi valori.

Grazie della risposta, gentilissimo
Rispondi
# Alessio 2012-03-20 16:41
Citazione valter:
saluti a tutti qualcuno sa se e' fattibile sniffare il traffico spanning tree con diversi programmi per linux ho provato io stesso collegato a uno swich con il programma wireshark ma niente!

Non è possibile analizzare traffico con sorgente e destinazione diversi da quelli locali, è una tipica limitazione degli sniffer "standard" quando vengono utilizzati in ambienti in cui lo switch di rete provvede ad inoltrare pacchetti solo alle porte connesse direttamente agli host di destinazione, broadcast a parte.

Puoi provare con programmi specifici come Ettercap, che permette di sniffare tutto il traffico anche in reti in cui è presente uno switch, grazie ad una costante attività di arp cache poisoning (vengono mandate arp reply fittizie). In rete puoi trovare tante altre cose interessanti, cerca "sniffing in ambienti switchati".
Rispondi
# valter 2012-03-19 21:47
saluti a tutti qualcuno sa se e' fattibile sniffare il traffico spanning tree con diversi programmi per linux ho provato io stesso collegato a uno swich con il programma wireshark ma niente!
Rispondi
# Giovanni 2011-12-21 08:41
Citazione Leonardo:
Ragazzi ho per voi un quesito. Ho una rete lan unica costituita da host collegati in serie (tramite modem xdsl); ho la necessità di richiudere l'ultimo posto con in primo in modo da realizzare una ridondanza in caso di interruzione intermedia. Posso configurare solo lo switch di inzio/fine tratta con STP? Intendo avere una porta per la connessione normale e mantenere la seconda in standby come richiusura. E' fattibile? Negli gli switch intermedi non voglio attivare la funzione di SPT. Grazie!

Che vuol dire "host collegati in serie (tramite modem xdsl"? Non ho capito nemmeno cosa intendi con "richiudere l'ultimo posto con in primo in modo da realizzare una ridondanza". Non puoi linkarci un'immagine dello schema? Così ci capiamo meglio. Ciao
Rispondi
# Leonardo 2011-12-17 16:49
Ragazzi ho per voi un quesito. Ho una rete lan unica costituita da host collegati in serie (tramite modem xdsl); ho la necessità di richiudere l'ultimo posto con in primo in modo da realizzare una ridondanza in caso di interruzione intermedia. Posso configurare solo lo switch di inzio/fine tratta con STP? Intendo avere una porta per la connessione normale e mantenere la seconda in standby come richiusura. E' fattibile? Negli gli switch intermedi non voglio attivare la funzione di SPT. Grazie!
Rispondi
# Alessio 2011-11-17 15:11
Citazione Michele:
Ottimo articolo. Finalmente ho capito bene il protocollo STP. Ma che differenza passa tra RSTP e MSTP che, da quanto ho capito, si differenziano dal classico STP? Grazie

Per il Rapid STP trovi il relativo articolo su NETsetup: netsetup.it/.../...
Per quanto riguarda il Multiple Spanning Tree Protocol (MSTP), rappresenta un'estensione del protocollo RSTP per sviluppare ulteriormente l'utilità delle VLANs. In pratica permette di configura un differente Spanning Tree per ogni gruppo VLAN e blocca i link ridondanti all'interno di ogni spanning tree.
Ciao e grazie per i complimenti :D
Rispondi
# Michele 2011-11-17 15:00
Ottimo articolo. Finalmente ho capito bene il protocollo STP. Ma che differenza passa tra RSTP e MSTP che, da quanto ho capito, si differenziano dal classico STP? Grazie
Rispondi
+1 # Alessio 2011-03-07 09:48
Citazione CyberJako:
Grazie molto bene spiegato

Grazie a te :D
Rispondi
# CyberJako 2011-03-05 13:12
Grazie molto bene spiegato
Rispondi

Aggiungi commento


Codice di sicurezza
Aggiorna

Utilizzando questo sito accetti l'uso di cookie per analisi, contenuti personalizzati e pubblicità mirata (tramite Google AdSense). Clicca qui per maggiori informazioni