ICMP, ping, traceroute e configurazione dinamica degli indirizzi

// obiettivi di apprendimento
Descrivere il ruolo di ICMP e i suoi principali tipi di messaggio (Echo, Destination Unreachable, Time Exceeded)
Spiegare come funzionano ping e traceroute e interpretarne l’output
Comprendere il processo DORA di DHCP e i principali campi e opzioni
Distinguere DHCP, DHCPv6 e SLAAC come meccanismi di configurazione dinamica degli indirizzi
📄
Slides
Tabella ICMP types e diagramma DORA
🧪
Lab
Esercizi traceroute, ping, ARP
GitHub →

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.

// definizione formale
ICMP (Internet Control Message Protocol) è incapsulato direttamente in IP con numero di protocollo 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

// header ICMP generico
 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

TypeCodeNomeUso
00Echo ReplyRisposta a un ping (Echo Request)
30Destination Unreachable — NetworkIl router non trova una rotta verso la rete destinazione
31Destination Unreachable — HostLa rete è raggiungibile ma l’host non risponde
32Destination Unreachable — ProtocolIl protocollo di livello superiore non è supportato
33Destination Unreachable — PortLa porta UDP/TCP di destinazione non è in ascolto
34Fragmentation NeededIl pacchetto supera la MTU e ha il bit DF (Don’t Fragment) settato → segnala la MTU del link. Base del Path MTU Discovery.
50-3RedirectIl router suggerisce all’host un gateway migliore per la destinazione
80Echo RequestRichiesta ping: “sei raggiungibile?”
110Time Exceeded — TTL ExceededIl TTL del pacchetto è sceso a 0 → il router lo scarta e notifica il mittente. Base di traceroute.
111Time Exceeded — Fragment ReassemblyTimeout nella riassemblatura dei frammenti
120-2Parameter ProblemHeader IP malformato o opzione sconosciuta
// nota importante

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 inviato
  • ttl=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+ritorno
  • 0% packet loss: nessun pacchetto perso
OPZIONI PING UTILI

-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)

COSA PUOI SCOPRIRE CON PING

✓ 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):

  1. 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.
  2. Invia un pacchetto con TTL = 2. Il secondo router lo scarta e risponde. E così via.
  3. Quando il pacchetto raggiunge la destinazione finale, questa risponde con ICMP Echo Reply (o Port Unreachable), e traceroute si ferma.
// esempio output traceroute
$ 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.

// differenza Linux vs Windows

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 ICMPv6NomeEquivalente ICMPv4
1Destination UnreachableType 3
2Packet Too BigType 3 Code 4 (Fragmentation Needed)
3Time ExceededType 11
128Echo RequestType 8
129Echo ReplyType 0
133-137NDP 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.

// definizione formale
DHCP (RFC 2131) è un protocollo client-server a livello applicazione (trasportato su UDP, porte 67 server / 68 client) che assegna automaticamente a un host: indirizzo IP, subnet mask, default gateway, server DNS, e altre opzioni di configurazione.

Il processo DORA

La negoziazione DHCP avviene in 4 messaggi, identificati dall’acronimo DORA:

// diagramma 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]
PERCHÉ IL REQUEST È BROADCAST?

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.

IL LEASE TIME E IL RINNOVO

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.

OptionNomeContenuto tipico
1Subnet Mask255.255.255.0
3Router (Default Gateway)192.168.1.1
6Domain Name Server8.8.8.8, 8.8.4.4
15Domain Namelocal o azienda.it
51Lease Time86400 (24 ore in secondi)
53DHCP Message Type1=Discover, 2=Offer, 3=Request, 4=Decline, 5=ACK, 6=NAK, 7=Release
54DHCP Server IdentifierIP del server che ha inviato l'Offer/ACK
82Relay Agent InformationAggiunto 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

MeccanismoProtocolloConfigurazione automaticaNecessita server?
DHCPIPv4IP, mask, GW, DNS, altre opzioni
SLAACIPv6IP (prefisso da RA + EUI-64), default GWNo (usa NDP/RA)
DHCPv6 StatefulIPv6IP, DNS, altre opzioni (come DHCP)
DHCPv6 StatelessIPv6Solo 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.

// best practice

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.

📌 Riepilogo — Punti chiave
  • 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.

Lascia un commento