Как использовать команду traceroute в Linux

Вы можете использовать команду traceroute Linux, чтобы определить медленный этап прохождения сетевого пакета и устранить проблемы с медленными сетевыми соединениями. Мы покажем вам как!

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

Когда вы понимаете, как работает traceroute, это значительно упрощает понимание результатов. Чем сложнее маршрут сетевой пакет чтобы добраться до места назначения, тем труднее определить, где может произойти замедление.

Небольшая организация локальная сеть (LAN) может быть относительно простым. Вероятно, у него будет как минимум один сервер и один или два маршрутизатора. Сложность увеличивается на Глобальная сеть (WAN), который обменивается данными между разными местоположениями или через Интернет. Затем ваш сетевой пакет встречает (и пересылает и маршрутизирует) большое количество оборудования, например маршрутизаторы и шлюзы.

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

traceroute использует TCP / IP набор протоколов и отправляет Протокол пользовательских датаграмм пакеты. Заголовок содержит Время жить (TTL) поле, которое содержит восьмибитовое целое число. Несмотря на то, что следует из названия, оно представляет собой количество, а не продолжительность.

Пакет перемещается от источника к месту назначения через маршрутизатор. Каждый раз, когда пакет достигает маршрутизатора, он уменьшает счетчик TTL. Если значение TTL когда-либо достигает единицы, маршрутизатор, который получает пакет, уменьшает значение и замечает, что теперь оно равно нулю. Затем пакет отбрасывается и не пересылается на следующий участок пути, потому что у него «истекло время ожидания».

Маршрутизатор отправляет Протокол управления сообщениями в Интернете (ICMP) Время истекло отправьте сообщение отправителю пакета, чтобы сообщить ему, что истекло время ожидания пакета. Сообщение Time Exceeded содержит исходный заголовок и первые 64 бита данных исходного пакета. Это определено на шестой странице Запрос комментариев 792.

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

  Как установить графический редактор Vectr в Linux

Затем он повторяет упражнение с TTL, установленным на 2, которое завершится ошибкой после двух прыжков. traceroute увеличивает TTL до трех и пытается снова. Этот процесс повторяется до тех пор, пока не будет достигнут пункт назначения или пока не будет проверено максимальное количество переходов (30 по умолчанию).

Некоторые маршрутизаторы плохо работают

У некоторых роутеров есть ошибки. Они пытаются пересылать пакеты с нулевым TTL вместо того, чтобы отбрасывать их и выдавать ICMP-сообщение о превышении времени.

В соответствии с Cisco, некоторые интернет-провайдеры (ISP) ограничивают количество сообщений ICMP, передаваемых их маршрутизаторами.

Некоторые устройства настроены так, чтобы никогда не отправлять пакеты ICMP. Часто это делается для того, чтобы устройство нельзя было непреднамеренно принудить к участию в Распределенный отказ в обслуживании, как смурф атака.

По умолчанию у traceroute тайм-аут для ответов составляет пять секунд. Если он не получает ответа в течение этих пяти секунд, попытка прекращается. Это означает, что ответы от очень медленных маршрутизаторов игнорируются.

Установка traceroute

traceroute уже был установлен в Fedora 31, но должен быть установлен в Manjaro 18.1 и Ubuntu 18.04. Чтобы установить traceroute на Manjaro, используйте следующую команду:

sudo pacman -Sy traceroute

В

Чтобы установить traceroute в Ubuntu, используйте следующую команду:

sudo apt-get install traceroute

В

Использование traceroute

Как мы уже говорили выше, цель traceroute — вызвать ответ от маршрутизатора на каждом переходе от вашего компьютера к месту назначения. Некоторые могут быть молчаливыми и ничего не выдать, в то время как другие, вероятно, без колебаний прольют бобы.

В качестве примера мы запустим трассировку до Замок Бларни веб-сайт в Ирландии, родине знаменитых Бларни Стоун. Легенда гласит, что если вы поцелуете Камень Бларни, вы будете благословлены «даром болтливости». Будем надеяться, что маршрутизаторы, с которыми мы сталкиваемся по пути, достаточно болтливы.

Набираем следующую команду:

traceroute www.blarneycastle.ie

В

Первая строка дает нам следующую информацию:

Пункт назначения и его IP-адрес.
Количество прыжков, которые traceroute попытается выполнить, прежде чем отказаться.
Размер отправляемых нами UDP-пакетов.

Все остальные строки содержат информацию об одном из переходов. Однако, прежде чем мы углубимся в детали, мы видим, что между нашим компьютером и веб-сайтом замка Бларни существует 11 переходов. 11-й прыжок также сообщает нам, что мы достигли места назначения.

  Как читать Hacker News на рабочем столе Linux

Формат каждой строки перехода следующий:

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

Давайте рассмотрим то, что у нас есть ниже:

Шаг 1: первый порт захода (без каламбура) — это маршрутизатор DrayTek Vigor Router в локальной сети. Вот так наши UDP-пакеты покидают локальную сеть и попадают в Интернет.
Шаг 2: это устройство не ответило. Возможно, он был настроен никогда не отправлять ICMP-пакеты. Или, возможно, он ответил, но был слишком медленным, поэтому время трассировки истекло.
Шаг 3: устройство ответило, но мы не получили его имени, только IP-адрес. Обратите внимание, что в этой строке есть звездочка, что означает, что мы не получили ответа на все три запроса. Это может указывать на потерю пакета.
Хмель 4 и 5: больше анонимных хмелей.
Шаг 6: Здесь много текста, потому что разные удаленные устройства обрабатывали каждый из трех наших UDP-запросов. Были напечатаны (довольно длинные) имена и IP-адреса для каждого устройства. Это может произойти, когда вы столкнетесь с «густонаселенной» сетью, в которой имеется много оборудования для обработки больших объемов трафика. Этот переход принадлежит одному из крупнейших интернет-провайдеров в Великобритании. Таким образом, было бы небольшим чудом, если бы одно и то же удаленное оборудование обрабатывало наши три запроса на соединение.
Шаг 7: это переход, сделанный нашими UDP-пакетами при выходе из сети интернет-провайдера.
Шаг 8: Опять же, мы получаем IP-адрес, но не имя устройства. Все три теста прошли успешно.
Хмель 9 и 10: еще два анонимных прыжка.
Шаг 11: Мы прибыли на сайт замка Бларни. Замок находится в Корке, Ирландия, но, по словам Геолокация IP-адреса, сайт находится в Лондоне.

Итак, это была неоднозначная картина. Некоторые устройства играли в мяч, некоторые отвечали, но не называли нам своих имен, а другие остались полностью анонимными.

Тем не менее, мы добрались до пункта назначения, мы знаем, что до него 11 прыжков, а время пути туда и обратно составило 13,773 и 14,715 миллисекунд.

Скрытие имен устройств

Как мы видели, иногда включение имен устройств приводит к загромождению дисплея. Чтобы упростить просмотр данных, вы можете использовать параметр -n (без сопоставления).

  Как дефрагментировать жесткий диск в Linux

Для этого в нашем примере мы набираем следующее:

traceroute -n blarneycastle.ie

В

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

Шаг 3 начинает выглядеть немного подозрительно. В прошлый раз он ответил только дважды, а на этот раз только один раз. В этом случае, конечно, это вне нашего контроля.

Однако, если вы исследуете свою корпоративную сеть, стоит копнуть немного глубже в этот узел.

Установка значения тайм-аута traceroute

Возможно, если мы увеличим время ожидания по умолчанию (пять секунд), мы получим больше ответов. Для этого мы будем использовать параметр -w (время ожидания), чтобы изменить его на семь секунд. (Обратите внимание, что это число с плавающей запятой.)

Набираем следующую команду:

traceroute -w 7.0 blarneycastle.ie

В

Это не имело большого значения, поэтому ответы, вероятно, истекли. Скорее всего, анонимные хмели намеренно скрытны.

Установка количества тестов

По умолчанию traceroute отправляет три UDP-пакета на каждый переход. Мы можем использовать опцию -q (количество запросов), чтобы увеличить или уменьшить это значение.

Чтобы ускорить тест traceroute, мы вводим следующее, чтобы уменьшить количество отправляемых тестовых пакетов UDP до одного:

traceroute -q 1 blarneycastle.ie

В

Это отправляет один зонд на каждый переход.

Установка начального значения TTL

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

Поскольку мы знаем, что веб-сайт замка Бларни находится в 11 прыжках с этого компьютера, мы вводим следующее, чтобы перейти прямо к 11-му прыжку:

traceroute -f 11 blarneycastle.ie

В

Это дает нам красивый сжатый отчет о состоянии подключения к месту назначения.

Быть внимательным

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

Однако вы не хотите бомбардировать неизвестные устройства потоками UDP-пакетов и опасаться включения traceroute в сценарии или автоматические задания.

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