ICMP is used in network management and administration. It is a networking protocol (in IP), as well as a control protocol, hence it is not used for transferring application data but network status.
ICMP is used for the purpose of reporting errors in communication of networking programs as well as checking the availability of remote hosts and network traffic.
The ping utility is the most well known example of the ICMP. It is used for probing remote hosts for response time. It also supports trace routes which are used for catching ‘hops’ between source/destination communications.