Destination Unreachable
Destination Unreachable — это служебное сообщение (ICMP-пакет) в сетях, работающих по протоколу IPv4, которое отправляется отправителю пакета, когда маршрутизатор или хост назначения не может доставить пакет по указанному адресу. Сообщение относится к типу 3 протокола ICMP (Internet Control Message Protocol) и используется для информирования источника о недоступности конечного узла, сети, порта или о необходимости фрагментации. В протоколе IPv6 аналогичная функция выполняется сообщением типа 1 ICMPv6.
История и стандартизация
Протокол ICMP был впервые определён в RFC 792 (1981 год) как неотъемлемая часть стека протоколов TCP/IP. Сообщение Destination Unreachable (тип 3) было включено в первоначальную спецификацию. В последующих RFC, таких как RFC 1122 (1989 год) и RFC 1812 (1995 год), были уточнены коды ошибок и правила обработки этих сообщений. В RFC 4443 (2006 год) была определена аналогичная функциональность для IPv6 — сообщение ICMPv6 типа 1, также называемое Destination Unreachable.
Структура сообщения
Сообщение Destination Unreachable имеет фиксированную структуру, общую для всех ICMP-пакетов:
- Тип (Type) — 8 бит, для IPv4 всегда равен 3.
- Код (Code) — 8 бит, указывает конкретную причину недоступности.
- Контрольная сумма (Checksum) — 16 бит, для проверки целостности.
- Неиспользуемое поле (Unused) — 32 бита, заполняется нулями (в некоторых кодах может содержать дополнительную информацию).
- Тело сообщения — содержит заголовок и первые 8 байт полезной нагрузки исходного пакета, который не удалось доставить. Это позволяет отправителю идентифицировать проблемный пакет.
Коды ошибок (IPv4)
Поле Code (код) в сообщении Destination Unreachable может принимать следующие значения:
| Код | Значение | Описание |
|---|---|---|
| 0 | Network unreachable | Сеть назначения недоступна (обычно из-за отсутствия маршрута в таблице маршрутизации). |
| 1 | Host unreachable | Хост назначения недоступен (например, из-за отказа ARP-запроса или отключения узла). |
| 2 | Protocol unreachable | Протокол, указанный в заголовке IP-пакета, не поддерживается на узле назначения. |
| 3 | Port unreachable | Порт назначения (UDP/TCP) закрыт или не прослушивается на узле. |
| 4 | Fragmentation needed and DF set | Пакет требует фрагментации, но флаг Don't Fragment (DF) установлен в заголовке IP. |
| 5 | Source route failed | Источник указал маршрут (опция Source Route), который не может быть выполнен. |
| 6 | Destination network unknown | Сеть назначения неизвестна (в отличие от кода 0, маршрутизатор не имеет информации о сети). |
| 7 | Destination host unknown | Хост назначения неизвестен (например, не может быть разрешён по MAC-адресу). |
| 8 | Source host isolated | Исходный хост изолирован (устаревший код, редко используется). |
| 9 | Communication with destination network administratively prohibited | Сеть назначения заблокирована административными правилами (например, ACL). |
| 10 | Communication with destination host administratively prohibited | Хост назначения заблокирован административно. |
| 11 | Destination network unreachable for type of service | Сеть недоступна для запрошенного типа обслуживания (TOS). |
| 12 | Destination host unreachable for type of service | Хост недоступен для запрошенного TOS. |
| 13 | Communication administratively prohibited (RFC 1812) | Административный запрет на связь (обобщённый код). |
| 14 | Host precedence violation | Нарушение приоритета хоста (используется в военных сетях). |
| 15 | Precedence cutoff in effect | Действует ограничение приоритета (пакет отброшен из-за низкого приоритета). |
Применение и значение
Диагностика сетевых проблем
Сообщения Destination Unreachable являются ключевым инструментом для выявления неисправностей в сети. Утилиты, такие как ping и traceroute, интерпретируют эти сообщения для определения точки отказа. Например, если ping получает ответ с кодом 1 (Host unreachable), это указывает, что маршрутизатор, ближайший к цели, не может установить связь с хостом.
Обнаружение закрытых портов
Код 3 (Port unreachable) используется в сканировании портов (например, с помощью Nmap) для определения, какие порты на целевом узле закрыты. Если на UDP-порт отправляется пакет, а в ответ приходит ICMP-сообщение с кодом 3, это означает, что порт не прослушивается.
Контроль фрагментации
Код 4 (Fragmentation needed and DF set) играет важную роль в механизме Path MTU Discovery (PMTUD). Когда маршрутизатор не может передать пакет без фрагментации, а флаг DF установлен, он отправляет это сообщение отправителю, указывая максимальный размер MTU (Maximum Transmission Unit) на данном участке пути. Отправитель уменьшает размер пакета, чтобы избежать фрагментации.
Ограничения и критика
- Отсутствие гарантии доставки: Сообщения ICMP, включая Destination Unreachable, не гарантируют доставку. Если сеть перегружена или маршрутизатор перегружен, сообщение может быть потеряно.
- Возможность злоупотребления: Злоумышленники могут подделывать (спуфить) сообщения Destination Unreachable, чтобы нарушить связь между узлами (например, атака типа ICMP flood или отправка ложных сообщений о недоступности порта).
- Ограниченная информация: Сообщение содержит только первые 8 байт полезной нагрузки исходного пакета, что может быть недостаточно для точной идентификации приложения-отправителя в случае сложных протоколов.
- Игнорирование на некоторых узлах: Из соображений безопасности некоторые операционные системы (например, Windows, Linux с настройками брандмауэра) могут игнорировать или блокировать входящие ICMP-сообщения, включая Destination Unreachable, что снижает эффективность диагностики.
Примеры использования
Пример 1: Недоступность порта
Пользователь пытается подключиться к веб-серверу на порту 80, но служба не запущена. Хост назначения отправляет ICMP-пакет с типом 3 и кодом 3 (Port unreachable). Клиент получает это сообщение и может выдать ошибку «Connection refused».
Пример 2: Проблема с маршрутизацией
Маршрутизатор получает пакет для сети 192.168.5.0/24, но в его таблице маршрутизации нет соответствующей записи. Он отправляет отправителю ICMP-пакет с типом 3 и кодом 0 (Network unreachable). Отправитель может использовать эту информацию для обновления своей таблицы маршрутизации или уведомления пользователя.
Интересные факты
- Сообщение Destination Unreachable с кодом 4 (Fragmentation needed and DF set) часто используется в протоколе PMTUD, который является обязательным для IPv6 (в IPv6 маршрутизаторы не фрагментируют пакеты, а только отправляют ICMPv6-сообщение об ошибке).
- В некоторых реализациях (например, Cisco IOS) при отправке сообщения Destination Unreachable маршрутизатор может ограничивать скорость их генерации (rate-limiting), чтобы предотвратить перегрузку сети.
- Сообщения с кодами 0 и 1 исторически считаются наиболее распространёнными в Интернете, так как они часто возникают при сбоях маршрутизации или отключении узлов.
Источники
- RFC 792 — Internet Control Message Protocol (1981)
- RFC 1122 — Requirements for Internet Hosts — Communication Layers (1989)
- RFC 1812 — Requirements for IP Version 4 Routers (1995)
- RFC 4443 — Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification (2006)
- Stevens, W. Richard. TCP/IP Illustrated, Volume 1: The Protocols. Addison-Wesley, 1994.
- Comer, Douglas E. Internetworking with TCP/IP, Volume 1: Principles, Protocols, and Architecture. Prentice Hall, 2006.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →