Continuiamo a parlare del livello di rete, parlando del Network Address Translation ( o più conosciuto col nome di NAT), il protocollo ICMP che abbiamo usato indirettamente alcuni articoli fa e come capiamo il funzionamento di Ping e Traceroute.
E’ detta sottorete, una rete isolata i cui punti terminali sono collegati all’ interfaccia di un host o di un router.
Con una subnet mask( o maschera di sottorete) /24, indichiamo che ogni Host connesso alla sottorete 233.1.1.0/24 avrà un indirizzo della forma 233.1.1.xxx.
La notazione CIDR ha reso molto più flessibile l’ assegnazione di blocchi di indirizzi a aziende, istituzioni e privati. Ma una volta assegnato un blocco, che succede se l’ entità che ha ricevuto il blocco ha bisogno di un numero maggiore di indirizzi?
E se il blocco successivo è già assegnato?
Per risolvere a questo inconveniente, usiamo gli indirizzi privati: sottoreti small office, home office (SOHO) hanno cominciato a proliferare ed ogni volta che si vuole installare una rete locale per connettere più macchine, l’ ISP deve allocare un intervallo di indirizzi per coprire la sottorete.
Per risolvere questo problema, alcuni intervalli di indirizzi sono privati:
Indirizzi | CIDR |
---|---|
10.0.0.0 – 10.255.255.255 | 10.0.0.0/8 |
172.16.0.0 – 172.31.255.255 | 172.16.0.0/12 |
192.168.0.0 – 192.168.255.255 | 192.168.0.0/16 |
Si utilizza poi il protocollo di traduzione degli indirizzi di rete, conosciuto col nome di Network Address Translator (NAT).
Questo che comporta? Al nostro router abilitato al NAT verrà fornito un indirizzo IP univoco, con cui chiunque si connette alla rete attraverso quel router apparirà possessore.
I router abilitati di NAT nascondono i dettagli della rete domestica al mondo esterno: inoltre non è necessario allocare un intervallo di indirizzi da un ISP mentre un unico indirizzo IP è sufficiente per tutte le macchine di una rete locale.
E’ possibile cambiare gli indirizzi delle macchine di una rete privata senza doverlo comunicare all’ Internet globale, ed è possibile viceversa cambiare ISP senza modificare gli indirizzi delle macchine connesse alla rete privata.
I dispositivi interni alla rete non sono poi esplicitamente indirizzabili e visibile dal mondo esterno e ciò garantisce quindi maggiore sicurezza.
Network Address Translation
Quando un router NAT riceve un datagramma, genera per esso un numero di porta di origine che và a sostituire al numero di porta origine presente nel pacchetto, e sostituisce l’ indirizzo IP d’origine col proprio.
Eseguirà poi il procedimento inverso quando invece riceverà il pacchetto dal host remoto.
Essendo il campo numero di porta lungo 16 bit, il protocollo NAT permette di gestire più di 60.000 connessioni simultanee con un solo indirizzo ip sul lato WAN. Ad ogni modo, viene contestato perché:
- I router dovrebbero elaborare i pacchetti solo fino al livello 3 (rete),
- Il numero di porte viene usato per identificare Host e non processi (Azz),
- Viola il cosidetto argomento punto-punto secondo cui gli host dovrebbero comunicare tra loro direttamente senza intromissione di nodi nè di modifiche di indirizzi ip e numeri di porta. Per ovviare alla scarsità di indirizzi IP si dovrebbe usare IPv6.
- Interferisce con le applicazioni P2P in cui ogni peer dovrebbe essere in grado di avviare una connessione TCP con qualsiasi altro peer, a meno che il NAT non sia specificamente configurate per quella specifica applicazione P2P.
Vediamo un esempio dei problemi che può causare il NAT: un client si vuole connettere ad un server di una sottorete, con indirizzo 10.0.0.1. La sottorete è coperta da un router con NAT abilitato, il che vuol dire che c’è un unico indirizzo IP. Come fa il client esterno alla sottorete a riferirsi a quel server?
1. Possiamo configurare staticamente il NAT per inoltrare le richieste di collegamento entranti a quella data porta del server (tipo una richiesta al nostro router 122.22.45.7 sulla porta 2500 viene inoltrata sempre a 10.0.0.1 sulla porta 2500).
2. Universal Plug and Play (UPnP): usiamo questo protocollo che permette di scoprire e configurare il NAT. Consente agli host coperti da NAT di conoscere gli indirizzi IP pubblici e richiedere una corrispondenza NAT per un qualsiasi numero di porta( a scelta).
Ad esempio:
- BitTorrent su 10.0.0.1 e porta 3345 vuole accettare connessioni all’ esterno.
- Richiede al NAT di creare un’ apertura che faccia corrispondere (10.0.0.1, 3345) a (122.22.45.7, 50001) dove 5001 è scelto dall’applicazione
- BitTorrent può annunciare il proprio tracker su (122.22.45.7, 5001) e NAT opera da traduttore
Forwarding datagrammi IP
Con Inoltro(Forwarding) si intende inviare un pacchetto in input al giusto output del router che lo porterà o a destinazione o comunque un hop più vicino.
Sostanzialmente, col forwarding dei datagrammi IP intendiamo inviare il datagramma al prossimo hop di destinazione. Quando un host deve inviare un datagramma, lo invia al router della rete locale il quale accede alla tabella di routing per trovare il successivo hop a cui inviarlo.
L’ inoltro quindi richiede una riga nella tabella per ogni blocco di rete.
Internet Control Message Protocol (ICMP)
Un’altro protocollo che troviamo al livello di rete è l’ ICMP. E’ possibile trovarlo all’ interno del campo dati di IP (vediamo meglio fra poco).
Viene usato da host e routers per potersi scambiare informazioni al livello di rete: un tipico utilizzo di ICMP è quello di creare un meccanismo di feedback quando un messaggio IP viene inviato.
Ad esempio: un host A invia un datagramma IP ad un host B che si trova a 3 routers di distanza, il terzo router sul percorso rileva un errore di qualche tipo col pacchetto. Invia un feedback ad A (non può comunicare con ICMP ai due routers intermedi) dicendo che c’è stato un errore e se possibile spiega come risolverlo.
Serve quindi come Report degli errori ed anche se di fatto sfrutta IP, è considerato parte di esso. I messaggi ICMP hanno un campo tipo e uno codice, contengono poi l’ intestazione e i primi 8 byte del datagramma IP che ha provocato la generazione del messaggio. Vediamo alcuni tipi di messaggi:
Tipo | codice | Descrizione |
---|---|---|
0 | 0 | Risposta eco (a ping) |
3 | 0 | rete destinazione irraggiungibile |
3 | 1 | host destinazione irraggiungibile |
4 | 0 | riduzione (controllo di congestione) |
8 | 0 | richiesta eco |
11 | 0 | TTL scaduto |
12 | 0 | errata intesazione IP |
Ping
Avete mai inviato un ping ad un server? Questo programma, ping
, si basa proprio su messaggi di richiesta e risposta echo di ICMP:
ping informaticalab.com Esecuzione di Ping informaticalab.com [108.162.199.183] con 32 byte di dati: Risposta da 108.162.199.183: byte=32 durata=63ms TTL=54 Risposta da 108.162.199.183: byte=32 durata=51ms TTL=54 Risposta da 108.162.199.183: byte=32 durata=343ms TTL=54 Risposta da 108.162.199.183: byte=32 durata=500ms TTL=54 Statistiche Ping per 108.162.199.183: Pacchetti: Trasmessi = 4, Ricevuti = 4, Persi = 0 (0% persi), Tempo approssimativo percorsi andata/ritorno in millisecondi: Minimo = 51ms, Massimo = 500ms, Medio = 239ms
Traceroute
Adesso che ne abbiamo le conoscenze, rivediamo questo programma già visto diversi articoli fa: traceroute invia una serie di datagrammi IP alla destinazione ciascuno contenente un segmento UDP con un numero di porta inutilizzata e:
- Il primo con TTL=1 (“muore” al primo router)
- Il secondo a TTL = 2 (“muore” al secondo router)
ecc.
Utilizza un numero di porta casuale e l’ origine avvia un timer ogni volta che un datagramma viene inviato.
- Quando poi l’ n-esimo datagramma arriva all’ n-esimo router:
- Il router scarta il datagramma
- Invia all’ origine un messaggio di allerta ICMP (tipo 11, codice 0)
- Il messaggio include il nome del router e l’indirizzo ip
- Arrivato il messaggio ICMP viene calcolato l’ RTT
L’ RTT di ogni Hop viene calcolato 3 volte (ovvero vengono inviati 3 pacchetti).