Files
learning/networking/016-icmp.md
2025-05-18 21:44:37 +02:00

31 lines
1.8 KiB
Markdown

# ICMP (Internet Control Message Protocol)
ICMP è un protocollo fondamentale nel networking, utilizzato sia in IPv4 che in IPv6 (ICMPv6). Appartenente al livello 3 del modello ISO/OSI (Network Layer) e non trasporta dati applicativi ma viene impiegato per trasmettere messaggi sullo stato di rete e per segnalare errori.
## Funzionalità principali
1. **Segnalazione degli errori:** quando un router rileva un problema (ad esempio, la destinazione non è raggiungibile, non è in grado di inoltrare il pacchetto o il TTL, Time To Live, è scaduta), genera un pacchetto ICMP per informare il mittente dell'errore verificatosi. Questi messaggi aiutano a diagnosticare e risolvere problemi di rete
2. **Meccanismo Query-Response:** ICMP supporta operazioni di richiesta e risposta, essenziali per le diagnostiche di rete. Un tipico esempio è l'uso dei messaggi `Echo Request` ed `Echo Reply` che costituiscono la base del comando `ping`.
## Il comando ping
Il comando `ping` è uno strumento diagnostico che sfrutta ICMP per testare la connessione di rete. Invia un pacchetto `ICMP Echo Request` a un indirizzo IP specificato e attende una risposta `Echo Reply`
```bash
> ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=54 time=65.9 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=54 time=242 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=54 time=164 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=54 time=192 ms
^C
--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3001ms
rtt min/avg/max/mdev = 65.939/166.214/242.448/64.330 ms
```
Nell'output:
- *ttl* (Time To Live) mostra il valore residuo del campo TTL, che diminuisce ad ogni hop
- *time* indica il tempo impiegato per il percorso andata e ritorno (round-trip time, *rtt*)