The
Internet Control Message Protocol (
ICMP) is one of the core protocols of the
Internet Protocol Suite. It is chiefly used by networked computers'
operating systems to send error messages—indicating, for instance, that a requested service is not available or that a host or router could not be reached.
ICMP relies on
IP to perform its tasks, and it is an integral part of
IP. It differs in purpose from transport protocols such as
TCP and
UDP in that it is typically not used to send and receive data between end systems. It is usually not used directly by user network applications, with some notable exceptions being the
ping tool and
traceroute.
ICMP for
Internet Protocol version 4 (IPv4) is also known as ICMPv4.
IPv6 has a similar protocol,
ICMPv6.
Technical details
Internet Control Message Protocol is part of the
Internet Protocol Suite as defined in RFC 792. ICMP messages are typically generated in response to errors in
IP datagrams (as specified in RFC 1122) or for diagnostic or routing purposes.
ICMP messages are constructed at the IP layer, usually from a normal IP datagram that has generated an ICMP response. IP encapsulates the appropriate ICMP message with a new IP
header (to get the ICMP message back to the original sending host) and transmits the resulting datagram in the usual manner.
For example, every machine (such as an intermediate
router) that forwards an IP datagram has to decrement the
time to live (TTL) field of the IP header by one; if the TTL reaches 0, an ICMP
Time to live exceeded in transit message is sent to the source of the datagram.
Each ICMP message is encapsulated directly within a single IP datagram, and thus, like
UDP, ICMP is
unreliable.
Although ICMP messages are contained within standard IP datagrams, ICMP messages are usually processed as a special case, distinguished from normal IP processing, rather than processed as a normal sub-protocol of IP. In many cases, it is necessary to inspect the contents of the ICMP message and deliver the appropriate error message to the application that generated the original IP packet, the one that prompted the sending of the ICMP message.
Many commonly-used network utilities are based on ICMP messages. The
traceroute command is implemented by transmitting UDP datagrams with specially set IP TTL header fields, and looking for ICMP
Time to live exceeded in transit (above) and "Destination unreachable" messages generated in response. The related
ping utility is implemented using the ICMP "Echo request" and "Echo reply" messages.
ICMP segment structure
Header
The ICMP header starts after bit 160 of the
IP header (unless IP options are used).
- Type - ICMP type as specified below.
- Code - further specification of the ICMP type; e.g. : an ICMP Destination Unreachable might have this field set to 1 through 15 each bearing different meaning.
- Checksum - This field contains error checking data calculated from the ICMP header+data, with value 0 for this field. The algorithm is the same as the header checksum for IPv4.
- ID - This field contains an ID value, should be returned in case of ECHO REPLY.
- Sequence - This field contains a sequence value, should be returned in case of ECHO REPLY.
Padding data
Padding data follows the ICMP header (in
octets):
- The Linux "ping" utility pads ICMP to a total size of 56 bytes in addition to the 8 octet header.
- Windows "ping.exe" pads to a total size of 32 bytes in addition to the 8 octet header.
List of permitted control messages (incomplete list)
(Sources: and
Computer Networking - A Top-Down Approach by Kurose and Ross)
See also