Подтвердить что ты не робот

Почему traceroute отправляет пакеты UDP, а не ICMP?

В соответствии с Stevens (TCP/IP Illustrated) программа traceroute отправляет UDP-пакеты на целевой хост с инкрементным TTL (1, 2, 3 и т.д.), чтобы получить информацию промежуточных перелетов от сообщения ICMP TTL EXPIRED.
Условие "достигнутое достижение" - это сообщение ICMP PORT UNREACHABLE, потому что traceroute обращается к случайному порту с большим числом (то есть: маловероятно, что кто-то там слушает)
Поэтому мой вопрос: есть ли техническая причина (недостатки, RFC и т.д.) Использовать пакеты UDP, а не использовать, например, сообщения ICMP echo request (с увеличением TTL) и использовать ответ эхо-ответа как конечное условие?
Я понимаю, что эхо-ответ ICMP может быть отфильтрован брандмауэрами или другими сетевыми устройствами посередине, но я думаю, это может случиться и с UDP-пакетами;)

Большое спасибо
Sergio

4b9b3361

Ответ 1

На самом деле это "старый" метод выполнения traceroutes. Я полагаю, основная мотивация заключалась в том, что отправка простых UDP-пакетов не требует особых привилегий, так как отправка пакетов ICMP делает (сырые сокеты или их эквивалент). Вот почему, например, ping обычно устанавливается в root, что является серьезной угрозой безопасности.

В настоящее время traceroute поддерживает также пакеты зондов ICMP и TCP, поэтому вы, скорее всего, сможете прокрасться через брандмауэры, которые, скорее всего, будут развернуты без рассмотрения. Это также означает, что traceroute, скорее всего, также установлен в вашей системе. См. Его страницу руководства, особенно часть доступных методов: http://linux.die.net/man/8/traceroute