NetLab Academy

Сетевые лаборатории в браузере

Войти Начать бесплатно

Теория: ICMP и диагностика пути

Как ping и traceroute на самом деле устроены, что означает TTL, почему звёздочки в трассировке не поломка и как выглядит чёрная дыра MTU. Прочитайте материал, а затем пройдите тест — следующий пункт курса откроется после верных ответов.

Служебный протокол, а не «пинговалка»

ICMP — протокол сообщений о состоянии сети. Он не переносит пользовательские данные и не имеет портов: его дело — сообщать об ошибках и отвечать на служебные запросы.

Через ICMP сеть говорит вам: «адресат недоступен», «время жизни пакета истекло», «пакет слишком большой». Именно на этих сообщениях построены ping и traceroute — они не отдельные механизмы, а два способа применить ICMP.

Из этого сразу следует важное: ICMP можно фильтровать отдельно от всего остального. Хост, не отвечающий на ping, может прекрасно обслуживать сайт.

Ping: эхо-запрос и эхо-ответ

ping отправляет эхо-запрос и ждёт эхо-ответ. Всё. По времени между ними считается задержка, по количеству неотвеченных — потери.

Что ping действительно проверяет: путь до узла есть в обе стороны, и узел жив настолько, чтобы ответить.

Чего ping не проверяет: работает ли нужный сервис. Веб-сервер может отвечать на ping и при этом не отдавать страницы. Отсюда правило: ping — проверка связности, а не работоспособности. Успешный ping не значит «всё хорошо», неуспешный не значит «сеть сломана».

TTL: счётчик, который спасает сеть от самой себя

В каждом IP-пакете есть поле TTL (Time To Live). Каждый маршрутизатор на пути уменьшает его на единицу. Дошло до нуля — пакет уничтожается, а отправителю уходит ICMP-сообщение «время жизни истекло».

Смысл в защите от петель. Ошибка в маршрутизации может закольцевать путь, и без TTL пакет ходил бы по кругу вечно, а таких пакетов накопилось бы столько, что канал встал бы. TTL гарантирует, что любой заблудившийся пакет умрёт максимум через 255 переходов.

Побочная польза: по TTL в ответе видно, сколько маршрутизаторов пакет прошёл. Начальные значения стандартны (обычно 64, 128 или 255), так что пришедший TTL 57 при исходном 64 означает семь переходов.

Traceroute: путь, собранный из ошибок

Трассировка устроена изящно. Она отправляет пакет с TTL = 1 — первый же маршрутизатор уменьшает его до нуля, уничтожает пакет и присылает сообщение об истёкшем времени. Из этой ошибки и узнаётся адрес первого узла. Затем TTL = 2 — отвечает второй. И так далее, пока не отзовётся сам адресат.

Отсюда особенности, которые постоянно понимают неправильно:

Звёздочки в середине — обычно не поломка. Многие маршрутизаторы намеренно не отвечают на служебные запросы или ограничивают их частоту. Значение имеет одно: докуда трафик доходит, а не кто промолчал. Звёздочки до самого конца при работающем сервисе — норма.

Путь показан только «туда». Обратный маршрут может идти совсем иначе, и трассировка его не покажет. Половина необъяснимых результатов объясняется именно этим.

Растущая задержка на промежуточном узле ничего не значит. Ответы на служебные запросы маршрутизатор формирует по остаточному принципу. Смотреть надо на задержку до конечного узла.
Traceroute собирает путь из ошибок «время жизни истекло»
Отдельного «протокола трассировки» не существует. Traceroute намеренно посылает пакеты, которым не хватит жизни доехать, — и узнаёт адреса из сообщений об их гибели.

Чёрная дыра MTU — самая коварная неисправность

MTU — наибольший размер пакета, который проходит по участку сети. Обычно 1500 байт, но туннели и VPN отъедают часть под свои заголовки, и на таком участке MTU меньше.

Когда пакет не помещается, маршрутизатор обязан прислать ICMP «нужна фрагментация». Отправитель, получив его, уменьшает размер — это называется определением MTU пути.

А теперь ловушка. Кто-то заботливо закрыл ICMP «ради безопасности». Большие пакеты пропадают, сообщение об этом не приходит, отправитель не понимает, что уменьшать, и продолжает слать то же самое.

Симптом получается совершенно сбивающий с толку: ping проходит,мелкие запросы работают, а страницы не открываются и файлы не копируются. Потому что ping маленький, а данные большие. Диагностика ищется где угодно, только не в размере пакета.

Проверяется одной командой: ping -M do -s 1472. Флаг запрещает фрагментацию, размер подобран так, чтобы с заголовками вышло ровно 1500. Не проходит при работающем обычном ping — вы нашли чёрную дыру.

Другие сообщения, которые стоит узнавать

Destination unreachable с уточнением:
network unreachable — у маршрутизатора нет маршрута;
host unreachable — маршрут есть, узел не отвечает на ARP;
port unreachable — узел жив, но UDP-порт никто не слушает (для TCP той же цели служит RST);
administratively prohibited — запрещено правилом фильтрации, и вам об этом честно сообщили.

Последнее особенно ценно: это единственный случай, когда межсетевой экран объясняет, что именно он вас не пустил. Чаще пакет просто исчезает молча — и отличить «запрещено» от «не дошло» без такого сообщения нельзя.

Что здесь ломается

«Ping не проходит, значит сеть упала». ICMP фильтруют отдельно. Проверяйте сервис, а не только ping.

«В traceroute звёздочки, значит там обрыв». Обычно нет. Смотрите, докуда доходит, и работает ли конечный сервис.

«Пингуется, но не работает». Классический признак чёрной дыры MTU, если речь о туннеле или VPN.

Асимметричный путь. Трассировка показывает дорогу туда, а проблема — на обратной. Трассируйте с обеих сторон, если есть доступ.

Как проверять

ping -c4 <адрес> — есть ли связность и какие потери.

ping -M do -s 1472 <адрес> — проходят ли полные пакеты. Главная проверка на чёрную дыру MTU.

traceroute -n <адрес> — докуда доходит путь. Флаг -n убирает разрешение имён и заметно ускоряет вывод.

traceroute -I — трассировка именно ICMP-пакетами: по умолчанию используется UDP, и результаты могут различаться, потому что фильтры к ним относятся по-разному.

mtr -n <адрес> — трассировка в динамике: сразу видно, на каком переходе появляются потери и растёт задержка.

Команды — шпаргалка

# связность и потери
ping -c4 192.168.1.1          # -c — сколько пакетов послать и остановиться
ping -i 0.2 -c 50 192.168.1.1 # -i — пауза между пакетами в секундах.
                              #      Чаще шлём — заметнее редкие потери

# чёрная дыра MTU
ping -M do -s 1472 192.168.1.1
                              # -M do — запретить фрагментацию: пакет либо
                              #         пройдёт целиком, либо не пройдёт вовсе.
                              #  -s — размер полезной нагрузки в байтах.
                              #      1472 + 8 (ICMP) + 20 (IP) = ровно 1500
ping -M do -s 1272 192.168.1.1
                              # прошло? значит MTU по пути около 1300.
                              #   Числа здесь произвольные: приём в том,
                              #   чтобы делить размер пополам, а не искать
                              #   по байту

# путь
traceroute -n 8.8.8.8         # -n — показывать адреса, не тратя время на имена
traceroute -I -n 8.8.8.8      # -I — слать ICMP, а не UDP как по умолчанию:
                              #      часть узлов отвечает только на ICMP
mtr -n 8.8.8.8                # то же, но непрерывно и со статистикой потерь

# посмотреть TTL в ответах
tcpdump -i eth0 -n -v icmp    # -v — подробный разбор заголовка, там и виден TTL;
                              #      icmp в конце — фильтр по протоколу
Контрольные вопросы

Дальше — лабораторная работа «traceroute, TTL и чёрная дыра MTU»

Для неё нужен аккаунт: стенд поднимается персонально под вас — свои роутеры, свои конфиги, никто в них не мешает. Регистрация — почта и пароль.

Теория прочитана. Дальше — руками.

Личный стенд из настоящих роутеров разворачивается за секунды. Платформа проверяет не ответы на тесты, а состояние вашей сети: поднялись ли соседства, сошлись ли маршруты, ходит ли ping. Рядом — AI-наставник, который видит ваши конфиги и ведёт к решению, не выдавая готовое.

Начать бесплатно → бета открыта, доступ бесплатный