Internet Control Message Protocol version 6 (ICMPv6) is the implementation of the Internet Control Message Protocol (ICMP) for Internet Protocol version 6 (IPv6) defined in RFC 4443.ICMPv6 is an integral part of IPv6 and performs error reporting and diagnostic functions (e.g., ping), and has a framework for extensions to implement future changes.
Several extensions have been published, defining new ICMPv6 message types as well as new options for existing ICMPv6 message types. Neighbor Discovery Protocol (NDP) is a node discovery protocol in IPv6 which replaces and enhances functions of ARP. Secure Neighbor Discovery Protocol (SEND) is an extension of NDP with extra security. Multicast Router Discovery (MRD) allows discovery of multicast routers.
Technical details
ICMPv6 messages may be classified into two categories: error messages and information messages. ICMPv6 messages are transported by IPv6 packets in which the IPv6 Next Header value for ICMPv6 is set to 58.
Packet format
The ICMPv6 packet consists of a header and the protocol payload. The header contains only three fields: type (8 bits), code (8 bits), and checksum (16 bits). type specifies the type of the message. Values in the range from 0 to 127 (high-order bit is 0) indicate an error message, while values in the range from 128 to 255 (high-order bit is 1) indicate an information message. The code field value depends on the message type and provides an additional level of message granularity. The checksum field provides a minimal level of integrity verification for the ICMP message.
ICMPv6 packet
Bit offset | 0–7 | 8–15 | 16–31 |
---|---|---|---|
0 | Type | Code | Checksum |
32 | Message body |
Types of ICMPv6 messages
Type | Code | ||
---|---|---|---|
Value | Meaning | Value | Meaning |
ICMPv6 Error Messages | |||
1 | Destination Unreachable | 0 | no route to destination |
1 | communication with destination administratively prohibited | ||
2 | beyond scope of source address | ||
3 | address unreachable | ||
4 | port unreachable | ||
5 | source address failed ingress/egress policy | ||
6 | reject route to destination | ||
7 | Error in Source Routing Header | ||
2 | Packet Too Big | 0 | |
3 | Time Exceeded | 0 | hop limit exceeded in transit |
1 | fragment reassembly time exceeded | ||
4 | Parameter Problem | 0 | erroneous header field encountered |
1 | unrecognized Next Header type encountered | ||
2 | unrecognized IPv6 option encountered | ||
100 | Private experimentation | ||
101 | Private experimentation | ||
127 | Reserved for expansion of ICMPv6 error messages | ||
ICMPv6 Informational Messages | |||
128 | Echo Request | 0 | |
129 | Echo Reply | 0 | |
130 | Multicast Listener Query | 0 | There are two subtypes of Multicast Listener Query messages:
These two subtypes are differentiated by the contents of the Multicast Address field, as described in section 3.6 of RFC 2710 |
131 | Multicast Listener Report | 0 | |
132 | Multicast Listener Done | 0 | |
133 | Router Solicitation (NDP) | 0 | |
134 | Router Advertisement (NDP) | 0 | |
135 | Neighbor Solicitation (NDP) | 0 | |
136 | Neighbor Advertisement (NDP) | 0 | |
137 | Redirect Message (NDP) | 0 | |
138 | Router Renumbering | 0 | Router Renumbering Command |
1 | Router Renumbering Result | ||
255 | Sequence Number Reset | ||
139 | ICMP Node Information Query | 0 | The Data field contains an IPv6 address which is the Subject of this Query. |
1 | The Data field contains a name which is the Subject of this Query, or is empty, as in the case of a NOOP. | ||
2 | The Data field contains an IPv4 address which is the Subject of this Query. | ||
140 | ICMP Node Information Response | 0 | A successful reply. The Reply Data field may or may not be empty. |
1 | The Responder refuses to supply the answer. The Reply Data field will be empty. | ||
2 | The Qtype of the Query is unknown to the Responder. The Reply Data field will be empty. | ||
141 | Inverse Neighbor Discovery Solicitation Message | 0 | |
142 | Inverse Neighbor Discovery Advertisement Message | 0 | |
143 | Multicast Listener Discovery (MLDv2) reports (RFC 3810) | ||
144 | Home Agent Address Discovery Request Message | 0 | |
145 | Home Agent Address Discovery Reply Message | 0 | |
146 | Mobile Prefix Solicitation | 0 | |
147 | Mobile Prefix Advertisement | 0 | |
148 | Certification Path Solicitation (SEND) | ||
149 | Certification Path Advertisement (SEND) | ||
151 | Multicast Router Advertisement (MRD) | ||
152 | Multicast Router Solicitation (MRD) | ||
153 | Multicast Router Termination (MRD) | ||
155 | RPL Control Message | ||
200 | Private experimentation | ||
201 | Private experimentation | ||
255 | Reserved for expansion of ICMPv6 informational messages |
Note that the table above is not comprehensive. The current complete list of assigned ICMPv6 types can be found at this link: IANA: ICMPv6 Parameters.
Operation
Message checksum
ICMPv6 provides a minimal level of message integrity verification by the inclusion of a 16-bit checksum in its header. The checksum is calculated starting with a pseudo-header of IPv6 header fields according to the IPv6 standard, which consists of the source and destination addresses, the packet length and the next header field, the latter of which is set to the value 58. Following this pseudo header, the checksum is continued with the ICMPv6 message in which the checksum is initially set to zero. The checksum computation is performed according to Internet protocol standards using 16-bit ones' complement summation, followed by complementing the checksum itself and inserting it into the checksum field. Note that this differs from the way it is calculated for IPv4 in ICMP, but is similar to the calculation done in TCP.
ICMPv6 pseudo-header
Bit offset | 0 - 7 | 8–15 | 16–23 | 24–31 |
---|---|---|---|---|
0 | Source address | |||
32 | ||||
64 | ||||
96 | ||||
128 | Destination address | |||
160 | ||||
192 | ||||
224 | ||||
256 | ICMPv6 length | |||
288 | Zeros | Next header |
Message processing
When an ICMPv6 node receives a packet, it must undertake actions that depend on the type of message. The ICMPv6 protocol must limit the number of error messages sent to the same destination to avoid network overloading. For example, if a node continues to forward erroneous packets, ICMP will signal the error to the first packet and then do so periodically, with a fixed minimum period or with a fixed network maximum load. An ICMP error message must never be sent in response to another ICMP error message.