Traceroute в Linux — утилита, используемая при диагностике сетевых неполадок. Traceroute работает иначе чем tracert в Windows, фактически это две разные утилиты, использующие различные протоколы. Утилита Traceroute в Linux использует UDP, тогда как аналог в Windows отправляет ICMP пакеты.
Принцип работы traceroute в Linux
Принцип работы в последовательной отправке пакетов до одного из хостов на пути к целевому узлу в сети.
После достижения первого узла запрос возвращается, при этом замеряется RTT (Round Trip Time). RTT — основная характеристика каждого hop-а (прыжка из точки назначения до очередного роутера по пути к хосту назначения).
Когда запрос вернулся утилита увеличивает счетчик на единицу и при следующем заходе проходит уже два узла по пути к целевому сервера. Когда после прохождения двух узлов возвращается ответ счетчик вновь увеличивается.
Так постепенно проходя за один заход на один сетевой узел больше запросы получателя в какой-то момент доходят до сервера назначения. Если запросы достигли сервера назначения в трассировке последним будет отображаться его адрес и время, которое потребовалось.
Значение выдаваемое traceroute измеряется миллисекундах.
Время, затраченное на запрос — основная характеристика, определяющая происходят ли задержки и если да — то на каких узлах. С клиентской стороны при обнаружении задержек сделать ничего нельзя помимо обращения к администратору сетевого узла.
Прохождение запроса и звездочки в выводе 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:
Также для диагностики часто используется утилита mtr.
Читайте также про адресацию ipv4. В материале есть информация про октеты подсетей ipv4 и диапазоны адресов.