Introduzione alle reti locali – parte 5
Reti locali diverse possono essere a loro volta collegate tra loro attraverso dispositivi detti router....
Collegamenti tra reti diverse: il routing
La volta scorsa abbiamo accennato al fatto che ogni interfaccia di rete ha un proprio indirizzo MAC (di livello due). Tutte le macchine di una rete locale sono connesse ad uno o più switch. Ogni switch contiene una tabella in cui sono elencati gli indirizzi MAC delle macchine collegate.
Reti locali diverse possono essere a loro volta collegate tra loro attraverso dispositivi detti router. Un router ha almeno due interfacce, ciascuna collegata ad una delle reti da interconnettere.
Quando una macchina deve spedire dei dati ad un’altra, deve prima capire se quest’altra è sulla sua stessa rete locale oppure no: nel primo caso gli assegna l’indirizzo MAC (che conosce perché le macchine sono sulla stessa rete) e invia i dati direttamente al destinatario (attraverso lo switch); nel secondo caso (macchine su reti diverse) i dati saranno inviati al router, che provvederà ad inoltrarli nella direzione giusta. Questo, in sostanza, equivale al processo decisionale di una persona che vuole inviare un messaggio per lettera dal proprio ufficio: se è indirizzata ad un’altra persona dello stesso ufficio la mette sulla sua scrivania; se è indirizzata a qualcun altro la porta nella cassetta delle lettere da dove verrà recapitata al destinatario finale, eventualmente attraverso diversi passaggi.
In questo contesto gli indirizzi delle macchine in rete sono gli “indirizzi IP”; per chi ha seguito le precedenti disquisizioni sui modelli a strati, qui stiamo ragionando a livello 3, ovvero a livello di rete. Il router è quindi un dispositivo di livello 3. Un indirizzo IP è formato da quattro numeri compresi tra 0 e 255, separati tra loro da punti. I dati da trasmettere, a livello di rete, sono suddivisi in “pacchetti” e ciascun pacchetto contiene, tra l’altro, l’indirizzo IP del destinatario.
A ciascuna macchina, impostata per condividere risorse in rete via TCP/IP, viene assegnato un indirizzo IP, una maschera di sottorete (in inglese, forse più comune, “subnet mask”) e l’indirizzo di un router di default. Dal confronto tra indirizzo IP assegnato alla macchina e relativa maschera di sottorete si può capire se un altro indirizzo IP appartiene alla stessa rete oppure no. In pratica un 255 nella maschera di sottorete significa “questo numero non cambia” mentre uno 0 significa “questo numero può cambiare a piacimento”. Un numero diverso (compreso tra 1 e 254) nella maschera di sottorete significa “questo numero può assumere determinati valori”, deducibili secondo un algoritmo che qui non è il caso di approfondire. In questo modo la rete a cui appartiene la macchina descritta dalla figura 1 è formata dagli indirizzi 192.168.1.x, con x da 0 a 255. In realtà lo 0 e il 255 sono riservati, per cui le macchine in questa rete possono avere l’ultimo numero da 1 a 254 e gli altri devono essere 192.168.1. Quando l’interfaccia di rete si trova un pacchetto da spedire, guarda l’indirizzo IP e: se è nella stessa rete lo mette direttamente sul bus; se non è nella stessa rete lo impacchetta ulteriormente e lo manda al router, che a sua volta sarà in grado di leggere l’indirizzo IP e instradare il pacchetto direttamente alla macchina di destinazione, se questa è collegata direttamente al router, oppure ad un altro router. E così via.
Molti dispositivi di rete hanno la possibilità di essere configurati automaticamente grazie ad un sistema chiamato DHCP [che sta per “Dynamic Host Configuration Protocol”, cioè “protocollo di configurazione dinamica degli indirizzi”]: uno dei dispositivi in rete si può assumere il compito di fornire automaticamente i parametri di configurazione come l’indirizzo IP, la maschera di sottorete ed altri, a tutte le altre macchine, mano a mano che queste si connettono. In questo modo è sufficiente indicare a chi può farlo (generalmente il router, e generalmente con un solo click nell’opportuna finestra di configurazione) di svolgere la funzione di “server DHCP” mentre tutte le altre macchine dovranno essere configurate per utilizzare le informazioni inviategli dal server. A questo punto basterà collegare fisicamente tra loro i dispositivi e ciascuna macchina vedrà correttamente la rete senza dover configurare nient’altro.
I possibili indirizzi IP, da 0.0.0.0 a 255.255.255.255, sono tanti ma non infiniti. Se si pensa che, ad esempio, ogni macchina connessa ad Internet ha un proprio indirizzo IP, si può intuire che il numero di indirizzi IP disponibili rischia di non essere sufficiente per indirizzare univocamente tutti i dispositivi. Per risolvere questo problema, si sta attrezzando da alcuni anni un nuovo schema di indirizzamento, detto “IPv6”, che prevede un indirizzo formato da più cifre e quindi un maggior numero di combinazioni (indirizzi) disponibili. L’implementazione di IPv6 su scala globale è però un processo lungo e difficile, dato che occorrerà sostituire tutti i dispositivi di routing e, almeno per quanto riguarda Internet, è difficile imporre “dall’alto” cambiamenti repentini.
Il problema viene parzialmente aggirato in questo modo: esistono delle classi di indirizzi IP “privati”, ovvero assegnabili ai dispositivi di una rete locale e non visibili dall’esterno (cioè da Internet), mentre gli indirizzi “pubblici” sono quelli raggiungibili dall’esterno e vengono assegnati solo ai dispositivi che si occupano di connettere la rete locale con il resto del mondo. Le classi di indirizzi privati sono indicate nella tabella 1. In pratica una rete locale può essere formata da dispositivi i cui indirizzi sono, ad esempio, 10.0.0.1, 10.0.0.2, 10.0.0.3 e così via; se questa rete deve comunicare con un’altra rete (remota) sarà necessario un router, ovvero un dispositivo con due interfacce: una sulla rete locale ed un’altra sulla rete remota. Ciascuna interfaccia del router deve avere un indirizzo IP compatibile con la rete a cui è connessa, compatibilità deducibile dalle coppie di valori indirizzo IP / maschera di sottorete impostate su ciascuna macchina. Se la rete remota è Internet, l’interfaccia esterna del router dovrà avere un indirizzo pubblico.
rete |
maschera di sottorete |
area |
10.0.0.0 |
255.0.0.0 |
10.x.x.x |
172.16.0.0 |
255.240.0.0 |
172.16.x.x-172.31.x.x |
192.168.0.0 |
255.255.0.0 |
192.168.x.x |
tabella 1: indirizzi IP privati
Ci può essere (c’è senz’altro), nel mondo, un’altra rete locale le cui macchine hanno gli stessi indirizzi 10.0.0.1, 10.0.0.2, ...; queste due reti, però, non comunicheranno mai direttamente tra loro ma solo attraverso i rispettivi router, per cui non ci saranno conflitti e ambiguità (figura 2).
NAT – Network Address Translation
Nel caso di una rete locale connessa all’esterno tramite router, dato che gli indirizzi IP privati non devono essere visibili dall’esterno, dovrà esserci un dispositivo che si occupa della “traduzione degli indirizzi di rete”. In pratica, quando una macchina della rete vuole comunicare con l’esterno, invia un pacchetto al router con l’indirizzo IP del destinatario (remoto) e il proprio indirizzo IP privato come mittente. Il router invia il pacchetto al NAT e questo sostituisce l’indirizzo IP privato del mittente con il proprio indirizzo IP pubblico, marcando il pacchetto e segnandosi la corrispondenza. Quando arriva la risposta, indirizzata all’indirizzo IP pubblico del NAT, questo riconoscerà la corrispondenza ed invierà il pacchetto al legittimo destinatario nella rete locale.
Porte e servizi TCP
Su ciascuna macchina possono girare contemporaneamente diversi processi, ovvero diverse applicazioni, che hanno eventualmente la possibilità di offrire servizi alle altre macchine in rete. Per questo le applicazioni comunicano attraverso delle “porte” specifiche il cui identificativo viene appeso all’indirizzo IP della macchina su cui gira il servizio. Un computer, ad esempio, con indirizzo IP 72.14.221.104, può contenere un server web aziendale e, contemporaneamente, un server mail centralizzato. Se uno dei computer in rete locale vuole accedere alle pagine web aziendali invierà la richiesta alla porta 80 del server, ovvero all’indirizzo 72.14.221.104:80; se un computer vuole controllare la propria casella di posta elettronica invierà la richiesta alla porta 110 dello stesso server, cioè all’indirizzo 72.14.221.104:110. I servizi più comuni comunicano attraverso porte assegnate, eventualmente modificabili; altre porte sono disponibili per servizi ad hoc.
Sicurezza e ridondanza: Spanning Tree
Una LAN complessa è generalmente formata da vari segmenti di rete, ciascuno facente capo ad uno switch, e questi switch connessi poi tra loro per permettere le comunicazioni tra i vari segmenti. In un edificio cablato, ad esempio, può esserci uno switch per ciascun piano. All’aumentare della complessità della rete può facilmente non essere banale accertarsi che non siano presenti percorsi circolari, ovvero che tra ogni coppia di dispositivi esista un solo percorso possibile, altrimenti si verificherebbero presto malfunzionamenti fatali. Infatti, ad esempio, un pacchetto broadcast viene indirizzato da ogni switch verso tutte le uscite; se esistessero dei loop questo pacchetto finirebbe per tornare da dove è partito, venendo nuovamente replicato fino alla saturazione della rete. La topologia di una LAN deve essere quindi ad albero, priva di percorsi replicati.
Una LAN priva di collegamenti ridondanti risulta però piuttosto fragile, dato che un problema su un singolo cavo (o su uno switch) la spezzerebbe in due parti non comunicanti tra loro.
Spanning Tree (in italiano, letteralmente, “Albero Ricoprente”), standardizzato in IEEE 802.1D e implementato in molti modelli di switch di rete commerciali, è un algoritmo distribuito in grado di individuare i loop e disabilitare automaticamente [tutti meno uno] i collegamenti paralleli. Se un collegamento dovesse venire meno, per qualunque motivo, verrebbe creato un percorso alternativo ripristinando opportunamente ed in maniera automatica uno o più collegamenti precedentemente disabilitati.
L’algoritmo tende automaticamente a mantenere in funzione i collegamenti di capacità superiore ma è generalmente possibile, configurando alcuni parametri sugli switch, influenzare la priorità dei collegamenti da mantenere in servizio.
Il tempo necessario per il ripristino dei collegamenti interrotti cresce al crescere della complessità della rete e, come è generalmente intuibile, al diminuire del costo degli switch coinvolti. Questo non è generalmente un problema nel caso di un computer connesso ad Internet ma può diventare critico nel caso di complesse configurazioni di trasporto audio.
Riferimenti
Andrew S. Tanenbaum: Computer Networks, fourth edition – Prentice‑Hall, Inc.