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

Утилиты Traceroute и Tracert

Traceroute — это утилита, которая позволяет проследить маршрут следования данных до удалённого адресата в сетях TCP/IP. В Linux используется команда Traceroute, а в Windows — Tracert. При помощи этих команд можно увидеть путь пакета данных от вашего компьютера до целевого сервера или сайта.

Как работают Tracert и Traceroute

Когда вы пытаетесь открыть сайт, браузер отправляет сообщение (запрос) серверу, на котором этот сайт находится. Сообщение на своём пути проходит через маршрутизаторы. Они решают, куда дальше передать сообщение, чтобы гарантированно его доставить адресату. В трассировке маршрутизаторы ещё называют хопами (хоп — прыжок) или узлами. Количество узлов, через которые на своём пути пройдёт запрос, можно узнать при помощи утилит Tracert и Traceroute. Узлы, которые не являются целевыми для запроса, называют транзитными.

Утилита Traceroute формирует UDP-датаграмму (сообщение, которое нужно доставить целевому серверу), упаковывает её в IP-пакет и передаёт первому транзитному узлу. В заголовке такого IP-пакета есть поле TTL (Time To Live) — время жизни пакета. Оно определяет количество хопов, через которые пакет может пройти. На каждом узле TTL уменьшается на единицу. Если на пути к удалённому адресату время жизни пакета станет равно 0, маршрутизатор отбросит пакет и отправит источнику ICMP-сообщение об ошибке «Time Exceeded» (время истекло).

Этот принцип лежит в основе работы утилит Tracert и Traceroute, однако между ними есть отличия. Рассмотрим каждую утилиту отдельно.

Tracert отправляет на хост назначения ICPM-запрос «Echo Request» с TTL=1. Первый маршрутизатор, который получит запрос, проверяет, кому он предназначен. Если маршрутизатор не является целевым хостом, он уменьшает TTL на 1, отбрасывает пакет и отправляет ICMP-сообщение источнику, так как время жизни теперь равно 0. В этом сообщении маршрутизатор указывает информацию о себе и причину дропа пакета. Получив сообщение, Tracert запоминает этот маршрутизатор как первый хоп (прыжок) и отправляет следующий пакет, но уже с TTL=2. Первый хоп успешно обрабатывает новый пакет, уменьшает время его жизни на 1 и передаёт дальше. Следующий маршрутизатор тоже выполняет проверку хоста назначения и, если пакет предназначен не ему, уменьшает TTL, отбрасывает пакет и отправляет ICMP-сообщение источнику. Tracert запоминает второй хоп, снова увеличивает TTL на 1 и отправляет следующий пакет. Эти действия будут повторяться до тех пор, пока пакет не достигнет целевого хоста. Когда запрос попадёт к целевому хосту, этот хост в ответ направит ICMP «Echo Reply». Источник воспримет это как завершение трассировки.

Утилита Traceroute вместо ICMP-запроса отправляет 3 UDP-пакета на определенный порт целевого хоста и ожидает ответа о недоступности этого порта. Первый пакет отправляется с TTL=1, второй с TTL=2 и так далее, пока запрос не попадёт адресату. Отличие от Tracert в том, как Traceroute понимает, что трассировка завершена. Так как вместо ICMP-запроса он отправляет UDP-запрос, в каждом запросе есть порт отправителя (Sourсe) и порт получателя (Destination). По умолчанию запрос отправляется на закрытый порт 34434. Когда запрос попадёт на хост назначения, этот хост отправит ответ о недоступности порта «Destination port unreachable» (порт назначения недоступен). Это значит, что адресат получил запрос. Traceroute воспримет этот ответ как завершение трассировки.

Если Tracert работает по протоколу ICMP, то какой протокол используется командой Traceroute? По умолчанию используется протокол UDP, но traceroute может отправить и ICMP-запрос «Echo Request», как Tracert. Такой способ пригодится, если хоп не отвечает на UDP-пакет.

Как использовать Traceroute и Tracert

Если у вас кириллический домен
Кириллические домены необходимо вводить в формате Punycode. Для перевода домена в Punycode воспользуйтесь сервисом.
Linux
Windows
MacOS

Выполним команду Traceroute в Linux на примере Ubuntu 20.04:

  1. 1.
    Откройте терминал при помощи комбинации клавиш CTRL + Shift + T или введите в поиске слово «Терминал».
  2. 2.

    Введите команду traceroute domain.name. Вместо domain.name укажите домен:

    Команда Traceroute в Linux

    Если нужно выполнить трассировку до IP-адреса, введите traceroute ip. Вместо ip укажите нужный адрес:

Команда Traceroute в Linux для IP-адреса

Вывод команды будет содержать:

  • порядковый номер маршрутизатора (узла),
  • имя узла,
  • IP-адрес узла,
  • круговую задержку (время, потраченное на отправку запроса и получение ответа).

Команда Traceroute в Windows 10 отсутствует, поэтому следует воспользоваться Tracert:

  1. 1.
    Нажмите комбинацию клавиш Win + R.
  2. 2.
    Введите cmd и нажмите Enter.
  3. 3.

    Введите tracert domain.name. Вместо domain.name укажите домен или IP-адрес, до которого хотите выполнить трассировку:

    Команда Tracert в Windows

Вывод команды tracert будет выглядеть следующим образом:

  • порядковый номер маршрутизатора (узла),
  • круговая задержка (время, потраченное на отправку запроса и получение ответа),
  • имя узла,
  • IP-адрес узла.
  1. 1.
    Найдите в Spotlight утилиту Network Utility (Сетевая утилита) и запустите её.
  2. 2.

    Выберите вкладку Traceroute и введите имя домена или IP-адрес. Затем нажмите кнопку Trace:

    Traceroute в MacOS

Вывод содержит:

  • порядковый номер узла,
  • имя узла,
  • IP-адрес узла,
  • круговую задержку (время, потраченное на отправку запроса и получение ответа).

Если нужно отправить вывод команды в службу поддержки, сделайте скриншот или скопируйте текст.

Как установить Traceroute на Linux

В Unix-подобных системах программа может быть не установлена. Ниже мы покажем, как установить Traceroute на некоторых операционных системах.

Как установить Traceroute в Debian/Ubuntu
  1. 1.
    Запустите терминал и введите команду sudo apt-get update для обновления данных о репозиториях.
  2. 2.
    Введите команду sudo apt-get install traceroute.
Как установить Traceroute в Centos 7,8
  1. 1.
    Запустите терминал и введите команду sudo yum update для обновления данных о репозиториях.
  2. 2.
    Введите команду sudo yum install traceroute.

Как выполнить Traceroute по порту

По умолчанию первый UDP-пакет отправляется на порт 34434 и на каждом узле увеличивается на 1: 34434 на первом, 34435 на втором и так далее. При помощи ключа -p порт можно указать вручную. Команда будет выглядеть следующим образом:

traceroute -p [номер порта] domain.name

В Windows трассировку с указанием порта стандартными средствами выполнить нельзя, так как Traceroute в cmd отсутствует, а Tracert не умеет работать с портами.

Как использовать Traceroute по ICMP

И UDP и ICMP-протоколы используются командой Traceroute. UDP используется по умолчанию. Чтобы воспользоваться ICMP, добавьте в команду ключ -I:

traceroute -I domain.name

Для чего это нужно? Оборудование может быть настроено на то, чтобы не отвечать на подобные запросы. Если вы увидите в выводе символы * * *, это может значить, что маршрутизатор отклонил пакет и не отправил ответ. Звёздочки в выводе не означают, что у узла проблемы. Соединения может фильтровать Firewall, который стоит перед узлом. Это делается специально, чтобы снизить нагрузку. Пример такого вывода команды:

Вывод команды Traceroute без ответа сервера

В этом случае попробуйте воспользоваться ключом -I:

Вывод команды Traceroute с ключом -I

Ключ -I требует root-привилегий. Если команда не выполняется, добавьте в начало sudo:

sudo traceroute -I domain.name

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

Была ли эта статья полезной?
Пользователи, считающие этот материал полезным: 1 из 1