📝 ICMP Type/Code: что скрывается за “ping не проходит” — 3 июля 2026 г. в 08:00:05.192
📝 ICMP Type/Code: что скрывается за “ping не проходит” 👋 Привет, сетевой друг! ICMP все знают как «пинг», но на самом деле это целый набор сообщений с разными Type и Code, каждое из которых говорит конкретную вещь. 🟣Type 0 и 8 - Echo Reply и Echo Request. Это то, что обычно называют ping. Клиент шлёт Type 8, живой хост отвечает Type 0. Если ответа нет, это ещё не значит что хост мёртв — многие фаерволы просто дропают ICMP целиком из соображений безопасности. 🟣Type 3 - Destination Unreachable, самый информативный тип с кучей Code внутри. Code 0 значит сеть недостижима, Code 1 - хост недостижим, Code 3 - порт недостижим (обычно приходит на UDP, когда порт закрыт). Code 4 отдельно интересен - Fragmentation Needed, приходит когда пакет слишком большой, а бит DF (Don’t Fragment) установлен. 🟣Именно Type 3 Code 4 лежит в основе Path MTU Discovery - механизма, который автоматически находит максимальный размер пакета на всём пути. Если где-то по дороге роутер не может протолкнуть пакет целиком, он не режет его, а шлёт обратно ICMP с этим кодом, отправитель уменьшает размер и пробует снова. 🟣Type 11 - Time Exceeded, ровно на этом построен traceroute. Каждый транзитный роутер уменьшает TTL на 1, и когда TTL доходит до нуля, роутер дропает пакет и шлёт обратно Type 11. Traceroute просто шлёт пакеты с TTL=1, 2, 3 и так далее, собирая ответы от каждого хопа по пути. 🟣Type 5 - Redirect, роутер говорит хосту «есть путь короче, используй другой шлюз». В современных сетях это часто отключают из соображений безопасности, потому что атакующий в том же сегменте может слать поддельные Redirect и перенаправлять трафик через себя. 🟣 Смотрим ICMP в трафике: tcpdump -i eth0 icmp -nn В выводе сразу видны type и code - например, ICMP time exceeded in-transit это Type 11, а ICMP net 10.0.0.5 unreachable - need to frag, mtu 1400 это классический Type 3 Code 4 с указанием реального MTU которое надо использовать. 🤖Бесплатный ChatGPT

