Поиск по сайту:

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


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

Как работает трассировка

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

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

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

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

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

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

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

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

Некоторые роутеры плохо работают

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

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

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

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

Установка трассировки

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

sudo pacman -Sy traceroute

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

sudo apt-get install traceroute

Использование трассировки

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

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

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

traceroute www.blarneycastle.ie

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

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

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

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

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

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

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

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

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

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

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

Чтобы сделать это с нашим примером, мы набираем следующее:

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 устанавливаются равными единице для первого набора тестов, двум для следующего набора тестов и так далее. Если мы установим его равным пяти, первый тест попытается добраться до пятого прыжка и пропустить прыжки с первого по четвертый.

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

traceroute -f 11 blarneycastle.ie

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

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

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

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

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

RELATED: Best Linux Laptops for Developers and Enthusiasts