ICMP — Internet Control Message Protocol
IP è un protocollo di consegna best-effort: non garantisce che i pacchetti arrivino, non li riordina, non segnala gli errori al mittente. Come fa allora un router a comunicare che non riesce a instradare un pacchetto? Come fa un host a scoprire se la destinazione è raggiungibile?
Ci pensa ICMP (RFC 792). ICMP è il sistema di notifica degli errori e diagnostica di IP. Non trasporta dati utente, ma è essenziale per la gestione della rete.
1. Ogni messaggio ICMP ha un campo Type (tipo di messaggio) e Code (sottotipo), seguiti da un checksum a 16 bit e da dati specifici per il tipo.Formato del messaggio ICMP
0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Type | Code | Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | (contenuto dipende dal tipo) | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
I messaggi ICMP principali
| Type | Code | Nome | Uso |
|---|---|---|---|
| 0 | 0 | Echo Reply | Risposta a un ping (Echo Request) |
| 3 | 0 | Destination Unreachable — Network | Il router non trova una rotta verso la rete destinazione |
| 3 | 1 | Destination Unreachable — Host | La rete è raggiungibile ma l’host non risponde |
| 3 | 2 | Destination Unreachable — Protocol | Il protocollo di livello superiore non è supportato |
| 3 | 3 | Destination Unreachable — Port | La porta UDP/TCP di destinazione non è in ascolto |
| 3 | 4 | Fragmentation Needed | Il pacchetto supera la MTU e ha il bit DF (Don’t Fragment) settato → segnala la MTU del link. Base del Path MTU Discovery. |
| 5 | 0-3 | Redirect | Il router suggerisce all’host un gateway migliore per la destinazione |
| 8 | 0 | Echo Request | Richiesta ping: “sei raggiungibile?” |
| 11 | 0 | Time Exceeded — TTL Exceeded | Il TTL del pacchetto è sceso a 0 → il router lo scarta e notifica il mittente. Base di traceroute. |
| 11 | 1 | Time Exceeded — Fragment Reassembly | Timeout nella riassemblatura dei frammenti |
| 12 | 0-2 | Parameter Problem | Header IP malformato o opzione sconosciuta |
I messaggi ICMP di errore (tipo 3, 5, 11, 12) includono sempre i primi 8 byte del payload del pacchetto originale che ha causato l’errore. Questo permette al mittente di identificare qual era il pacchetto incriminato (header IP originale + prime 8 byte del payload = header TCP/UDP = numeri di porta e sequence number).
ping — Echo Request / Echo Reply
ping è lo strumento di diagnostica più usato in networking. Invia messaggi ICMP Echo Request alla destinazione e aspetta Echo Reply, misurando RTT (Round-Trip Time) e rilevando la perdita di pacchetti.
# Linux/macOS — esempio di output $ ping -c 4 8.8.8.8 PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data. 64 bytes from 8.8.8.8: icmp_seq=1 ttl=118 time=12.4 ms 64 bytes from 8.8.8.8: icmp_seq=2 ttl=118 time=11.8 ms 64 bytes from 8.8.8.8: icmp_seq=3 ttl=118 time=12.1 ms 64 bytes from 8.8.8.8: icmp_seq=4 ttl=118 time=12.3 ms --- 8.8.8.8 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss rtt min/avg/max/mdev = 11.8/12.15/12.4/0.22 ms
Come leggere l’output:
icmp_seq: numero sequenziale del pacchetto inviatottl=118: TTL residuo alla ricezione. Il TTL iniziale di Google è 128; 128-118=10 hop percorsi (approssimazione)time=12.4 ms: RTT — tempo totale andata+ritorno0% packet loss: nessun pacchetto perso
-c N → invia N pacchetti (Linux)
-n N → invia N pacchetti (Windows)
-s SIZE → imposta dimensione payload
-t TTL → imposta TTL manualmente
-f → flood ping (root, stress test)
-M do → Don’t Fragment (Path MTU Discovery)
✓ La destinazione è raggiungibile
✓ Latenza approssimativa
✓ Perdita di pacchetti
✗ Non dice se il servizio è attivo (porta chiusa ≠ host giù)
✗ Non funziona se il firewall blocca ICMP
traceroute — scoprire il percorso
traceroute (Linux/macOS) o tracert (Windows) mostra la lista dei router intermedi (hop) che un pacchetto attraversa per raggiungere la destinazione, insieme all’RTT per ciascun hop.
Come funziona: il trucco del TTL
Il meccanismo è elegante e sfrutta il comportamento di ICMP Type 11 (Time Exceeded):
- Invia un pacchetto con TTL = 1. Il primo router lo scarta (TTL=0) e risponde con ICMP Time Exceeded. Il mittente registra l’IP del router e l’RTT.
- Invia un pacchetto con TTL = 2. Il secondo router lo scarta e risponde. E così via.
- Quando il pacchetto raggiunge la destinazione finale, questa risponde con ICMP Echo Reply (o Port Unreachable), e traceroute si ferma.
$ traceroute 8.8.8.8 traceroute to 8.8.8.8 (8.8.8.8), 30 hops max 1 192.168.1.1 1.2 ms 1.1 ms 1.0 ms ← router di casa 2 10.0.0.1 8.3 ms 8.1 ms 8.2 ms ← primo router ISP 3 203.0.113.1 11.4 ms 11.2 ms 11.5 ms ← backbone ISP 4 72.14.204.68 12.0 ms 11.9 ms 12.1 ms ← rete Google 5 8.8.8.8 12.4 ms 11.8 ms 12.3 ms ← destinazione
Per ogni hop vengono inviati (di default) 3 pacchetti. Se un router non risponde entro il timeout, l’output mostra * * * — il router potrebbe filtrare ICMP o non inviare Time Exceeded.
Linux/macOS usa di default pacchetti UDP con porte alte (33434+). La destinazione risponde con ICMP Port Unreachable (Type 3) quando riceve UDP su una porta chiusa. Con -I si può usare ICMP Echo. Windows (tracert) usa sempre ICMP Echo Request, come un ping con TTL incrementale.
ICMPv6
In IPv6, ICMP si chiama ICMPv6 (RFC 4443), con numero di protocollo 58. Non è solo un “aggiornamento” di ICMP: ICMPv6 è fondamentale per il funzionamento stesso di IPv6, perché include i messaggi NDP (visti in L06) e MLD (Multicast Listener Discovery). Bloccare ICMPv6 completamente in un firewall è sbagliato e rompe la rete IPv6.
| Type ICMPv6 | Nome | Equivalente ICMPv4 |
|---|---|---|
| 1 | Destination Unreachable | Type 3 |
| 2 | Packet Too Big | Type 3 Code 4 (Fragmentation Needed) |
| 3 | Time Exceeded | Type 11 |
| 128 | Echo Request | Type 8 |
| 129 | Echo Reply | Type 0 |
| 133-137 | NDP messages (RS, RA, NS, NA, Redirect) | — |
DHCP — Configurazione dinamica degli indirizzi
Configurare manualmente IP, subnet mask, gateway e DNS su ogni dispositivo di una rete sarebbe un’operazione impossibile da scalare. DHCP (Dynamic Host Configuration Protocol) automatizza questa operazione.
Il processo DORA
La negoziazione DHCP avviene in 4 messaggi, identificati dall’acronimo DORA:
CLIENT (0.0.0.0) SERVER (255.255.255.255)
| |
(1) |-------- DHCP DISCOVER (broadcast) ------->|
| "Ho bisogno di un indirizzo IP! |
| Src: 0.0.0.0 Dst: 255.255.255.255" |
| |
(2) |<-------- DHCP OFFER (unicast/broadcast) --|
| "Ti offro 192.168.1.100/24 |
| Gateway: 192.168.1.1 DNS: 8.8.8.8" |
| |
(3) |-------- DHCP REQUEST (broadcast) -------->|
| "Accetto l'offerta per 192.168.1.100 |
| dal server 192.168.1.254" |
| |
(4) |<-------- DHCP ACKNOWLEDGE (unicast) ------|
| "Confermato. Lease: 24 ore" |
| |
[HOST CONFIGURA L'INTERFACCIA]
In una rete possono esserci più server DHCP. Il client sceglie la prima offerta ricevuta, ma lo comunica in broadcast così tutti i server sanno quale offerta è stata accettata e gli altri possono revocare le loro proposte e rilasciare gli IP riservati.
Ogni indirizzo è assegnato per un tempo limitato (lease time). Il client tenta di rinnovare il lease a T/2 (50%) con un Request unicast al server. Se non risponde, ritenta a T*7/8 (87.5%) in broadcast. Allo scadere del lease, l'IP viene rilasciato e il processo DORA riparte.
Le opzioni DHCP più importanti
DHCP trasmette la configurazione come lista di opzioni. Ogni opzione ha un numero (option code), una lunghezza e un valore.
| Option | Nome | Contenuto tipico |
|---|---|---|
1 | Subnet Mask | 255.255.255.0 |
3 | Router (Default Gateway) | 192.168.1.1 |
6 | Domain Name Server | 8.8.8.8, 8.8.4.4 |
15 | Domain Name | local o azienda.it |
51 | Lease Time | 86400 (24 ore in secondi) |
53 | DHCP Message Type | 1=Discover, 2=Offer, 3=Request, 4=Decline, 5=ACK, 6=NAK, 7=Release |
54 | DHCP Server Identifier | IP del server che ha inviato l'Offer/ACK |
82 | Relay Agent Information | Aggiunto dal relay agent (vedi sotto) |
DHCP Relay Agent
DHCP usa il broadcast per il Discover. I router non inoltrano i broadcast. Come funziona allora in reti con più subnet?
Il DHCP Relay Agent (o ip helper-address in Cisco IOS) è un software sul router che intercetta i messaggi DHCP broadcast, li incapsula in messaggi unicast e li forwarda al server DHCP centralizato. Il server risponde all'indirizzo del relay, che poi consegna la risposta al client.
# Configurazione relay agent su router Cisco IOS Router(config)# interface GigabitEthernet0/1 Router(config-if)# ip helper-address 10.0.0.10 ! IP del server DHCP
DHCP vs DHCPv6 vs SLAAC
| Meccanismo | Protocollo | Configurazione automatica | Necessita server? |
|---|---|---|---|
| DHCP | IPv4 | IP, mask, GW, DNS, altre opzioni | Sì |
| SLAAC | IPv6 | IP (prefisso da RA + EUI-64), default GW | No (usa NDP/RA) |
| DHCPv6 Stateful | IPv6 | IP, DNS, altre opzioni (come DHCP) | Sì |
| DHCPv6 Stateless | IPv6 | Solo DNS e opzioni extra (IP da SLAAC) | Sì (solo per opzioni) |
I flag nel Router Advertisement (M-bit: Managed address config e O-bit: Other config) indicano all'host se deve usare SLAAC, DHCPv6 stateful o stateless.
Nelle reti aziendali IPv6 moderne si usa spesso SLAAC + DHCPv6 stateless: l'host ottiene l'indirizzo IP autonomamente (nessun server necessario), ma riceve DNS e altre opzioni tramite DHCPv6. Questo riduce la dipendenza dal server DHCP pur mantenendo la centralizzazione delle opzioni critiche.
- ICMP (RFC 792, Protocol=1) fornisce segnalazione errori e diagnostica a IP. Ogni messaggio ha Type + Code. Non trasporta dati utente.
- ping usa ICMP Echo Request (Type 8) / Echo Reply (Type 0). Misura RTT e perdita pacchetti.
- traceroute usa TTL incrementale: ogni router che riceve TTL=0 risponde con ICMP Time Exceeded (Type 11). Così si scopre ogni hop del percorso.
- ICMP Type 3 Code 4 (Fragmentation Needed) è usato per il Path MTU Discovery: il router notifica la MTU del link e il sorgente riduce la dimensione dei pacchetti.
- DHCP (RFC 2131) assegna automaticamente IP, subnet mask, gateway e DNS tramite il processo in 4 fasi DORA (Discover → Offer → Request → Acknowledge) su UDP porte 67/68.
- Il lease time limita la durata dell'assegnazione. Il rinnovo avviene a T/2 con unicast, poi a T*7/8 con broadcast.
- In IPv6 si usa SLAAC (autoconfigurazione stateless) o DHCPv6 (stateful/stateless). I flag M e O nel Router Advertisement indicano quale meccanismo usare.