← Назад к вопросам

По какому порту работает icmp

1.0 Junior🔥 153 комментариев
#Сети и протоколы

Комментарии (3)

🐱
deepseek-v3.2PrepBro AI6 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

По какому порту работает ICMP?

ICMP (Internet Control Message Protocol) — это протокол сетевого уровня модели OSI (уровень 3), и он не использует порты в том смысле, в котором их используют транспортные протоколы, такие как TCP или UDP. Понятие «порт» — это абстракция транспортного уровня (уровень 4), предназначенная для мультиплексирования нескольких соединений на одном IP-адресе. ICMP функционирует на более низком уровне и служит для обмена служебными сообщениями об ошибках и статусах в IP-сети, не устанавливая соединений в классическом понимании.

Почему у ICMP нет портов?

Вместо портов ICMP использует два ключевых поля в заголовке для идентификации типа сообщения и его конкретного «контекста»:

  • Тип (Type): Определяет общую категорию сообщения (например, 8 — Echo Request, 0 — Echo Reply, 3 — Destination Unreachable, 11 — Time Exceeded).
  • Код (Code): Уточняет тип сообщения в рамках общей категории. Например, для типа 3 (Destination Unreachable) код 0 означает «сеть недоступна», а код 3 — «порт недоступен».

Для запросов, требующих ответа (как в утилите ping), используется дополнительный механизм:

  • Идентификатор (Identifier): Обычно используется для сопоставления запроса и ответа. В Linux для эхо-запросов часто используется идентификатор процесса (PID) отправившей программы.
  • Номер последовательности (Sequence Number): Позволяет отслеживать несколько запросов в рамках одного сеанса. При выполнении ping -c 5 каждый пакет будет иметь возрастающий номер последовательности.

Таким образом, комбинация полей «Тип» и «Код», а для эхо-запросов также «Идентификатор» и «Номер последовательности», выполняет ту же роль, что и комбинация IP-адрес + порт для TCP/UDP, но на другом уровне стека.

Практический пример: как ping и брандмауэры работают с ICMP

Когда вы запускаете ping ya.ru, происходит следующее:

  1. Ваша система формирует ICMP-пакет типа 8 (Echo Request). В его данные могут быть включены идентификатор и номер последовательности.
  2. Этот пакет инкапсулируется в IP-датаграмму и отправляется на адрес целевого хоста.
  3. Узел-получатель, если он доступен и разрешает ответы, отправляет обратно ICMP-пакет типа 0 (Echo Reply) с теми же данными.
  4. Ваша система по идентификатору и номеру последовательности понимает, что это ответ на её конкретный запрос.

Брандмауэры (например, iptables или nftables) для фильтрации ICMP трафика используют именно эти поля, а не порты.

Пример правил iptables для управления ICMP:

# Разрешить входящие эхо-запросы (позволить другим ping-овать нас)
sudo iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

# Разрешить исходящие эхо-ответы (чтобы отвечать на ping)
sudo iptables -A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT

# Запретить все входящие сообщения "Time Exceeded" (тип 11)
sudo iptables -A INPUT -p icmp --icmp-type time-exceeded -j DROP

Для проверки, какие типы ICMP пропускаются через ваш брандмауэр, можно использовать утилиту nmap:

# Проверка доступности стандартных эхо-запросов (ping)
nmap -PE example.com

# Более агрессивная проверка различных типов ICMP (требует прав суперпользователя)
sudo nmap -sn -PO --send-ip example.com

Специальный случай: перенаправление портов (Port Forwarding) и туннели

Иногда в контексте сетевой администирации возникает путаница, связанная с ICMP туннелированием — техникой, которая инкапсулирует трафик других протоколов (например, TCP) внутри ICMP-пакетов для обхода ограничений. Это исключение, которое подтверждает правило: сам ICMP портов не имеет, но может использоваться как транспорт для данных, которые порты используют. Также некоторые утилиты диагностики, такие как traceroute, могут использовать UDP или TCP с определёнными портами (по умолчанию порты с большими номерами) вместо ICMP для отслеживания пути, что тоже может вызывать путаницу.

Итог: Запомните, что ICMP работает без портов. Для адресации и фильтрации его сообщений используются поля Type и Code в его собственном заголовке. Это фундаментальное отличие от протоколов транспортного уровня, которое важно для корректной настройки сетевого оборудования, брандмауэров и понимания работы диагностических инструментов.

По какому порту работает icmp | PrepBro