ICMP, ping и traceroute: TTL, Hop Limit, Path MTU и диагностика сети
Ping отвечает, а сайт не открывается? В traceroute появились звёздочки? Маленькие пакеты проходят, а VPN или HTTPS зависают на больших данных? Разбираем ICMP как служебный протокол IP, а не просто «тот, которым пингуют».
Проверяет ICMP Echo и измеряет round-trip time. Он не проверяет TCP-порт, DNS, TLS и само приложение.
Использует ограничение числа переходов и ответы Time Exceeded, чтобы приблизительно показать путь до назначения.
Максимальный IP-пакет, который проходит весь путь без необходимости фрагментации на промежуточном участке.
Что такое ICMP и почему это не «порт для ping»
ICMP - служебный протокол интернет-уровня. Он используется для передачи диагностических сообщений и сообщений об ошибках, связанных с обработкой IP-пакетов. Для IPv4 базовая спецификация ICMP описана в RFC 792. Для IPv6 используется ICMPv6, определённый в RFC 4443.
ICMP не работает поверх TCP или UDP и не использует номера портов TCP/UDP. В IPv4 ICMP имеет номер IP-протокола 1. В IPv6 ICMPv6 обозначается значением Next Header 58.
В гайде про OSI и TCP/IP разобрано место ICMP в сетевом стеке. А отличие портов TCP и UDP от IP-адресов подробно рассмотрено в материале про TCP, UDP, порты и сокеты.
ICMP - это не только Echo Request и Echo Reply
Ping использует Echo Request и Echo Reply, но ICMP нужен не только для проверки доступности. Он также сообщает о недостижимости, истечении TTL, слишком большом пакете и других сетевых ситуациях.
| Задача | IPv4 ICMP | ICMPv6 |
|---|---|---|
| Эхо-запрос | Echo Request, Type 8 | Echo Request, Type 128 |
| Эхо-ответ | Echo Reply, Type 0 | Echo Reply, Type 129 |
| Назначение недоступно | Destination Unreachable, Type 3 | Destination Unreachable, Type 1 |
| Пакет слишком большой | Destination Unreachable, Code 4 в механизме PMTUD | Packet Too Big, Type 2 |
| Исчерпан TTL / Hop Limit | Time Exceeded, Type 11 | Time Exceeded, Type 3 |
Тип и код важны при анализе захвата трафика. Сообщение «Destination Unreachable» само по себе ещё не говорит, что именно недоступно: сеть, узел, порт, маршрут или другой элемент. Нужно смотреть конкретный тип, код и исходный пакет, к которому относится ошибка.
Как работает ping
Обычный ping отправляет ICMP Echo Request и ждёт соответствующий Echo Reply. В ответе можно измерить round-trip time, то есть время прохождения от отправителя до назначения и обратно.
Microsoft описывает Windows ping именно как проверку IP-связности с помощью ICMP Echo Request/Echo Reply. Это хороший инструмент первого уровня диагностики, но его результат нужно правильно интерпретировать.
Что обычно показывает ping
- разрешилось ли имя в IP-адрес, если указано доменное имя;
- получен ли ICMP Echo Reply;
- round-trip time для каждого ответа;
- сколько запросов отправлено, получено и потеряно;
- TTL или Hop Limit, оставшийся в пришедшем ответе.
Что ping действительно доказывает, а что нет
| Результат | Что можно заключить | Чего заключать нельзя |
|---|---|---|
| Ping до IP проходит | Есть двусторонний путь для этих ICMP Echo-сообщений | Что открыт TCP 443, работает DNS, HTTPS, SMB или другое приложение |
| Ping до имени проходит | Имя разрешилось и ICMP-ответ пришёл | Что приложение на этом имени работает корректно |
| Ping не проходит | Echo Reply не получен | Что узел обязательно выключен или маршрут отсутствует |
| Ping быстрый | RTT ICMP-проб невелик | Что высокая пропускная способность или нет очередей под нагрузкой |
| 0% потерь | В данной короткой серии ответы получены | Что потерь нет в другое время или для реального TCP/UDP-трафика |
Некоторые серверы, firewall и провайдерские устройства фильтруют или ограничивают ICMP Echo, но пропускают обычный TCP/UDP-трафик. Поэтому «не пингуется» не равно «не работает».
И наоборот, успешный ping не означает, что нужный сервис доступен. Для проверки TCP-порта в Windows полезнее Test-NetConnection host -Port 443, а работу конкретного приложения нужно проверять его собственным протоколом.
Что такое TTL в IPv4 и Hop Limit в IPv6
Поле TTL в IPv4 исторически называется Time To Live. На практике при маршрутизации оно работает прежде всего как ограничитель количества переходов: маршрутизатор уменьшает значение перед пересылкой пакета. Когда значение исчерпано, пакет отбрасывается и обычно формируется ICMP Time Exceeded.
В IPv6 это поле называется точнее: Hop Limit. RFC 8200 определяет его как 8-битное значение, уменьшаемое на единицу каждым узлом, который пересылает пакет.
Зачем TTL вообще нужен
Без ограничения пакет при ошибке маршрутизации мог бы ходить по петле очень долго. TTL/Hop Limit даёт пакету конечный «запас переходов» и позволяет остановить такой трафик.
Как tracert и traceroute строят маршрут
Traceroute использует TTL/Hop Limit специально. Первая проба отправляется с ограничением 1, следующая с 2, затем 3 и так далее. Каждый промежуточный маршрутизатор, на котором лимит исчерпывается, может вернуть сообщение Time Exceeded. По этим ответам инструмент собирает последовательность hops.
Первый маршрутизатор уменьшает TTL до нуля и возвращает Time Exceeded.
Пакет проходит первый маршрутизатор и завершается на втором.
Лимит постепенно увеличивается, пока проба не достигнет назначения или заданного максимума.
Windows tracert использует ICMP Echo Request/ICMPv6-пробы с увеличивающимся TTL/Hop Limit. В Linux классический traceroute по умолчанию обычно использует UDP-пробы на высокие порты, но может работать также через ICMP или TCP. Поэтому трассы с разных ОС могут отличаться даже до одного и того же сервера.
Почему в traceroute появляются * * *
Звёздочка означает только одно: в отведённое время не получен ожидаемый ответ на конкретную пробу. Это не автоматическое доказательство потери пользовательского трафика на этом маршрутизаторе.
Маршрутизатор пересылает трафик, но редко отвечает Time Exceeded или ограничивает такие ответы.
Служебный ответ фильтруется, хотя транзитный TCP/UDP-трафик разрешён.
Control plane может отвечать медленнее, чем устройство пересылает пакеты аппаратно.
Разные пробы могут попасть на разные next-hop и вернуть разные адреса или задержки.
Как читать трассу правильно
Если один промежуточный hop показывает * * *, но следующие hops и конечный сервер отвечают нормально, этот промежуточный узел очевидно продолжает пересылать трафик. Сам по себе его пропущенный ICMP-ответ не является местом обрыва.
Серьёзнее выглядит ситуация, когда после определённого hop ответы прекращаются полностью и конечный адрес тоже недоступен. Но даже тогда нужно сравнивать несколько направлений и типов трафика, а не выносить диагноз по одной трассе.
RTT, packet loss и jitter: что можно увидеть по ping
RTT - время туда и обратно. Оно включает оба направления и обработку конечными узлами. Из одного значения RTT нельзя определить, на каком именно направлении возникла задержка.
Обычный ping даёт полезную картину стабильности, но короткой серии из четырёх пакетов мало для периодической проблемы. Для вечерних лагов, Wi-Fi-помех или bufferbloat нужно тестировать в проблемное время и сравнивать состояние без нагрузки и под нагрузкой.
Если интернет «тормозит», а локальный ping до роутера уже скачет, сначала ищут проблему внутри дома: Wi-Fi, кабель, перегрузку клиента или LAN. Если до роутера стабильно, а до внешнего адреса задержка резко растёт, круг поиска сдвигается к WAN, провайдеру, VPN или внешнему маршруту. Подробная последовательность есть в диагностике Keenetic и домашней сети.
Почему ping до соседа в LAN связан с ARP или NDP
Перед отправкой IPv4-пакета устройству в той же локальной сети узлу обычно нужно узнать MAC-адрес получателя через ARP. Поэтому неудачный ping внутри одного VLAN может быть следствием не ICMP, а проблемы уровнем ниже: неправильной маски, VLAN, ARP, Wi-Fi client isolation, кабеля или выключенного устройства.
Для IPv6 похожую роль выполняет Neighbor Discovery, который сам использует ICMPv6. Это ещё одна причина, почему в IPv6 нельзя относиться ко всему ICMPv6 как к необязательному «пингу».
Подробнее механика IPv4 разобрана в статье ARP, IP и MAC: ARP-кэш, конфликты IP и Gratuitous ARP.
MTU и Path MTU: в чём разница
Link MTU - максимальный IP-пакет, который конкретный канал способен передать в рамках своих правил. Для обычного Ethernet часто встречается MTU 1500 байт, но это не универсальная гарантия для всего пути.
Path MTU, или PMTU - минимальный MTU среди всех участков маршрута между источником и назначением. Если где-то по пути есть PPPoE, VPN, туннель или другой участок с дополнительной инкапсуляцией, доступный PMTU может оказаться меньше локальных 1500 байт.
Если подозрение связано именно с VPN, сначала стоит отделить физический предел роутера, загрузку CPU и маршрут от MTU. Это разобрано в материале почему Keenetic может снижать скорость через WireGuard.
Как Path MTU Discovery связан с ICMP
Path MTU Discovery нужен, чтобы отправитель определил размер пакетов, которые проходят весь маршрут без проблем.
IPv4
Классический механизм RFC 1191 использует IPv4-пакеты с флагом Don't Fragment. Если маршрутизатор не может передать такой пакет через следующий участок из-за меньшего MTU, он отбрасывает пакет и возвращает ICMP Destination Unreachable с кодом «fragmentation needed». Современная форма сообщения может указывать допустимый Next-Hop MTU.
IPv6
В IPv6 маршрутизаторы не выполняют фрагментацию транзитного пакета вместо источника. Если пакет слишком велик для следующего канала, маршрутизатор возвращает ICMPv6 Packet Too Big. Источник уменьшает размер последующих пакетов. RFC 8201 прямо указывает, что PMTUD для IPv6 зависит от таких сообщений.
IPv6 требует минимальный link MTU 1280 байт. RFC 8200 рекомендует использовать PMTUD, чтобы при возможности передавать пакеты крупнее этого минимума.
Почему блокировка ICMP может сломать большие передачи
Один из самых неприятных сценариев - PMTU black hole. Маленькие пакеты проходят, TCP handshake может завершиться, но когда начинается передача более крупных пакетов, они теряются на участке с меньшим MTU. Если нужное ICMP-сообщение о размере тоже блокируется, отправитель не получает нормальной обратной связи.
Ping маленьким пакетом работает
TCP-соединение устанавливается
HTTPS зависает после начала загрузки
Часть сайтов работает, часть нет
VPN открывает мелкие страницы, но большие передачи подвисают
Upload и download ведут себя по-разному
RFC 8201 прямо описывает типичный IPv6-симптом: соединение может успешно пройти TCP three-way handshake, а затем зависнуть при передаче данных, если сообщения Packet Too Big не доходят до источника.
Правильнее фильтровать осмысленно и учитывать необходимые типы сообщений. Для IPv6 грубая блокировка ICMPv6 особенно опасна: ICMPv6 участвует не только в ping, но и в Path MTU Discovery и Neighbor Discovery.
Почему «просто разрешить фрагментацию» - плохая стратегия
IP-фрагментация существует, но современную сеть лучше строить так, чтобы обычный трафик вписывался в PMTU. Фрагментация повышает сложность обработки, чувствительность к потерям и может хуже проходить через firewall, NAT и туннели.
Для IPv6 промежуточный маршрутизатор не фрагментирует пакет. Источник должен адаптировать размер на основании PMTU или, если это действительно требуется, сформировать IPv6-фрагменты сам.
Поэтому при проблемах VPN, PPPoE и туннелей правильный путь - понять реальный MTU/PMTU и настройку MSS, а не бессистемно уменьшать MTU на всех устройствах.
Практическая диагностика ping и маршрута в Windows
1. Проверить локальный стек
ping 127.0.0.1Проверяет работу локального IPv4 TCP/IP-стека. Успешный ответ не доказывает исправность Ethernet, Wi-Fi, кабеля или роутера.
2. Проверить свой шлюз
ping 192.168.1.1Если шлюз не отвечает, сначала проверяют локальную сеть: адрес и маску, ARP, VLAN, Wi-Fi, кабель и firewall. Адрес шлюза нужно брать из своей конфигурации, а не копировать этот пример.
3. Проверить внешний IP
ping 1.1.1.1Если внешний IP отвечает, но доменные имена не работают, это аргумент в пользу проверки DNS. Но недоступность именно этого адреса ещё не доказывает общий обрыв интернета.
4. Сравнить имя и IP
ping example.comПри указании имени Windows сначала должен получить IP через механизм разрешения имён. Если IP работает, а имя нет, проверяют DNS.
5. Построить трассу
tracert -d 1.1.1.1Ключ -d отключает обратное DNS-разрешение адресов hops и часто делает трассу быстрее и чище для диагностики.
6. Проверить TCP-порт отдельно
Test-NetConnection example.com -Port 443Это уже не ICMP-проверка сервиса, а попытка проверить TCP-доступность указанного порта. Она полезна, когда ping работает, но приложение не подключается.
Как проверить размер пакета через Windows ping
В Windows для IPv4 можно запретить фрагментацию ключом -f и задать размер данных ICMP ключом -l.
ping -f -l 1472 1.1.1.1Число 1472 здесь не является «правильным MTU для интернета». Это тестовый ICMP payload. При стандартном IPv4-заголовке 20 байт и ICMP-заголовке 8 байт такой пакет даёт 1500 байт на IP-уровне: 1472 + 20 + 8.
| Если результат | Что делать |
|---|---|
| Ответ приходит | Этот размер Echo-пакета проходит выбранный путь в момент теста |
| Нужно фрагментировать | Уменьшать payload и искать рабочую границу |
| Просто timeout | Не делать вывод об MTU: Echo или ICMP-ошибка могли быть отфильтрованы |
Для PPPoE, VPN, мобильной сети, двойных туннелей и других схем рабочее значение может быть ниже. Проверять нужно именно проблемный маршрут и желательно сопоставлять результат с захватом пакетов, а не применять найденное число ко всей сети.
Traceroute, tracepath и разные методы проб
В Linux стандартный набор инструментов шире. Классический traceroute может использовать UDP, ICMP или TCP. Опция -I выбирает ICMP Echo, -T - TCP SYN. Это полезно, если обычные UDP-пробы фильтруются.
tracepath интересен тем, что одновременно трассирует путь и пытается обнаруживать MTU по маршруту. Конкретный набор ключей зависит от установленной реализации, поэтому перед использованием на сервере или NAS лучше проверить локальную справку man traceroute или man tracepath.
Когда одного tracert недостаточно
Windows также содержит pathping. Он сочетает построение маршрута с более длительным сбором статистики. Инструмент может быть полезен, когда нужно сравнить задержку и ответы по нескольким hops.
Но и здесь действует важное ограничение: промежуточный маршрутизатор может ограничивать ответы самому диагностическому инструменту, продолжая нормально пересылать пользовательский трафик. Высокая «потеря» на одном hop не считается реальной потерей транзита, если следующие узлы не наследуют эту потерю.
Что смотреть в Wireshark
Когда ping и traceroute дают неоднозначную картину, захват трафика показывает сами сообщения.
icmpвесь ICMP для IPv4icmp.type == 8IPv4 Echo Requesticmp.type == 0IPv4 Echo Replyicmp.type == 11IPv4 Time Exceededicmpv6ICMPv6icmpv6.type == 2ICMPv6 Packet Too BigДля диагностики PMTU особенно важны
- исходный размер IP-пакета;
- флаг DF в IPv4, если он используется;
- ICMP «fragmentation needed» для IPv4;
- ICMPv6 Packet Too Big и сообщаемый MTU;
- повторные TCP-передачи после пропажи крупных сегментов;
- разница между захватом до и после VPN/роутера.
Почему ICMPv6 особенно важен
ICMPv6 является обязательной частью IPv6. Он используется не только для Echo Request/Echo Reply. RFC 4861 определяет через ICMPv6 Neighbor Discovery: Router Solicitation, Router Advertisement, Neighbor Solicitation, Neighbor Advertisement и Redirect.
Передаёт информацию о маршрутизаторе, префиксах и части параметров IPv6.
Заменяет роль ARP для IPv6 и проверяет достижимость соседей.
Критически важен для Path MTU Discovery.
Используется трассировкой и диагностикой пути.
Подробно SLAAC, Router Advertisement, DHCPv6 и Prefix Delegation разобраны в отдельном материале IPv6 дома: SLAAC, DHCPv6, Router Advertisement и Prefix Delegation.
Нужно ли разрешать весь ICMP
Нет необходимости бездумно разрешать любой ICMP с любого направления, но столь же плохая идея - блокировать весь протокол одной кнопкой только потому, что «ping не нужен».
| Подход | Проблема |
|---|---|
| Разрешить всё без правил | Избыточно для некоторых периметров и не учитывает политику безопасности |
| Запретить весь ICMP | Теряется диагностика и могут ломаться механизмы PMTU; для IPv6 последствия особенно серьёзны |
| Разрешать необходимые типы осознанно | Наиболее правильная модель: учитывать направление, тип ICMP и назначение сети |
Правила для домашнего роутера, корпоративного firewall и публичного сервера будут разными. Нельзя копировать универсальный список «разрешить типы X, Y, Z» без понимания роли интерфейса и используемого стека.
Ping между VLAN: где искать проблему
Если два устройства находятся в разных VLAN, ICMP проходит через маршрутизацию и межсетевые правила. Поэтому отсутствие ping между сегментами может быть абсолютно ожидаемым следствием firewall-политики.
Сначала проверяют:
- правильные IP, маски и шлюзы обоих устройств;
- маршруты между подсетями;
- правило firewall из исходной VLAN в целевую;
- локальный firewall самого конечного устройства;
- не разрешено ли приложение при запрещённом Echo или наоборот.
Само разделение VLAN и логика правил подробно разобраны в статье VLAN простыми словами для дома и малого офиса.
Почему ping не измеряет скорость сети
Ping измеряет задержку ICMP-проб, а не пропускную способность канала. Гигабитная локальная сеть и 100-мегабитная сеть могут показывать почти одинаковый ping до соседнего устройства. И наоборот, высокая скорость загрузки не исключает проблем с latency под нагрузкой.
Для локальной пропускной способности нужен отдельный тест, например iperf3 между ПК и NAS. Правильная диагностика разделяет минимум три величины: Link speed, throughput и latency.
Порядок диагностики, если «интернет странно работает»
Проверить IP-конфигурацию. Адрес, маску, шлюз, DNS и нужный интерфейс.
Ping до шлюза. Отделить локальную сеть от внешнего маршрута.
Ping до внешнего IP. Проверить базовую IP-достижимость, помня о возможной ICMP-фильтрации.
Проверить DNS. Сравнить обращение к IP и к имени.
Проверить нужный TCP/UDP-сервис. Ping не заменяет проверку порта и приложения.
Traceroute. Сравнить путь и понять, где перестают приходить диагностические ответы.
Проверить MTU только при характерных симптомах. Особенно после VPN, PPPoE, туннелей и сложной маршрутизации.
Снять capture. Если вывод команд неоднозначен, смотреть реальные пакеты.
Типичные ошибки при диагностике ping и traceroute
- Считать любой timeout доказательством выключенного устройства.
- Считать успешный ping доказательством работоспособности HTTPS, SMB, камеры или NAS.
- Путать RTT с односторонней задержкой.
- Считать звёздочку в traceroute местом физической потери трафика.
- Сравнивать трассы, полученные разными методами проб, как идентичные тесты.
- Определять ОС только по оставшемуся TTL.
- Сразу уменьшать MTU до случайного «советованного» значения.
- Блокировать весь ICMP/ICMPv6 на firewall.
- Измерять интернет только по ping и называть это тестом скорости.
- Менять одновременно MTU, DNS, VPN и firewall, после чего невозможно понять настоящую причину.
Как интерпретировать распространённые ситуации
| Симптом | Вероятное направление проверки |
|---|---|
| Шлюз не пингуется | LAN, Wi-Fi, кабель, VLAN, маска, ARP/NDP, локальный firewall |
| Шлюз отвечает, внешний IP нет | WAN, маршрут по умолчанию, VPN/policy routing, провайдер |
| Внешний IP отвечает, имя нет | DNS |
| Ping есть, TCP 443 нет | Firewall, порт, NAT, сервис, маршрут для конкретного трафика |
| Малые пакеты проходят, большие зависают | MTU/PMTU, туннели, ICMP Fragmentation Needed / Packet Too Big |
| Один hop в traceroute со звёздочками, следующие отвечают | Скорее всего фильтрация или rate-limit диагностических ответов этого hop, а не обрыв маршрута |
| Через VPN часть сайтов зависает | PMTU/MSS, политика маршрутизации, DNS, производительность VPN-узла |
На какие документы опирается этот материал
Internet Control Message Protocol для IPv4: Echo, Destination Unreachable, Time Exceeded и другие базовые сообщения.
ICMPv6: базовые сообщения об ошибках и диагностические Echo-сообщения.
Neighbor Discovery для IPv6: Router/Neighbor Solicitation и Advertisement, Redirect.
Классический Path MTU Discovery для IPv4.
Современная базовая спецификация IPv6: Hop Limit, MTU и правила фрагментации.
Path MTU Discovery для IPv6 и роль ICMPv6 Packet Too Big.
Синтаксис команд Windows сверялся с актуальной документацией Microsoft Learn для ping и tracert. Поведение Linux traceroute - с документацией traceroute(8). Конкретные ключи могут отличаться в других реализациях и операционных системах.
Частые вопросы про ICMP, ping, traceroute и MTU
Если ping не проходит, значит устройство выключено?
Нет. Echo Request или Echo Reply могут фильтроваться firewall, сервер может игнорировать ping, а сам нужный TCP/UDP-сервис при этом работать.
Если ping проходит, интернет точно исправен?
Нет. Ping проверяет конкретный ICMP-обмен. Отдельно могут быть сломаны DNS, TCP/UDP-порт, TLS, HTTP, VPN или приложение.
ICMP использует какой порт?
Никакой. ICMP не является TCP или UDP и не использует их 16-битные номера портов.
Что означает TTL в ответе ping?
Это оставшееся значение TTL у пришедшего IPv4-пакета. Без надёжного знания начального TTL нельзя точно определить число переходов или ОС удалённого устройства.
Почему traceroute показывает звёздочки, а сайт работает?
Промежуточный маршрутизатор может не отвечать на диагностическую пробу или ограничивать ICMP, но продолжать нормально пересылать пользовательский трафик.
Почему Windows tracert и Linux traceroute показывают разный маршрут?
Они могут использовать разные типы проб. Кроме того, ECMP и динамическая маршрутизация способны отправить разные потоки по разным путям.
MTU 1500 всегда правильный?
Нет. 1500 часто используется в Ethernet, но PPPoE, VPN, туннели и другие участки могут уменьшить Path MTU.
Почему 1472 используют в Windows ping при проверке MTU 1500?
При обычном IPv4 без опций к 1472 байтам ICMP data добавляются 20 байт IPv4-заголовка и 8 байт ICMP-заголовка. Получается IP-пакет 1500 байт.
Нужно ли запрещать ICMP на роутере?
Полная блокировка обычно слишком грубая. Нужные ICMP-сообщения участвуют в диагностике и Path MTU Discovery, а ICMPv6 также связан с базовыми механизмами IPv6.
Ping показывает скорость интернета?
Нет. Он показывает задержку и ответы на ICMP-пробы. Пропускную способность измеряют отдельными тестами, например iperf3 внутри локальной сети.
Можно ли по traceroute точно доказать проблему у конкретного провайдера?
Одной трассы недостаточно. Нужны повторные измерения, сравнение направлений, времени, типа трафика и желательно данные с нескольких точек сети.
Когда проблема уже не сводится к одной команде
Если в сети одновременно используются несколько точек доступа, VLAN, NAS, камеры, VPN, Mesh, управляемые коммутаторы или отдельные маршруты, ping лучше рассматривать только как один из инструментов. Нужна последовательная проверка уровней, маршрутов, firewall, DNS, MTU и реального прикладного трафика.
Для локальных задач по Туле и Тульской области можно посмотреть услугу настройки и диагностики домашней сети.
