Il tipo di pacchetto inviato varia in base all'implementazione. Per impostazione predefinita, Windows tracert
utilizza ICMP e sia Mac OS X che Linux traceroute
utilizzano UDP. Non ho macchine BSD o Solaris o altri sistemi operativi da controllare, ma la pagina man per la versione di Mac OS X menziona che la sua provenienza è BSD 4.3.
Le versioni per Mac e Linux che ho offrono la possibilità di scegliere una varietà di protocolli diversi tra cui pacchetti ICMP, TCP, UDP e GRE. Altri protocolli possono essere specificati in base al nome o al numero, ma traceroute non è a conoscenza del funzionamento di altri protocolli. Li manda semplicemente alla cieca.
Possono anche modificare sia il payload sia le porte di origine e di destinazione al fine di evitare i firewall o scoprire quale router lungo il percorso sta rilasciando pacchetti di una certa dimensione.
Tutte le versioni di traceroute si basano sulle risposte ICMP tipo 11 (tempo superato) di ciascun hop lungo il percorso. Se le risposte ICMP di tipo 11 vengono bloccate dal firewall, traceroute non funzionerà. Questi pacchetti sono in entrata, non in uscita.
ICMP tipo 30 è specificamente designato per traceroute ed è etichettato come "Richiesta di informazioni". Non sono stato in grado di trovare da nessuna parte dove questo è effettivamente utilizzato. La pagina man per le versioni di Mac OS X e Linux dice che -I
invierà ICMP tipo 8 (richiesta di eco). Wikipedia afferma che Windows tracert
utilizza anche richieste di eco ICMP. Il tipo ICMP 30 o il tipo 8 sono pacchetti in uscita, non in entrata.
Il tipo 0 ICMP (risposta all'eco) può tornare come l'ultimo pacchetto quando il TTL è esattamente uguale al numero di hop. Traceroute saprà che è terminato quando riceve uno di questi. Questo è un pacchetto in entrata.
I pacchetti TCP SYN causeranno un RST
pacchetto o un SYN ACK
pacchetto in risposta quando raggiungono la loro destinazione. Se ricevi un SYN ACK
pacchetto, è educato seguire un RST
pacchetto in modo da non lasciare una connessione semi-aperta sul server.
È possibile ottenere risposte di codice 4 di tipo 3 ICMP invece di risposte di tipo 11 ICMP se si invia un pacchetto di grandi dimensioni con il flag impostato "Non frammentare", tuttavia è probabile che ciò consenta solo di trovare l'hop con l'MTU più piccolo . Normalmente riceverai questo tipo di risposta solo da un hop lungo il percorso. Non tutti loro.