Come discusso nel post I problemi della ridondanza in reti con più switch, quando si realizza una rete progettata per garantire una certa affidabilità e quindi con apparati ridondanti bisogna prestare particolare attenzione a fenomeni che potrebbero corrompere il corretto funzionamento della rete stessa. Nel caso di una rete con più switch collegati tra di loro si ha il problema della broadcast storm che congestiona completamente la rete, si hanno frame ripetuti e tabelle dei MAC address con informazioni errate. Per risolvere completamente questi problemi basta utilizzare lo Spanning Tree Protocol (STP).
I tre problemi, ampiamente discussi nel post riportato sopra, sono dovuti alla presenza di cicli nella topologia. Ad esempio nella seguente rete c'è un ciclo formato da switch-1, switch2 e i collegamenti tra i due switch.
Figura 1.
Lo Spanning Tree Protocol permette l'eliminazione di cicli, garantendo così una topologia priva di loop (topologia loop-free), disabilitando
determinati collegamenti ridondanti ma garantendo comunque la raggiungibilità di ogni apparato o host presente nel dominio di broadcast.
I collegamenti disattivati
verranno riattivati solo quando necessario, ovvero nel momento in cui qualche switch o link smetterà di funzionare.
Figura 2. In questa topologia per eliminare il ciclo si potrebbe disabilitare la porta 1 dello switch-2
Le operazioni di disattivazione e riabilitazione dei collegamenti sono possibili grazie allo scambio di messaggi speciali chiamati Bridge Protocol Data Units (BPDUs) tra gli switch. In particolare l'intero processo si divide in quattro step:
- Elezione di un root bridge
- Elezione di una root port per ogni switch non-root
- Elezione di una porta designata per ogni segmento
- Cambio di stato per la porta: forwarding o blocking
Elezione di un root bridge
In questa fase, viene eletto un solo switch nell'intera rete come 'root bridge'. Questo processo si basa sul parametro 'Bridge ID', il quale è unico per ogni switch della rete. Il Bridge ID è unico poiché è composto dalla 'bridge priority' (un valore compreso tra 0 e 65535, con un valore predefinito di 32768) e dal MAC address dello switch.
Figura 3. Il Bridge ID ha la Bridge Priority e il MAC address
Quindi, ogni switch comunica il proprio Bridge ID agli altri utilizzando un messaggio BPDU. Lo switch con il Bridge ID più basso diventa il Root Bridge. Durante il confronto dei Bridge ID, si tiene innanzitutto in considerazione la Bridge priority: maggiore è il suo valore, più alta è la priorità. Quando due Bridge Priority sono uguali, vengono confrontati i MAC address.
Figura 4. In questo caso tutti e tre gli switch hanno la stessa Bridge ID quindi viene eletto root bridge lo switch con MAC address più basso (In questo esempio verrà scelto lo switch SW1)
Elezione di una root port per ogni switch non-root bridge
Per ogni switch non root (SW2 e SW3) viene scelta solo una porta come root port. Questa porta permette di raggiungere il root bridge attraverso il percorso migliore in termini di velocità dei collegamenti. Il costo dei collegamenti dipende dalla larghezza di banda; ad esempio, un collegamento a 10 Gbps ha un costo di 2, mentre un collegamento a 10 Mbps ha un costo di 100.
Figura 5. Vengono elette le root port in base al percorso migliore per raggiungere il root bridge
Elezione di una porta designata per ogni segmento
Per ogni segmento (collegamento tra due switch) della rete viene eletta una porta designata, dall'altro lato del segmento la porta o verrà disabilitata oppure è una porta root. La decisione riguardo quale porta verrà disabilitata e quale rendere "designated" viene presa in base al percorso migliore per raggiungere il root bridge. Infatti tutte le porte del root bridge sono porte designate.
Figura 6. Le porte del root bridge sono tutte designated. Per il segmento SW2-SW3 viene scelta la porta di SW2 come designated (a causa del MAC address più basso) e disabilitata la porta di SW3. Gli altri segmenti si trovano tra una designated e una root port.
Da forwarding a blocking
A questo punto tutte le porte designated e tutte le root port vengono utilizzate per inviare e ricevere frame, quindi si trovano nello stato "forwarding". Tutte le altre porte passano allo stato "blocking", cioè permettono la ricezione e l'elaborazione dei BPDUs ma non effettuano il forwarding dei frame.
Figura 7. Le porte di SW1, la root port di SW2 e di SW3 consentono il forwarding dei frame. La porta disabilitata di SW3 si trova nello stato 'blocking', quindi può solo ricevere BPDU e non può effettuare il forwarding. Eliminando logicamente un collegamento, si ottiene una topologia senza cicli, dove l'unico percorso per i frame dello switch 2 per raggiungere lo switch 3 è attraverso il root bridge SW1.
In caso di guasto
Se uno switch dovesse guastarsi, gli altri apparati non riceverebbero più i BPDU. Dopo un certo periodo senza la ricezione di BPDU dallo switch guasto, vengono rieseguiti i passaggi precedenti per ricalcolare una nuova topologia. Ad esempio, se nella topologia considerata fino a questo momento dovesse guastarsi il root bridge SW1, allora SW2 e SW3 non riceverebbero più BPDU da SW1. Di conseguenza, viene eletto un nuovo root bridge, si scelgono le nuove root e designated port, e si aggiornano i loro stati, passando da 'blocking' a 'forwarding', quindi riabilitando le porte che erano state precedentemente disabilitate.
Figura 8. Se SW1 si guasta e non invia più BPDU, SW2 e SW3, dopo un certo periodo senza ricevere BPDU da SW1, decidono di ricalcolare la topologia. In questo processo, eleggono un nuovo root bridge (SW2, poiché ha il MAC più basso). Di conseguenza, aggiornano lo stato delle porte.