Index Arduino Apps Reti Boinc Contatti Su questo server
Lista ultimi post

- Nvr a zero euri

- ArduHome

- Boinc

- Pubblicato mini-progetto didattico nfa-simulator

- Dyndns update script per RouterOs v6 'all-ram'

- Minimizzare il traffico http prodotto dalle api web per arduino

- Sito spostato su nuovo hosting

- There's no universe like 127.0.0.1

- New Horizon space connection

- Il loop nelle reti locali

- The Real Story Behind Wayland and X - Daniel Stone

- Nuovo server operativo

- Aggiunto il progetto "NetMonitor2"

- Aggiunta la possibilità di inserire commenti ai post

- Attivato nodo ninux ivan-casa

- Arduino web sprinkler

- Blocco ip personalizzato

- Aumentare la sicurezza bloccando gli ip dei server cinesi,nigeriani e russi.

- Arduino Power

- Zeroshell: hot spot con captive portal

07/06/2015 12:23
 

Il loop nelle reti locali


Probabilmente chiunque giochi un pò con le reti in qualche occasione avrà involontariamente collegato due switch a formare un loop. Basta poco per accorgersi che non è una cosa buona e giusta, ma probabilmente non tutti sanno cosa accade veramente quando si fa un collegamento di questo tipo.

Perchè sembra che gli switch stiano scambiando dati alla velocità della luce ma in realtà e' tutto bloccato? La chiave della risposta sta in due componenti: il dominio di broadcast e la tabella dei mac address degli switch
Prima di cominciare però bisogna comprendere per bene cos'è uno switch. Wikipedia ci da una buona definizione http://it.wikipedia.org/wiki/Switch, ma giusto per ricordarlo, lo switch e' un dispositivo di commutazione (cioè di scambio) dati che opera a livello 2 dello stack ISO/OSI , il che significa che è in grado di scambiare i pacchetti indirizzandoli in base ai mac address dei dispositivi coinvolti.

NON instrada i pacchetti basandosi sul loro ip di destinazione, se lo facesse, opererebbe al livello 3 dello stack ISO/OSI e il dispositivo non si chiamerebbe più switch ma Router.
Indirizzare i pacchetti tramite mac address, significa sapere su quali porte sono presenti quali mac address. Questa clausola è indispensabile per uno scambio efficiente perchè cosi facendo, i pacchetti vengono replicati solo sulle porte necessarie. Se i dispositivi coinvolti nella comunicazione sono collegati alle porte 1 e 4 dello switch, è inutile spedire i dati anche sulle porte 2,3,5 etc in quanto abbiamo la certezza che questi pacchetti su queste porte non giungeranno a destinazione, occupando solo banda su queste porzioni di rete (i vecchi precursori degli switch, gli hub, lavoravano invece in questo modo).

Ma come fa lo switch a sapere su quali porte sono presenti quali mac address? Semplicemente ascolta le sue porte e con il passare del tempo registra i mac address dei pacchetti che vi transitano.
In particolare l'algoritmo usato e' qualcosa di questo tipo:

Si può capire facilmente che con il passare del tempo e dei dati, lo switch memorizzerà sempre più corrispondenze porta-mac.
Ma cosa succede se viene creato un collegamento a loop su questi switch? Prendiamo in esame una situazione come nell'immagine



in cui un pacchetto inviato da station 1 deve arrivare a station 2, ci si accorge che dopo essere transitato sullo switch 1, lo switch stesso provvede a memorizzare la corrispondenza mac-porta per il pacchetto appena elaborato, dopodichè lo replica su tutte le porte tranne quella da cui lo ha ricevuto, quindi verso i successivi switch, i quali faranno la stessa procedura.

Arrivato allo switch 3, in fase di replica, il pacchetto verrà inoltrato verso station 2 e switch 1 , il quale ora si ritrova con due corrispondenze mac-porta aventi lo stesso mac.

In questa circostanza, lo switch non sa più cosa fare e nella maggior parte dei casi, esso non inoltrerà più nulla verso quei mac address, non sapendo quale delle due corrispondenze utilizzare.
Allo stesso modo, sapendo che la comunicazione nelle reti locali e' bidirezionale e che tutti gli switch replicano su tutte le porte in fase di apprendimento, ci possiamo immaginare che assieme al 'loop orario' delle frecce arancioni, ve ne sia uno 'antiorario'. Così facendo, switch 2 e switch 3 vedranno comporsi una tabella mac-porta con due corrispondenze ciascuno, ergo, anche switch 2 e switch 3 smetterano di funzionare a dovere.

La prima azione da compiere per risolvere questo problema è, neanche a dirsi, eliminare il loop. Così facendo si va a eliminare la possibilità di creare ulteriori record doppi nelle tabelle mac-porte, ma occorre anche eliminare i record già creati, quindi io consiglio di fare anche un reboot dello switch in modo da svuotare questa tabella.

Una seconda problematica che nasce dal loop in rete è il cosiddetto "broadcasting storm".
Prima di parlare del broadcasting storm è necessario sapere cosa sia il dominio di broadcast. Anche qui wikipedia ne sa parecchio http://it.wikipedia.org/wiki/Dominio_di_broadcast, ma per i pigri il dominio di broadcast e' l'insieme di tutti i dispositivi che possono comunicare in una rete a livello 2, senza passare per dispositivi che operano a livello 3 ( un router ).

Perciò una rete lan locale ha un'unico dominio di broadcast, e se un dispositivo in questa lan ha ip=192.168.10.100/24 e un secondo dispositivo ha ip=192.168.0.180/24, il solo fatto di essere fisicamente collegati alla stessa rete locale li rende appartenenti allo stesso dominio di broadcast.
Nel caso di un pacchetto di broadcast (cioè un pacchetto destinato a tutti i dispositivi in rete), gli switch ignorano la loro tabella mac-porta e lo inoltrano su tutte le loro porte, percui, seguendo l'immagine sotto, non è difficile intuire che ben presto lo stesso pacchetto ritornerà di nuovo allo stesso switch, il quale ripeterà la procedura creando un esponenziale aumento di pacchetti che ben presto satureranno la rete, il che appunto è detto Broadcast Storm.

E' a causa del broadcast storm se gli switch coinvolti nel loop sembrano comunicare senza sosta, con i loro led che lampeggiano senza fermarsi un secondo.
Si può evitare il broadcast storm? Tecnicamente basta evitare che un dispositivo qualsiasi lanci pacchetti di broadcast, nella pratica però i dispositivi in rete DEVONO inviare richieste di broadcast per il loro corretto funzionamento ( senza il boradcast non sarebbe possibile per un dispositivo che lavora a livello 3 l'auto-apprendimento della tabella ARP )





 

Commenti (0 commenti)


Scrivi commento
Nome
Email
Testo