**Internet Control Message Protocol**, skrátene **protokol ICMP**, je jeden z najdôležitejších protokolov internetu. Používajú ho operačné systémy počítačov v sieti na odosielanie chybových správ, napríklad na oznámenie, že požadovaná služba nie je dostupná alebo že potrebný počítač alebo router nie je dosiahnuteľný. ICMP sa svojím účelom líši od TCP a UDP protokolov tým, že sa obvykle nepoužíva sieťovými aplikáciami priamo. Výnimkou je napríklad nástroj ping, ktorý posiela ICMP správy „Echo Request" (a očakáva príjem správy „Echo Reply", aby určil, či je cieľový počítač dosiahnuteľný a ako dlho paketom trvá, než sa dostanú k cieľu a späť.

Technický prehľad
-----------------

Protokol ICMP je definovaný v RFC 792. ICMP správy sa typicky generujú pri chybách v IP datagramoch alebo na diagnostické a routovacie účely. ICMP správy sa konštruujú nad IP vrstvou, obvykle z IP datagramu, ktorý ICMP reakciu vyvolal. IP vrstva patričnú ICMP správu zapuzdrí novou IP hlavičkou (aby sa ICMP správa dostala späť k pôvodnému odosielateľovi) a obvyklým spôsobom vzniknutý datagram odošle. Každý stroj (ako napr. medziľahlé routery), ktorý preposiela IP datagram, musí v IP hlavičke znížiť hodnotu políčka TTL („time to live", „zostávajúca doba života") o číslo 1. Ak TTL klesne na 0 (a datagram nie je určený stroju, ktorý zníženie vykonáva), router prijatý paket zahodí a pôvodnému odosielateľovi datagramu pošle ICMP správu „Time to live exceeded in transit" („počas prenosu vypršala doba života"). Každá ICMP správa je zapuzdrená priamo v jedinom IP datagrame, a tak (ako u UDP) ICMP nezaručuje doručenie.
  
Hoci ICMP správy sú obsiahnuté v štandardných IP datagramoch, ICMP správy sa spracovávajú odlišne od normálneho spracovania protokolov nad IP. V mnohých prípadoch je nutné preskúmať obsah ICMP správy a doručiť patričnú chybovú správu aplikácii, ktorá vyslala pôvodný IP paket, ktorý spôsobil odoslanie ICMP správy k pôvodcovi. Veľa bežne používaných sieťových diagnostických utilít je založených na ICMP správach. Príkaz traceroute je implementovaný odosielaním UDP datagramov so špeciálnou nastavenou životnosťou v TTL políčku IP hlavičky a očakávaním ICMP odozvy „Time to live exceeded in transit" alebo „Destination unreachable" („Cieľ nedosiahnuteľný"). Príbuzná utilita ping je implementovaná použitím ICMP správ „Echo Request" a „Echo Reply".

Najpoužívanejšie ICMP datagramy:

* *Echo Request* - požiadavka na odpoveď; každý prvok v sieti pracujúci na IP vrstve by na túto výzvu mal reagovať. Často to z rôznych dôvodov nie je dodržiavané.
* *Echo Reply* - odpoveď na požiadavku
* *Destination Unreachable* - informácie o nedostupnosti cieľa, obsahuje ďalšiu upresňujúcu informáciu
* *Net Unreachable* - nedostupná cieľová sieť, reakcia smerovača na požiadavku komunikovať so sieťou, do ktorej nepozná cestu
* *Host Unreachable* - nedostupný cieľový stroj
* *Protocol unreachable* - informácie o nemožnosti použiť vybraný protokol
* *Port Unreachable* - informácie o nemožnosti pripojiť sa na vybraný port
* *Redirect* - presmerovanie; používa sa predovšetkým pokiaľ zo siete vedie k cieľu lepšia cesta ako cez defaultnú bránu. Stanice väčšinou nepoužívajú smerovacie protokoly a preto sú informované touto cestou. Funguje tak, že stanica pošle datagram svojej, väčšinou defaultnej, brány, tá ho prepošle správnym smerom a zároveň informuje stanicu o lepšej ceste.
* *Redirect Datagram for the Network* - informuje o presmerovaní datagramov do celej siete
* *Redirect Datagram for the Host* - informuje o presmerovaní datagramov pre jediný stroj
* *Time Exceeded* - vypršal časový limit
* *Time to Live exceeded in Transit* - počas prenosu došlo ku zníženiu TTL na 0 bez toho, aby bol doručený
* *Fragment Reassembly Time Exceeded* - nepodarilo sa zostaviť jednotlivé fragmenty v časovom limite (napríklad pokiaľ dôjde ku strate častí datagramov)

Ostatné datagramy sú používané zriedka, niekedy je používanie ICMP znemožnené zlým nastavením firewallu.