Traceroute Linux


Traceroute в Linux — утилита, используемая при диагностике сетевых неполадок. Traceroute работает иначе чем tracert в Windows, фактически это две разные утилиты, использующие различные протоколы. Утилита Traceroute в Linux использует UDP, тогда как аналог в Windows отправляет ICMP пакеты.



Принцип работы traceroute в Linux


Принцип работы в последовательной отправке пакетов до одного из хостов на пути к целевому узлу в сети.


После достижения первого узла запрос возвращается, при этом замеряется RTT (Round Trip Time). RTT — основная характеристика каждого hop-а (прыжка из точки назначения до очередного роутера по пути к хосту назначения).



Когда запрос вернулся утилита увеличивает счетчик на единицу и при следующем заходе проходит уже два узла по пути к целевому сервера. Когда после прохождения двух узлов возвращается ответ счетчик вновь увеличивается.

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



Значение выдаваемое traceroute измеряется миллисекундах.



traceroute linux


Время, затраченное на запрос — основная характеристика, определяющая происходят ли задержки и если да — то на каких узлах.  С клиентской стороны при обнаружении задержек сделать ничего нельзя помимо обращения к администратору сетевого узла.



Прохождение запроса и звездочки в выводе traceroute


Интернет провайдеры также могут менять сетевые маршруты выстраивая самый оптимальный — с минимальными задержками и без потерь. Маршрутизация может задаваться вручную или с помощью протоколов динамической маршрутизациии — чаще всего применяются OSPF и BGP.



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



Пример traceroute в Linux


Таким образом выглядит traceroute, запущенный с персонального компьютера до сайта example.com.

Ключ -n сообщает утилите, что не нужно разрешать ip адреса в доменные имена.


traceroute -n example.com

traceroute to example.com (123.123.123.123), 30 hops max
 1 192.168.0.1 0.574 ms 0.553 ms 0.699 ms
 2 45.46.18.14 3.131 ms 3.225 ms 3.231 ms
 3 192.22.295.18 2.993 ms 3.051 ms 3.063 ms
 4 * * *
 5 81.45.10.759 30.130 ms 30.122 ms 30.221 ms
 6 82.82.82.82  20.626 ms 3.585 ms 3.601 ms
 7 * * *
 8 123.123.123.123 2.063 ms 2.101 ms 2.382 ms


Маршрут здесь довольно короткий, клиент и сервере не сильно удалены друг от друга. Тем не менее в результате трассировки 8 узлов, в обработке запроса поучаствовало 8 устройств.



В случае если сервер находился бы в другой части света количество hop-ов могло бы быть равным нескольким десяткам.



Также применяются и другие ключи traceroute:


-T (или tcptraceroute) — вместо udp будут отправляться tcp пакеты

-6 (или traceroute6) — тестовые пакеты IPv6

-I — сетевым узлам будут отправляться ICMP ECHO пакеты

-s — интерфейс, из которого отправляются пакеты (его можно задать флагом)

-d — дебаг, в консоль при использовании ключа будет выводиться расширенная информация

--mtu — будет выводить значения MTU узлов



При использовании утилиты стоит помнить, что это только инструмент для отладки. Он имеет свои тонкости — одна из них в том, что пакеты могут отбрасываться роутерами. Трафик tarceoute является служебным, он часто блокируется или для него выставляется минимальный приоритет.



Звездочки ( * * *) в выводе не  всегда означают, что пакет потерян. На них можно не обращать внимания если целевой хост доступен. В таких случаях звездочки это блокировка промежуточными устройствами служебного трафика.

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


О недоступности свидетельствует трассировка при которой пакеты не достигают целевого хоста и звездочки в трассировке напротив него.



На что обратить внимание при диагностике с помощью Linux утилиты traceroute


Также важно помнить что проверку с помощью traceroute нужно запускать в двух направлениях. И от клиента к серверу, и от сервера к клиенту. Трафик по сети ходит часто по ассиметричным маршрутам. Неполадки могут быть как на пути от клиента к серверу, так и на обратном пути.

Дополнительно всегда стоит проверять соседние хосты (меняя ip адрес в последнем октете). Это позволит выявить есть ли сложности с конкретным адресом или со всей подсетью, в которой он существует.



Утилита кажется простой, но таковой не является. Но при её использовании никогда не нужно забывать периодически обращаться к man traceroute.



Документация по утилите traceroute:

Документация по утилите traceroute


Также для диагностики часто используется утилита mtr.

Читайте также про адресацию ipv4. В материале есть информация про октеты подсетей ipv4 и диапазоны адресов.

Сказать спасибо