Traduzione degli indirizzi di rete
Sappiamo che ogni dispositivo IP richiede un indirizzo. La proliferazione di sottoreti sembrerebbe implicare che ogni volta che una di queste vuole installare una rete locale per connettere più macchine, l’ISP debba allocare un intervallo di indirizzi per coprire tutte le macchine della sottorete. Di conseguenza, al suo crescere dovrebbe esserle allocato un blocco maggiore di indirizzi. Ma che cosa dovrebbe sapere il normale utente per gestire gli indirizzi IP? Fortunatamente esiste la traduzione degli indirizzi di rete (NAT).
Figura 4.20
La mostra l’attività di un router, abilitato NAT, con un’interfaccia che fa parte della rete domestica. Come visto in precedenza, le quattro interfacce della rete hanno lo stesso indirizzo di sottorete, 10.0.0.0/24. Lo spazio d’indirizzamento 10.0.0.0/8 è una rete delle tre parti dello spazio di indirizzi IP riservato alle reti private, o reame con indirizzi privati: ossia, una rete i cui indirizzi hanno significato solo per i dispositivi interni.
In effetti, esistono centinaia di migliaia di reti private, molte delle quali usano un identico spazio d’indirizzamento, 10.0.0.0/24, per scambiare pacchetti fra i loro dispositivi. Ovviamente, quelli inviati sull’Internet globale non possono utilizzare questi indirizzi come origine o destinazione. Ma se gli indirizzi privati hanno significato solo all’interno di una data rete, come viene gestito l’indirizzamento dei pacchetti relativi all’Internet globale, in cui gli indirizzi sono necessariamente univoci?
I router abilitati alla NAT non appaiono come router al mondo esterno, ma si comportano come un unico dispositivo con un unico indirizzo IP. Nella figura, tutto il traffico che lascia il router domestico verso Internet ha l’indirizzo IP origine 138.76.29.7, e tutto il traffico in entrata deve avere lo stesso indirizzo come destinazione. In sostanza, il router abilitato alla NAT nasconde i dettagli della rete domestica al mondo esterno.
Contestualmente, ci si potrebbe chiedere dove i calcolatori della rete domestica ottengano i propri indirizzi e dove il router acquisisca il proprio indirizzo IP. Spesso, la risposta è DHCP. Il router ottiene il proprio indirizzo dal server DHCP dell’ISP, e manda in esecuzione un server DHCP per fornire gli indirizzi ai calcolatori all’interno dello spazio d’indirizzamento della rete domestica.
Se tutti i datagrammi in arrivo al router NAT dalla rete geografica hanno lo stesso indirizzo IP destinazione, allora come apprende il router a quale host interno un dato datagramma dovrebbe essere inoltrato? Il trucco consiste nell’utilizzare una tabella di traduzione NAT nel router NAT e includere nelle righe di tale tabella i numeri di porta e gli indirizzi IP.
NAT ha conosciuto un’ampia diffusione negli ultimi anni anche se è stato molto contestato. Infatti argomentano che i numeri di porta sono stati concepiti per essere utilizzati nei processi d’indirizzamento, e non per individuare gli host. La cosa può infatti causare problemi ai server in esecuzione su reti domestiche dato che i processi server attendono richieste in ingresso su numeri di porta prestabiliti.
In secondo luogo, i router dovrebbero elaborare i pacchetti solo fino al livello 3. In terzo luogo, NAT viola il cosiddetto argomento punto-punto: gli host dovrebbero comunicare tra loro direttamente, senza intromissione di nodi né modifica di indirizzi IP e numeri di porta.
NAT è diventato un importante componente di Internet. 1
ICMP
Internet Control Message Protocol
Ricordiamo che il livello di rete di Internet presenta tre componenti principali: il protocollo IP, i protocolli d’instradamento Internet (tra cui: RIP, OSPF e BGP) e ICMP.
ICMP viene usato da host e router per scambiarsi informazioni a livello di rete: il suo uso più tipico è il report degli errori.
ICMP è spesso considerato parte di IP, ma dal punto di vista dell’architettura si trova esattamente sopra IP, dato che i suoi messaggi vengono trasportati nei datagrammi IP: ossia, i messaggi ICMP vengono trasportati come carico utile IP, esattamente come i segmenti TCP o UDP.
Allo stesso modo, se un host riceve un datagramma IP che specifica ICMP come protocollo di livello superiore, allora effettua il demultiplexing dei contenuti del datagramma ICMP, esattamente come farebbe per contenuti TCP o UDP.
I messaggi ICMP hanno un campo tipo e un campo codice, e contengono l’intestazione e i primi 8 byte del datagramma IP che ha provocato la generazione del messaggio. Alcuni tipi di messaggio ICMP sono mostrati in figura.
Notiamo che i messaggi ICMP non vengono usati soltanto per segnalare condizioni d’errore. Infatti essi possono essere usati per:
- Segnalare che la destinazione di un pacchetto non è conosciuta o che un pacchetto è troppo grande ma non deve essere frammentato e quindi non può essere consegnato;
- Avvertire che un pacchetto viene scartato perché il contatore del tempo di vita si è azzerato;
- Avvertire il mittente di rallentare la trasmissione, in caso di congestione;
- Avvertire il mittente che c’è una strada migliore per raggiungere la destinazione, in modo che il mittente la memorizzi nella tabella di routing per usarla successivamente;
- Controllare se una destinazione è raggiungibile e attiva; la destinazione risponde con un messaggio Echo Reply;