Tracert и traceroute в чем отличие
Как работает tracert и traceroute
Применение данных утил позволяет проследить маршрут до удаленного хоста, определить время круговой задержки (RTT-round-trip delay time), IP-адрес и в некоторых случаях доменное имя промежуточного маршрутизатора. В основе их работы лежат ICMP-сообщения об ошибках.
Как работает Tracert.
Значение времени жизни (TTL) первого отправляемого пакета устанавливается равным 1. Когда протокол IP первого маршрутизатора принимает этот пакет, то он в соответствии со своим алгоритмом уменьшает TTL на единицу и получает 0. Маршрутизатор отбрасывает пакет с нулевым временем жизни и возвращает узлу-источнику ICMP-сообщение об ошибке истечения времени дейтаграммы (ICMP-сообщение тип 11 код 0). Это сообщение содержит имя маршрутизатора и его IP-адрес. Когда это ICMP-сообщение прибывает к отправителю, тот по значению таймера узнает время оборота пакета(RTT), а также (из ICMP-сообщения) имя и IP-адрес промежуточного маршрутизатора. Затем посылается следующий IP-пакет, но теперь со значением TTL равным 2. Этот пакет уже доходит до второго маршрутизатора, но опять там «умирает» о чем аналогичным, же образом сообщается узлу отправителю. И так до тех пор, пока не достигнет конечного узла. На основании данных ответов строится трассировка. Например:
Из данной трассы мы видим, что хост www.rt.ru доступен с числом прыжков(хопов) — 8, его ip 109.207.14.4, и время круговой задержки до данного ресурса составляет 19ms.
Как работает Traсeroute.
Принцип идентичный, за одним исключением. Утила по умолчанию, посылает в сторону заданного хоста UDP-датаграммы на какой-то произвольный порт, обычно — на «высокий», скорее всего не занятый другим сервисом (например 12500, 30678) или на зарезервированный (например 0), в свежих версиях порт по умолчанию — 33434. Сначала посылается серия из 3-х таких пакетов с TTL=1, по приходу ответов замеряется время прохождения и определяется доменное имя транзитного узла. Затем, как сказано выше, посылаются очередные серии пакетов с TTL=2 и т.д. В конце мы получаем от конечного хоста отклик «Порт недоступен» (PORT_UNREACHABLE), что означает завершение трассировки.
Пример трассировки до того же ресурса:
Заключение.
Следует отметить, что звездочки могут возникать и при трассировке ICMP-пакетами, это также не значит, что существует проблема. Все зависит от того, как настроил оборудование администратор. Это его железо и настраивается оно с его потребностями. Данное явление вполне нормально. Также не следует паниковать, если конечный хост не пингуется. Вполне возможно, что ресурс просто от них закрылся.
Утилиты Traceroute и Tracert
Traceroute — это утилита, которая позволяет проследить маршрут следования данных до удалённого адресата в сетях TCP/IP. В Linux используется команда Traceroute, а в Windows — Tracert. При помощи этих команд можно увидеть путь пакета данных от вашего компьютера до целевого сервера или сайта.
Как работают Tracert и Traceroute
Когда вы пытаетесь открыть сайт, браузер отправляет сообщение (запрос) серверу, на котором этот сайт находится. Сообщение на своём пути проходит через маршрутизаторы. Они решают, куда дальше передать сообщение, чтобы гарантированно его доставить адресату. В трассировке маршрутизаторы ещё называют хопами (хоп — прыжок) или узлами. Количество узлов, через которые на своём пути пройдёт запрос, можно узнать при помощи утилит Tracert и Traceroute. Узлы, которые не являются целевыми для запроса, называют транзитными.
Утилита Traceroute формирует UDP-датаграмму (сообщение, которое нужно доставить целевому серверу), упаковывает её в IP-пакет и передаёт первому транзитному узлу. В заголовке такого IP-пакета есть поле TTL (Time To Live) — время жизни пакета. Оно определяет количество хопов, через которые пакет может пройти. На каждом узле TTL уменьшается на единицу. Если на пути к удалённому адресату время жизни пакета станет равно 0, маршрутизатор отбросит пакет и отправит источнику ICMP-сообщение об ошибке «Time Exceeded» (время истекло).
Этот принцип лежит в основе работы утилит Tracert и Traceroute, однако между ними есть отличия. Рассмотрим каждую утилиту отдельно.
Tracert отправляет на хост назначения ICPM-запрос «Echo Request» с TTL=1. Первый маршрутизатор, который получит запрос, проверяет, кому он предназначен. Если маршрутизатор не является целевым хостом, он уменьшает TTL на 1, отбрасывает пакет и отправляет ICMP-сообщение источнику, так как время жизни теперь равно 0. В этом сообщении маршрутизатор указывает информацию о себе и причину дропа пакета. Получив сообщение, Tracert запоминает этот маршрутизатор как первый хоп (прыжок) и отправляет следующий пакет, но уже с TTL=2. Первый хоп успешно обрабатывает новый пакет, уменьшает время его жизни на 1 и передаёт дальше. Следующий маршрутизатор тоже выполняет проверку хоста назначения и, если пакет предназначен не ему, уменьшает TTL, отбрасывает пакет и отправляет ICMP-сообщение источнику. Tracert запоминает второй хоп, снова увеличивает TTL на 1 и отправляет следующий пакет. Эти действия будут повторяться до тех пор, пока пакет не достигнет целевого хоста. Когда запрос попадёт к целевому хосту, этот хост в ответ направит ICMP «Echo Reply». Источник воспримет это как завершение трассировки.
Утилита Traceroute вместо ICMP-запроса отправляет 3 UDP-пакета на определенный порт целевого хоста и ожидает ответа о недоступности этого порта. Первый пакет отправляется с TTL=1, второй с TTL=2 и так далее, пока запрос не попадёт адресату. Отличие от Tracert в том, как Traceroute понимает, что трассировка завершена. Так как вместо ICMP-запроса он отправляет UDP-запрос, в каждом запросе есть порт отправителя (Sourсe) и порт получателя (Destination). По умолчанию запрос отправляется на закрытый порт 34434. Когда запрос попадёт на хост назначения, этот хост отправит ответ о недоступности порта «Destination port unreachable» (порт назначения недоступен). Это значит, что адресат получил запрос. Traceroute воспримет этот ответ как завершение трассировки.
Если Tracert работает по протоколу ICMP, то какой протокол используется командой Traceroute? По умолчанию используется протокол UDP, но traceroute может отправить и ICMP-запрос «Echo Request», как Tracert. Такой способ пригодится, если хоп не отвечает на UDP-пакет.
Что такое трассировка маршрута в Windows (tracert) и Linux (traceroute): разбор Бородача
Всем привет! Как вы уже поняли, сегодня я подробно, но максимально кратко попробую рассказать про то – что же такое трассировка маршрута в локальных и глобальных сетях. Также расскажу, в чем отличие измерения трассировки в Windows и Linux. Некоторые думают, что при вводе примерно одинаковых команд инженер будет получать одну и ту же информацию, но на деле это не совсем так – об этом поподробнее чуть ниже. Если у вас будут какие-то вопросы и дополнения, то пишите в комментариях.
Определение
Трассировка – по сути это тестирование, при котором пользователь может увидеть, по какому пути проходит пакет данных до конечного сервера. То есть через какие узлы он проходит и с какой задержкой. Например, при стандартной команде «Ping» вы получите информацию о времени отклика или время отправки и приема пакета. А при трассировке вы увидите через какие IP узлов проходит этот самый пакет до конечного сервера.
Часто данной утилитой пользуются инженеры или системные администраторы, чтобы выявить слабые стороны сети. В общем, штуковина полезная почти для всех. Далее я расскажу, как сделать трассировку до сайта или до выделенного игрового сервера, а также как вообще ею пользоваться.
Windows
В «окнах» данную функцию выполняет системный модуль или утилита «Tracert». Как вы понимаете она расположена в папке «System32», как и другие подобные микропрограммы. Для запуска обычно нужно использовать командную строку. Утилита спокойно работает как с доменными именами, так и с IP адресами, в том числе IPv4 и IPv6. Также плюс в том, что её не нужно устанавливать и она идет в стандартном пакете Windows на всех версиях: XP, 7, 8, 8.2 и 10.
А теперь давайте попробуем её использоваться. Для этого вам нужно запустить командную строку. В Windows 7 переходим в «Пуск» – «Все программы» – открываем папку «Стандартные», а после этого нажимаем правой кнопкой по командной строке и открываем с правами администратора.
ПРИМЕЧАНИЕ! Также можно открыть через + R и команду «CMD».
В Windows 10 достаточно нажать правой кнопкой по «Пуску» и далее выбрать консоль с админ правами.
Далее все делается достаточно просто – сначала прописываем команду «tracert», а потом через пробел выписываем IP адрес сервера. Я в качестве примера использовал один известный DNS серверов:
Плюс ещё в том, что можно использовать не только IP, но также и доменное имя, которое состоит из букв. Давайте для примера проведем тест с Яндексом:
tracert yandex.ru
Тут мы видим вид нескольких шагов. Каждый шаг – это прохождение пакета от одного узла к другому. Так же вы видите время прохождения, которое пишется в миллисекундах. Далее вы видите название узла и IP адрес, который указан в скобках. Если же узел не сможет ответить или время ожидания будет превышено, то в столбце времени вы увидите звёздочку (*).
А теперь давайте я расскажу про проблему данного тестирования. Проблема состоит в том, что команда не показывает некоторые узлы, а именно коммутаторы, которые работают со вторым уровнем модели OSI. А все из-за того, что у них нет интерфейсного представления подключенных устройств в IP виде. То есть коммутация происходит на втором уровне, где нет IP адресов, а связь идет с помощью таблицы MAC-адресов. И понятно дело, что в таблице такие узлы не отображаются.
Более подробно советую также почитать про модель OSI и про коммутаторы.
В итоге для данной команды все коммутаторы, работающие со вторым уровнем модели OSI – просто невидимы. «Tracert» использует ICMP (Internet Control Message Protocol) протокол, которые передает данные только в IP пакете, со значением TTL. TTL – это время жизни пакета.
Изначально при отправке пакета на первый узел значение TTL равно единице. И при трассировке отправляется сразу три пакета – именно поэтому мы видим три столбца времени. Если все пакеты приходят обратно, то мы видим время по всем трем столбцам. Далее TTL увеличивается на единицу, и отправляется ещё три пакета на следующий узел. И так до победного конца, пока последний запрос не достигнет конечного узла.
ПРИМЕЧАНИЕ! Если вы видите звездочку, но пакет все равно идет через данный узел, то скорее всего на данном маршрутизаторе или сервере есть настройка, которая не обрабатывает ICMP запросы. Очень часто их используют для DDoS атак – поэтому их обработку иногда отключают.
Как у любой утилиты тут есть список дополнительных параметров, которые могут немного изменить тестирования. Для вызова нужно ввести:
Команда очень полезная не только для работы и тестирования рабочих сетей, но даже для выявления проблем с интернетом. Помню у моего друга постоянно был высокий отклик в «Counter-Strike», но он все никак не мог понять почему – ведь у меня в соседнем доме был пинг на порядок меньше. При трассировке он увидел, что на первом (провайдерском) узле есть сильный застой пакетов. В итоге он обратился к оператору, и им поменяли старый коммутатор, который стоял там, неверное ещё с эпохи Российской Империи.
Linux
Итак, в Windows мы уже разобрались, что трассировку выполняет утилита «tracert.exe». В Linux утилита имеет другое название: «traceroute», – и также выполняет данную функцию, но немного по-другому.
Вспомним немного как работает tracert на примере нижней картинки:
А проблем в том, что у «tracert» нет возможности сделать запрос с портом, что делает его немного узконаправленным. «Traceroute» работает на основе совершенно другого протокола – UDP. По сути UDP протокол делает запрос именно по портам. А окончание трассировки при достижении пакетом конечного узла происходит в том случае, когда при каждом шаге при увеличении номера порта он становится закрытым на конечном сервере.
Запускаем программу аналогично через консоль. Также у неё есть свои параметры.
Кстати, есть возможность при трассировке использовать не UDP, а ICMP протокол, для этого нужно дописать параметр «-I».
Но что делать, если надо на Windows сделать трассировку по UDP протоколу и использование портов? Для этого нужно будет использовать стороннюю микропрограмму: «tcptrace». Для трассировки маршрута по TCP (и UDP) можно использовать «tcptraceroute».
Разница между ‘Tracert` и`Traceroute’
программа, используемая для определения задержка между терминалом и адрес назначения:
(А) Команда Tracert (Б) Трассировка
(С) Пинг (Д) Поп
Traceroute-это утилита, которая записывает маршрут (конкретные компьютеры шлюза на каждом прыжке) через Интернет между вашим компьютером и указанным конечным компьютером. Он также рассчитывает и отображает количество времени каждый прыжок занял.
команда tracert-это команда командной строки, которая используется, чтобы показать несколько деталей о пути, который пакет принимает от компьютера или устройства вы находитесь на любой пункт назначения вы укажете. Иногда вы также можете увидеть команду tracert, называемую командой trace route или traceroute.
Мне кажется, что оба могут.
в чем разница между ними, объясните, пожалуйста?
3 ответов
Tracert и traceroute дать вам для каждого узла между источником и пунктом назначения время задержки. Некоторые серверы резервируют разную пропускную способность для различных служб (udp, http. ) так тестирование разных портов (- P опция udp, tcp, icmp. ) дает различную информацию.
Полезно понимать, где вы проводите больше времени. Это полезно, когда можно изменить маршрутизацию, чтобы избежать этих узких мест. Это медленнее, чем пинг потому постараюсь, как сказано, спросить у каждого узла между отправлением и получателем.
для того, что я знаю, pop это протокол для электронной почты, и это возможно есть набор команд, чтобы проверить скорость этой службы тоже.
распространенный способ измерения задержки сети на удаленном хосте-это использование утилиты ping, которая использует пакеты Эхо-запросов и ответов ICMP. В некоторых случаях, однако, ICMP трафик блокируется брандмауэрами, что делает утилиту ping бесполезной с хостами за ограничительными брандмауэрами. В таком случае необходимо будет полагаться на инструменты измерения уровня 3, которые используют пакеты TCP / UDP, так как эти пакеты уровня 3, более вероятно, обойдут общие правила межсетевого экрана.
Tracert vs Traceroute
В чем отличие маршрута пакета от его пути?
Стандартный механизм маршрутизации пакетов в интернете — per hop behavior — то есть каждый узел в сети принимает решение куда ему отправить пакет на основе информации, полученной от протоколов динамической маршрутизации и статически указанных администраторами маршрутов.
Маршрут — это интерфейс, в который нам надо послать пакет для достижения какого то узла назначения и адрес следующего маршрутизатора (next-hop):
Что такое путь? Путь — это список узлов, через которые прошел (пройдет) пакет:
Путь пакета можно посмотреть с помощью утилит tracert в OC Windows и traceroute в GNU/Linux и Unix-подобных системах. (другие команды, типа tracepath мы не рассматриваем).
Многие считают что этих утилит один и тот же принцип работы, но это не так. Давайте разберемся.
Итак, утилита tracert.
В основе работы данной утилиты лежит протокол icmp. Рассмотрим вот такую схему:
Host отправляет по указанному в его таблице маршрутизации маршруту ICMP Echo-Request с ttl 1. Router1, получив такой пакет, проверит адрес назначения — может быть пакет ему. Так как данный пакет адресован другому хосту, то Router1 считает себя транзитным узлом, декрементирует ttl пакета и отбрасывает его, так как время жизни пакета становится равным 0. Так как пакет был дропнут, Router1 отправляет источнику пакета icmp сообщение с указанием причины дропа — Time Exceeded. Утилита tracert, получив данное icmp сообщение, указывает Router1 как первый хоп (информация об адресе указана в icmp сообщении). Далее процесс повторяется с инкрементированием ttl, пока ttl icmp запроса не будет равен количеству хопов между узлом-отправителем и узлом получателем. В данном примере Server1 является узлом назначения. Получив пакет, он проверит адрес назначения, увидит, что запрос адресован ему и отправит ICMP Echo-Reply, что и будет являться для утилиты tracert триггером к окончанию трассировки.
Traceroute — данная утилита работает по иному принципу, хоть и вывод команды похож на вывод предыдущей.
Traceroute основана не на ICMP Echo-Request, а на отправке udp фрагментов и получения сообщения о доступности/недостижимости порта. Вернемся к прошлой схеме. Host генерирует udp фрагмент, инкапсулирует его в IP пакет и выставляет ttl=1. Router1, являясь транзитным узлом, ответит на данный пакет icmp сообщением об окончании времени жизни пакета. Утилита traceroute, получив данное сообщение, указывает адрес источника icmp пакета (Router1) как адрес первого хопа. Далее процесс повторяется с инкрементированием ttl пакета. Всё практически так же, как и в tracert. Но ведь мы не отправляем ICMP Echo-Request, как утилита traceroute поймет, что трассировка закончена? Все просто — в udp заголовке есть поля source и destination порт. Логично, что source порт будет любым портом выше 1023. А каким указать destination порт? Как было сказано выше, работа утилиты traceroute основана на получении сообщения о недостижимости или доступности порта назначения. То есть мы отправляем udp фрагмент с порта 45000 ( к примеру) на порт 33434 (именно этот порт используется по умолчанию). Как и в предыдущем случае, Server1 является узлом назначения. Получив пакет, он распаковывает его и должен передать его протоколам высшего уровня. Но так как порт 33434 по умолочанию будет закрыт на сервере, то Server1 формирует icmp сообщение о недостижимости порта назначения (ICMP Type 3 «Destination Unreachable» Code 3 «Port Unreachable»). Получив данное сообщение, утилита traceroute считает трассировку законченной. В процессе трассировки номер порта назначения будет инкрементироваться при каждой попытке ( 33434, 33435 и т д). Может получится так, что порт назначения будет открыт. В данном случае сервер отправит на хост-инициатор например TCP ACK если для трассировки используются TCP SYN пакеты, что тоже будет являться триггером к окончанию трассировки.
Вывод:
Утилита traceroute позволяет сделать трассировку с указанием порта назначения.
Для этого разберем пример ниже:
Возьмем предыдущую схему и сделаем трассировку:
С использованием TCP SYN пакетов:
C использованием UDP пакетов:
Как видите трассировка прошла успешно. Мы видим путь до указанного хоста.
А теперь повесим на интерфейс Router4 фильтр на in (как указано на рисунке):
Снова сделаем трассировку:
Примечание: Возможен случай, когда пакеты будут дропаться без отправки ICMP сообщений ( отправка в Null-интерфейс в Cisco/Huawei или discard в Juniper). В данном случае трассировка будет идти пока не кончится максимальное TTL, указанное в утилите traceroute (по умолчанию максимум 30 хопов, но можно задать вручную до 255, правда обычно достаточно 15-18 хопов) или ее не прервет администратор, а в выводе будут звездочки.
Примечание: Появление звездочек вместо адресов хостов может быть обусловлено различными причинами и хорошо описано тут
Надеюсь мы разобрались в основных принципах работы данных утилит. Если надо сделать трассировку по какому то порту в Windows системах, можно использовать сторонние утилиты, к примеру tcptrace.