Использует ли traceroute UDP, ICMP или оба?

24

Когда я выполняю трассировку в домене www.google.com со своего ноутбука, использую ли я icmp или udp?
Я думал, что это был тип icmp 11, но во время поиска чего-то другого я наткнулся на правила, в которых был использован тип icmp 30, и увидел правила, в которых использовался udp.
Может кто-нибудь объяснить мне, как это работает?
Я работаю над брандмауэром (iptables) для виртуального выделенного сервера.

Kris
источник

Ответы:

26

Тип отправляемого пакета зависит от реализации. По умолчанию Windows tracertиспользует ICMP, а Mac OS X и Linux tracerouteиспользуют UDP. У меня нет машин BSD, Solaris или других операционных систем для проверки, но в справочной странице для версии Mac OS X упоминается, что она является источником BSD 4.3.

Имеющиеся у меня версии для Mac и Linux предлагают возможность выбора различных протоколов, включая пакеты ICMP, TCP, UDP и GRE. Другие протоколы могут быть указаны по их имени или номеру, но traceroute ничего не знает о том, как работают другие протоколы. Это просто слепо отправляет их.

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

Все версии traceroute основаны на ответах ICMP типа 11 (превышено время) от каждого перехода по маршруту. Если ответы брандмауэра блокируют ответы ICMP типа 11, traceroute не будет работать. Эти пакеты являются входящими, а не исходящими.

ICMP тип 30 специально предназначен для traceroute и помечен как «информационный запрос». Я не смог найти нигде, где это на самом деле используется. На странице руководства для версий Mac OS X и Linux написано, что -Iотправит ICMP типа 8 (эхо-запрос). Википедия говорит, что Windows tracertтакже использует эхо-запросы ICMP. ICMP тип 30 или тип 8 являются исходящими пакетами, а не входящими.

ICMP-тип 0 (эхо-ответ) может возвращаться как самый последний пакет, когда TTL точно равен количеству прыжков. Traceroute будет знать, что он закончил, когда получит один из них. Это входящий пакет.

Пакеты TCP SYN будут вызывать RSTпакет или SYN ACKпакет в ответ, когда они достигнут пункта назначения. Если вы получаете SYN ACKпакет, вежливо проследить за RSTпакетом, чтобы не оставить полуоткрытое соединение на сервере.

Ответы ICMP типа 3 можно получить обратно вместо ответов ICMP типа 11, если вы отправляете большой пакет с установленным флагом «Не фрагментировать», однако это, скорее всего, позволит вам только найти переход с наименьшим MTU , Обычно вы получите такой ответ только от одного прыжка по маршруту. Не все они.

Ladadadada
источник
8

Традиционный traceroute использует UDP при увеличении портов для каждого прыжка.

Вы можете использовать любой тип пакета для его реализации - ICMP, TCP SYN и т. Д. Все, что нужно, - это истечение срока действия IP-пакета, и вы - золотой.

Различные реализации, такие как MacOS, предлагают поддержку нескольких типов трассировки, а также режимов, которые не увеличивают порты и т. Д., Чтобы обойти ограничения брандмауэра.

Даниэль Питтман
источник
7
UDP-порт по умолчанию в unix-подобной реализации составляет от 33434 до 33534. В реализациях ICMP используется «эхо-запрос» (тип 8).
Ouki