Many commonly used network utilities are based on ICMP messages. The ping utility (well known on Unix) is implemented using the ICMP "Echo" and "Echo reply" messages. The related traceroute? command is implemented by transmitting UDP datagrams with manipulated IP Time-to-live header fields and looking for ICMP "Time to live exceeded in transit" and "Destination unreachable" messages in response. Every machine (such as intermediate routers) that handles a packet has to increment the TTL by one.
Each ICMP message is encapsulated directly within a single IP datagram and like with UDP, ICMP does not guarantee delivery.
List of permitted control messages:
0 - Echo Reply
3 - Destination Unreachable
4 - Source Quench
5 - Redirect
8 - Echo Request
9 - Router Advertisement
10 - Router Solicitation
11 - Time Exceeded
12 - Parameter Problem
13 - Timestamp
14 - Timestamp Reply
15 - Information Request
16 - Information Reply
17 - Address Mask Request
18 - Address Mask Reply
(Please complete this list!)
Further reading: [RFC792]