Бывают в сетевой жизни (особенно у dial-up юзеров 😉 моменты, когда невозможно достучаться до какого-нибудь хоста (у меня это часто www.microsoft.com ;-|) — здесь то на помощь и придет эта утилита (в Windows — tracert.exe). С ее помощью можно попытаться определить на каком участке IP-сети произошел сбой — то ли хост упал, то ли у провайдер тормоза, или у тебя с IP-соединением хреново :).

Но за что я по-настоящему люблю tracert — так это за те возможности исследования IP-сетей, которые он дает — а они бывают разные, по масштабам и по целенаправленности ;). Первым шагом может стать исследование подсети своего провайдера. С помощью traceroute ты можешь исследовать саму сети, применяя на практике полученные теоретические знания — о маршрутизации, серверах DNS, бэкбонах, системах подсетей, да мало ли о чем еще ;).

Как это работает?

Для начала нужно вспомнить формат заголовка IP-пакета, точнее одно из его полей — TTL (Time To Live). Это восьмибитное поле задает максимальное число хопов (hop — «прыжок» — прохождение дейтаграммы от одного маршрутизатора к другому) в течение которого пакет может находиться в сети. Каждый маршрутизатор, 
обрабатывающий эту дейтаграмму, выполняет операцию TTL=TTL-1. Когда TTL становится равным нулю, маршрутизатор уничтожает пакет,
отправителю высылается ICMP-сообщение Time
Exceeded.

Утилита посылает в направлении заданного хоста пакет с TTL=1, и ждет, от кого вернется ответ time exceeded. Отвечающий записывается как первый хоп (результат первого шага на пути к цели). Затем посылаются последовательно пакеты с TTL=2, 3, 4 и т.д. по порядку, пока при некотором значении TTL пакет не достигнет цели и не получит от нее ответ.

*nix traceroute посылает в сторону заданного хоста UDP-пакеты на произвольный порт — скорее всего не занятый другим сервисом (например 28942, 30471) или на зарезервированный, например 0, умолчанию — 33434. Сначала посылается серия из 3-х таких пакетов с TTL=1, по приходу ответов замеряется время прохождения и определяется доменное имя транзитного узла (хотя это зависит от заданных опций). Затем, посылаются очередные серии пакетов с одинаковым TTL, предназначенных для выявления одного и того же хопа. В конце мы получаем от конечного хоста отклик port unreachable (порт недоступен), что означает завершение трассировки.
Стандартный консольный Windows tracert работает точно также, но посылает только ICMP echo request пакеты.

Сам я охотно пользуюсь как стандартным tracert, так и вшитым в CyberKit (достаточно неплохой утилитой
еще является Necrosoft Quick Traceroute). Под Линукс ничего дополнительного посоветовать не могу — юзал только стандартный Debian’овский traceroute :).

В заключение скажу, не бойся экспериментировать — только так можно по настоящему «понять» сеть. Ищи информацию и пользуйся ею. Удачи.

Оставить мнение

Check Also

Tips’n’Tricks из арсенала андроидовода. Самые интересные, полезные и нестандартные трюки с Android

Многие годы мы рассказывали про самые разные способы оптимизировать, модифицировать и твик…