# Internet: architettura e protocolli/Protocollo IPv4

Internet: architettura e protocolli
Copertina Tutti i moduli · Sviluppo
    CopertinaInternet: architettura e protocolli/Copertina
* Protocollo IPv4Internet: architettura e protocolli/Protocollo IPv4
* Protocollo ARPInternet: architettura e protocolli/Protocollo ARP
* Protocollo ICMPInternet: architettura e protocolli/Protocollo ICMP
* Domain Name SystemInternet: architettura e protocolli/Domain Name System
* Protocollo DHCPInternet: architettura e protocolli/Protocollo DHCP
* Livello Trasporto: Protocolli TCP-UDPInternet: architettura e protocolli/Livello Trasporto: Protocolli TCP-UDP
* Application LayerInternet: architettura e protocolli/Application Layer
* NATInternet: architettura e protocolli/NAT
Modifica il sommario
L'IP è il livello di rete di TCP/IP:
* è un servizio non connesso: non c'è segnalazione di rete o utente;
* è un protocollo di tipo datagram: basato su pacchetti.

## Funzionalità

* frammentazione e riassemblaggio dei pacchetti per il trasporto sul livello 2;
* gestione di indirizzi a 32 bit (IPv4);
* configurazione delle classi di servizio: i progettisti di IP avevano previsto una differenziazione del traffico per priorità, ma oggi le classi di servizio non sono sfruttate.
Gli apparati di interconnessione di livello 3 sono chiamati router:
* a differenza degli switch evitano l'intasamento della forwarding table;
* effettuano solo la frammentazione, mentre il riassemblaggio è delegato alla destinazione:

## Pacchetti IP
### Intestazione

Il formato dell'intestazione di un pacchetto IP è composto da vari campi:
* versione: IPv4 o IPv6;
* tipo di servizio (ToS): per le classi di servizio;
* lunghezza totale del pacchetto prima della deframmentazione;
* identificatore: tutti i frammenti di uno stesso pacchetto condividono lo stesso identificatore;
* flag: indica se il pacchetto corrente è l'ultimo frammento;
* offset di frammento: per l'ordinamento del pacchetto nella sequenza;
* tempo di vita (TTL): è un contatore di hop, cioè è un numero che viene decrementato di un'unità a ogni passaggio dentro un router → quando arriva a 0 il pacchetto viene scartato per evitare che pacchetti vaghino all'infinito;
* protocollo: identifica il protocollo di livello 4 del pacchetto payload (TCP, UDP, ICMP...);
* checksum: protegge solo l'intestazione;
* indirizzi IP della sorgente e della destinazione;
* alcune opzioni oggi abbandonate.

### Indirizzi

Ogni indirizzo IP è ampio 4 byte:
* campo rete: interfacce vicine sono aggregate in un prefisso di rete comune che occupa i bit alti;
* campo host: identifica la macchina specifica.
Un indirizzo IP è umanamente rappresentabile suddividendo i 32 bit in gruppi da 8, convertendo ogni gruppo in decimale e separandoli con dei puntini → ogni numero è compreso tra 0 e 255.
Non tutti gli indirizzi possibili sono utilizzabili:
* indirizzi con tutti 0 nel campo host identificano l'intera rete e non possono essere utilizzati per un singolo host;
* indirizzi con tutti 1 nel campo host identificano il broadcast di tipo directed a tutti gli host nella rete;
* indirizzi con tutti 1 identificano il broadcast di tipo limited a tutti gli host della rete locale;
* indirizzi che iniziano con 127 identificano la macchina stessa e bloccano il forwarding di traffico (loopback);
* indirizzi privati: gli indirizzi pubblici devono essere univoci in tutta Internet, gli indirizzi privati sono gestiti all'interno della rete privata che dall'esterno viene vista con un unico indirizzo IP (NAT):
** 1 rete privata di classe C, 2$^{24}$ indirizzi: tra 10.0.0.0 e 10.255.255.255;
** 15 reti private di classe B, 16 indirizzi: da 172.16.0.0 a 172.31.255.255;
** 256 reti private di classe C, 256 indirizzi: da 192.168.0.0 a 192.168.255.255.
Gli indirizzi IP sono assegnati alle interfacce → un router non ha un unico indirizzo, ma ne ha uno per ogni interfaccia.

## Reti fisiche e reti logiche

Una rete fisica è un insieme di host connessi in una rete senza router → il livello fisico non viene interrotto da un dispositivo di livello 3.
Una rete logica (LIS) è un insieme di host con lo stesso prefisso di rete, e include la rete fisica e il router. Ogni rete fisica corrisponde a livello 3 a una rete logica.
La comunicazione tra due macchine appartenenti a una stessa rete fisica è basata sugli indirizzi MAC dei due host (CSMA/CD). In realtà il livello applicazione non sa che l'host di destinazione si trova nella stessa rete fisica, e fornisce l'indirizzo IP → consegna diretta al livello 2: è il livello 3 che deve capire che la destinazione è nella rete fisica e far partire i meccanismi di livello 2 senza passare dal router.
La consegna tra reti logiche differenti è affidata al router (consegna indiretta). Il livello 2 è comunque usato per le consegne dirette tra la sorgente e il router, e tra il router e la destinazione. L'host deve quindi conoscere almeno un default gateway, che è il router per uscire dalla rete logica.
Esiste la possibilità di emulare due reti logiche in una stessa rete fisica: una stessa interfaccia è vista da un host con un certo indirizzo IP e da un altro host con un altro indirizzo IP, e la comunicazione tra i due host passa sempre attraverso il router. In realtà esistono dei meccanismi che permettono di ottimizzare il percorso (routing table, ARP table): dopo la prima comunicazione, il router istruisce il primo host affinché la volta dopo svolga la consegna diretta a livello 2.

### Subnetting

Il subnetting consente partendo da una rete di una certa classe di creare una rete a classe più piccola: il prefisso di rete si espande e una parte del campo host diventa il campo subnet.
La subnet mask è una sequenza di bit:
* i byte 255 identificano il prefisso di rete, compreso il campo subnet;
* i byte 0 identificano il campo host ridotto.
Queste reti a classe più piccola sono delle reti logiche distinte → il subnetting si può usare per emulare più reti logiche in una stessa rete a classe maggiore.

### Indirizzamento classless (CIDR)

La netmask permette di estendere il prefisso di rete a un qualsiasi bit dell'indirizzo:
* i bit 1 identificano il prefisso di rete;
* i bit 0 identificano il campo host.
In questo modo più reti piccole possono venire aggregate in un unico router → si definiscono delle gerarchie di indirizzamento.
Non sono ammesse le netmask 255.255.255.255 (/32) e 255.255.255.254 (/31) perché l'indirizzo con tutti 0 è riservato alla rete stessa, e quello con tutti 1 al traffico broadcast.

### Routing

Dalla netmask il router può capire se la destinazione si trova nella stessa rete del mittente, confrontando i risultati di due operazioni AND bit a bit:
* il primo AND bit a bit è tra l'indirizzo del mittente e la netmask del mittente;
* il secondo AND bit a bit è tra l'indirizzo del destinatario e la netmask del mittente.
Quando al router arriva un datagramma:
* se la destinazione coincide con il router stesso: elaborazione locale (per configurare il router);
* se la destinazione è in uno degli address range del router: ARP, invio diretto all'indirizzo MAC di destinazione, ecc. (se l'indirizzo di destinazione appartiene a più address range, viene preferito quello con la netmask più lunga (Longest Prefix Matching));
* se la destinazione è fuori da tutti gli address range del router: consulta la routing table, quindi invia il datagramma al "prossimo hop" indicato nella routing table (o sulla default route).

#### Tabelle di routing

Una tabella di routing può contenere:
* entry dirette: sono le coppie indirizzo di rete (con 0 finali) + netmask associate a ogni interfaccia del router;
* entry indirette: sono gli indirizzi IP delle interfacce degli altri router (next hop) a cui fare le consegne dirette:
** statiche: sono configurate manualmente dal gestore;
** dinamiche: sono determinate in modo automatico.
Si scelgono sempre le route a minor costo.
Più address range con uguali bit alti si posso aggregare, mettendo degli zeri al posto dei bit che differiscono:
A sinistra la routing table non aggregata, a destra la routing table aggregata: :
| Destinazione | Netmask | Next hop | Destinazione | Netmask | Next hop |
| 190.3.1.0 | 255.255.255.0 | 190.3.3.2 | 190.3.1.0 | 255.255.255.0 | 190.3.3.2 |
| 190.3.9.0 | 255.255.255.252 | 190.3.3.2 | 190.3.9.0 | 255.255.255.252 | 190.3.3.2 |
| 190.3.9.4 | 255.255.255.252 | 190.3.6.8 | 190.3.0.0 | 255.255.0.0 | 190.3.6.8 |
| 190.3.4.0 | 255.255.255.0 | 190.3.6.8 | 190.3.0.0 | 255.255.0.0 | 190.3.6.8 |
| 150.1.0.0 | 255.255.0.0 | 190.3.6.8 | 150.1.0.0 | 255.255.0.0 | 190.3.6.8 |
Il default gateway ha sempre netmask 0.0.0.0, perché viene scelto solo se non ci sono altri address range che risultano validi dai due AND bit a bit.