# ICMPv6

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 | Type | Type | Type | Type | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio | Nome messaggio |
| 1 | 1 | 1 | 1 | 1 | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable | Destination Unreachable |
| 2 | 2 | 2 | 2 | 2 | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big | Packet Too Big |
| 3 | 3 | 3 | 3 | 3 | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded | Time Exceeded |
| 4 | 4 | 4 | 4 | 4 | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem | Parameter Problem |
| 128 | 128 | 128 | 128 | 128 | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request | Echo Request |
| 129 | 129 | 129 | 129 | 129 | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply | Echo Reply |
| 130 | 130 | 130 | 130 | 130 | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query | Multicast Listener Query |
| 131 | 131 | 131 | 131 | 131 | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report | Multicast Listener Report |
| 132 | 132 | 132 | 132 | 132 | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done | Multicast Listener Done |
| 133 | 133 | 133 | 133 | 133 | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation | Router Solicitation |
| 134 | 134 | 134 | 134 | 134 | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement | Router Advertisement |
| 135 | 135 | 135 | 135 | 135 | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation | Neighbor Solicitation |
| 136 | 136 | 136 | 136 | 136 | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement | Neighbor Advertisement |
| 137 | 137 | 137 | 137 | 137 | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | Redirect Message | 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 1 destination 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
** code 2: beyond scope of source address
** code 3: address unreachable
** code 4: port unreachable
** code 5: source address failed ingress/egress policy
** code 6: reject route to destination
* Type 2 packet 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 3 time 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 4 parameter 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.