В этой статье мы рассмотрим, как использовать сетевые утилиты 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
Выполним команду Traceroute в Linux на примере Ubuntu 20.04:
- 1 Откройте терминал при помощи комбинации клавиш CTRL + Shift + T или введите в поиске слово «Терминал».
-
2
Введите команду
traceroute domain.name
. Вместоdomain.name
укажите домен:Если нужно выполнить трассировку до IP-адреса, введите
traceroute ip
. Вместоip
укажите нужный адрес:
Вывод команды будет содержать:
- порядковый номер маршрутизатора (узла),
- имя узла,
- IP-адрес узла,
- круговую задержку (время, потраченное на отправку запроса и получение ответа).
Команда Traceroute в Windows 10 отсутствует, поэтому следует воспользоваться Tracert:
- 1 Нажмите комбинацию клавиш Win + R.
- 2 Введите cmd и нажмите Enter.
-
3
Введите
tracert domain.name
. Вместоdomain.name
укажите домен или IP-адрес, до которого хотите выполнить трассировку:
Вывод команды tracert будет выглядеть следующим образом:
- порядковый номер маршрутизатора (узла),
- круговая задержка (время, потраченное на отправку запроса и получение ответа),
- имя узла,
- IP-адрес узла.
- 1 Найдите в Spotlight утилиту Network Utility (Сетевая утилита) и запустите ее.
-
2
Выберите вкладку Traceroute и введите имя домена или IP-адрес. Затем нажмите кнопку Trace:
Вывод содержит:
- порядковый номер узла,
- имя узла,
- IP-адрес узла,
- круговую задержку (время, потраченное на отправку запроса и получение ответа).
Если нужно отправить вывод команды в службу поддержки, сделайте скриншот или скопируйте текст.
Как установить Traceroute на Linux
В Unix-подобных системах программа может быть не установлена. Ниже мы покажем, как установить Traceroute на некоторых операционных системах.
Как установить Traceroute в Debian/Ubuntu
-
1
Запустите терминал и введите команду
sudo apt-get update
для обновления данных о репозиториях. -
2
Введите команду
sudo apt-get install traceroute
.
Как установить Traceroute в Centos 7,8
-
1
Запустите терминал и введите команду
sudo yum update
для обновления данных о репозиториях. -
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, который стоит перед узлом. Это делается специально, чтобы снизить нагрузку. Пример такого вывода команды:
В этом случае попробуйте воспользоваться ключом -I
:
Ключ -I
требует root-привилегий. Если команда не выполняется, добавьте в начало sudo
:
sudo traceroute -I domain.name
Трассировка используется для диагностики проблем сети. Ее может запросить ваш хостинг- или интернет-провайдер. В этом случае предоставьте скриншот или текст вывода команды. Если сайт работает, а трассировка до него не доходит, значит запросы фильтруются на пути к цели. Отсутствие трассировки не означает наличие проблемы.
Помогла ли вам статья?
Спасибо за оценку. Рады помочь 😊