Traceroute, ICMP, UDP и TCP

Когда traceroute использует TCP? Или он просто использует UDP, а также почему Traceroute использует UDP на MacX и ICMP на Windows? Я думал, что ICMP просто содержит сообщение о том, что вызвало ошибку пакета, и не передает сегменты, такие как TCP и UDP.

3 ответа

Сообщения ICMP по-прежнему являются IP-пакетами. Traceroute использует ECHO Request (Тип ICMP 8) по умолчанию в Unix и Windows с инкрементными TTL, в которых регистрируется адрес отправки каждого Time Exceeded (Тип 11) сообщение, которое он получает из прыжков по маршруту. (см.: http://en.wikipedia.org/wiki/Internet_Control_Message_Protocol)

Это "правильный" способ сделать это, но вы можете столкнуться с проблемами, если некоторые из систем на маршруте отбрасываются или по-другому обрабатывают трафик ICMP.

Некоторые реализации traceroute (на Linux например) есть -T а также -U варианты для переключения на TCP/UDP вместо (и следующие -p аргумент для указания порта назначения). Это полезно для более точного моделирования реального трафика, который в некоторых случаях может дать вам более точный результат.

Я подозреваю, что реализация OSX по умолчанию использует UDP по этой причине, но точно сказать не могу. Вы можете найти переключатель для использования ICMP вместо этого.

Windows Tracert обычно использует ICMP с определенным TTL. TTL увеличивается каждый прыжок, пока не достигнет пункта назначения. Это означает, что первый прыжок имеет TTL (max-hop-count) 1. Несмотря на то, что пакет не достигает цели, первый прыжок отбрасывает его и отправляет сообщение TIME EXCEEDED обратно, это сообщение используется для сопоставления маршрута. и следующий ICMP отправляется с TTL 2.

OSX и Linux по умолчанию используют UDP с увеличением номеров портов, но оба могут быть настроены на использование пакетов TCP, UDP, ICMP или GRE.

Чтобы GNU Traceroute использовал ICMP, как это делает Windows, используйте:

      traceroute host -I
Другие вопросы по тегам