Назад | Перейти на главную страницу

Traceroute, ICMP, UDP и TCP

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

Сообщения 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.