ICMP расшифровывается как Internet Control Message Protocol. Этот протокол не является транспортным, его относят к уровню IP.

ICMP-пакет устроен так:

Type определяет, что есть в пакете, он принимает 15 значений. Типы ICMP-пакетов можно разделить на 3 группы:
- Request (запрос)
- Reply (ответ)
- Сообщение об ошибке
Code иногда дополняет информацию о типе пакета.
Checksum – число, являющееся дополнением всего ICMP-пакета (т.е. суммы всех 16-битных чисел пакета) до 111...1. Это используется для проверки, добрался ли пакет без изменений.
ICMP может заниматься такими задачами, как, например, проверкой, существует ли указанный для IP-пакета путь. Далее будет приведено 3 примера использования ICMP-пакетов.
Обмен текущим временем
С помощью ICMP-пакетов компьютеры могут обмениваться текущим временем, сверять часы. Для этого используются ICMP-пакеты с type 13 (запрос времени) и 14 (ответ на этот запрос). Такой ICMP-пакет состоит из 20-ти байт:

Время отсчитывается в секундах с полуночи. С помощью данных, полученных в таком пакете, можно точно определить текущее время.
Сообщение об ошибке доставки UDP-пакета
Если компьютер получил UDP-пакет, адресованный на порт, который никем не используется, то обратно посылается ICMP-пакет с type 3 и code 3. Type 3 означает, что произошла ошибка, а code 3 указывает, какая именно. Такой ICMP-пакет устроен так:

После получения такого сообщения компьютер может выдать сообщение типа No Route to Host, Network unreachable или Connection refused.
Ping
Ping – программа, используемая для проверки, существует ли связь между компьютерами и насколько она быстрая. Для этого используется type 8 (echo запрос), на него требуется отозваться, в ответе type 0 (echo ответ). Получив команду на ping-запрос, компьютер начинает посылать ICMP-пакеты с type 8 на указанный адрес, а компьютер, которому это адресовано, должен ответить то же самое с type 0. В полученном пакете указано время доставки пакета.