← Сеть: основы
10 мин · просто · Урок 9 из 13

ICMP: ping, traceroute и служебные сообщения

Что возит ICMP, как устроены ping и traceroute, почему блокировать ICMP целиком вредно.

Служебный протокол, а не транспорт

ICMP (Internet Control Message Protocol) не переносит данные приложений. У него нет портов, и сокет под него не открывают. Его работа — служебные сообщения о судьбе IP-пакетов: «адресат недостижим», «время жизни истекло», «я живой».

Главные типы сообщений:

ping

ping шлёт echo request и меряет время до echo reply:

$ ping -c 3 10.0.0.5
64 bytes from 10.0.0.5: icmp_seq=1 ttl=63 time=0.41 ms
64 bytes from 10.0.0.5: icmp_seq=2 ttl=63 time=0.38 ms
64 bytes from 10.0.0.5: icmp_seq=3 ttl=63 time=0.40 ms

Ping отвечает на вопрос «жив ли хост и какая до него задержка». Но молчание не доказывает, что хост мёртв: echo часто режут файрволом, при этом сервис на TCP-порту работает. Проверил ping, проверь и порт.

traceroute

У каждого IP-пакета есть TTL (time to live): счётчик, который каждый маршрутизатор уменьшает на единицу. Дошёл до нуля, и пакет выбрасывается, а отправителю летит ICMP time exceeded.

traceroute пользуется этим намеренно: шлёт пакеты с TTL=1, потом TTL=2 и так далее. Каждый следующий маршрутизатор по пути убивает свой пакет и выдаёт себя ответом time exceeded. Так строится список узлов до цели.

$ traceroute -n izidevops.com
 1  192.168.1.1     0.8 ms
 2  10.20.0.1       3.1 ms
 3  * * *
 4  5.35.11.49     12.4 ms

Строка * * * — узел, который не шлёт time exceeded. Это нормально и не означает обрыв: пакеты сквозь него проходят.

Почему нельзя блокировать весь ICMP

Соблазн «запретить ICMP, чтобы нас не пинговали» ломает больше, чем защищает. Через ICMP работает Path MTU Discovery: если по пути есть звено с меньшим MTU, маршрутизатор сообщает об этом ICMP-сообщением fragmentation needed. Заблокировали его, и большие пакеты молча пропадают.

Выглядит это как мистика: ping ходит, маленькие запросы работают, а большой POST или git push зависает навсегда. Если нужно спрятаться от ping, режь именно echo request, а не весь протокол.

Что важно запомнить

ICMP — служебные сообщения об IP-пакетах, не транспорт данных и без портов.

ping = echo request + echo reply. Молчание ping не доказывает, что хост мёртв.

traceroute строит маршрут на TTL и ответах time exceeded; * * * — узел молчит, но трафик пропускает.

Полная блокировка ICMP ломает Path MTU Discovery: большие пакеты начинают молча теряться.

В следующем уроке — NAT: как приватная сеть выходит в интернет через один адрес.

Дрилл · вопросы как на собесе

Проверь себя без подсказок

Сформулируй ответ вслух или письменно, потом раскрой и честно отметь: знал или нет.

01

Что такое ICMP?

NET-015

Прошли материал до конца? Отметьте урок пройденным.