L'Internet Control Message Protocol versione 6 (ICMPv6) è l'evoluzione nelle reti IPv6 del protocollo ICMP per le reti IPv4. In essa vengono aggiunte nuove funzionalità che nel protocollo precedente erano demandate ad altri livelli protocollari (come ad esempio ARP o IGMP) e tolte altre che, invece, erano poco usate. Come nel caso della versione precedente, l'ICMPv6 viene utilizzato per monitorare lo stato della rete e per inviare pacchetti di gestione e di errore. Essa è descritta nell'RFC 2463.
Struttura del Pacchetto
In figura è mostrata la struttura del pacchetto:
il campo Type indica il tipo del pacchetto ICMPv6
il campo Code indica il codice del messaggio di errore
il campo Checksum è utilizzato per rilevare errori di trasmissione dell'intero pacchetto
il campo Body contiene un messaggio ed è di lunghezza variabile
Il campo Type assume 255 valori possibili, di seguito, per brevità, sono riportati i valori più significativi, per maggiori dettagli consultare l'RFC:
Type
Nome messaggio
1
Destination Unreachable
2
Packet Too Big
3
Time Exceeded
4
Parameter Problem
128
Echo Request
129
Echo Reply
130
Multicast Listener Query
131
Multicast Listener Report
132
Multicast Listener Done
133
Router Solicitation
134
Router Advertisement
135
Neighbor Solicitation
136
Neighbor Advertisement
137
Redirect Message
Messaggi di errore
Come nella versione per le reti IPv4, ICMPv6 viene utilizzato per la segnalazione di errori di trasmissione. Un pacchetto ICMPv6 ha la funzione di segnalazione di errori quando il suo campo type assume un valore che va da 1 a 4; per ogni tipologia di errore il campo code fornisce una maggiore specificità. Viene aggiunto un campo parameter.
Type 1destination unreachable: viene inviato questo messaggio nel caso in cui una destinazione non è raggiungibile, il campo parameter non viene utilizzato.
code 0: no route to destination
code 1: communication with destination administratively prohibited
Type 2packet too big: viene generato questo pacchetto quando le dimensioni dei pacchetti generati da un host superano quelle dell'MTU consentito dalla rete, nel campo parameter viene inserito il massimo valore di MTU consentito dalla rete.
Type 3time exceeded: indica che il pacchetto, nel viaggiare per la rete, ha superato il numero massimo di hop consentiti.
code 0: hop limit exceeded in transit
code 1: fragment reassembly time exceeded
Type 4parameter problem: indica che vi è una incompatibilità di interpretazione dei parametri, il campo parameter contiene l'offset dove si trova il parametro che ha generato l'errore.
code 0: erroneous header field encountered
code 1: unrecognized Next Header type encountered
code 2: unrecognized IPv6 option encountered
Echo
I messaggi di echo, tipicamente inviati mediante il comando ping, servono per verificare la raggiungibilità di un nodo. Questi, analogamente a quanto avviene nel protocollo ICMP, possono essere di due tipi: request e reply, a seconda del valore assunto dal campo type, ovvero, rispettivamente, 128 o 129. I campi assumono i seguenti valori:
type vale
128 nel caso di echo request
129 nel casi di echo reply
code non è utilizzato
identifier è un valore stabilito dal mittente del messaggio di echo a cui il destinatario deve rispondere utilizzando lo stesso valore di identifier; ciò permette di rafforzare la corrispondenza tra request e reply
sequence number è un numero di sequenza deciso dal mittente ed utilizzato dal destinatario nel momento della risposta
data si tratta di dati immessi dal mittente e ricopiati dal destinatario nell'echo di reply
Group Management
L'ICMPv6 viene utilizzato anche per gestire i gruppi multicast, questa funzione è svolta dal protocollo IGMP nelle reti IPv4. Per decidere il gruppo multicast i router o server inviano pacchetti di membership query e gli host appartenenti ad un gruppo rispondono con un messaggio di membership report. Questi ultimi vengono inviati costantemente dai client e per non provocare un appesantimento della rete un campo di maximum response delay indica l'intervallo di invio dei membership report. Nel momento in cui un host abbandona il gruppo multicast, viene inviato un ICMPv6 di termination.