Il protocollo IPv4: header e indirizzamento

// obiettivi di apprendimento
Descrivere la struttura dell’header IPv4 campo per campo, spiegando il ruolo di ciascuno nel routing e nella frammentazione
Comprendere il sistema di indirizzamento IPv4, le classi storiche e la notazione CIDR con subnet mask
Identificare gli indirizzi speciali: privati (RFC 1918), loopback, broadcast, e APIPA
Ricavare network address, broadcast e range host da una coppia indirizzo/prefisso
📄
Slides
Schema header, classi, tabella indirizzi speciali
🔗
Risorse
Esercizi Indirizzamento
Vai →

Perché IPv4 è ancora qui

IPv4 è stato definito nel 1981 con la RFC 791. Quarantaquattro anni dopo lo trovi ancora su ogni router, ogni switch L3, ogni server. Non perché sia perfetto — ha limiti evidenti, primo fra tutti lo spazio di indirizzamento esaurito — ma perché costruito su principi solidi: semplicità, robustezza, interoperabilità.

Il livello Network (strato 3 OSI) ha un compito preciso: portare un pacchetto dalla sorgente alla destinazione attraverso reti eterogenee. IPv4 lo fa attraverso due meccanismi: l’indirizzamento (ogni nodo ha un indirizzo univoco globalmente instradabile) e il routing (i router leggono l’header e decidono il percorso). In questa lezione analizziamo l’header nel dettaglio e il sistema di indirizzamento.

// definizione formale
IPv4 (Internet Protocol version 4) è un protocollo di livello Network a servizio connectionless e best-effort: non garantisce consegna, ordine o assenza di duplicati. La responsabilità della affidabilità è delegata ai livelli superiori (TCP al livello Transport).

L’header IPv4: struttura campo per campo

Ogni datagramma IPv4 è composto da un header (minimo 20 byte, massimo 60 byte con opzioni) seguito dal payload. Vediamo ogni campo:

// struttura header IPv4 — 20 byte minimi (160 bit)
VER
4b
IHL
4b
DSCP
6b
ECN
2b
Total Length — 16 bit
Identification — 16 bit
Flags
3b
Fragment Offset — 13 bit
TTL — 8 bit
Protocol — 8 bit
Header Checksum — 16 bit
Source IP Address — 32 bit
Destination IP Address — 32 bit
Options (variabile, se IHL > 5) + Padding
CampoDimensioneFunzione
Version (VER)4 bitVersione del protocollo IP. Per IPv4 il valore è sempre 0100 (4).
IHL4 bitInternet Header Length: lunghezza dell’header in word da 32 bit. Valore minimo = 5 (20 byte), massimo = 15 (60 byte). Indica dove finisce l’header e inizia il payload.
DSCP / ECN8 bitPrecedentemente chiamato ToS (Type of Service). DSCP (6 bit) classifica il traffico per QoS (Differentiated Services). ECN (2 bit) notifica la congestione senza scartare pacchetti.
Total Length16 bitLunghezza totale del datagramma in byte (header + payload). Massimo 65.535 byte. In pratica limitata dall’MTU (1500 byte su Ethernet).
Identification16 bitIdentificatore univoco del datagramma. Tutti i frammenti dello stesso datagramma originale condividono lo stesso valore.
Flags3 bitBit 0: riservato (sempre 0). Bit 1 (DF): Don’t Fragment — se impostato il router scarta il pacchetto anziché frammentarlo. Bit 2 (MF): More Fragments — impostato su tutti i frammenti tranne l’ultimo.
Fragment Offset13 bitPosizione del frammento all’interno del datagramma originale, misurata in unità di 8 byte. Il ricevitore usa questo campo per riassemblare i frammenti nell’ordine corretto.
TTL8 bitTime To Live: ogni router decrementa TTL di 1 prima di inviare il pacchetto. Quando TTL raggiunge 0, il pacchetto viene scartato e viene inviato un messaggio ICMP “Time Exceeded” alla sorgente. Previene loop infiniti. Valore tipico: 64 (Linux), 128 (Windows), 255 (Cisco).
Protocol8 bitIdentifica il protocollo del payload (strato 4): 6 = TCP, 17 = UDP, 1 = ICMP, 89 = OSPF. Equivalente dell’EtherType di Ethernet.
Header Checksum16 bitChecksum dell’header (solo header, non payload). Ricalcolato ad ogni hop perché il TTL cambia. Nota: IPv6 elimina questo campo per ridurre l’overhead di calcolo.
Source IP32 bitIndirizzo IPv4 del mittente.
Destination IP32 bitIndirizzo IPv4 del destinatario. Il router usa questo campo per decidere il next-hop.
Options0–40 byteOpzionali: timestamp, record route, source routing. Raramente usate, complesse da processare. IPv6 le sostituisce con Extension Headers.
// traceroute e TTL

traceroute sfrutta il campo TTL in modo creativo: invia pacchetti con TTL=1, poi TTL=2, poi TTL=3… Ogni router che scarta il pacchetto risponde con ICMP “Time Exceeded”, rivelando il proprio indirizzo. Così si mappa l’intero percorso verso la destinazione.

Indirizzamento IPv4

Un indirizzo IPv4 è un numero a 32 bit. Viene scritto in notazione decimale puntata: quattro ottetti separati da punti, ciascuno con valore 0–255. Ad esempio: 192.168.1.100.

Ogni indirizzo identifica un’interfaccia di rete (non un host in senso assoluto — un router con 4 interfacce ha 4 indirizzi IP). L’indirizzo è diviso in due parti logiche:

Network Portion

Identifica la rete (subnet). Tutti gli host nella stessa rete condividono questa parte. Il router la usa per instradare il pacchetto verso la rete giusta.

Host Portion

Identifica lo specifico host all’interno della rete. Deve essere univoco all’interno della stessa subnet. Lo switch/ARP lo usa per identificare il nodo finale.

Le classi di indirizzi (sistema classful — storico)

Originariamente il confine tra network portion e host portion era fisso, determinato dai primi bit dell’indirizzo. Questo sistema è detto classful:

ClassePrimo bit/iRange primo ottettoSubnet mask defaultReti / Host per reteUso
A01 – 126/8 (255.0.0.0)128 reti / ~16M hostGrandi ISP, multinazionali
B10128 – 191/16 (255.255.0.0)16.384 reti / ~65K hostOrganizzazioni medie
C110192 – 223/24 (255.255.255.0)2M reti / 254 hostLAN aziendali, uffici
D1110224 – 239Multicast (OSPF, RIP, streaming)
E1111240 – 255Sperimentale, riservato
// perché il classful è obsoleto

Il classful allocava blocchi enormi: un’azienda con 300 host riceveva una classe B (65.534 host) sprecando 65.000 indirizzi. Con lo spazio IPv4 esaurito (IANA ha distribuito l’ultimo blocco nel 2011), oggi si usa esclusivamente il sistema classless (CIDR), che permette prefissi di lunghezza arbitraria.

La subnet mask e la notazione CIDR

La subnet mask è una maschera a 32 bit dove i bit a 1 indicano la network portion e i bit a 0 indicano la host portion. Si scrive in due modi equivalenti:

// esempio: indirizzo 192.168.10.50/24
IP (binario): 11000000.10101000.00001010.00110010
Mask (/24): 11111111.11111111.11111111.00000000
AND bitwise: 11000000.10101000.00001010.00000000
→ Network: 192.168.10.0/24
→ Broadcast: 192.168.10.255
→ Host range: 192.168.10.1 — 192.168.10.254 (254 host)

La notazione CIDR (Classless Inter-Domain Routing) esprime la subnet mask come il numero di bit a 1: /24 equivale a 255.255.255.0. È più compatta e flessibile — il prefisso può essere qualsiasi valore da /0 a /32.

Calcolo rapido: per un prefisso /n, il numero di indirizzi host utilizzabili è 2^(32-n) − 2 (si sottraggono l’indirizzo di rete e il broadcast).

Prefisso CIDRSubnet maskIndirizzi totaliHost utilizzabili
/24255.255.255.0256254
/25255.255.255.128128126
/26255.255.255.1926462
/27255.255.255.2243230
/28255.255.255.2401614
/29255.255.255.24886
/30255.255.255.25242
/31255.255.255.25420 (link p2p — RFC 3021)
/32255.255.255.25510 (host specifico)

Indirizzi speciali e riservati

Non tutti i 4,3 miliardi di indirizzi IPv4 possibili sono assegnabili agli host. Alcune gamme hanno significati speciali definiti da RFC.

Indirizzi privati (RFC 1918)

Sono blocchi non instradabili su Internet pubblico — usati nelle LAN. Un router con indirizzo privato deve fare NAT per comunicare con Internet.

BloccoRangeClasse originaleHost disponibili
10.0.0.0/810.0.0.0 – 10.255.255.255A~16,7 milioni
172.16.0.0/12172.16.0.0 – 172.31.255.255B~1,05 milioni
192.168.0.0/16192.168.0.0 – 192.168.255.255C~65.536

Altri indirizzi riservati notevoli

Indirizzo / BloccoSignificatoRFC
127.0.0.0/8Loopback: il traffico rimane nell’host, non esce sulla rete. 127.0.0.1 è il più usato. Utile per testing stack TCP/IP locale.RFC 1122
0.0.0.0Indirizzo non specificato: un host che non conosce ancora il proprio indirizzo lo usa come sorgente (es. durante DHCP discover). Anche usato nei routing table come default route.RFC 1122
255.255.255.255Limited broadcast: raggiunge tutti gli host sulla subnet locale. Non instradato dai router.RFC 919
x.x.x.255 (o .0)Directed broadcast: broadcast verso una subnet specifica (es. 192.168.1.255). Molti router lo bloccano per sicurezza (smurf attack).RFC 919
169.254.0.0/16APIPA (Automatic Private IP Addressing): assegnato automaticamente da Windows/macOS quando il DHCP non risponde. Non instradabile.RFC 3927
100.64.0.0/10Shared Address Space: usato dagli ISP per CGN (Carrier-Grade NAT). Non instradabile su Internet pubblico.RFC 6598
224.0.0.0/4Multicast: un pacchetto viene consegnato a un gruppo di ricevitori. 224.0.0.5 = tutti i router OSPF, 224.0.0.1 = tutti gli host subnet.RFC 1112
// perché usiamo indirizzi privati + NAT

Con 4,3 miliardi di indirizzi IPv4 e miliardi di device connessi, lo spazio è esaurito. La soluzione temporanea è il NAT (Network Address Translation): l’intera rete privata di casa tua (192.168.x.x) esce su Internet con un solo indirizzo pubblico. Il router tiene traccia delle connessioni e smista le risposte. È la ragione per cui il tuo telefono ha un IP privato ma riesce a comunicare con server globali.

Come un router elabora l’header

Quando un pacchetto arriva su un’interfaccia, il router esegue questi passi:

  1. Legge il campo Version: se non è 4 (IPv4) o 6 (IPv6), scarta.
  2. Verifica l’Header Checksum: se errato, scarta silenziosamente.
  3. Decrementa il TTL di 1. Se TTL = 0, scarta e invia ICMP Time Exceeded.
  4. Cerca il Destination IP nella routing table (longest prefix match).
  5. Determina l’interfaccia di uscita e il next-hop.
  6. Ricalcola l’Header Checksum (cambiato per TTL).
  7. Verifica se il datagramma supera l’MTU dell’interfaccia di uscita. Se DF=0, frammenta. Se DF=1, scarta e invia ICMP Fragmentation Needed.
  8. Incapsula in un nuovo frame Data Link (es. nuovo frame Ethernet con MAC del next-hop) e trasmette.
📌 Riepilogo — Punti chiave
  • L’header IPv4 è lungo almeno 20 byte e contiene tutti i metadati per routing, frammentazione e QoS.
  • Il TTL previene loop: decrementato ad ogni hop, scatta un ICMP quando raggiunge 0. È la base di traceroute.
  • Un indirizzo IPv4 a 32 bit è diviso in network portion + host portion tramite la subnet mask.
  • La notazione CIDR (/n) esprime la lunghezza del prefisso di rete in modo compatto e flessibile.
  • Gli indirizzi RFC 1918 (10.x, 172.16–31.x, 192.168.x) sono privati: non instradabili su Internet senza NAT.
  • Per una rete /n: host utilizzabili = 2^(32−n) − 2. Si sottraggono network address e broadcast.

Lascia un commento