Traceroute - каждый пакет имеет TTL == 1

Я работаю над Wireshark lab-IP в Компьютерные сети - подход сверху вниз , и я не понимаю, почему каждый пакет, который обычно истек, имеет TTL 1.

Вот мой файл захвата Wireshark. https://www.dropbox.com/s/rr5wgze9j20gzvu/traceroute-56.pcapng? дл = 0

Я захватил выполнение программы traceroute в Linux (с возможностью 56 байтов), выполненной с помощью следующей команды:

  traceroute http://gaia.cs.umass.edu 56
 

Вы можете видеть, что большая часть TTL == 1 пакета и я не знаю, почему, поскольку я узнал, что каждый последующий прыжок имеет TTL +1 (или больше).

P.S:.

  • Я использую Lubuntu на VMware с мостовой сетью для хоста.
  • Я захватил его с помощью wirehark на главной машине (Windows)
  • Я подключен к беспроводной точке доступа, используя собственный DHCP-сервер поверх протокола NAT.
13 голосов | спросил ksp0422 16 +04002014-10-16T12:17:51+04:00312014bEurope/MoscowThu, 16 Oct 2014 12:17:51 +0400 2014, 12:17:51

2 ответа


10

Позвольте мне попробовать ответить на это, потому что это немного сложнее, чем может выглядеть изначально.

Кажется, что вы уже знаете основную операцию traceroute , но прежде чем что-либо еще здесь представляет собой очень маленькое резюме:

traceroute пытается определить все промежуточные шаги от вашего хоста к целевому хосту или просто расстояние, то есть количество переходов, от вашего хоста до целевого хоста. Для этого он начинает отправлять пакеты на целевой хост со «случайным» номером порта назначения и TTL, который начинается с 1 и продолжает расти.
Идея заключается в том, что каждый маршрутизатор между ними уменьшает TTL на 1. Таким образом, если TTL достигает 0 (на самом деле это никогда не происходит, поскольку маршрутизатор, который вот-вот уменьшит его до 0, выдаст ошибку до этого), маршрутизатор вернет ICMP «Сообщение об ошибке Время ожидания превышено ", например номер пакета 24 в вашем файле захвата. Из того, что вы получаете от этого, является то, что ваш пункт назначения еще далеко, и именно поэтому вы продолжаете увеличивать TTL.
Когда ваш пакет имеет TTL, который достаточно велик для достижения цели, вы получите другое сообщение об ошибке ICMP: « Destination Unreachable (Port Unreachable) », например. номер пакета 208 в вашем файле захвата. Из того, что вы получаете от этого, является то, что последний использованный TTL - это действительно количество переходов между вами и узлом назначения. Причина, по которой вы получаете сообщение об ошибке, - это просто потому, что вы отправляете сообщение на «случайный» порт, который узел назначения (надеюсь) не слушает.

Теперь перейдем к особенностям вашего файла захвата:
На странице руководства traceroute мы видим, что каждый TTL используется 3 раза (опция '-q'), а используемый по умолчанию протокол UDP (опция '-P'). Изучив первые 3 UDP-пакета, т. Е. пакеты 8-9-10 , мы действительно видим, что TTL равен 1 . Следующие 3, т. Е. 11-12-13 , имеют TTL 2 и так далее. Таким образом, с точки зрения источника все кажется прекрасным.

Затем, через некоторое время, зависящее от задержки сети, мы начинаем получать ожидаемые сообщения об ошибках. Таким образом, мы можем видеть, что пакеты 24-25-26 являются « Время ожидания превышения » и, следовательно, это означает, что пункт назначения находится дальше.

Это повторение попыток и ошибок продолжается до тех пор, пока, наконец, пакет 208 , и вы увидите сообщения об ошибках Недоступный порт ", что означает, что ваш пункт назначения был достигнут.

Считая отправленные вами пакеты и ответы, которые вы действительно можете узнать даже из трассы, на которой работал TTL, но это утомительная задача:)

Надеюсь, что это помогло

ответил George 16 +04002014-10-16T21:16:27+04:00312014bEurope/MoscowThu, 16 Oct 2014 21:16:27 +0400 2014, 21:16:27
13

Ваш клиент отправляет только первые три пакета с TTL из 1. Следующие три отправляются с TTL из 2. Следующие три отправляются с TTL из 3. И так далее и т. д.

Более простой способ увидеть это - установить поле IP TTL как свой собственный столбец в Wireshark. Просто щелкните правой кнопкой мыши значение TTL в любом пакете и выберите «Применить как столбец»: Установить TTL в качестве столбца в Wireshark

Оттуда вы можете видеть, что пакеты 8,9,10 имеют TTL 1. И пакеты 11,12,13 имеют TTL 2. И так далее и т. д. TTL в Traceroute

Это происходит потому, что так работает Traceroute. Он использует преимущества маршрутизатора, когда он уменьшает TTL до 0. Вместо продолжения пересылки пакета он отправляет первоначальному клиенту сообщение «ICMP TTL Expired in Transit» (см. Пакет # 24 в вашем захвате ) .

Итак, как клиент, когда вы отправляете первый набор пакетов с TTL из 1, первый маршрутизатор в пути отвечает сообщением TTL Expired. Затем вы измеряете, сколько времени потребовалось для получения сообщения TTL Expired, когда вы отправляли начальные сообщения, и это дает вам первые три значения в выводе Traceroute.

Затем вы отправляете другой набор из трех пакетов с TTL из 2. Первый маршрутизатор на пути уменьшает это значение до 1, а затем перенаправляет его на следующий маршрутизатор в пути. После приема, когда этот второй маршрутизатор получает его, он уменьшает TTL до 0, что побуждает его отказаться от пакета и отправить TTL Expired в пути.

Процесс продолжается до тех пор, пока ваш клиент не получит сообщение (т. е. три раза) с истечением срока действия TTL с каждого маршрутизатора, находящегося в пути между вами и конечным пунктом назначения, с которым работает ваш traceroute.

ответил Eddie 16 +04002014-10-16T21:02:51+04:00312014bEurope/MoscowThu, 16 Oct 2014 21:02:51 +0400 2014, 21:02:51

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132