Anche lo Internet Control Message Protocol ha subito revisioni ed il nuovo ICMP e' incompatibile con la versione precedente.
Per identificarlo, il nuovo ICMP ha versione 2, mentre il vecchio aveva versione 1.
Ogni messaggio ICMP consiste dei campi tipo, codice, checksum e di un campo dati di lunghezza variabile.
Il campo checksum copre sia il pacchetto ICMP stesso che i campi fissi della testata IP, secondo una modalita' standard di calcolo di IPv6.
Il formato del campo corpo e il campo codice sono variabili a seconda del tipo.
Sono definiti 14 tipi diversi.
I pacchetti ICMP possono venire inviati al mittente da un router intermedio che scarti un pacchetto, con l'eccezione che non vengono mai inviati per notificare la perdita di un altro pacchetto ICMP.
Vi sono quattro casi in cui un pacchetto viene scarato ed emesso un messaggio ICMP:
In ciascuno di questi casi il formato del messaggio ICMP e' simile.
I dati consistono in un Parametro seguito dai primi 576 byte del pacchetto originale scartato.
Il parametro e' settato azero. I codici indicano:
Il campo codice e' settato a zero. Il parametro contiene la dimensione del MTU per il salto successivo che e' fallito.
E' da notare che questo tipo di messaggio ICMP viene usato nella fase di scoperta del Path MTU. Il mittente invia un pacchetto inizialmente grosso, ma di dimensione via via calante al ricevere degli errori ICMP di questo tipo.
l parametro viene posto a zero. Il codice indica:
Il tempo di riassemblaggio pacchetti e' un timeout per dar tempo a frammenti successivi al primo di arrivare a destinazione e dovrebbe essere dell'ordine di 1 o 2 minuti.
Il parametro e' un puntatore che identifica lo offset del byte che ha causato il problema.
Il codice indica:
I messaggi ICMP Echo Request ed Echo Reply hanno lo stesso formato.
Il codice e' settato a zero. Il richiedente puo' imporre un valore al campo Identificatore ed il rispondente deve ripetere lo stesso valore. Il numero di sequenza e' un intero incrementato in sequenza.