Диагностика сети с помощью MTR
Прежде чем прийти к пункту назначения, пакеты приходят по различным узлам, детали этих переходов полезны для диагностики проблем с производительностью и задержкой в системе. Определить маршрутизацию переданных пакетов, знать доступность узлов можно используя специальные команды ping и traceroute.
Утилита MTR объединяет в себе сразу две команды ping и traceroute, тем самым представляет максимальное количество доступной информации для анализа состояния сети. При запуске идет проверка сетевого соединения между локальном хостом с запущенной MTR и удаленным, через отправку пакетов с низким TTL, после анализируется время отклика промежуточных маршрутизаторов. MTR часто используется в работе на хостинге при возникновении проблем с доступностью удаленного сервера, для определения узла на котором возникают потери.
Как установить MTR?
В отличие от стандартных traceroute и ping, MTR может быть не установленной по умолчанию. Процесс установки есть очень простым и много времени не займет. Утилита доступна для всех популярных ОС.
Чтобы выполнить установку MTR используйте одну из представленных ниже команд для вашей системы используя менеджер пакетов:
Ubuntu/Debian:
sudo apt-get install mtr
CentOS/Fedora:
yum install mtr
Arch:
pacman -S mtr
BSD:
pkg install mtr
macOS:
Через диспетчер пакетов, тот же Homebrew или MacPorts. Например:
brew install mtr
Windows:
Выполняется через программу WinMTR, установочный архив можно скачать с сайта.
Синтаксис команды и ключи
MTR имеет следующий синтаксис: сначала mrt, далее список опций, и после задается домен/IP-адрес/хост удаленного сервера. Сервис "Мой IP" поможет вам узнать IP-адрес вашего устройства, с которого вы подключены к интернету.
mrt [ключи] домен/IP адрес/хост
Основные ключи:
-h - вызов справки.
-r/--report - запуск утилиты в режиме отчета в консоли, количество отправок пакетов задается ключом -c/--report-cycles.
-c/--report-cycles - количество полных попыток отправки запросов от исходящего сервера к принимающему.
-u/--tcp - использовать тип пакетов tcp вместо “ICMP ECHO”.
-t/--udp - использовать тип пакетов udp вместо “ICMP ECHO”.
--no-dns - не указывать хостнейм записи хостов, только ІР.
Вывод команды и анализ результатов
Рассмотрим результат работы программы. В примере мы запустили 5 циклов отправки пакетов, и ввиду отсутствия ключа --no-dns мы можем наблюдать хостнейм серверов.
[root@fortest ~]# mtr -r google.com.ua -c 5
Start: Sat Jan 30 14:27:06 2021
HOST: fortest.hyperhost.name Loss% Snt Last Avg Best Wrst StDev
1.|-- gw.ipv4.layer6.net 0.0% 5 0.4 0.8 0.4 1.7 0.0
2.|-- speed-ix.google.com 0.0% 5 2.7 2.8 2.6 3.0 0.0
3.|-- 108.170.241.193 0.0% 5 2.7 2.7 2.7 2.8 0.0
4.|-- 108.170.227.3 0.0% 5 3.5 3.7 3.3 4.6 0.0
5.|-- ams16s32-in-f3.1e100.net 0.0% 5 2.7 2.7 2.6 2.7 0.0
Где на выводе поле HOST указывает на имя хоста;
- поле Loss% на процент потерь пакетов;
- поле Snt на количество отправленных пакетов на узле;
- поле Last на время задержки последнего отправленного пакета, в миллисекундах;
- поле Avg на среднее время задержки, в миллисекундах;
- поле Best на минимальное время задержки, в миллисекундах;
- поле Wrst на максимальное время задержки, в миллисекундах;
- поле StDev на среднеквадратичное отклонение времени задержки, в миллисекундах.
После выполнения проверки, всегда нужно обращать вниманием на значение потерь в поле Loss на первых и последних узлах. На некоторых узлах потери могут становить 100%, но если при этом пакеты проходят далее, это значит что узел работает, но у него закрыты ответы на ICMP пакеты.
Если потери на 1-2 узлах, что в итоге дает потери на всех остальных узлах, нужно проверять настройки и ситуацию на своем компьютере и роутере, т.к. именно на них происходят потери.
Если потери на последних 1-2 узлах, проблема может быть на Вашем сервере (запущено какое-то ПО, которое заполняет весь канал, ддос-атака на Ваш сайт/сервер и т.д.). Если у Вас вирт. сервер, тогда, возможно, проблема на всем физ. сервере, в подобных случаях лучше сразу обращаться в тех. поддержку для проверки.