Internet Control Message Protocol

**ICMP** (англ. **Internet Control Messageing Protocol**) e еден од главните протоколи од мрежниот слој од OSI референтниот модел кој обезбедува механизам за рекламирање.Во суштина, овој протокол се користи од мрежните уреди,како насочувачите за да се испратат пораки кои индицираат на пример, дека бараната услуга не е достапна или дека не може да се стигне до домаќин или насочувач . It is assigned protocol number 1.**ICMP** протоколот исто така може да се користи и за препраќање на пораки за пребарување.**ICMP** се разликува од транспортните протоколи како што се TCP и UDP во тоа што не се користи вообичаено за размена на податоци меѓу системи ниту пак е користен од страна на кориснички мрежни апликации(со исклучок на некои дијагностички алатки како ping или treceroute )
**ICMP** за Internet Protocol верзија 4 е познат како ICMPv4. IPv6 слично има протокол ICMPv6.

## Технички детали

ICMP протоколот е дел од  TCP/IP,како што е дефинирано во RFC 792.ICMP пораките  обично се користат за дијагностички цели или се генерирани од  како одговор на грешки во извршување на IP операции.ICMP пораките се насочуваат кон изворната IP-адреса на оригиналниот пакет.
На пример, секој уред (како еден просечен насочувач ) препраќајќи еден IP датаграм прво го декреметнира time to leave полето ( ТТL ) во IP заглавјето за еден.Ако резултантната вредност во полето TTL  е 0 пакетот се отфрла и  ICMP Time To Live exceeded in transit порака се испраќа до изворната адреса.
Иако ICMP пораките се содржани во стандардните IP пакети ,ICMP пораките обично се обработувани како посебен случај ,различно од нормалната IP обработка. Во многу случаи потребно е да се изврши увид во содржината на ICMP пораката и да се достави соодветната порака( error-message ) до апликацијата која го генерирала оригиналниот IP пакет,односно таа апликација која го пратила пакетот што поттикнал испраќање на ICMP порака.
Многу често користени мрежни услуги се засновани на ICMP пораки.Тraceroute командата е имплементирана преку пренесување на IP датаграм со специјално поставени IP TTL полиња од заглавјето, и чекање  ICMP Time to live *exceeded in transit*  и "*Destination unreachable*" пораки генерирани како одговор.Слично и ping услугата е имплементирана преку  ICMP "Echo request" и "Echo reply" пораки.

## ICMP структура на сегмент
### Заглавје
**ICMP** заглавјето започнува по IPv4 заглавјето и се идентификува како протокол број ‘1’.Сите ICMP пакети 8-бајтно заглавје.Првите 4 бајти од заглавјето се доследни.Првиот бајт е за типот на ICMP.Вториот бајт е за ICMP кодот.Третиот и чевртиот бајт се проверка(checksum) на целата ICMP порака.Содржината во останатите 4 бајти од заглавјето е различна и зависи од ICMP типот и кодот.
ICMP пораките за грешка (error message)  содржат податочна секција што вклучува цело IP заглавје плус првите 8 бајти податоци од IP пакетот што генерирал ICMP порака.Така ICMP пакетот се енкапсулира во нов IP пакет.

* 	**Type поле** – ICMP тип.
* 	**Code поле** – Поттип од дадениот тип.
* 	**Checksum поле**– Податоци за проверка на грешка
* 	**Останат дел од заглавјето** – 4-бајтно поле кое зависи од типот и поттипот на ICMP.

## Контролни пораки

### Source quench

Со ''source quench'' се испраќа барање до испраќачот да ја намали ратата на пораки пратени до некој насочувач или домаќин.Ваков тип на порака може да биде генерирана од некој насочувач или домаќин(хост) доколку нема доволно простор во баферот за да се обработуваат сите пораки, или доколку баферот а насочувачот или хостот се доближува до својот лимит.
Податоците од еден домаќин до некој насочувач на мрежата се праќаат со големи брзини.Иако насочувачот има можност за баферирање на податоците, баферирањето е лимитирано до одреден степен.Насочувачот не може да прими повеќе податоци отколку што има место во баферот и затоа ги отфрла сите пакети што доаѓаат во моментот кога баферот е исполнет,сè додека не се ослободи место во баферот да се примат истите.Но бидејќи не постои механизам за потврдување на примените пакети (acknowledgement) испраќачот нема да знае дали податоците се примени успешно.Затоа со source quench механизмот се овозможува насочувачот да увиди поголема рата на примени пакети од изворот од онаа која што е граница на баферот , и се испраќа ICMP порака до испраќачот да ја намали ратата на испраќање. Source quench ICMP пораката ја има улогата на контрола на проток на мрежно ниво.

Каде:
:**Type** полето мора да биде поставено на 4.
:**Code** полето мора да биде поставено на 0.

### Redirect
Со *redirect request* пораката се побарува податочните пакети да бидат испраќани по алтернативна патека.ICMP **redirect** е механизам за насочувачите да пренесуваат насочувачки информации до хостовите.ICMP redirect пораката ги информира хостовите(домаќините) да ги ажурираат своите насочувачки информации(да испраќаат на алтернативни патеки).

Каде:
:**Type** полето мора да биде поставено на 4.
:**Code** полето специфицира причина за промена на насочувачките информации.

### Time exceed
*Time exceed* е порака генерирана да го извести изворот за отфрлениот пакет од причини што ТТL полето достигнало вредност нула.

Каде:
:**Type** полето мора да биде поставено на 11.
:**Code** полето специфицира причина за отфрлањето на пакетот.

### Timestamp
*[[Тimestamp]]* пораката се користи за синхронизација.

Kaде:
:**Type** полето мора да биде поставено на 13.
:**Code** полето мора да биде поставено на 0.

### Destination unreachable
*[[Destination unreachable]]* порака се користи за да го информира клиентот дека одредиштето е недостапна од некоја причина.Како причини за генерирање на оваа порака се јавуваат:  не постои физичка врска до дестинациската адреса ( растојанието е бесконечно(анг. *[[infinity]]*.) ), протоколот или портата не се активни од некоја причина,податоците мораат да се фрагметираат а вклучено е полето “*don’t fragment*”.

Kaде:
:**Type** полето мора да биде поставено на 3.
:**Code** полето специфицира типот на грешка која настанала,и може да биде едно од следните:
::

## Поврзано

* ICMP tunnel
* ICMP hole punching
* ICMPv6
* IRDP
* PMTU blackhole
* Pathping
* Path MTU Discovery
* Ping
* Smurf attack
* TCP

## Надворешни врски

* RFCs
** RFC 792, *Internet Control Message Protocol*
** RFC 950
** RFC 1016 - Something a Host Could Do with Source Quench: The Source Quench Introduced Delay (SQuID)
** RFC 1122, *Requirements for Internet Hosts – Communication Layers*
** RFC 1716, *Towards Requirements for IP Router*
** RFC 1812, *Requirements for IP Version 4 Routers*
* IANA ICMP parameters
* IANA protocol numbers
* Explanation of ICMP Redirect Behavior

## Наводи