Traceroute Linux

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

 

 

Traceroute Linux — принцип работы

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

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

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

 

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

 

traceroute -n server-gu.ru
traceroute to server-gu.ru (185.93.111.169), 30 hops max, 60 byte packets
1 192.168.0.1 0.574 ms 0.553 ms 0.699 ms
2 46.48.38.1 3.131 ms 3.225 ms 3.231 ms
3 92.242.29.158 2.993 ms 3.051 ms 3.063 ms
4 * * *
5 195.208.210.79 30.130 ms 30.122 ms 30.221 ms
6 82.193.136.104 3.626 ms 3.585 ms 3.601 ms
7 * * *
8 185.93.111.169 2.063 ms 2.101 ms 2.382 ms

 

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

 

В примере применен ключ -n, который предписывает не использовать DNS преобразования IP адресов сетевых узлов  в доменные имена.
 
 
 

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

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

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

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

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

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

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

 

При использовании утилиты стоит помнить, что это только инструмент для дебага, имеющий свои тонкости — одна из них в том, ICMP пакеты могут отбрасываться роутерами (ICMP не является приоритетным). Это может направить по ложному пути если для тестирования используется ICMP, * * * в выводе не  всегда означают, что пакет потерян.  
 
Часто это именно задержки, которые дают транзитные роутеры. При использовании утилиты, которая кажется простой, но на самом деле таковой не является никогда не нужно забывать периодически обращаться к man traceroute