Приятного чтения!

← назад
Диагностика сети посредством трассировок traceroute и mtr

Диагностика сети посредством трассировок traceroute и mtr

calendar_today25.02.2024 visibility34

Бывают ситуации, когда необходимо вычислить, какой из серверов на пути к определенному домену (адресу) вызывают проблемы. Для этой цели служат утилиты traceroute и mtr. Они незаменимы при диагностике и устранении неполадок внутренней сети, а также при необходимости предоставить информацию провайдеру или специалистам поддержки для решения проблем сети.

Утилита traceroute

Утилита traceroute — это компьютерная программа, предназначенная для определения маршрутов следования данных в сетях TCP/IP. В системах Microsoft Windows эта программа носит название tracert, а в системах GNU/Linux, Cisco IOS, Mac OS, Mikrotik RouterOS — traceroute.

Traceroute может использовать разные протоколы передачи данных в зависимости от операционной системы устройства. Такими протоколами могут быть UDP, TCP, ICMP протокол диагностики перегрузки сети или GRE туннели.

Часто встречается заблуждение, что traceroute, как и ping, работает только по протоколу ICMP. В связи с этим начинающие администраторы, разрешив в файерволе протокол ICMP, получают рабочий ping и нерабочий traceroute. Для исправления такой ситуации необходимо дополнительно разрешить в файерволе UDP-пакеты на порты выше 33434 (в некоторых источниках указано, что достаточно указать диапазон портов от 33434 до 33534).

Как работает traceroute?

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

Каждый пакет проходит на своем пути определенное количество узлов, пока достигнет своей цели. Причем, каждый пакет имеет свое время жизни. Это количество узлов, которые может пройти пакет перед тем, как он будет уничтожен. Этот параметр записывается в заголовке TTL, каждый маршрутизатор, через который будет проходить пакет уменьшает его на единицу. При TTL=0 пакет уничтожается, а отправителю отсылается сообщение Time Exceeded.

Команда traceroute в Linux использует UDP пакеты. Она отправляет пакет с TTL=1 и смотрит адрес ответившего узла, дальше TTL=2, TTL=3 и так пока не достигнет цели. Каждый раз отправляется по три пакета и для каждого из них измеряется время прохождения. Пакет отправляется на случайный порт, который, скорее всего, не занят. Когда утилита traceroute получает сообщение от целевого узла о том, что порт недоступен трассировка считается завершенной.

Синтаксис утилиты traceroute Linux

В качестве адреса может использоваться ip адрес или доменное имя.

Ниже привожу наиболее часто используемые опции утилиты.

  • -4 или -6 - использовать ipv4 или ipv6 протокол;
  • -I - использовать ICMP пакеты вместо UDP;
  • -T - использовать TCP пакеты вместо UDP;
  • -F - не фрагментировать пакеты;
  • -f - указать TTL с которого нужно начать;
  • -g - передавать пакет через указанный шлюз;
  • -i - передавать пакет через указанный интерфейс;
  • -m - максимальное количество узлов, через которые пройдет пакет;
  • -q - количество пакетов, отправляемых за раз, по умолчанию три;
  • -n - не узнавать доменные имена;
  • -p - указать порт вместо порта по умолчанию;
  • -w - установить время ожидания ответа от узла, по умолчанию полсекунды;
  • -r - использовать другой роутер вместо того, что указанный в таблице маршрутизации;
  • -z - минимальный интервал между пакетами;
  • -U - использовать UDP с увеличением номера порта;
  • -UL - использовать протокол UDPLITE;
  • -D - использовать протокол DCCP;
  • –mtu - указать размер пакета;
  • -P - протокол, доступны такие значения: raw, dccp, udplite, udp, tcpconn, tcp, icmp.

Утилита MTR

MTR – это динамическая альтернатива программе traceroute. Объединяя функции ping и traceroute, mtr позволяет постоянно опрашивать удаленный сервер и отслеживать изменения задержки и производительности с течением времени.

Основные опции запуска mtr:

  • -h Вывод справочной информации
  • -v Версия программы
  • -r Помещает mtr в режим отчета. В этом режиме, mtr обработает количество циклов, определенных опцией -c, затем отобразит статистику и завершит работу. Этот режим полезен для генерации статистики о качестве сети.
  • -с COUNT Установить количество циклов, после которых mtr завершит работу.
  • -s BYTES Размер посылаемых пакетов.
  • -t Вынуждает mtr использовать curses based terminal interface если доступно.
  • -n Не использовать DNS. Отображать IP-адреса.
  • -o fields order Используйте эту опцию, чтобы определить отображаемые поля, например -o "LSD NBAW"
  • -i, –interval SECONDS Интервал эхо-запроса ICMP
  • --tcp Задействовать TCP SYN-пакеты вместо стандартных ICMP-запросов
  • --udp Задействовать UDP-датаграммы вместо стандартных ICMP-запросов

Как интерпретировать вывод программы MTR

Вывод MTR включает следующие данные:

  • Номер хоста: Порядковый номер каждого промежуточного узла (маршрутизатора) на пути к целевому серверу.
  • Имя хоста (IP адрес): DNS-имя хоста или его IP-адрес. Если имя не определено, отображается только IP. Значение «No response from host» говорит о блокировке ICMP-пакетов в узле.
  • Потеря пакетов (%) (Loss): Процент потерянных пакетов на данном этапе. Если есть потери, это может указывать на проблемы в сети. Небольшие потери (1-5%): Это может быть нормально для некоторых сетей, особенно в интернете. Небольшие потери могут возникать из-за временных проблем с сетью или перегрузки узлов. Высокие потери (более 25%): это обычно указывает на серьезные проблемы, такие как неисправное оборудование, плохое соединение или серьезные проблемы с сетевой инфраструктурой.
  • Отправлено (Snt): Количество отправленных пакетов.
  • Задержка Last: это поле указывает на время задержки последнего отправленного пакета, в миллисекундах.
  • Лучшее время (Best): Самое быстрое время, за которое пакет достиг хоста и вернулся обратно.
  • Среднее время (Avrg): Среднее время ответа хоста.
  • Худшее время (Worst): Наибольшее время ответа.
  • Стандартное отклонение (StDev): среднеквадратичное отклонение времени задержки, в миллисекундах. Показывает вариативность времени ответа. Большое значение указывает на неравномерность скорости передачи данных.

Интерпретация вывода MTR включает следующие аспекты:

После выполнения проверки, всегда нужно обращать вниманием на значение потерь в поле Loss на первых и последних узлах. На некоторых узлах потери могут становить 100%, но, если при этом пакеты проходят далее, это значит что узел работает, но у него закрыты ответы на ICMP пакеты.

Если потери на 1-2 узлах, что в итоге дает потери на всех остальных узлах, нужно проверять настройки и ситуацию на своем компьютере и роутере, т.к. именно на них происходят потери.

Если потери на последних 1-2 узлах, проблема может быть на Вашем сервере (запущено какое-то ПО, которое заполняет весь канал, ддос-атака на Ваш сайт/сервер и т.д.). Если у Вас виртуальный сервер (VPS), тогда, возможно, проблема на всем физ. сервере, в подобных случаях лучше сразу обращаться в тех. поддержку для проверки.

Если вы обнаружили потери на промежуточных узлах, проблемы нет. Промежуточные маршрутизаторы могут не отвечать на ICMP-запросы, а просто пропускать дальше трафик.

Если же потери обнаружены на конечном узле, отправьте результат работы программы в службу технической поддержки через тикет систему. В сообщении укажите ваш внешний IP-адрес.

Важные замечания:

  • Разброс времени ответа (StDev): Если стандартное отклонение велико, это может указывать на нестабильность сети.
  • Постоянно меняющиеся маршруты: Если маршруты часто меняются, это может указывать на нестабильность в сетевой инфраструктуре.
  • Не всегда проблема с узлом: Высокие потери на узле не всегда означают проблему с этим узлом. Некоторые маршрутизаторы настроены на низкий приоритет или даже игнорирование ICMP пакетов, которые использует MTR, для снижения нагрузки.
  • Что такое Джиттер (jitter) и как его измерить

Итоги

Отчёт mtr на первый взгляд может показаться похожим на traceroute; но mtr имеет существенное преимущество – ее вывод постоянно обновляется. Это позволяет собирать средние показатели, а также отслеживать тенденции и изменения производительности сети.

При запуске traceroute есть вероятность, что пакеты, отправленные на каждый хоп, были переданы должным образом, даже если маршрут пострадал от потери пакетов. Утилита MTR позволяет отслеживать подобные ситуации путем сбора данных в широком диапазоне времени.

Кроме того, mtr можно запустить с опцией –report, которая вернет результаты отправки 10 пакетов на каждый хоп