Вопрос или проблема
tcpdump сеанса ping показывает следующие две строки:
IP gateway.comp.com > somehost.comp.com: ICMP redirect 10.8.0.10 to host othergateway.comp.com, length 68
IP gateway.comp.com > somehost.comp.com: ICMP 10.8.0.10 protocol 1 port 21475 unreachable, length 68
Я понимаю первое сообщение. Оно просто сообщает somehost
, чтобы не беспокоить основной gateway
пакетами на 10.8.0.10, а направлять их прямо через othergateway
.
Но что означает второе сообщение? Оно приходит через 17 мс и, похоже, связано с первым. Что такое protocol 1 port XXX
в этом контексте? Что именно недоступно? ICMP (=protocol 1) не имеет портов, если мне не изменяет память, так что это означает?
Вероятно, это ICMP контрольное сообщение Тип 3 (недоступен адрес) Код 3 (порт недоступен)
Это означает, что на целевом хосте нет серверного процесса, связанного с этим TCP или UDP портом.
“Одно из правил UDP заключается в том, что если он получает UDP датаграмму, и целевой порт не соответствует порту, который занят каким-либо процессом, UDP отвечает ICMP сообщением о недоступном порте.” – из TCP/IP Illustrated, Stevens.
Почему UDP? Команда ping
традиционно реализована с использованием ICMP запросов эха, но на некоторых платформах некоторые инструменты могут использовать другие протоколы. Например, nmap -sU
Что такое
protocol 1 port XXX
в этом контексте.
Номер протокола 1 – это ICMP. ICMP не использует порты, но использует 16-битный идентификатор, который здесь называется портом
для простоты. (Возможно, программисту было лень делать различие, или пользователям было бы сложнее понять, если бы использовалась метка идентификатор
.)
Поле идентификатора также используется маршрутизаторами NAT для сопоставления ответов с оригинальной сессией NAT, и, конечно, местный IP стек также использует его для маршрутизации ответа эха обратно к процессу, который инициировал запрос, что очень похоже на номер порта транспортного уровня.
Ответ или решение
ICMP (Internet Control Message Protocol) – это протокол, который используется для передачи сообщений об ошибках и информации о состоянии сети. В контексте вашего вопроса, сообщение "ICMP 10.8.0.10 protocol 1 port 21475 unreachable" является частью ICMP-сообщения, отправляемого в ответ на попытку установить связь с адресом 10.8.0.10 по протоколу 1 (ICMP) и порту 21475.
Прежде всего, необходимо уточнить, как интерпретировать элементы этого сообщения:
-
Протокол 1: Поскольку ICMP является протоколом, идентифицируемым как протокол 1 в IP, это указывает на то, что переданное сообщение связано с ICMP.
-
Порт 21475: Несмотря на то, что ICMP сам по себе не использует порты, в этом контексте под "портом" подразумевается более широкий смысл. Сообщение ICMP указывает на то, что данный "порт" относится к UDP или TCP, которые могли бы пытаться использовать данный адрес. Если ICMP сталкивается с пакетом UDP, отправленного на ложный порт (в данном случае 21475), и на стороне назначения нет активного процесса, слушающего на этом порту, то генерируется ICMP-сообщение о недоступности порта.
Очевидно, сообщение об ошибке пришло в ответ на UDP-запрос, поскольку ICMP уведомляет отправителя о том, что на целевом устройстве нет процесса, который бы использовал указанный порт. Это обычное поведение для UDP: если он получает датаграмму, и порт назначения не соответствует активному процессу, читает это как ошибку "порт недоступен".
В результате, ICMP передает сообщение обратно на исходный адрес, тем самым уведомляя его о недоступности данного порта на целевом хосте. Таким образом, сообщение "protocol 1 port 21475 unreachable" означает, что на 10.8.0.10 не существует никакого сервиса, который бы мог обрабатывать пакеты, отправленные на UDP-порт 21475.
Для управления подобными ситуациями в сетях используется NAT (Network Address Translation), который может также ссылаться на эти идентификаторы для корректного маршрутизации ответов. Таким образом, несмотря на технические ограничения, такие как отсутствие явных портов в ICMP, данная информация полезна для диагностики и понимания того, что происходит в сети.