ICMP poszerza funkcje protokołu IP o zarządzanie informacjami i jest z nim związany nierozerwalnie – obydwa protokoły muszą być implementowane razem. Środkiem transportu dla ICMP jest datagram IP. Liczba 58 w polu Następny nagłówek datagramu IPv6 oznacza, że w polu Dane został zakapsułkowany komunikat ICMP. Trasy takich pakietów są wyznaczane podobnie jak wszystkich innych. Ich nadawcą może być ruter, przełącznik, dowolna stacja robocza czy komputer.
Do stałych zadań ICMP należy dostarczanie warstwom wyższym informacji diagnostycznych. ICMP umożliwia sprawdzenie sprawności urządzeń i jakości transmisji, zmianę trasy ramek i kontrolę datagramów, ale bez możliwości korygowania błędów. Nie zajmuje się natomiast informowaniem o błędach w datagramach, których był nadawcą. Do specyficznych funkcji tego protokołu należy oddziaływanie na częstotliwość przesyłania ramek, kiedy tylko stacja nadawcza odbierze żądanie zmiany ich tempa nadawania. Stemple czasowe (timestamps) ICMPv4, nazywane też znacznikami czasowymi, wykorzystuje protokół NTP do synchronizacji zegarów i koordynacji czasu w sieciach. Czas ICMP jest wyrażony w ms, które upłynęły od godziny 24. Funkcje ICMP łatwo rozpoznać po typach i kodach wiadomości. Część komunikatów nie ma kodów.
Protokół ICMP, podobnie jak wiele innych, używa adresów IP, a więc musiał zostać przystosowany do funkcjonowania z IPv6. Ponadto do ICMP był włączony IGMP IPv4. Ogólny format wiadomości ICMPv6 jest taki sam jak format wiadomości ICMPv4, a więc Typ pola, Kod pola i Suma kontrolna.
Duże różnice tkwią w szczegółach:
- w numeracji typów i kodów,
- w liczbie i długości komunikatów.
W CMIPv6 numery typu wiadomości o błędzie są zawarte w przedziale 0–127, a informacyjne 128–255. W ICMPv4 dla obydwu rodzajów komunikatów istnieje jeden przedział liczbowy 0–255. Każda wiadomość ma przypisany typ, ale nie każda musi mieć kod. Dotyczy to obydwu wersji.
- Niektóre typy wiadomości ICMPv6:
1 – odbiorca nieosiągalny (Destination unreachable), RFC 2463;
2 – za długi pakiet (Packet too big), RFC 2463;
3 – przekroczenie czasu (Time exceeded), RFC 2463;
4 – problem z parametrem (Parameter problem), RFC 2463;
128 – żądanie echa (Echo request), RFC2463;
129 – odpowiedź na żądanie echa (Echo reply), RFC 2463;
130 – zapytanie o przynależność do grupy (Group membership query), MC-LIST;
131 – lista grupy (Group membership report), MC-LIST;
132 – redukcja grupy (Group membership termination), MC-LIST;
133 – żądanie rutera (Router solicitation), RFC 2461;
134 – ogłoszenie rutera (Router advertisement), RFC 2461;
135 – żądanie sąsiedztwa (Neighbor Solicitation), RFC 2461;
136 – zgłoszenie sąsiedztwa (Neighbor advertisement), RFC 2461;
137 – przekieruj (Redirect Message), RFC 2461;
141 i 142 – RFC 3122.
- Przykład możliwych zawartości pola Kod w ICMPv6 dla wartości pola Typ = 3 (przekroczenie czasu):
0 – przekroczony limit przeskoków – przejść przez rutery (hop limit exceeded in transit);
1 – przekroczony czas składania fragmentów (fragment reassembly time exceeded).
- Niektóre typy wiadomości ICMPv4:
0 – odpowiedź na żądanie echa (Echo reply), RFC 792;
3 – odbiorca nieosiągalny (Destination unreachable), RFC 792;
4 – komunikat „tłumienie nadawcy” (Source quench), RFC 792;
5 – przekieruj (Redirect), RFC 792;
8 – żądanie echa (Echo request), RFC 792;
9 – ogłoszenie rutera (Router advertisement), RFC1256;
10 – żądanie rutera (Router solicitation); RFC1256;
11 – przekroczenie czasu datagramu (Time exceeded for a datagram), RFC 792;
12 – problem z parametrem (Parameter problem on a datagram), RFC 792;
13 – żądanie znacznika czasu ICMP (Timestamp request), RFC 792;
14 – przesłanie znacznika czasu ICMP (Timestamp reply), RFC 792;
15 – żądanie informacji, RFC 792;
16 – odpowiedź na żądanie informacji, RFC 792;
17 – żądanie maski adresowej ICMP (Address mask request), RFC 950;
18 – odpowiedź na żądanie maski adresowej (Address Mask Reply), RFC 950;
19 – zarezerwowany dla bezpieczeństwa;
30 – Traceroute, RFC 1393;
31 – błąd konwersji datagramu (Datagram Conversion Error), RFC 1475,
40 – komunikat o błędzie wywołanym użyciem IPSec (AH i ESP, zależnie od kodu), RFC 2521;
41–255 – zarezerwowane.
- Przykład możliwych zawartości pola Kod w ICMPv4 dla Typ = 3 (odbiorca nieosiągalny – destination unreachable):
0 – nieosiągalna sieć (net unreachable);
1 – nieosiągalny komputer w sieci (host unreachable);
2 – komputer docelowy nie obsługuje protokołu warstwy wyższej (protocol unreachable);
3 – nieosiągalny port (port unreachable);
4 – datagram nie dotarł do celu, gdyż nie mógł być sfragmentowany (fragmentation needed and DF set);
5 – uszkodzona trasa lub odłączona sieć docelowa (source route failed).
Ponadto za polem Kod znajdzie się Suma kontrolna, a następnie nagłówek datagramu, który wywołał błąd, i 64 bity pola danych (Internet Header + 64 bits of Data Datagram).
CIMP jest opisany w kilku RFC: 792, 790, 1265 i dla IPv6 w RFC 1885, zastąpionym przez RFC 2463. MIB dla grup IPv6 prezentuje RFC 2467.