Как посмотреть все промежуточные узлы (hops) при маршрутизации пакета?

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

Ответ

Для трассировки маршрута используются утилиты traceroute (Linux/macOS) и tracert (Windows). Они отправляют пакеты с последовательно увеличивающимся TTL (Time to Live), чтобы заставить каждый промежуточный маршрутизатор отправить обратно сообщение об ошибке (ICMP Time Exceeded).

Основные команды:

# Linux/macOS
$ traceroute -I example.com  # Использует ICMP Echo (как ping)
$ traceroute -T example.com  # Использует TCP SYN (порт 80)

# Windows
> tracert example.com

Более продвинутые инструменты для DevOps:

  • mtr (My TraceRoute): Комбинирует traceroute и ping, показывает статистику потерь и задержек в реальном времени.
    $ mtr --report example.com  # Однократный отчет
    $ mtr example.com           # Интерактивный режим
  • tcptraceroute: Использует TCP-пакеты, что помогает обходить фильтры на ICMP/UDP.
    $ tcptraceroute example.com 443

Ключевые моменты для диагностики:

  1. Звездочки (*) в выводе означают, что узел не ответил (часто из-за firewall, отключенных ICMP-ответов или нагрузки).
  2. Резкий скачок задержки на определенном hop может указывать на проблемный узел или перегруженный канал.
  3. В облачных средах (AWS, GCP) внутренняя маршрутизация может отличаться от публичной.