Что такое протокол ICMP и для чего он нужен?
Видел ICMP в настройках файрвола и в выводе утилит. Расшифровывается как Internet Control Message Protocol. Но что он реально делает? Это транспортный протокол вроде TCP/UDP или что-то другое?
2 ответа
ICMP (Internet Control Message Protocol) — это служебный протокол сетевого уровня, который используется для передачи сообщений об ошибках и диагностики сети. Это не транспортный протокол: через него не передают пользовательские данные (нет понятия портов, как у TCP/UDP).
ICMP работает «поверх» IP (как бы рядом с TCP/UDP на сетевом уровне) и нужен, чтобы устройства могли сообщать друг другу о проблемах с доставкой пакетов.
Типичные сообщения ICMP:
| Сообщение | Когда возникает |
|---|---|
| Echo Request / Echo Reply | работа ping |
| Destination Unreachable | хост/сеть/порт недостижим |
| Time Exceeded | TTL пакета истёк (на этом работает traceroute) |
| Redirect | роутер подсказывает лучший маршрут |
Простой пример: вы отправили пакет на хост, который выключен. Маршрутизатор, который не смог доставить пакет, отправит вам обратно ICMP-сообщение «Destination Unreachable». Без ICMP вы бы просто сидели и ждали неизвестно чего.
Зачем это вам на практике: команды ping и traceroute целиком построены на ICMP. Когда в файрволе «запрещают пинг» — это как раз режут ICMP Echo.
Важное дополнение по безопасности: иногда ICMP полностью блокируют на файрволе «чтобы не пинговали». Делать это бездумно не стоит — некоторые типы ICMP критичны для нормальной работы сети. Например, ICMP «Fragmentation Needed» участвует в Path MTU Discovery, и если его заблокировать, могут начаться странные зависания соединений с большими пакетами. Так что блокируют обычно только Echo Request, а не весь ICMP целиком.