linuxlab.io
Учебники▾
  • Линукс и сети
    Файловая система, процессы, TCP/IP, BGP и OSPF
    →
  • Terraform и IaC
    HCL, state, plan/apply на sandbox LocalStack
    →
  • Git и GitHub
    Объектная модель, plumbing, ветвление, GitHub Actions
    →
Все учебники →
ЦеныО платформеВойтиСоздать аккаунт
/
  • Введение
  • Уроки
  • How it works
  • Симулятор
  • База знаний
  • Собеседование
Index
Categories
All entries
Footer
linuxlab-УчебникиЦеныО платформеКонфиденциальность и куки
Copyright © 2026 LinuxLab. Все права защищены.
home/linux/kb/Сеть: L2 / L3/traceroute

kb/network-l2-l3 ── Сеть: L2 / L3 ── intermediate

Traceroute - как увидеть путь пакета через интернет

Утилита, показывающая каждый роутер на пути до удалённого хоста. Работает через хитрый трюк: шлёт пакеты с **возрастающим TTL** (1, 2, 3, ...) и собирает ответы «time exceeded» от роутеров, которые дропают такие пакеты.

view as markdownaka: tracert, tracepath

Зачем нужен

Когда твой пинг до сайта медленный - где затык? Где-то у тебя дома, у провайдера, на магистрали, у дата-центра удалённого сервера? Без traceroute это слепое гадание. С ним - видишь каждый роутер по пути и время ответа на каждом.

Как работает (трюк с TTL)

Каждый IP-пакет имеет поле TTL (Time To Live) - счётчик хопов. Каждый роутер декрементирует TTL на 1; если стало 0 - пакет дропается и отправителю летит icmp type 11 (time exceeded).

Traceroute эксплуатирует это:

  1. Шлёт пакет с TTL=1. Первый же роутер декрементирует до 0, дропает, шлёт ICMP time-exceeded. Мы получили адрес первого роутера
  2. Шлёт пакет с TTL=2. Первый роутер декрементирует до 1, форвардит. Второй декрементирует до 0, дропает, шлёт ICMP. Мы получили второй роутер
  3. И так далее, увеличивая TTL пока не получим ответ от самого хоста

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

Реализации различаются

  • Linux traceroute по умолчанию шлёт UDP на «непонятный» высокий порт. Для tcp используется флаг -T, для icmp - -I
  • Windows tracert шлёт ICMP echo-request (как ping)
  • macOS - UDP по умолчанию (как Linux)

Это важно: фаерволы могут пропускать ICMP, но дропать UDP - тогда traceroute показывает звёздочки, хотя ping работает. Решение: попробовать traceroute -I (ICMP) или tcptraceroute (использует TCP к открытому порту).

Чтение вывода

$ traceroute google.com
 1  192.168.1.1  0.5 ms     ← домашний роутер
 2  10.10.0.1    5.2 ms     ← провайдер
 3  *  *  *                 ← дропает или скрывается
 4  72.14.234.1  12.5 ms    ← magistral
 5  142.250.46.225  15.0 ms ← google
  • * * * на конкретном хопе - роутер не отвечает на ICMP (часто это политика безопасности). Не значит что путь не работает
  • Резкий скачок задержки между двумя соседними хопами - там лежит «бутылочное горлышко»
  • Неравномерная задержка в одном хопе ([1ms, 100ms, 1ms]) - обычно rate-limit на ICMP-ответы у роутера, не реальная задержка

mtr - лучше чем traceroute

MTR = traceroute + ping в одном - постоянно прозванивает каждый хоп и показывает % потерь и стабильность задержки. Незаменим для дебага «иногда тупит».

bash
mtr google.com           # интерактивный, обновляется в реалтайме
mtr -rwc 100 google.com  # 100 проб, отчёт-режим, для логов

§ команды

bash
traceroute google.com

UDP-traceroute (Linux дефолт)

bash
traceroute -I google.com

Через ICMP - если UDP блокируется фаерволом

bash
traceroute -T -p 443 google.com

Через TCP к 443 - если ICMP блокирован, но порт открыт

bash
mtr google.com

Интерактивный traceroute с realtime-мониторингом потерь

bash
tracepath google.com

Альтернатива без root, заодно показывает Path MTU

§ см. также

  • routing-tableRouting tableТаблица маршрутизации - список «куда направлять пакеты с таким destination». Самая длинная (longest-prefix) подходящая запись выигрывает.
  • ip-forwardingIP forwarding - превратить хост в роутерLinux по умолчанию НЕ пересылает пакеты между интерфейсами. Включается через `sysctl net.ipv4.ip_forward=1`. Без этого не работают NAT, VPN-роутер, любой forwarding.
  • icmpICMPICMP - служебный протокол поверх IP для control-сообщений: echo (ping), destination-unreachable, time-exceeded (используется traceroute), MTU discovery. Не для данных.
  • cmd-mtrmtr - traceroute + ping в одномmtr = traceroute + ping. Непрерывно опрашивает каждый hop, показывает loss% и latency. Помогает за секунду найти где в маршруте теряются пакеты или растёт задержка.
Footer
linuxlab-
Copyright © 2026 LinuxLab. Все права защищены.
Учебники
Цены
О платформе
Конфиденциальность и куки