Тип отправляемого пакета зависит от реализации. По умолчанию 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 , Обычно вы получите такой ответ только от одного прыжка по маршруту. Не все они.