Protocollo UDP
In questa pagina 5
In questa pagina 3
UDP (User Datagram Protocol) è il protocollo di base per scambiare dati impacchettati al livello di trasporto. È un protocollo senza connessione (connectionless) e non affidabile: non aggiunge niente ai servizi di IP (Datagramma IP e frammentazioneIPv4 è un servizio senza connessione, non affidabile, best effort: i pacchetti (datagrammi) possono essere persi, corrotti, riordinati o ritardati. L'intestazione ha 20-60 byte (HLen conta parole da 4 byte, da 5 a 15); il campo Total Length (16 bit) dà la lunghezza totale fino a 65 535 byte; TTL limita i salti, Protocol identifica il protocollo trasportato (1 ICMP, 6 TCP, 17 UDP), il checksum copre solo l'intestazione. Se un datagramma è più grande dell'MTU del collegamento viene frammentato: solo il payload si divide, ogni frammento ha un'intestazione propria; l'Offset (13 bit) è in unità di 8 byte, MF=1 in tutti i frammenti tranne l'ultimo, e il riassemblaggio avviene solo a destinazione.Datagramma IP e frammentazione →) tranne la comunicazione da processo a processo invece che da host a host, cioè i numeri di porta (Livello di trasporto - porte e multiplexingIl livello di trasporto (transport layer) offre la comunicazione logica end-to-end tra processi applicativi di host diversi, ed è realizzato solo negli host finali, non nei router. Il livello di rete consegna al computer giusto (indirizzo IP), il trasporto consegna al processo giusto (numero di porta di 16 bit, 0-65535). Una porta più un indirizzo IP formano un socket; la quaterna (IP sorgente, porta sorgente, IP destinazione, porta destinazione) identifica una connessione. I servizi sono: comunicazione processo-processo, indirizzamento, incapsulamento/decapsulamento, multiplexing/demultiplexing e, se il protocollo è affidabile, controllo di errore, di flusso e di congestione. I protocolli sono UDP (senza connessione, inaffidabile), TCP (con connessione, affidabile) e SCTP (combina i due).Livello di trasporto - porte e multiplexing →). I segmenti UDP possono quindi andare persi o arrivare fuori ordine all'applicazione.
Se è così "debole", perché usarlo?
Un processo che vuole inviare un breve messaggio e non si cura molto dell'affidabilità ci mette molto meno con UDP che con TCP, perché c'è molta meno interazione tra mittente e destinatario:
- niente instaurazione della connessione, che aggiungerebbe ritardo: la "connessione" si considera aperta quando arriva il primo datagramma;
- niente controllo di congestione: UDP può inviare alla velocità che l'applicazione vuole;
- semplice: nessuno stato di connessione né al mittente né al destinatario (stateless);
- intestazione piccola: 8 byte contro i 20 (almeno) di TCP, quindi meno overhead e ritardo minimo;
- permette il multicast (un pacchetto IP verso molti destinatari).
Formato del pacchetto
I pacchetti UDP (user datagram) hanno un'intestazione di 8 byte, divisa in quattro campi da 16 bit:
| bit 0–15 | bit 16–31 |
|---|---|
| porta sorgente | porta destinazione |
| lunghezza UDP | checksum (facoltativo) |
| dati |
- Porta sorgente e porta destinazione (16 bit ciascuna): i numeri di porta dei processi.
- Lunghezza (16 bit): lunghezza totale, intestazione più dati, in byte. Con 16 bitcon k bit si rappresentano i numeri da 0 a 2^k − 1Sistemi di numerazione posizionali → il valore massimo sarebbe ; poiché il datagramma UDP viaggia dentro un datagramma IP, che ha almeno 20 byte di intestazione ed è lungo al massimo byte, i dati UDP sono al massimo byte (dal totale IP si tolgono i byte dell'intestazione IP e gli di UDP). Il valore minimo è 8 (nessun dato).
- Checksum (16 bit): controllo d'errore, facoltativo.
Formula (dati utili in un datagramma UDP). .
Esempio. Un datagramma con lunghezza trasporta byte di dati. Un messaggio più grande di byte non si può inviare con un solo UDP: UDP non spezza un flusso in datagrammi correlati, quindi può essere usato solo da processi che inviano messaggi brevi.
I servizi di UDP
- Processo-processo: usa gli indirizzi di socket .
- Senza connessione: ogni user datagram è indipendente dagli altri, non è numerato (nessun numero di sequenza), non c'è apertura né chiusura della connessione e ogni datagramma può seguire un percorso diverso.
- Controllo di flusso: assente. Non c'è finestra, e il ricevente può essere sommerso dai messaggi.
- Controllo di errore: nessuno, tranne il checksum. Il mittente non sa se un messaggio è andato perso; se il checksum rivela un errore, il datagramma viene scartato.
- Controllo di congestione: assente. UDP presume che i pacchetti siano piccoli e sporadici e non possano creare congestione (non sempre è vero: un flusso video in UDP non rallenta quando la rete è carica, a scapito dei flussi TCP: TCP - controllo di congestioneLa congestione nasce quando collegamenti veloci alimentano un collegamento lento: le code dei router si riempiono, i pacchetti si perdono o ritardano e, nel caso peggiore, la rete collassa (quasi solo ritrasmissioni). TCP controlla la propria finestra di congestione cwnd con il feedback delle perdite (timeout o tre ACK duplicati): slow start (cwnd raddoppia a ogni RTT) fino alla soglia ssthresh, poi congestion avoidance (+1 MSS per RTT); a ogni perdita ssthresh = W/2. Le varianti si distinguono per come reagiscono ai tre dupACK: Tahoe riparte da cwnd = 1 dopo la ritrasmissione rapida; Reno usa il fast recovery (ssthresh = cwnd/2, cwnd = ssthresh + 3, +1 per ogni altro dupACK); NewReno gestisce gli ACK parziali e recupera più perdite nella stessa finestra; SACK riscontra i blocchi ricevuti e ritrasmette solo quello che manca.TCP - controllo di congestione →).
- Incapsulamento e decapsulamento: aggiunge e toglie l'intestazione di 8 byte.
- Multiplexing e demultiplexing: in un host c'è un solo UDP ma molti processi che lo usano; UDP smista i datagrammi in arrivo in base alla coppia (IP destinazione, porta destinazione).
Il checksum e la pseudo-intestazione
Il checksum UDP si calcola su tre parti: una pseudo-intestazione, l'intestazione UDP e i dati dell'applicazione. La pseudo-intestazione è un pezzo dell'intestazione del pacchetto IP in cui il datagramma UDP verrà incapsulato, con alcuni campi riempiti con zeri; non viene trasmessa, serve solo per il calcolo:
| parola | contenuto |
|---|---|
| 1–2 | indirizzo IP sorgente (32 bit) |
| 3–4 | indirizzo IP destinazione (32 bit) |
| 5 | zeri + protocollo (8 bit, vale per UDP) |
| 6 | lunghezza UDP (16 bit) |
Perché la pseudo-intestazione? Mettere nel controllo anche le informazioni di IP è una protezione in più: un datagramma consegnato all'host sbagliato (indirizzo corrotto) o al protocollo sbagliato viene rivelato. Però viola il principio dei livelli: UDP deve conoscere informazioni di IP che in teoria non dovrebbe vedere (per esempio il numero di protocollo, che il livello IP del ricevente deve passargli). È un caso in cui la stratificazione rigida è stata sacrificata alla praticità.
Formula (checksum UDP). Si sommano tutte le parole da 16 bit di pseudo-intestazione, intestazione (con il campo checksum posto a ) e dati (se i byte sono dispari si aggiunge un byte di zeri in fondo); i riporti oltre il sedicesimo bit si sommano al risultato (aritmetica a complemento a uno); il checksum è il complemento a uno (NOT bit a bit) della somma. Il ricevente somma tutte le parole, checksum compreso: se non ci sono errori ottiene .
Perché funziona: se è la somma (a 16 bit, con il riporto riportato in coda, vedi Aritmetica binariaSomma e sottrazione in binario, overflow per senza segno (riporto) e per complemento a 2 (segni), flag del processore, moltiplicazione per somme e scorrimenti, algoritmo di Booth, divisione, shift logici e aritmetici.Aritmetica binaria →) e il checksum è (NOT bit a bit, Algebra di Boole e porte logicheVariabili booleane, operatori AND, OR, NOT e derivati (NAND, NOR, XOR, XNOR) con tabelle di verità; assiomi e teoremi dell'algebra di Boole, De Morgan; porte logiche e completezza di NAND e NOR; semplificazione algebrica con esempio.Algebra di Boole e porte logiche →), allora in ogni posizione di bit uno dei due vale e l'altro : ha tutti i bit a , cioè . Se durante il viaggio un bit cambia, la somma cambia e il risultato del ricevente non è più . Il riporto oltre il sedicesimo bit si riaggiunge perché l'addizione è fatta modulo (complemento a uno), non modulo .
Esempio completo. Un host invia dalla porta alla porta dell'host i quattro byte Ciao (in esadecimale ). Lunghezza UDP . Conversioni in esadecimale (Basi di numerazione e conversioni - binario, ottale ed esadecimaleUn numero in base $r$ vale $\sum a_i r^i$ (cifre $a_i\in{0,\dots,r-1}$). Conversioni: base $r\to$ decimale con la somma pesata; decimale $\to$ base $r$ per divisioni successive (parte intera, resti letti dal basso) e moltiplicazioni successive (parte frazionaria, parti intere lette dall'alto); binario $\leftrightarrow$ ottale/esadecimale a gruppi di 3/4 bit. Somma, differenza e prodotto binari seguono le regole decimali con cifre 0 e 1; la differenza ha prestiti, il prodotto somma prodotti parziali traslati.Basi di numerazione e conversioni - binario, ottale ed esadecimale →): ogni byte dell'IP si scrive con due cifre, , , ; le porte: , ; i caratteri sono in ASCII (Codici binari - BCD, ASCII, Unicode, parità e GrayUn codice binario a $n$ bit distingue $2^n$ elementi. BCD: una cifra decimale ogni 4 bit (1010–1111 non usati; 10 richiede 8 bit, non è il binario del numero). ASCII: 7 bit per 128 caratteri, la cifra ASCII è 011 seguito dal BCD. Unicode/UTF-8: da 1 a 4 byte, compatibile con ASCII. Bit di parità: rileva errori su un numero dispari di bit. Distanza di Hamming = numero di bit diversi. Codice Gray: numeri consecutivi differiscono di un solo bit (sensori di posizione); si costruisce per riflessione o con $g_i=b_i\oplus b_{i+1}$.Codici binari - BCD, ASCII, Unicode, parità e Gray →): C, i, a, o. Parole:
| campo | parole (esadecimale) |
|---|---|
| IP sorgente | |
| IP destinazione | |
| zeri + protocollo 17 | |
| lunghezza UDP | |
| porta sorgente | |
| porta destinazione | |
| lunghezza UDP | |
| checksum (posto a 0) | |
dati Ci, ao |
Somma della pseudo-intestazione, passo per passo: ; ; ; ; . Somma di intestazione e dati: ; ; resta ; ; . Totale: (cinque cifre: il riporto è la cifra più a sinistra). Il riporto oltre i 16 bit (il "2") si somma al resto: . Complemento: (sottrarre da equivale a negare ogni bit), che è il checksum da scrivere nell'intestazione. Controllo del ricevente: ✓.
Checksum facoltativo e valori speciali
Il checksum UDP è facoltativo: se non lo si vuole, il campo si pone tutto a . Questo crea un'ambiguità: se il mittente lo calcola e il risultato è proprio , si trasmette al suo posto (nel complemento a uno e sono la stessa quantità, "zero con segno").
Esempio. Se i dati fossero invece di , la somma totale diventerebbe dopo il riporto; il complemento è e al suo posto si invia . Il caso opposto, risultato , non può capitare: richiederebbe una somma uguale a , ma la pseudo-intestazione contiene .
Il checksum rivela errori ma non li corregge, e si limita a scartare il datagramma: l'applicazione non viene avvisata.
Applicazioni tipiche di UDP
UDP è adatto a:
- un processo che ha bisogno di una semplice comunicazione richiesta-risposta, con poca attenzione al controllo di flusso e di errore (per esempio DNS, Livello applicazione - DNSIl DNS (Domain Name System) traduce i nomi (www.amazon.com) negli indirizzi IP, perché le persone preferiscono i nomi e i protocolli TCP/IP usano gli indirizzi. È un database distribuito e gerarchico: albero rovesciato con radice, domini di primo livello e sottodomini (al più 128 livelli); le informazioni sono su tanti server (13 server radice) e i nuovi domini si registrano presso un registrar accreditato ICANN. Ogni ISP ha un DNS locale, il cui indirizzo l'host riceve con DHCP: l'host (resolver) gli manda la richiesta, di solito su UDP, e il DNS locale interroga radice, dominio di primo livello e server dell'organizzazione. Ogni server che impara un'associazione la tiene in cache, marcando la risposta non autoritativa, e la scarta dopo il TTL. Record (nome, tipo, valore, classe, TTL). Con il NAT il DNS deve restituire l'indirizzo pubblico. Quattro attacchi: macchina compromessa, risposta falsa all'host, avvelenamento della cache del DNS locale, server DNS malevolo.Livello applicazione - DNS →);
- un processo con meccanismi interni di controllo di flusso e di errore: il TFTP (Trivial File Transfer Protocol) li ha già, quindi può usare UDP;
- il multicast;
- processi di gestione di rete come SNMP;
- alcuni protocolli di aggiornamento delle tabelle di instradamento, come RIP, porta (Protocolli di instradamento - RIP, OSPF e BGPIn Internet l'instradamento non si può fare con un solo protocollo, per scalabilità (tabelle troppo grandi) e per autonomia amministrativa: ogni ISP è un sistema autonomo (AS) con il proprio algoritmo. All'interno di un AS si usano i protocolli IGP: RIP (distance vector, numero di salti, massimo 15, aggiornamenti ogni circa 30 s, su UDP porta 520) e OSPF (link state con Dijkstra, aree collegate all'area 0, cinque tipi di LSA, messaggi direttamente in IP). Tra AS si usa BGP4 (path vector, su TCP porta 179, eBGP tra AS e iBGP dentro l'AS, scelta del percorso per politica: preferenza locale, AS-PATH più corto, origine; i cicli si evitano scartando i cammini che contengono già il proprio AS; quattro messaggi: Open, Keepalive, Notification, Update).Protocolli di instradamento - RIP, OSPF e BGP →);
- l'assegnazione degli indirizzi con DHCP, porte e (Protocollo DHCPDopo che a un'organizzazione è stato assegnato un blocco di indirizzi, configurare a mano IP e netmask di ogni host non è efficiente. BOOTP (obsoleto) associa in modo statico un indirizzo MAC a un indirizzo IP; DHCP (Dynamic Host Configuration Protocol) assegna gli indirizzi in modo dinamico, a prestito (lease) per un tempo limitato, anche a sistema operativo già avviato. Il dialogo client-server è su UDP (porta 67 server, 68 client) e usa quattro messaggi: DHCPDISCOVER, DHCPOFFER, DHCPREQUEST, DHCPACK (più DHCPRELEASE a fine uso). Nell'ACK arrivano IP, netmask, default gateway e server DNS.Protocollo DHCP →): il client non ha ancora un IP e non potrebbe aprire una connessione TCP;
- le applicazioni interattive in tempo reale (audio, video, giochi) che non tollerano ritardi irregolari tra le parti di un messaggio: spesso implementano un loro controllo di flusso e di errore e usano tecniche per interpolare i dati mancanti;
- traceroute, che invia datagrammi UDP verso una porta volutamente inesistente per provocare gli errori ICMP che gli servono (Protocollo ICMPIPv4 non ha meccanismi per segnalare o correggere gli errori né per interrogare host e router: li fornisce l'ICMP (Internet Control Message Protocol), un protocollo di rete i cui messaggi viaggiano dentro datagrammi IP con campo Protocol $=1$. I messaggi sono di errore (destination unreachable, tipo 3; time exceeded, tipo 11; redirect, tipo 5; parameter problem, tipo 12), sempre inviati alla sorgente originale e con l'intestazione IP più i primi 8 byte del datagramma che ha causato l'errore, oppure di interrogazione (echo request 8 e reply 0, timestamp 13-14). ICMP segnala ma non corregge. Con l'echo si fanno ping (RTT) e scoperta dell'MTU (bit D, codice 4, payload massimo $1500-20-8=1472$ byte); con time exceeded e port unreachable si fa traceroute ($n+1$ messaggi con TTL crescente). Attacchi: smurf e redirect.Protocollo ICMP →).
Esempio (overhead). Un pacchetto di voce con byte di audio ha byte di UDP e di IP: l'efficienza al livello di trasporto e rete, cioè byte utili diviso byte totali, è . Con TCP (intestazione byte) sarebbe , ma con in più l'attesa dell'handshake e gli ACK. Il grafico mostra come per UDP e per TCP (intestazioni di trasporto e rete) cresce con il payload : i pacchetti piccoli, tipici della voce, pagano di più l'intestazione.
Grafico interattivo: Efficienza η = L/(L + H) in funzione del payload L: UDP + IP (H = 28 byte) e TCP + IP (H = 40 byte); per L = 160 byte: 85,1% e 80%
Versione ripasso
- UDP (User Datagram Protocol): trasporto senza connessione e non affidabile. Rispetto a IP (Datagramma IP e frammentazioneIPv4 è un servizio senza connessione, non affidabile, best effort: i pacchetti (datagrammi) possono essere persi, corrotti, riordinati o ritardati. L'intestazione ha 20-60 byte (HLen conta parole da 4 byte, da 5 a 15); il campo Total Length (16 bit) dà la lunghezza totale fino a 65 535 byte; TTL limita i salti, Protocol identifica il protocollo trasportato (1 ICMP, 6 TCP, 17 UDP), il checksum copre solo l'intestazione. Se un datagramma è più grande dell'MTU del collegamento viene frammentato: solo il payload si divide, ogni frammento ha un'intestazione propria; l'Offset (13 bit) è in unità di 8 byte, MF=1 in tutti i frammenti tranne l'ultimo, e il riassemblaggio avviene solo a destinazione.Datagramma IP e frammentazione →) aggiunge solo le porte, cioè la comunicazione processo-processo (Livello di trasporto - porte e multiplexingIl livello di trasporto (transport layer) offre la comunicazione logica end-to-end tra processi applicativi di host diversi, ed è realizzato solo negli host finali, non nei router. Il livello di rete consegna al computer giusto (indirizzo IP), il trasporto consegna al processo giusto (numero di porta di 16 bit, 0-65535). Una porta più un indirizzo IP formano un socket; la quaterna (IP sorgente, porta sorgente, IP destinazione, porta destinazione) identifica una connessione. I servizi sono: comunicazione processo-processo, indirizzamento, incapsulamento/decapsulamento, multiplexing/demultiplexing e, se il protocollo è affidabile, controllo di errore, di flusso e di congestione. I protocolli sono UDP (senza connessione, inaffidabile), TCP (con connessione, affidabile) e SCTP (combina i due).Livello di trasporto - porte e multiplexing →); i segmenti possono andare persi o arrivare fuori ordine.
- Perché usarlo: nessuna connessione da stabilire, nessun controllo di congestione, nessuno stato (stateless), intestazione di 8 byte contro almeno 20 di TCP, multicast.
Formato e servizi
- Intestazione di 8 byte, quattro campi da 16 bit: porta sorgente, porta destinazione, lunghezza UDP, checksum (facoltativo); poi i dati.
- Lunghezza = intestazione più dati, minimo ; (lunghezza byte). Dentro IP (intestazione almeno 20 byte): dati al massimo byte; solo messaggi brevi.
- Datagrammi indipendenti e non numerati; nessun controllo di flusso (il ricevente può essere sommerso) né di congestione (TCP - controllo di congestioneLa congestione nasce quando collegamenti veloci alimentano un collegamento lento: le code dei router si riempiono, i pacchetti si perdono o ritardano e, nel caso peggiore, la rete collassa (quasi solo ritrasmissioni). TCP controlla la propria finestra di congestione cwnd con il feedback delle perdite (timeout o tre ACK duplicati): slow start (cwnd raddoppia a ogni RTT) fino alla soglia ssthresh, poi congestion avoidance (+1 MSS per RTT); a ogni perdita ssthresh = W/2. Le varianti si distinguono per come reagiscono ai tre dupACK: Tahoe riparte da cwnd = 1 dopo la ritrasmissione rapida; Reno usa il fast recovery (ssthresh = cwnd/2, cwnd = ssthresh + 3, +1 per ogni altro dupACK); NewReno gestisce gli ACK parziali e recupera più perdite nella stessa finestra; SACK riscontra i blocchi ricevuti e ritrasmette solo quello che manca.TCP - controllo di congestione →); errori solo col checksum (datagramma scartato, il mittente non lo sa). Demultiplexing su (IP destinazione, porta destinazione).
Checksum e pseudo-intestazione
- Pseudo-intestazione (non trasmessa): IP sorgente, IP destinazione, zeri + protocollo , lunghezza UDP. Rivela un datagramma consegnato all'host o al protocollo sbagliato, ma viola la stratificazione.
- Calcolo: somma delle parole da 16 bit di pseudo-intestazione, intestazione (checksum ) e dati; i riporti oltre il 16° bit si risommano (complemento a uno); checksum NOT della somma. Il ricevente somma tutto, checksum compreso: senza errori ottiene .
- Esempio. Da porta a porta , dati
Ciao, lunghezza .- Pseudo-intestazione: .
- Intestazione e dati: .
- Totale , riporto , checksum ; controllo .
- Campo a = checksum non calcolato; se il calcolo dà si trasmette . Il risultato non può capitare (la pseudo-intestazione contiene ).
Applicazioni
DNS (Livello applicazione - DNSIl DNS (Domain Name System) traduce i nomi (www.amazon.com) negli indirizzi IP, perché le persone preferiscono i nomi e i protocolli TCP/IP usano gli indirizzi. È un database distribuito e gerarchico: albero rovesciato con radice, domini di primo livello e sottodomini (al più 128 livelli); le informazioni sono su tanti server (13 server radice) e i nuovi domini si registrano presso un registrar accreditato ICANN. Ogni ISP ha un DNS locale, il cui indirizzo l'host riceve con DHCP: l'host (resolver) gli manda la richiesta, di solito su UDP, e il DNS locale interroga radice, dominio di primo livello e server dell'organizzazione. Ogni server che impara un'associazione la tiene in cache, marcando la risposta non autoritativa, e la scarta dopo il TTL. Record (nome, tipo, valore, classe, TTL). Con il NAT il DNS deve restituire l'indirizzo pubblico. Quattro attacchi: macchina compromessa, risposta falsa all'host, avvelenamento della cache del DNS locale, server DNS malevolo.Livello applicazione - DNS →), TFTP, multicast, SNMP, RIP porta (Protocolli di instradamento - RIP, OSPF e BGPIn Internet l'instradamento non si può fare con un solo protocollo, per scalabilità (tabelle troppo grandi) e per autonomia amministrativa: ogni ISP è un sistema autonomo (AS) con il proprio algoritmo. All'interno di un AS si usano i protocolli IGP: RIP (distance vector, numero di salti, massimo 15, aggiornamenti ogni circa 30 s, su UDP porta 520) e OSPF (link state con Dijkstra, aree collegate all'area 0, cinque tipi di LSA, messaggi direttamente in IP). Tra AS si usa BGP4 (path vector, su TCP porta 179, eBGP tra AS e iBGP dentro l'AS, scelta del percorso per politica: preferenza locale, AS-PATH più corto, origine; i cicli si evitano scartando i cammini che contengono già il proprio AS; quattro messaggi: Open, Keepalive, Notification, Update).Protocolli di instradamento - RIP, OSPF e BGP →), DHCP porte e (il client non ha ancora un IP: Protocollo DHCPDopo che a un'organizzazione è stato assegnato un blocco di indirizzi, configurare a mano IP e netmask di ogni host non è efficiente. BOOTP (obsoleto) associa in modo statico un indirizzo MAC a un indirizzo IP; DHCP (Dynamic Host Configuration Protocol) assegna gli indirizzi in modo dinamico, a prestito (lease) per un tempo limitato, anche a sistema operativo già avviato. Il dialogo client-server è su UDP (porta 67 server, 68 client) e usa quattro messaggi: DHCPDISCOVER, DHCPOFFER, DHCPREQUEST, DHCPACK (più DHCPRELEASE a fine uso). Nell'ACK arrivano IP, netmask, default gateway e server DNS.Protocollo DHCP →), tempo reale, traceroute (porta inesistente per provocare errori ICMP: Protocollo ICMPIPv4 non ha meccanismi per segnalare o correggere gli errori né per interrogare host e router: li fornisce l'ICMP (Internet Control Message Protocol), un protocollo di rete i cui messaggi viaggiano dentro datagrammi IP con campo Protocol $=1$. I messaggi sono di errore (destination unreachable, tipo 3; time exceeded, tipo 11; redirect, tipo 5; parameter problem, tipo 12), sempre inviati alla sorgente originale e con l'intestazione IP più i primi 8 byte del datagramma che ha causato l'errore, oppure di interrogazione (echo request 8 e reply 0, timestamp 13-14). ICMP segnala ma non corregge. Con l'echo si fanno ping (RTT) e scoperta dell'MTU (bit D, codice 4, payload massimo $1500-20-8=1472$ byte); con time exceeded e port unreachable si fa traceroute ($n+1$ messaggi con TTL crescente). Attacchi: smurf e redirect.Protocollo ICMP →). Voce con byte: con UDP, con TCP.
Errori tipici: dimenticare che la pseudo-intestazione non viaggia ma entra nel checksum; dire che UDP rivela le perdite (solo errori nei bit); usare invece di come massimo di dati.