Traceroute
# Traceroute

In informatica il traceroute è un algoritmo con lo scopo di ricavare il percorso seguito dai pacchetti sulle reti informatiche, ovvero l'indirizzo IP di ogni router attraversato per raggiungere il destinatario. Con il termine traceroute si è soliti indicare anche l'output del programma che lo implementa, ovvero il tracciato delle rotte seguite dai pacchetti.

## Descrizione

### Il campo TTL

Questa applicazione sfrutta una particolare caratteristica del protocollo IP, ovvero il campo del datagramma TTL (time to live), anche detto (hop limit) cioè limite di salti. Questo campo specifica il numero degli apparati di rete che il pacchetto potrà attraversare prima di essere dichiarato scaduto.

Il funzionamento di questo campo è semplice: ogni router che riceve il pacchetto, prima di inviarlo nuovamente, diminuisce il campo di un'unità. Se si accorge che il campo ha assunto il valore 0, invia al mittente del pacchetto un messaggio di errore ICMP specificando l'indirizzo del router che l'ha generato.

### Funzionamento

Un'applicazione traceroute, quindi, invia un pacchetto al destinatario di cui si vuole ricavare il percorso di traceroute con il campo TTL impostato ad 1. Il primo router che lo riceverà, constatando che il campo TTL ha raggiunto lo 0, invierà un errore al mittente (ICMP Time Exceeded). L'applicazione memorizzerà l'indirizzo IP del primo router, quindi invierà un nuovo pacchetto con TTL impostato a 2. L'operazione verrà ripetuta finché il pacchetto non sarà arrivato al destinatario, che invierà un ICMP Echo Reply.

Alla fine l'applicazione avrà ottenuto la lista degli indirizzi IP dei router su cui hanno transitato i pacchetti.

Calcolando anche il tempo trascorso tra l'invio di un pacchetto e l'arrivo del corrispondente messaggio di errore è possibile anche verificare la velocità di risposta dei router.

Il primo indirizzo IP fornito è quello del nodo client, che invia il pacchetto di prova. Questo risulta utile ad esempio nelle connessioni ad un proxy server, per visualizzare il proprio IP.

### Problemi

* Il principale problema del traceroute è che spesso i pacchetti possono seguire più di un percorso. In questo modo l'intera operazione perde di affidabilità, in quanto gli indirizzi IP ricavati si riferiscono a due (o più) percorsi differenti e non c'è modo di sapere in corrispondenza di quale router i percorsi si sono separati.
* Se i pacchetti e i rispettivi messaggi di errore seguono percorsi differenti, il calcolo del tempo di risposta dei router non è più affidabile.
* Poiché l'indirizzo IP restituito dai router corrisponde a quello della sua interfaccia in ingresso, talvolta questo indirizzo non è quello effettivo su cui transita il pacchetto.

## Implementazioni

* Nei sistemi Microsoft Windows è disponibile il programma tracert.
* In molte distribuzioni GNU/Linux è disponibile il programma traceroute ed altri come tracepath ed mtr.
* Nei sistemi MacOS è disponibile il programma traceroute.
* Su AS400, esiste il comando TRCTCPRTE
