ICMP stands for Internet Control Messaging Protocol. It resides on layer 3 of OSI even though it is carried by IP which also resides on that layer. It is seen as an extension of IP. ICMP is explained in RFC 792.
A helpful reference when dealing with ICMP is reading the header file found in /usr/include/netinet/ip_icmp.h.