Основные моменты работы и анализ
Чтобы провести трассировку пакетов данных от собственного ПК до сервера, введите его IP-адрес после основной команды.
Предназначение Traceroute и Tracert
Для мониторинга пакетной передачи в GNU/Linux, Cisco и macOS используется команда Traceroute, а в Windows — Tracert. Пакеты данных, которые передаются в сеть, проходят не сразу от получателя к пользователю, а идут через узлы — ноды. Поскольку эти хосты не являются целевыми, их еще называют транзитными узлами.
Предположим, вы запустили на своем компьютере браузер и ввели адрес веб-ресурса, содержимое которого собираетесь просмотреть. Браузер посылает запрос, который идет от маршрутизатора к маршрутизатору и так до тех пор, пока он не достигнет узла назначения. На сленге системных администраторов каждый маршрутизатор
или любой промежуточный пункт назначения называется «хопом»
от слова hop — прыжок.Такая утилита-трассировщик работает только в одном направлении — от источника к получателю, обратная трассировка может не совпадать с прямой и идти совершенно по иному маршруту, это нормально и не должно удивлять. Кроме того, ICMP-ответ может прийти с опозданием или вообще потеряться
поэтому в настройках утилиты как правило указывается несколько попыток.
В дополнение к этому на промежуточных узлах стоит ограничение по количеству ответов на ICMP-запросы. По этой причине Tracert является неточным инструментом для выявления неполадок сети.
Между утилитами Tracert и Traceroute есть небольшое отличие и в механизме трассировки: Tracert выполняет трассировку без указания порта у хоста назначения, а Traceroute наоборот — использует порт.
Механизм работы трассировки сети
Каждый посылаемый пакет сопровождается параметром TTL
Time to live — время жизни IP-пакетов. Это восьмиразрядное поле IP-заголовка, определяющее максимальное число шагов при трассировке. Благодаря этому параметру пакет не ходит по сети бесконечно в случае каких-то коллизий в маршрутизации
подобные ошибки иногда случаются в реальной жизни, для самих пакетов подобная ситуация зацикливания исключена на уровне дизайна. Максимальное значение TTL=255.
В начале трассировки Tracert посылает первый запрос с параметром TTL = 1. Первый хоп, получивший сообщение, не является целевым и уменьшает величину TTL на 1. Поскольку TTL при этом обнуляется, Tracert возвращает источнику ICMP-сообщение в котором содержится информация о причинах отбрасывания пакета.
Далее Tracert посылает новый запрос с TTL = 2 и первый маршрутизатор в этот раз снова уменьшает на единицу параметр TTL у транзитного пакета, после чего передает данные второму хопу. Тот анализирует поступившие данные, также уменьшает TTL на один и, если получил ноль, возвращает источнику ICMP-сообщение.
Формат командной строки
Общий формат вызова утилиты выглядит следующим образом:
tracert [-d] [-h глубина трассировки] [-j перечень узлов] [-w таймаут] [-R] [-S адрес источника эхо-запроса] [-4] [-6] конечное_Имя
Параметры командной строки:
Пример трассировки
Рассмотрим пример трассировки. Для оценки доступности хоста, мы можем запустить утилиту для обмена пинг-пакетами и посмотреть какая будет задержка при соединении с удаленным хостом. При значении TTL = 1 нам ответит первый хост, при TTL = 2 мы получим отклик от второго сервера и так далее.
В целом, результат, который мы получим, будет кумулятивным по всем узлам маршрута и задержка в 200-300 миллисекунд нам ни о чем не скажет. Медлительность передачи данных может объясняться проблемами с каким-то одним маршрутизатором, определить который можно при помощи более подробной трассировки.
Запуск в Linux
Чтобы запустить режим трассировки через ICMP в UNIX/Linux, следует использовать ключ -I в режиме суперпользователя root. В остальных случаях запуск трассировки можно выполнять от имени любого пользователя.
Наиболее важные аргументы для управления трассировкой в Linux:
Проблема с файрволами
Traceroute выполняет запросы не только по протоколу ICMP. Однако не имеющие достаточного опыта системные администраторы часто изменяют дефолтные настройки файервола включая разрешение протокола ICMP, после чего получают рабочий ping с нерабочей функцией Traceroute.
Альтернативные инструменты
tracepath — утилита, которая отслеживает путь передачи пакета от источника к пункту назначения, может использоваться как альтернатива traceroute для IPv6.
Программа использует стандартный UDP-порт или какой-то случайный порт. Утилита похожа на traceroute, только не требует прав суперпользователя и не имеет дополнительных опций запуска.
tracemap — программа, позволяющая выполнять трассировку пути для нескольких хостов одновременно. Информация, полученная в результате трассировки визуализируется в виде цветной диаграммы, на которой изображены узлы и топология сетевых подключений.
Сгенерированное изображение помогает наглядно увидеть как сгруппированы разнообразные интернет-ресурсы, насколько они физически далеко друг от друга отстоят. Диаграмма также может быть полезна при построении филиальной сети как дополнительный источник информации при выборе провайдера (аплинка).
Tracert vs traceroute
В чем отличие маршрута пакета от его пути?
Стандартный механизм маршрутизации пакетов в интернете — per hop behavior — то есть каждый узел в сети принимает решение куда ему отправить пакет на основе информации, полученной от протоколов динамической маршрутизации и статически указанных администраторами маршрутов.
Маршрут — это интерфейс, в который нам надо послать пакет для достижения какого то узла назначения и адрес следующего маршрутизатора (next-hop):
R1#sh ip rou | i 40. 40.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
O 40.0.0.0/31 [110/3] via 20.0.0.0, 00:01:54, FastEthernet0/0
O 40.1.1.1/32 [110/4] via 20.0.0.0, 00:00:05, FastEthernet0/0Что такое путь? Путь — это список узлов, через которые прошел (пройдет) пакет:
1 10.0.0.1 16.616 ms 16.270 ms 15.929 ms 2 20.0.0.0 15.678 ms 15.157 ms 15.071 ms 3 30.0.0.1 26.423 ms 26.081 ms 26.744 ms 4 40.0.0.0 48.979 ms 48.674 ms 48.384 ms 5 100.0.0.2 58.707 ms 58.773 ms 58.536 msПуть пакета можно посмотреть с помощью утилит 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 триггером к окончанию трассировки.
Вывод:
Icmp -протокол третьего уровня, и о портах он не знает ничего. Поэтому сделать 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 пакетов:
bormoglots@ubuntu-server-s1:~$ sudo traceroute -T -p 22 -w 1 -n 100.0.0.2
traceroute to 100.0.0.2 (100.0.0.2), 30 hops max, 60 byte packets 1 10.0.0.1 16.616 ms 16.270 ms 15.929 ms 2 20.0.0.0 15.678 ms 15.157 ms 15.071 ms 3 30.0.0.1 26.423 ms 26.081 ms 26.744 ms 4 40.0.0.0 48.979 ms 48.674 ms 48.384 ms 5 100.0.0.2 58.707 ms 58.773 ms 58.536 msC использованием UDP пакетов:
bormoglots@ubuntu-server-s1:~$ sudo traceroute -U -p 22 -w 1 -n 100.0.0.2
traceroute to 100.0.0.2 (100.0.0.2), 30 hops max, 60 byte packets 1 10.0.0.1 7.102 ms 6.917 ms 6.680 ms 2 20.0.0.0 17.021 ms 16.838 ms 17.051 ms 3 30.0.0.1 31.035 ms 30.859 ms 30.658 ms 4 40.0.0.0 41.124 ms 40.941 ms 40.728 ms 5 100.0.0.2 51.291 ms 51.045 ms 50.720 msКак видите трассировка прошла успешно. Мы видим путь до указанного хоста.
А теперь повесим на интерфейс Router4 фильтр на in (как указано на рисунке):
R4#sh run int fa0/0
Building configuration...
Current configuration : 121 bytes
!
interface FastEthernet0/0 ip address 40.0.0.0 255.255.255.254 ip access-group deny-to-server in duplex half !
end
R4#sh access-lists deny-to-server
Extended IP access list deny-to-server 10 deny tcp any host 100.0.0.2 log (32 matches) 20 deny udp any host 100.0.0.2 log (29 matches) 30 permit ip any any (128 matches)Снова сделаем трассировку:
bormoglots@ubuntu-server-s1:~$ sudo traceroute -T -p 22 -w 1 -n 100.0.0.2
traceroute to 100.0.0.2 (100.0.0.2), 30 hops max, 60 byte packets 1 10.0.0.1 4.575 ms 4.490 ms 4.367 ms 2 20.0.0.0 18.431 ms 18.359 ms 29.573 ms 3 30.0.0.1 30.579 ms 30.690 ms 30.722 ms 4 40.0.0.0 52.518 ms !X 62.977 ms !X 62.898 ms !Xbormoglots@ubuntu-server-s1:~$ sudo traceroute -U -p 22 -w 1 -n 100.0.0.2
traceroute to 100.0.0.2 (100.0.0.2), 30 hops max, 60 byte packets 1 10.0.0.1 5.614 ms 5.523 ms 5.689 ms 2 20.0.0.0 18.364 ms 18.629 ms 18.556 ms 3 30.0.0.1 42.289 ms 42.225 ms 42.143 ms 4 40.0.0.0 41.984 ms !X 41.898 ms !X 41.815 ms !XТеперь трассировка закончилась на предпоследнем хопе и в выводе появились знаки! Х. Почему это произошло? Router4 получив пакет к Server1 дропает его, так как он попадает под запрещающее правило на входящем интерфейсе и отправляет хосту-инициатору сообщение о том, что пакет был зафильтрован (ICMP Type 3 «Destination Unreachable» Code 13 — «Communication Administratively Prohibited»). Это тоже сообщение о недостижимости порта назначения. Поэтому утилита traceroute получив такое сообщение, заканчивает свою работу так не добравшись до хоста назначения. В данном случае в выводе важно понять, что пакеты были именно зафильрованы, о чем нам подсказывает знак !X (в Unix) или знак !A (в Cisco):
R1#traceroute 100.0.0.2
Type escape sequence to abort.
Tracing the route to 100.0.0.2 1 20.0.0.0 24 msec 24 msec 16 msec 2 30.0.0.1 16 msec 36 msec 40 msec 3 40.0.0.0 !A !A !AПримечание: Возможен случай, когда пакеты будут дропаться без отправки ICMP сообщений ( отправка в Null-интерфейс в Cisco/Huawei или discard в Juniper). В данном случае трассировка будет идти пока не кончится максимальное TTL, указанное в утилите traceroute (по умолчанию максимум 30 хопов, но можно задать вручную до 255, правда обычно достаточно 15-18 хопов) или ее не прервет администратор, а в выводе будут звездочки.
Примечание: Появление звездочек вместо адресов хостов может быть обусловлено различными причинами и хорошо описано тут
Собственно говоря, утилита traceroute может работать как и утилита tracert с использованием ICMP Echo-Request. Для этого ее следует запустить с ключом -I. В примеры выше фильтр не блокирует ICMP, поэтому трассировка с использованием данного протокола покажет нам весь путь пакета:
bormoglots@ubuntu-server-s1:~$ sudo traceroute -I -w 1 -n 100.0.0.2
traceroute to 100.0.0.2 (100.0.0.2), 30 hops max, 60 byte packets 1 10.0.0.1 4.073 ms 3.986 ms 3.890 ms 2 20.0.0.0 19.474 ms 19.389 ms 19.294 ms 3 30.0.0.1 30.147 ms 30.276 ms 30.826 ms 4 40.0.0.0 42.316 ms 42.240 ms 42.145 ms 5 100.0.0.2 52.705 ms 52.622 ms 52.521 msНадеюсь мы разобрались в основных принципах работы данных утилит. Если надо сделать трассировку по какому то порту в Windows системах, можно использовать сторонние утилиты, к примеру tcptrace.
Спасибо за внимание!
Tracert связанные команды
Команда tracert часто используется с другими командами командной строки, такими как ping, ipconfig, netstat, nslookup и другими.
Команда pathping похожа на tracert, но также показывает задержку в сети и информацию о потерях.
Windows
В «окнах» данную функцию выполняет системный модуль или утилита «Tracert». Как вы понимаете она расположена в папке «System32», как и другие подобные микропрограммы. Для запуска обычно нужно использовать командную строку. Утилита спокойно работает как с доменными именами, так и с IP адресами, в том числе IPv4 и IPv6.
А теперь давайте попробуем её использоваться. Для этого вам нужно запустить командную строку. В Windows 7 переходим в «Пуск» – «Все программы» – открываем папку «Стандартные», а после этого нажимаем правой кнопкой по командной строке и открываем с правами администратора.
ПРИМЕЧАНИЕ! Также можно открыть через R и команду «CMD».
В Windows 10 достаточно нажать правой кнопкой по «Пуску» и далее выбрать консоль с админ правами.
Далее все делается достаточно просто – сначала прописываем команду «tracert», а потом через пробел выписываем IP адрес сервера. Я в качестве примера использовал один известный DNS серверов:
tracert 8.8.8.8
Плюс ещё в том, что можно использовать не только IP, но также и доменное имя, которое состоит из букв. Давайте для примера проведем тест с Яндексом:
Ключи для команды
Чтобы полноценно закрепить материал и понять – как работает трасерт, и какими значениями есть возможность оперировать, воспользуйтесь специальными ключами. Запустите .exe-файл «tracetcp» или программу через командную строку и введите tracert /? Для вывода всех ключей и их значений на экран.
Вот основные:
| Ключ | Назначение |
| -d | В 4 столбце выводит только IP-адреса (ускорение трассировки) |
| -h | Выставление количества прыжков ограничением (макс TTL – 255, по умолчанию – 30) |
| -w | Выставление таймаута ответов в мс |
| -j | Маршрут выбирается по представленному после ключа списку веб-узлов (доступно в IPv4) |
| -R | Провести трассировку пути по IPv6 |
| -S | Начало трассировки с того узла, что задан после ключа |
| -4 | Прыжки только по протоколам IPv4 |
| -6 | Прыжки только по протоколам IPv6 |
Наличие команды tracert
Команда tracert доступна из командной строки во всех операционных системах Windows, включая Windows 10, Windows 8, Windows 7, Windows Vista, Windows XP и более ранние версии Windows.
Доступность некоторых командных переключателей tracert и другого синтаксиса команд tracert может отличаться в зависимости от операционной системы.
Примеры команд tracert
tracert 192.168.1.1
В приведенном выше примере команда tracert используется для отображения пути от сетевого компьютера, на котором команда tracert выполняется сетевым устройством, в данном случае – маршрутизатором в локальной сети, которому назначен 192.168. 1.1 IP-адрес.
Результат, отображаемый на экране, будет выглядеть примерно так:
Трассировка маршрута до 192.168.1.1 в течение максимум 30 прыжков
1 <1 мс <1 192.168.1.254
2 <1 мс <1 мс <1 мс 192.168.1.1 < br /> Трассировка завершена.
В этом примере вы можете видеть, что tracert обнаружил сетевое устройство, используя IP-адрес 192.168.1.254 , скажем, сетевой коммутатор, за которым следует пункт назначения 192.168.1.1 роутер.
Синтаксис команды tracert
tracert [ -d ] [ -h MaxHops ] [ -w TimeOut ] [ -4 ] [ -6 ] target [ /? ]
См. Как читать командный синтаксис, если вам сложно понять синтаксис tracert, как это показано выше или объяснено в таблице ниже.
| Item | Описание |
| -d | Этот параметр не позволяет tracert преобразовывать IP-адреса в имена хостов, что часто приводит к гораздо более быстрым результатам. |
| -h MaxHops | Этот параметр tracert указывает максимальное количество прыжков при поиске target . Если вы не укажете MaxHops и <30> target не будет найден в течение 30 прыжков, tracert перестанет искать. |
| -w TimeOut | Вы можете указать время в миллисекундах, чтобы разрешить каждому ответу до истечения времени ожидания, используя эту опцию tracert. |
| -4 | Этот параметр заставляет tracert использовать только IPv4. |
| -6 | Этот параметр заставляет tracert использовать только IPv6. |
| цель | Это пункт назначения, либо IP-адрес, либо имя хоста. |
| /? | Используйте переключатель справки с командой tracert, чтобы показать подробную справку о нескольких параметрах команды. |
Существуют и другие, менее часто используемые опции для команды tracert, включая [ -j HostList ], [ -R ] и [ -S SourceAddress ]. Используйте переключатель справки с командой tracert для получения дополнительной информации об этих параметрах.
Сохраните длинные результаты команды tracert в файл с оператором перенаправления. Для получения справки ознакомьтесь с разделом Как перенаправить вывод команды в файл или ознакомьтесь с советами по использованию командной строки, а также другими полезными советами.
Заключение
Теперь, когда вы разобрались с принципами трассировки и изучили возможности Tracert и Traceroute, вы можете изучить свою сеть и выявить неисправности ее узлов. Механизм анализирования пути сетевых пакетов очень прост и может быть задействован на любой операционной системе, включая Android и iOS.

![Command-Line Tool to Diagnose Network Routing Issues [Examples] Command-Line Tool to Diagnose Network Routing Issues [Examples]](https://msconfig.ru/wp-content/uploads/2023/05/windows-11-terminal-2-120x120.png)

