Mention the difference between ARP, RARP and ICMP protocols

What is Address Resolution Protocol (ARP)? What is Reverse Address resolution protocol (RARP)? What is the difference between these two protocols? How does each of these work? Where are these protocols used? What are the drawbacks of RARP? What is the Internet Control Message Protocol (ICMP)? What is it used for?
