Spanning Tree Protocol - STP
Descrizione del protocollo ST e configurazione
CCNA
Prima di spiegare questo protocollo è importante vedere perché ci serve.


La selezione del percorso a livello 2 è controllata dalle tavole degli indirizzi MAC dello switch.
In questo esempio PC1 vuole mandare del traffico ad R1, vediamo cosa succederebbe senza STP.
PC1 non ha ancora comunicato con R1, quindi invia una richiesta ARP per 10.10.10.2, che parte con l'indirizzo MAC sorgente di 1.1.1 e per indirizzo di destinazione usa il MAC F.F.F (traffico di broadcast).
Questo traffico arriva allo switch Acc3, che impara che può raggiungere il MAC 1.1.1 attraverso la sua interfaccia F0/1.
Acc3 inoltra la richiesta ARP su tutte le porte tranne quella da cui è stata ricevuta, lo switch CD1 impara, quindi, che il MAC 1.1.1 è raggiungibile tramite la sua interfaccia 0/24, mentre lo switch CD2 impara che il MAC 1.1.1 è raggiungibile tramite la sua porta 0/21.
CD1, a sua volta, inoltra la richiesta ARP sulle sue porte ed il traffico arriva così a R1.
Il traffico arriva anche a CD2 dopo essere passato da Acc4.
A questo punto R1 risponde alla richiesta ARP e CD1 impara che il MAC di R1 (2.2.2) è raggiungibile tramite la sua interfaccia G0/1.
Lo switch CD1, che conosce già a quale porta inviare il traffico per arrivare al MAC 1.1.1, manda il traffico lungo la sua interfaccia FastEthernet 0/24, il quale raggiunge lo switch Acc3, che impara che il MAC 2.2.2 è raggiungibile tramite la sua porta FE 0/24.
Ora sembra che sia tutto a posto, ma per vedere il problema e poterlo capire, dobbiamo tornare all'inizio quando la richiesta ARP da PC1 arriva per la prima volta su Acc3.
Acc3 riceve la richiesta ARP e la inoltra su tutte le porte, CD1 riceve la richiesta ARP e anche lui la inoltra su tutte le porte, a questo punto la richiesta arriva a CD2 il quale, a sua volta, lo invia su tutte le sue porte.
Possiamo vedere come si sia creato un loop in senso orario tra Acc3, CD1 e CD2: ogni volta che abbiamo del traffico di broadcast, questo crea un loop tra questi tre dispositivi, ma non solo: abbiamo infatti anche un altro loop, ma in senso antiorario; questa volta il traffico parte sempre da Acc3, raggiunge CD2 che viene inoltrato su CD1 che, a sua volta, lo rimanda ad Acc3.
Ora abbiamo due loop: uno in senso orario e uno in senso antiorario.
Dobbiamo anche considerare la presenza dello switch Acc4 e notare che succede la stessa cosa: questo ci fa ottenere altri due loop, uno in senso orario e uno in senso antiorario, tra i dispositivi Acc4, CD2 e CD1.
Nell'header di livello 2 non è presente il campo TTL, quindi se abbiamo anche solo un loop a questo livello, questo va avanti all'infinito.
Tuttavia, esistono anche altri tipi di traffico broadcast, come quello DHCP.
Se sommiamo i vari tipi di traffici di broadcast otteniamo quello che viene definito un "broadcast storm" che farà crashare la nostra rete, perché ad un certo punto i dispositivi non riusciranno a gestire tutto il traffico che sta usando troppa CPU e larghezza di banda.
L'STP permette di prevenire la formazione di loop a livello 2: ci riesce rilevando potenziali loop e bloccando le porte che potrebbero causarli, che nel nostro esempio sono F0/21 su Acc3 e F0/24 su Acc4 (entrambe evidenziate dal pallino arancione).
Riguardando la nostra rete possiamo vedere che sia Acc3 sia Acc4 hanno due interfacce di uplink verso CD1 e CD2, immaginando che entrambe abbiano una larghezza di banda di 1Gb, ora abbiamo solo 1Gb invece che 2, a causa di STP che ha chiuso una porta.
STP ha quindi ridotto la larghezza di banda disponibile, tuttavia è un "male necessario" in quanto senza di questo la nostra rete cadrebbe a causa del broadcast storm, che è uno scenario molto peggiore rispetto ad avere una larghezza di banda inferiore.
Nel caso in cui l'uplink tra Acc3 e CD1 cadesse, STP è in grado di aprire la porta precedentemente bloccata (quella verso CD2) per automatizzare il failover, tuttavia ha un tempo di convergenza relativamente alto che può raggiungere i 50 secondi.
Terminologia STP - Bridge
Prima di vedere cosa sia un bridge, facciamo un breve riepilogo sugli hub.
Questi dispositivi funzionavano solamente al livello 1 e venivano usati un po' come gli switch: permettevano di collegare gli host di una LAN Ethernet.
Siccome lavoravano solo al livello 1, non imparavano gli indirizzi MAC: inoltravano semplicemente tutto il traffico ricevuto su tutte le porte.
Successivamente entrarono in scena gli switch che aumentarono la sicurezza e le performance inoltrando il traffico unicast solo sulla porta necessaria.
Tuttavia i primi switch erano molto costosi, avevano poche porte, venivano chiamati "bridge" e servivano a segmentare le LAN che venivano composte con gli hub.
Vennero poi introdotti dei dispositivi molto simili ai bridge che, però, avevano molte più porte e vennero chiamati switch.
L'STP fu inventato quando si usavano ancora i bridge e per questo si hanno ancora termini come "Root Bridge" e "Bridge Protocol Data Units".
Funzionamento di STP - ID Bridge e Root Bridge
STP è un protocollo standard ed è attivo di default su tutti i vari switch.
Gli switch inviano dei Bridge Protocol Data Units su tutte le loro porte quando vanno online, e questi vengono usati da altri switch per rilevare altri switch e potenziali loop.
Uno switch non inoltrerà del traffico su nessuna porta fino a che non è sicuro che non si creeranno loop.
Per farlo, quando una porta viene online, si troverà in uno stato di blocco.
STP, quindi, cercherà di capire se la porta forma un loop e, se non ce ne sono, la porta passa ad uno stato di inoltro.
Tutto questo può richiedere fino a 50 secondi.
Il BPDU contiene l'ID Bridge che identifica unicamente quello switch nella LAN.
Questo ID Bridge è costituito dall'indirizzo MAC unico dello switch e da un valore definito dall'amministratore che si chiama Bridge Priority: quest'ultimo può assumere un valore tra 0 e 65535, dove 32768 è quello di default.
L'ID bridge viene usato per eleggere il cosiddetto Root Bridge e viene preferito il valore minore, ma nel caso ci sia un pareggio diventerà root bridge lo switch con il MAC minore.
Dopodiché, gli switch creeranno un percorso ad albero privo di loop, che riporta al root bridge.
Quando uno switch calcola il suo percorso migliore verso il root bridge, verranno preferiti i collegamenti con larghezza di banda maggiore (quindi maggiore è la larghezza di banda, minore è il costo di STP).
Successivamente ogni interfaccia d'uscita dello switch che porta al root bridge con il costo minore viene selezionata come Root Port.


Consideriamo l'immagine precedente per capire meglio il tutto.
CD1 viene eletto come Root Bridge perché, siccome non abbiamo impostato un Bridge Priority, è quello con il MAC minore.
Dalla prospettiva di CD2, questo può raggiungere in tre modi il Root Bridge: direttamente tramite l'interfaccia G0/2, oppure prima attraverso Acc4 verso CD1, oppure ancora attraverso Acc3 per poi andare verso CD1.
Ovviamente il percorso con il costo minore è quello tramite l'interfaccia G0/2 di CD2, quindi questa porta viene scelta come Root Port.
Ora consideriamo Acc3: questo può raggiungere direttamente CD1 tramite F0/24, oppure tramite prima F0/21 e poi la porta G0/2 di CD2.
Siccome il primo percorso è quello che costa di meno, l'interfaccia F0/24 di Acc3 viene scelta come Root Port.
Per Acc4 il funzionamento è lo stesso: l'interfaccia F0/21 viene scelta come Root Port.
Le porte di uno switch vicino opposte alla Root Port (inteso dall'altra parte del link) vengono chiamate Designated Ports.
Tutte le porte sul Root Bridge sono sempre Designated Ports.
Le porte di root e quelle designate costituiscono i percorsi più diretti da e verso il Root Bridge e passano ad uno stato d'inoltramento.
Per quanto riguarda i link rimanenti, gli switch determinano quale di questi abbia il percorso con costo minore verso il root: se hanno lo stesso costo allora l'ID Bridge viene usato per rompere il pareggio e la porta che collega questo switch al link è selezionata come porta designata.
Tutte le porte restanti potrebbero formare un loop, quindi vengono selezionate come porte bloccate.
STP blocca solo una porta per collegamento. I BPDUs vengono comunque inoltrati sul link, ma tutto il traffico restante viene bloccato.
Per fare chiarezza vediamo l'immagine completa.


STP non esegue il bilanciamento del carico: se uno switch ha più percorsi di costo uguale verso il Root Bridge, viene scelto lo switch vicino con l'ID Bridge più basso.Nel caso in cui uno switch abbia diversi percorsi con costo uguale verso uno switch vicino che porta al Root Bridge, viene scelto solo uno dei percorsi.
Versioni STP
Open Standard:
802.1D Spanning Tree Protocol (STP): L'implementazione originale di ST, usa un Spanning Tree per tutte le VLAN nella LAN
802.1w Rapid Spanning Tree Protocol (RSTP): Tempo di convergenza migliorato di molto. Usa uno Spanning Tree per tutte le VLAN nella LAN
802.1s Multiple Spanning Tree Protocol (MSTP): Permette il raggruppamento e la mappatura delle VLAN in istanze diverse di Spanning Tree per il bilanciamento del carico
Miglioramenti rilasciati da Cisco per i precedenti open standard:
Per VLAN Spanning Tree Plus (PVST+): Miglioramento di Cisco a 802.1D. Utilizza un'istanza separata di Spanning Tree per ogni VLAN. Di default sugli switch Cisco
Rapid Per VLAN Spanning Tree Plus (RPVST+): Miglioramento di Cisco a 802.1w RSTP. Tempo di convergenza migliorato di molto rispetto a PVST+. Utilizza un'istanza separata di Spanning Tree per ogni VLAN
Le versioni di Cisco non supportano il raggruppamento di più VLAN nella stessa istanza.
Con PVST+ le porte segnate come bloccate vengono chiamate "alternate ports".
Facciamo un piccolo riassunto che ci permette di capire velocemente quali porte siano di root, designate e bloccate:
Prima si trovano le porte di root (ID Bridge più basso, MAC più basso in caso di pareggio)
Tutte le porte sul Root Bridge sono porte designate
Trovare le porte di root sugli altri switch (costo più basso verso il Root Bridge)
Le porte dall'altra parte di quei link sono porte designate
Sui link rimanenti, una delle porte sono bloccate
Trovare le porte bloccate (percorso con il costo più alto verso il Root Bridge o l'ID Bridge più alto)
Le porte dall'altra parte di quei collegamenti sono porte designate


Immaginiamo che Acc3 abbia PC collegati in più VLAN.
CD1 viene eletto come Root Bridge per le VLAN 10 - 19: il traffico per queste VLAN viene inoltrato sul collegamento a CD1 e bloccato sul collegamento a CD2.
CD2 viene eletto come Root Bridge per le VLAN 20 - 29: il traffico per queste VLAN viene inoltrato sul collegamento a CD2 e bloccato sul collegamento a CD1.
Otteniamo due instanze di Spanning Tree, una per ogni gruppo di VLAN.
Esempio di bilanciamento del carico per PVST+ e RPVST+
Esempio di bilanciamento del carico per MSTP


Lo switch Acc3 (del livello d'accesso) ha pc in più VLAN.
CD1 è il Root Bridge per le VLAN 10 - 19: il traffico per queste VLAN viene inoltrato sul collegamento a CD1 e bloccato sul collegamento a CD2.
CD2 è il Root Bridge per le VLAN 20 - 29: il traffico per queste VLAN viene inoltrato sul collegamento a CD2 e bloccato sul collegamento a CD1.
Si ottengono venti istanze di Spanning Tree: una per ogni VLAN.
Manipolare l'elezione del Root Bridge
Visto che Spanning Tree seleziona i percorsi che puntano al Root Bridge, questo agisce come punto di riferimento nella LAN.
Si consiglia di usare switch di fascia alta come Root Bridge primario e secondario.
Come abbiamo visto, è possibile influire sull'elezione del Root Bridge cambiando il valore del Bridge priority.
Il valore di default è 32768 e viene preferito il valore minore, ma nel caso di un pareggio viene selezionato lo switch con l'indirizzo MAC più basso, che generalmente sarà lo switch più vecchio, il quale avrà interfacce con larghezza di banda più basse e risorse minori in termini di CPU e memoria.
Per far sì che uno switch diventi il Root Bridge si può utilizzare il comando "spanning-tree vlan 1 root primary" al livello di configurazione globale.
Per aggiungere ridondanza, vogliamo che un secondo switch (scelto da noi), diventi il Root Bridge nel caso il primo abbia problemi: possiamo farlo con il comando "spanning-tree vlan 1 root secondary".
Relazione tra STP e HSRP


HSRP dovrebbe essere configurato per combaciare con il percorso di STP.
Nel nostro esempio R1 dovrebbe avere una priorità HSRP più alta di R2 in modo che diventi il router attivo di HSRP.
Ciò permette al traffico dai PC di prendere il percorso più breve verso il loro default gateway.
Se il router attivo di HSRP fosse stato R2 il traffico sarebbe dovuto passare attraverso un dispositivo in più sul link CD1 - CD2.
Spanning Tree Portfast
Ci possono volere fino a 50 secondi affinché STP cambi lo stato di una porta in inoltramento quando diventa attiva.
Non ci possono essere loop nelle porte a cui è collegato un singolo end-host.
E' possibile, quindi, cambiare lo stato della porta in inoltro appena diventa attiva disabilitando Spanning Tree su quella porta.
SW1(config)#interface f0/10
SW1(config-if)#spanning-tree portfast
Si può anche configurare tutte le porte in portfast nel seguente modo:
SW1(config)#spanning-tree portfast default
Attenzione: Se si attiva Portfast su di una porta e successivamente si forma un loop attraverso questa, si ottiene un broadcast storm.
Ciò può succedere quando degli utenti aggiungono dei dispositivi alla rete o modificano il cablaggio.
Per mitigare il problema si può attivare il "BPDU Guard" sulle porte in Portfast: se viene ricevuto un BPDU la porta verrà spenta.
Configurazione:
SW1(config)#interface f0/10
SW1(config-if)#spanning-tree portfast
SW1(config-if)#spanning-tree bpduguard enable
Si può attivare il BPDU Guard su tutte le porte nel seguente modo:
SW1(config)#spanning-tree portfast bpduguard default
Spanning Tree Root Guard impedisce che uno switch diventi Root Bridge senza volerlo.
Se una porta dove Root Guard è attivo riceve BPDU che sono superiori al Root Bridge attuale, farà diventare la porta "root-inconsistent" e non inoltrerà traffico su quella porta.
SW1(config)#interface fa0/2
SW1(config-if)#spanning-tree guard root