Protocollo ICMP
In questa pagina 5
In questa pagina 5
IPv4 (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 →) non ha un meccanismo per segnalare e correggere gli errori e manca di meccanismi per le richieste di informazioni sugli host e per la gestione della rete. L'ICMP (Internet Control Message Protocol) è stato progettato per colmare queste due lacune. Si affianca a IP ed è esso stesso un protocollo del livello di rete (insieme a IP, ARP e IGMP: Livello di rete e indirizzamento IPIl livello di rete (network layer) porta i datagrammi da host a host attraverso i router: incapsula (framing), sceglie il percorso (routing) e sposta il pacchetto da un ingresso a un'uscita del router (forwarding); in Internet lascia ai livelli superiori controllo d'errore, di flusso e di congestione. Un indirizzo IPv4 è di 32 bit, diviso in prefisso (rete, $n$ bit) e suffisso (host, $32-n$ bit). L'indirizzamento a classi (A, B, C, D, E) è obsoleto; oggi si usa quello senza classi (CIDR): data una notazione $a.b.c.d/n$ si ricavano $N=2^{32-n}$ indirizzi, indirizzo di rete (suffisso tutto 0) e di broadcast (suffisso tutto 1), oppure con la netmask: rete $=$ indirizzo AND maschera, broadcast $=$ indirizzo OR (NOT maschera).Livello di rete e indirizzamento IP →).
I suoi messaggi però non vanno direttamente al livello di collegamento, come ci si aspetterebbe: sono prima incapsulati dentro datagrammi IP con il campo Protocol uguale a . In questo senso ICMP sta "dentro" IP (è nel payload) ma anche "sopra" IP (i messaggi di errore contengono una parte del pacchetto IP sbagliato).
Due categorie di messaggi
- Messaggi di errore (error-reporting): segnalano i problemi che un router o l'host destinatario incontra nell'elaborare un pacchetto IP. Sono sempre inviati alla sorgente originale, perché le sole informazioni sul percorso contenute nel datagramma sono gli indirizzi IP di sorgente e destinazione. Attenzione: ICMP non corregge gli errori, li segnala soltanto.
- Messaggi di interrogazione (query, con richiesta e risposta): aiutano un host a ottenere informazioni specifiche da un router o da un altro host. Servono a verificare se un host o un router è attivo (liveness) e a misurare il tempo di andata e ritorno (RTT) di un datagramma IP tra due dispositivi.
Regole per i messaggi di errore (per non innescare tempeste di errori):
- nessun messaggio ICMP in risposta a un datagramma che contiene un messaggio ICMP;
- nessun messaggio ICMP per un datagramma frammentato che non sia il primo frammento;
- nessun messaggio ICMP per un datagramma con indirizzo multicast;
- nessun messaggio ICMP per un datagramma con indirizzo speciale, come .
| categoria | messaggio | tipo (codici) |
|---|---|---|
| errore | destination unreachable | 3 (0-15) |
| errore | time exceeded | 11 (0-1) |
| errore | redirect | 5 |
| errore | parameter problem | 12 (0-1) |
| interrogazione | echo request / echo reply | 8 / 0 |
| interrogazione | timestamp request / reply | 13 / 14 |
Il contenuto dei messaggi di errore
Tutti i messaggi di errore hanno una sezione dati che contiene:
- l'intestazione IP del datagramma originale (quello che ha causato l'errore), per dire alla sorgente di quale datagramma si tratta;
- i primi 8 byte di dati di quel datagramma: contengono i numeri di porta e il numero di sequenza (informazioni del livello di trasporto), per avvisare TCP o UDP dell'errore.
ICMP forma così un pacchetto di errore che viene incapsulato in un datagramma IP: l'intestazione ICMP (tipo, codice, checksum, campo non usato di 16 bit a zero) è seguita da "intestazione IP originale + 64 bit di dati".
Messaggi di errore
Destination unreachable (tipo 3)
È il messaggio d'errore più usato. In generale, quando un pacchetto viene scartato, un messaggio di errore ICMP ritorna alla sorgente. Usa codici da 0 a 15 per indicare perché il datagramma non ha raggiunto la destinazione finale.
| codice | significato |
|---|---|
| 0 | rete non raggiungibile |
| 1 | host non raggiungibile |
| 2 | protocollo non raggiungibile (il protocollo di trasporto indicato non è supportato) |
| 3 | porta non raggiungibile (il protocollo non può avvisare il processo del messaggio in arrivo) |
| 4 | il datagramma è troppo grande: serve la frammentazione, ma il bit don't fragment (D) è attivo |
| 5 | instradamento dalla sorgente fallito |
| 6 | rete di destinazione sconosciuta |
| 7 | host di destinazione sconosciuto |
| 8 | host sorgente isolato |
| 9 | rete di destinazione amministrativamente vietata |
| 10 | host di destinazione amministrativamente vietato |
| 11 | rete non raggiungibile per il tipo di servizio |
| 12 | host non raggiungibile per il tipo di servizio |
| 13 | comunicazione amministrativamente vietata (un filtro impedisce l'inoltro) |
| 14 | violazione della precedenza dell'host |
| 15 | precedenza tagliata (la precedenza del datagramma è sotto il livello fissato dagli amministratori) |
Formato: tipo (3), codice (0-15), checksum, 16 bit non usati (a zero), next-hop MTU (solo se il codice è 4, altrimenti tutti zeri), intestazione IP e primi 64 bit del datagramma che ha causato il problema. Quando il codice è 4, il next-hop MTU dice alla sorgente la dimensione da usare (vedi la scoperta dell'MTU più sotto).
Time exceeded (tipo 11)
- Codice 0: generato da un router quando, diminuendo il TTL, arriva a 0; restituito alla sorgente del datagramma IP.
- Codice 1: generato dalla destinazione quando mancano dei frammenti dopo la scadenza del timer di riassemblaggio (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 →).
Parameter problem (tipo 12)
- Codice 0: l'intestazione IP contiene un campo malformato (viola il formato); il messaggio contiene un puntatore (pointer) al campo dell'intestazione che ha generato il problema.
- Codice 1: un'opzione è sconosciuta o un'operazione non può essere eseguita.
Esempio. Arriva un pacchetto IPv4 il cui primo byte è . Il ricevitore lo scarta: i primi 4 bit () sono la versione, corretta; i successivi 4 () sono HLen, cioè byte, un valore impossibile: il pacchetto è stato corrotto in trasmissione.
Redirect (tipo 5)
I router aggiornano di continuo le informazioni di instradamento, gli host no: non partecipano ai protocolli di instradamento. Un host vuole mandare un pacchetto a e la sua tabella dice di inviarlo al router . Ma l'informazione di è stata aggiornata: ora dovrebbe inoltrare a per raggiungere . Siccome e sono nella stessa rete, potrebbe mandare direttamente a . avverte di aggiornare la sua tabella con un messaggio ICMP redirect (Instradamento e inoltroL'inoltro (forwarding) mette il pacchetto sulla strada verso la destinazione, un salto alla volta (hop by hop). Se la destinazione è nella stessa rete del mittente l'inoltro è diretto (si usa l'ARP per il MAC del destinatario), altrimenti è indiretto: il pacchetto va al router successivo (next hop) indicato dalla tabella di instradamento, o al default gateway. Con le netmask: l'inoltro è diretto attraverso l'interfaccia $x$ se $\text{IP(dst)}\ \text{AND}\ \text{NM}(x)=\text{IP}(x)\ \text{AND}\ \text{NM}(x)$; altrimenti si scorre la tabella dalla maschera più lunga (longest prefix match) e si usa il primo match. La riga con rete $0.0.0.0$ e maschera $0.0.0.0$ (default route) corrisponde sempre. L'aggregazione di rotte (route aggregation) riduce la tabella, e nell'inoltro con etichette (MPLS) la tabella si consulta per indice.Instradamento e inoltro →).
Messaggi di interrogazione
Echo
L'echo request (tipo 8) e l'echo reply (tipo 0) servono a un host o router per verificare se un altro nodo è attivo. Un host o router invia un echo request a un altro; se questo è attivo risponde con un echo reply.
- Il campo identifier è scelto dal mittente e la risposta lo replica.
- Il campo sequence number parte da 0 e aumenta di 1 a ogni nuovo messaggio.
- Optional data: il mittente può aggiungere dati, che la risposta replica.
Formato: tipo (8 o 0), codice (0), checksum, identifier, sequence number, optional data.
Formula (checksum ICMP). Come per IP: complemento a uno della somma in complemento a uno delle parole da 16 bit del messaggio, con il campo checksum posto a 0 durante il calcolo.
Esempio. Echo request di tipo 8, codice 0, identifier , sequence number , dati "ab" (). Parole: . Somma passo per passo (in esadecimalele cifre vanno da 0 a 9 e da A a F, con A=10 fino a F=15, e ogni cifra vale 4 bitBasi di numerazione e conversioni - binario, ottale ed esadecimale →): ; (infatti nella terza cifra); ; (cifra per cifra da destra: , , , ). Nessun riporto oltre i 16 bit, quindi non c'è nulla da riportare. Checksum (si nega ogni bit; cifra per cifra , , , ). Il metodo è lo stesso del checksum IP, con il complemento a uno spiegato in 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 →. Alla ricezione, sommando anche il checksum: , quindi il messaggio è integro.
Ping per misurare l'RTT
Il programma ping invia messaggi echo request; la destinazione, se attiva, risponde con echo reply. ping imposta l'identifier negli echo request e reply, parte da sequence number 0 e lo incrementa a ogni invio. Inserisce nella sezione dati l'istante di invio: quando il pacchetto torna, sottrae l'istante di partenza da quello di arrivo e ottiene l'RTT. Il programma mostra, per ogni risposta, il nome o l'indirizzo, il numero di sequenza, il TTL residuo dell'echo reply, il tempo tra request e reply (RTT) e i pacchetti persi.
Ping per scoprire l'MTU del cammino
Si manda un messaggio di una certa dimensione con il bit D (don't fragment) acceso; se la sorgente riceve un messaggio ICMP "destination unreachable" con codice 4 ("fragmentation required with don't fragment flag set") riduce la dimensione e riprova. Quando il messaggio viene consegnato, l'MTU è la dimensione corrente. Esempio di comando per l'MTU verso unipd.it: ping -D -s 1500 unipd.it (-s = numero di byte di dati, per default 56, che con l'intestazione ICMP di 8 byte fanno 64 byte ICMP).
Esempio (la ricerca passo per passo). La sorgente ha MTU 1500 e sul cammino c'è un collegamento con MTU . (1) Invia un echo request con byte di dati: il datagramma IP è byte, con D acceso. (2) Il router davanti al collegamento stretto non può né inoltrarlo () né frammentarlo (D=1): lo scarta e manda destination unreachable codice 4 con next-hop MTU . (3) La sorgente ricalcola i dati utili: byte, e rimanda; ora il pacchetto passa e l'MTU del cammino è . Senza il campo next-hop MTU (router vecchi) si procede a tentativi, riducendo la dimensione a ogni errore.
Esempio (quale dimensione ci si aspetta). L'interfaccia locale è Ethernet o Wi-Fi: MTU 1500 byte. L'intestazione IP è di 20 byte, quindi il pacchetto ICMP al massimo byte; l'intestazione ICMP è di 8 byte, quindi i dati al massimo byte. Con la dimensione di default: byte di ICMP, byte di datagramma IP.
Ping e destination unreachable nel laboratorio
Nella rete del laboratorio 2 (routing statico, Routing statico in KatharàLaboratorio 2 (LAB2). Due LAN (195.11.14.0/24 e 200.1.1.0/24) sono unite da due router r1 e r2 collegati da una rete 100.0.0.8/30. Una interfaccia attiva inserisce da sola nella tabella di instradamento solo la rete direttamente collegata: per le altre servono rotte inserite a mano. I PC usano una rotta predefinita (route add default gw 195.11.14.1), i router rotte statiche (route add -net 195.11.14.0/24 gw 100.0.0.9 dev eth1). Senza la rotta di ritorno su r2 le richieste di ping arrivano ma le risposte no: la raggiungibilità vale solo se c'è un percorso in entrambi i versi. A configurazione finita ping da pc1 a pc2 risponde con ttl=62 (64 meno 2 router).Routing statico in Katharà →) , , , . Il ping da A a D funziona. Il ping da A a B dà destination unreachable. Il ping da B ad A dà network unreachable (non c'è una rotta verso la rete di destinazione: per B, con maschera /28 e rete , l'indirizzo è fuori dalla propria rete); il messaggio sparisce aggiungendo la rotta con route add -net 192.168.20.0/24 dev eth0. Il caso mostra che la scelta delle maschere e delle rotte decide quale errore si vede: host o destinazione non raggiungibile quando la consegna fallisce, rete non raggiungibile quando manca la rotta (Instradamento e inoltroL'inoltro (forwarding) mette il pacchetto sulla strada verso la destinazione, un salto alla volta (hop by hop). Se la destinazione è nella stessa rete del mittente l'inoltro è diretto (si usa l'ARP per il MAC del destinatario), altrimenti è indiretto: il pacchetto va al router successivo (next hop) indicato dalla tabella di instradamento, o al default gateway. Con le netmask: l'inoltro è diretto attraverso l'interfaccia $x$ se $\text{IP(dst)}\ \text{AND}\ \text{NM}(x)=\text{IP}(x)\ \text{AND}\ \text{NM}(x)$; altrimenti si scorre la tabella dalla maschera più lunga (longest prefix match) e si usa il primo match. La riga con rete $0.0.0.0$ e maschera $0.0.0.0$ (default route) corrisponde sempre. L'aggregazione di rotte (route aggregation) riduce la tabella, e nell'inoltro con etichette (MPLS) la tabella si consulta per indice.Instradamento e inoltro →).
Traceroute
traceroute scopre il cammino dalla sorgente alla destinazione e fa alcune misure, aiutandosi con due messaggi di errore: time exceeded e destination unreachable. È un programma di livello applicazione, ma serve solo la parte client: i suoi messaggi sono costruiti per non raggiungere mai il livello applicazione dell'host di destinazione. I messaggi di traceroute sono incapsulati in pacchetti UDP (livello 4), ma con un numero di porta di proposito non disponibile sulla destinazione.
Se ci sono router nel cammino, traceroute manda messaggi. L'idea è di mandare messaggi che generano errori e usare gli messaggi ICMP di errore ricevuti per ricostruire il cammino:
- il primo messaggio ha TTL : viene scartato dal primo router, che invia un time exceeded; dall'indirizzo sorgente del messaggio di errore traceroute ricava l'IP del primo router (e il nome del router è nella sezione dati);
- il secondo ha TTL , e fa trovare IP e nome del secondo router, e così via;
- a un certo punto il messaggio raggiunge l'host di destinazione, che manda un destination unreachable con codice 3 (porta non trovata): la ricerca è finita.
Perché funziona: il TTL viene decrementato da ogni router (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 →) e il router che lo porta a 0 scarta il pacchetto e avvisa la sorgente con un messaggio che porta il proprio indirizzo IP come sorgente. Con TTL il pacchetto "muore" esattamente al -esimo router, che si rivela. L'ultimo messaggio non genera time exceeded perché arriva a destinazione con TTL ancora ; la porta UDP è volutamente inesistente, quindi l'host destinatario risponde destination unreachable codice 3, che segnala la fine. Con router intermedi servono sonde (TTL da 1 a ): per sono sonde, e traceroute ne invia di solito tre per ogni valore di TTL (quindi pacchetti) per avere tre misure di RTT per salto. Il tempo stampato per un salto è l'RTT fino a quel router, non il ritardo del solo collegamento: il ritardo del tratto si stima come differenza dei due RTT, e per questo può uscire anche negativo se il router era momentaneamente più lento.
Esempio. traceroute fhda.edu mostra tre salti: il primo router è Dcore.fhda.edu () con tempi , , ms (tre sonde per salto); il secondo Dbackup.fhda.edu (); il terzo, tiptoe.fhda.edu (), è la destinazione. In un caso con 18 salti i tempi possono non crescere regolarmente (un router occupato risponde tardi). Se non arriva risposta entro 5 secondi traceroute stampa un asterisco e passa al salto successivo (righe * * *).
Attacchi con ICMP
- Smurf. ICMP può servire a un attacco di negazione del servizio. L'attaccante manda un echo request all'indirizzo di broadcast di una rete, con l'indirizzo sorgente falsificato (spoofed) uguale a quello della vittima. Tutti gli host rispondono con echo reply alla vittima, che viene sommersa dalle risposte ICMP e rallenta o va fuori servizio. Oggi è raramente usato, grazie ai miglioramenti nelle reti.
- Redirect. È possibile falsificare i messaggi redirect: il router legittimo manda il redirect alla vittima, l'attaccante lo imita mettendo l'indirizzo di un router malevolo; la vittima userà il falso gateway per raggiungere una certa destinazione, e l'attaccante può leggere o modificare i dati.
Versione ripasso
IPv4 (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 →) non segnala né corregge gli errori e non ha richieste di informazioni: li fornisce l'ICMP (Internet Control Message Protocol), protocollo del livello di rete (Livello di rete e indirizzamento IPIl livello di rete (network layer) porta i datagrammi da host a host attraverso i router: incapsula (framing), sceglie il percorso (routing) e sposta il pacchetto da un ingresso a un'uscita del router (forwarding); in Internet lascia ai livelli superiori controllo d'errore, di flusso e di congestione. Un indirizzo IPv4 è di 32 bit, diviso in prefisso (rete, $n$ bit) e suffisso (host, $32-n$ bit). L'indirizzamento a classi (A, B, C, D, E) è obsoleto; oggi si usa quello senza classi (CIDR): data una notazione $a.b.c.d/n$ si ricavano $N=2^{32-n}$ indirizzi, indirizzo di rete (suffisso tutto 0) e di broadcast (suffisso tutto 1), oppure con la netmask: rete $=$ indirizzo AND maschera, broadcast $=$ indirizzo OR (NOT maschera).Livello di rete e indirizzamento IP →), incapsulato dentro datagrammi IP con Protocol .
Categorie e regole
- Errore: segnala i problemi di un router o della destinazione, sempre alla sorgente originale. ICMP non corregge, segnala soltanto.
- Interrogazione (richiesta e risposta): nodo attivo (liveness), RTT.
- Nessun errore per: datagramma con un messaggio ICMP, frammento non iniziale, multicast, indirizzo speciale.
| categoria | messaggio | tipo (codici) |
|---|---|---|
| errore | destination unreachable | 3 (0-15) |
| errore | time exceeded | 11 (0-1) |
| errore | redirect | 5 |
| errore | parameter problem | 12 (0-1) |
| interrogazione | echo request / reply | 8 / 0 |
| interrogazione | timestamp request / reply | 13 / 14 |
- Contenuto dei messaggi di errore: intestazione ICMP (tipo, codice, checksum, 16 bit non usati a zero) + intestazione IP originale + primi 8 byte di dati.
Messaggi di errore
- Destination unreachable (3): codici 0 rete, 1 host, 2 protocollo, 3 porta non raggiungibile; 4 datagramma troppo grande con bit don't fragment (D) attivo; 5 instradamento dalla sorgente fallito; 6 e 7 rete e host sconosciuti; 9, 10 e 13 divieti amministrativi; 11 e 12 tipo di servizio. Next-hop MTU valido solo per il codice 4.
- Time exceeded (11): codice 0 = router, TTL arrivato a 0; codice 1 = destinazione, mancano frammenti allo scadere del timer di riassemblaggio.
- Parameter problem (12): codice 0 campo malformato (con puntatore al campo), codice 1 opzione sconosciuta o operazione non eseguibile. Es. primo byte : HLen , cioè byte: pacchetto corrotto.
- Redirect (5): gli host non partecipano all'instradamento. manda a verso , ma ora dovrebbe passare per , nella stessa rete di : avverte di aggiornare la tabella (Instradamento e inoltroL'inoltro (forwarding) mette il pacchetto sulla strada verso la destinazione, un salto alla volta (hop by hop). Se la destinazione è nella stessa rete del mittente l'inoltro è diretto (si usa l'ARP per il MAC del destinatario), altrimenti è indiretto: il pacchetto va al router successivo (next hop) indicato dalla tabella di instradamento, o al default gateway. Con le netmask: l'inoltro è diretto attraverso l'interfaccia $x$ se $\text{IP(dst)}\ \text{AND}\ \text{NM}(x)=\text{IP}(x)\ \text{AND}\ \text{NM}(x)$; altrimenti si scorre la tabella dalla maschera più lunga (longest prefix match) e si usa il primo match. La riga con rete $0.0.0.0$ e maschera $0.0.0.0$ (default route) corrisponde sempre. L'aggregazione di rotte (route aggregation) riduce la tabella, e nell'inoltro con etichette (MPLS) la tabella si consulta per indice.Instradamento e inoltro →).
Messaggi di interrogazione
- Echo (request 8, reply 0, codice 0): identifier scelto dal mittente e replicato, sequence number da 0 e a ogni messaggio, dati opzionali replicati.
Checksum ICMP: come IP, complemento a uno della somma in complemento a uno delle parole da 16 bit, con il campo checksum a 0 nel calcolo.
- Esempio: tipo 8, codice 0, identifier , sequence , dati "ab" : parole , somma , checksum ; in ricezione la somma con il checksum dà : integro.
- Ping (RTT): istante di invio nei dati; RTT = arrivo partenza.
- Ping per l'MTU: messaggio con bit D acceso; se arriva destination unreachable codice 4 si riduce la dimensione e si riprova (
ping -D -s 1500 unipd.it;-s= byte di dati, default 56). Ethernet o Wi-Fi: MTU 1500, ICMP al massimo byte, dati al massimo byte. Default: byte ICMP, byte IP. - Lab (Routing statico in KatharàLaboratorio 2 (LAB2). Due LAN (195.11.14.0/24 e 200.1.1.0/24) sono unite da due router r1 e r2 collegati da una rete 100.0.0.8/30. Una interfaccia attiva inserisce da sola nella tabella di instradamento solo la rete direttamente collegata: per le altre servono rotte inserite a mano. I PC usano una rotta predefinita (
route add default gw 195.11.14.1), i router rotte statiche (route add -net 195.11.14.0/24 gw 100.0.0.9 dev eth1). Senza la rotta di ritorno su r2 le richieste di ping arrivano ma le risposte no: la raggiungibilità vale solo se c'è un percorso in entrambi i versi. A configurazione finitapingda pc1 a pc2 risponde con ttl=62 (64 meno 2 router).Routing statico in Katharà →): rotta mancante = network unreachable (si corregge conroute add -net 192.168.20.0/24 dev eth0); consegna fallita = host o destinazione non raggiungibile.
Traceroute
- Scopre il cammino con time exceeded e destination unreachable; solo parte client, messaggi in UDP su una porta non disponibile nella destinazione. Con router servono messaggi.
- TTL : il primo router scarta e risponde time exceeded; dall'indirizzo sorgente si ricava il suo IP;
- TTL , e così via;
- la destinazione risponde destination unreachable codice 3 (porta non trovata): fine.
- Esempio
traceroute fhda.edu: 3 salti, l'ultimotiptoe.fhda.edu() è la destinazione. Nessuna risposta in 5 s: asterisco.
Attacchi
- Smurf: echo request all'indirizzo di broadcast con sorgente falsificata = vittima; tutti rispondono alla vittima, che va in negazione del servizio.
- Redirect falso: l'attaccante imita il redirect con l'indirizzo di un router malevolo; la vittima usa il falso gateway.
- Errori tipici: credere che ICMP corregga gli errori, rispondere con un errore a un messaggio ICMP.