В общем, есть 3 способа (я не знаком с реализацией с использованием протокола GRE) для реализации traceroute, отправки запросов эхо-запросов ICMP, пакетов UDP или пакетов TCP SYN с постепенным увеличением значения TTL, начиная с значения TTL 1.
- , если он посылает ICMP эхо-запрос, он ожидает, что ICMP TIME Exceed сообщение (8 байт + IP-заголовок (20 байт) + первые 8 байт данных исходной дейтаграммы) или назначения достигается и возвращает эхо-ответ ICMP, который составляет 20 + 8 байтов. Хотя согласно rfc 792, он позволяет произвольную длину данных для запроса эха или ответа, но traceroute не нуждается в этом.
- Если он отправляет UAC pakcets, ожидается, что сообщение ICMP TIME Exceed или достигнет адресата и вернет сообщение о недостижимости порта длиной 20 + 8 + 20 байт. Возможно, некоторые реализации добавляют некоторые данные, но это было бы не слишком много.
- Если он отправляет TCP SYN-пакеты, входящие пакеты должны быть сообщением ICMP TIME Exceed, TCP SYN + ACK или TCP RST-пакетом, все они намного меньше 512 байт.