Как утилита traceroute вычисляет задержку (RTT) до каждого промежуточного узла (hop)?

«Как утилита traceroute вычисляет задержку (RTT) до каждого промежуточного узла (hop)?» — вопрос из категории Сети, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Traceroute вычисляет задержку, измеряя время между отправкой пробного пакета и получением ответа об ошибке от каждого маршрутизатора на пути.

Алгоритм:

  1. Отправляется серия пакетов (обычно 3) с TTL (Time To Live) = 1.
  2. Первый маршрутизатор уменьшает TTL до 0, отбрасывает пакет и отправляет обратно ICMP-сообщение "Time Exceeded".
  3. Traceroute фиксирует время между отправкой и получением ICMP-ответа — это RTT (Round-Trip Time) для первого хопа.
  4. Процесс повторяется с TTL=2, затем 3 и так далее, пока пакеты не достигнут цели.

Пример вывода и расчет:

traceroute to google.com (142.250.185.78), 30 hops max
 1  router.local (192.168.1.1)  1.234 ms  1.456 ms  1.678 ms
 2  10.10.10.1 (10.10.10.1)      5.112 ms  5.234 ms  5.567 ms
  • Три числа для каждого хопа — это RTT для трех отправленных пакетов.
  • Задержка для хопа 2 (~5 мс) включает время до хопа 1 и обратно, а также время между хопом 1 и 2.

Ключевые моменты:

  • Асимметричные пути: Путь до узла и обратно может быть разным, что влияет на точность.
  • Фильтрация ICMP: Некоторые маршрутизаторы не отправляют "Time Exceeded", отображаясь как *.
  • Разные методы: traceroute может использовать UDP, ICMP или TCP пакеты (например, traceroute -T для TCP SYN).