Интернет по сути состоит из глобальной сети маршрутизаторов, которая позволяет компьютерам и серверам со всего мира связываться друг с другом. Эти маршрутизаторы обмениваются данными друг с другом, чтобы направлять или передавать пакеты данных по назначению.
Утилита командной строки Traceroute – это инструмент, который используется для определения точного маршрута, по которому пакет данных проходит в сети Интернет от отправителя до места назначения.
При помощи команды tracert (Windows) или traceroute (Linux и Mac OS) вы легко и быстро можете определить где находится проблема, узкое место в передаче данных, задержка соединения с сервером. Также вы можете использовать утилиту, если вам просто интересно узнать какой путь проделывает пакет данных до места назначения.
Чем Tracert отличается от Ping?
Широкоизвестная команда PING используется для проверки связи с сервером. Ваш компьютер отправляет четыре пакета данных в пункт назначения, и как только они прибудут туда, пакеты вернутся обратно на ваш компьютер.
Если вы получили все или только часть пакетов данных на свой компьютер, это говорит о наличии общего соединения между вашим ПК и конечным пунктом. Кроме этого, вы получите данные о том, сколько по времени (в миллисекундах) заняло путешествие пакетов данных туда-обратно.
Traceroute даст нам больше информации – утилита не только проверит наличие связи с конечным пунктом назначения, но и с каждым маршрутизатором на этом пути. Она измерит время приема-передачи пакетов данных от каждого встреченного на пути маршрутизатора.
Как пользоваться Tracert?
Для примера проследим путь от моего ПК до сайта Google. В командной строке ввожу:
- tracert google.com – для систем на базе Windows
- traceroute google.com – для систем на базе Linux и Mac OS
Вместо доменного имени вы можете также ввести ip-адрес удаленного сервера.
После запуска команды (по нажатию клавиши ENTER) наш ПК отправит три пакета данных каждому маршрутизатору на пути к месту назначения. Каждый из них в свою очередь сразу после получения пакетов отправит их обратно на наш компьютер и сообщит информацию о себе, например IP-адрес.
Также маршрутизатор укажет время, измеренное в милисекундах, за которое три пакета данных прошли к нему и от него. Рассмотрим полученные результаты.
В крайнем левом столбце указано количество hops (хопов, узлов, прыжков) пройденных до пункта назначения. Следующие три столбца показывают время прохождения каждого пакета данных до каждого узла и обратно.
Как видим, на первом этапе передача пакетов произошла менее чем за 1 ms. Первой точкой перехода был мой домашний модем-роутер (маршрутизатор). Этот маршрут самый короткий и быстрый, поскольку он проходит в пределах моей локальной сети. Но как только данные попадают в Интернет (второй прыжок), время приема-передачи значительно увеличивается. И чем дальше пакеты данных должны пройти к каждому маршрутизатору, тем больше времени будет затрачено на это.
Достижение конечного пункта назначения будет самым длительным этапом. Его значение будет соответствовать результату, полученному при помощи команды Ping. Потому что, как вы помните, ping отображает только время достижения конечного пункта на пути следования пакетов данных.
Последний столбец отчета traceroute сообщает IP-адрес или доменное имя каждого встреченного маршрутизатора.
Как установить проблему при помощи трассировки?
Одна из основных вещей, на которую следует обратить внимание при выполнении трассировки – это постоянное время прохождение пакета туда-обратно. На скриншотах выше указано нормальное время – оно стабильно и имеет небольшое постепенное увеличение без значительных отклонений в пределах одного узла.
Предположим, что сайт google плохо открывается на нашем ПК. Запустив команду Ping мы обнаружим, что время прохождения туда-обратно очень высокое, в среднем около 210 миллисекунд.
Проблема есть, но на каком именно этапе прохождения пакетов данных она возникает команда Ping не показывает.
Утилита Tracert поможет определить корень проблемы. Проанализируем отчет трассировки:
Сбой, как мы видим, возникает на пятом хопе, и данный маршрутизатор негативно влияет на оставшийся путь данных к месту назначения. Таким образом мы быстро обнаружили, что причина задержки передачи данных не связана с нашей локальной сетью или сервером. Проблема в удаленном роутере сети Интернет.
Что означают звездочки в отчете?
Иногда в отчете трассировки вы можете заметить звездочки, исходящие от маршрутизатора.
Это может означать как наличие проблемы с данным маршрутизатором, так и то, что он работает нормально, но не был настроен для возврата ответов tracert. Узел принял и передал пакеты в штатном режиме, но просто не сообщил затраченное на это время.
Что такое TTL?
После запуска tracert в окне командной строки можно прочесть такую фразу: «с максимальным числом прыжков 30» (на русском или английском).
Количество таких прыжков (hops) определяет параметр TTL (Time To Live), или время жизни. Он задает то, как долго переданные пакеты данных могут жить прежде чем будут отброшены. По умолчанию задаётся 30 прыжков. Если пакеты не достигают цели через 30 переходов, они автоматически отбрасываются.
Вы можете задать произвольное число прыжков при помощи записи –h. К примеру:
tracert –h 4 google.com
Вышеуказанная запись означает, что когда данные достигают четвертого прыжка (узла), они отбрасываются и не передаются далее.
Для чего вообще нужен TTL? TTL способен предотвратить бесконечное перемещение пакета данных по сети Интернет в попытках найти пункт назначения. Такое может случиться, если некоторые маршрутизаторы в Интернет были неправильно настроены, и данные могут попасть в бесконечный цикл между этими маршрутизаторами без перспективы «прорваться» на следующий узел на своем пути до цели.
Получается так, что эти «неправильные» маршрутизаторы заняты постоянной обработкой присланных однажды пакетов, что мешает обработке последующих.