← Назад к вопросам

Какой протокол использует Traceroute по умолчанию?

2.0 Middle🔥 101 комментариев
#Linux и администрирование#Сети и протоколы

Комментарии (1)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Протокол Traceroute по умолчанию

По умолчанию traceroute в большинстве Unix-подобных систем (Linux, macOS) использует протокол UDP (User Datagram Protocol) с номерами портов назначения в диапазоне 33434–33534. В Windows утилита tracert по умолчанию использует протокол ICMP (Internet Control Message Protocol), а именно ICMP Echo-request пакеты (тип 8). Это ключевое различие, о котором важно помнить при диагностике сетей в гетерогенной среде.

Принцип работы traceroute (на примере UDP-версии)

Traceroute определяет маршрут, используя TTL (Time To Live) в IP-заголовке и анализируя ICMP Time Exceeded сообщения от маршрутизаторов.

Алгоритм:

  1. Отправляется UDP-пакет на случайный высокий порт (от 33434) с TTL=1.
  2. Первый маршрутизатор уменьшает TTL до 0, отбрасывает пакет и отправляет обратно ICMP Time Exceeded (тип 11, код 0).
  3. Traceroute фиксирует адрес маршрутизатора и время RTT (Round-Trip Time).
  4. Процесс повторяется с TTL=2, затем TTL=3 и так далее, пока пакет не достигнет цели.
  5. Конечный хост, получив UDP-пакет на неиспользуемый порт, отвечает ICMP Destination Unreachable (тип 3, код 3 — Port Unreachable). Это сигнализирует traceroute о завершении трассировки.

Пример команды и вывод:

$ traceroute example.com
traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
 1  gateway (192.168.1.1)  1.234 ms  1.456 ms  1.567 ms
 2  10.10.10.1 (10.10.10.1)  5.678 ms  5.789 ms  5.890 ms
 3  * * *
 4  core-router.isp.net (203.0.113.1)  15.123 ms  15.234 ms  15.345 ms
 ...

Альтернативные методы и флаги

На практике часто используются другие протоколы для обхода ограничений (например, блокировки UDP/ICMP файрволами):

  • ICMP Traceroute (traceroute -I в Linux): Использует ICMP Echo-request пакеты (как ping). Менее заметен, так как похож на обычный ping.
  • TCP Traceroute (traceroute -T или tcptraceroute): Использует TCP-пакеты (чаще на порт 80 или 443). Эффективен при обходе фаерволов, так как выглядит как обычное веб-соединение.
    $ sudo traceroute -T -p 443 example.com
    
  • TRACERT в Windows: Всегда использует ICMP, эквивалент traceroute -I.

Практическое значение для DevOps/SRE

Понимание различий критично для:

  • Диагностики сетевых проблем: Разные протоколы могут по-разному обрабатываться маршрутизаторами и фаерволами. Если UDP traceroute "обрывается", стоит попробовать ICMP или TCP варианты.
  • Настройки безопасности: В инфраструктуре необходимо разрешать входящие ICMP Time Exceeded и нужные ICMP Destination Unreachable сообщения для работы traceroute, иначе трассировка будет показывать * * *.
  • Анализа задержек и потерь пакетов: Traceroute показывает RTT до каждого хопа, помогая локализовать проблему.
  • Автоматизации мониторинга: Скрипты для проверки сетевой связности часто используют низкоуровневые вызовы, имитирующие логику traceroute.

Пример скрипта на Python с использованием Scapy (ICMP-вариант):

from scapy.all import *
import sys

def simple_traceroute(destination, max_hops=30):
    for ttl in range(1, max_hops+1):
        pkt = IP(dst=destination, ttl=ttl) / ICMP()
        reply = sr1(pkt, verbose=0, timeout=2)
        if reply is None:
            print(f"{ttl}: *")
        elif reply.type == 0:  # ICMP Echo-reply - достигли цели
            print(f"{ttl}: {reply.src}")
            break
        else:
            print(f"{ttl}: {reply.src}")

if __name__ == "__main__":
    simple_traceroute(sys.argv[1])

Вывод: Нет единого "протокола traceroute". Это диагностическая методика, использующая UDP (в Unix), ICMP (в Windows) или TCP как транспорт. Для эффективной работы в роли DevOps-инженера необходимо понимать эти различия, уметь выбирать подходящий метод для конкретной ситуации и интерпретировать результаты с учётом возможных блокировок сетевого оборудования.

Какой протокол использует Traceroute по умолчанию? | PrepBro