Как работает traceroute?

В общем, утилита посылает в направлении заданного хоста пакет с TTL=1, и ждет, от кого вернется ответ time exceeded. Отвечающий записывается как первый хоп (результат первого шага на пути к цели). Затем посылаются последовательно пакеты с TTL=2, 3, 4 и т.д. по порядку, пока при некотором значении TTL пакет не достигнет цели и не получит от нее ответ.

traceroute посылает в сторону заданного хоста UDP-пакеты на произвольный порт - скорее всего не занятый другим сервисом (например 28942, 30471) или на зарезервированный, например 0, умолчанию - 33434.

Сначала посылается серия из 3-х таких пакетов с TTL=1, по приходу ответов icmp (time exceeded) замеряется время прохождения и определяется доменное имя транзитного узла (хотя это зависит от заданных опций).

Затем, посылаются очередные серии пакетов с TTL увеличенным на еденицу, предназначенных для выявления следующего хопа. В конце мы получаем от конечного хоста отклик port unreachable (порт недоступен), что означает завершение трассировки.

Стандартный консольный Windows tracert работает точно также, но посылает только ICMP echo request пакеты.