I sistemi informatici comunicano attraverso lo scambio di pacchetti di dati. Questi package si muovono, all’interno delle reti informatiche, attraverso dei percorsi che prendono il nome di Traceroute, con lo stesso termine vengono indicate anche le applicazioni che permettono di risalire i vari passaggi di ogni percorso (le tappe del percorso prendono il nome di nodi).
Un package di dati può essere quindi rappresentato come un viaggiatore che per raggiungere la sua destinazione affronta un volo aereo con più scali in diversi aeroporti, mentre il Traceceroute è in sostanza il suo itinerario o lo strumento che consente di ricostruirlo tappa per tappa. Ma come funziona esattamente un Traceroute?
IP (Internet Protocol) e TTL (Time To Live)
L’Internet Protocol (IP) è uno standard pensato per connettere tra loro dei dispositivi elettronici all’interno di reti, a volte eterogenee sia in termini di performance che di caratteristiche.
Per il loro funzionamento le soluzioni per il tracerouting utilizzano una feature specifica del sistema IP chiamata TTL (Time To Live, o “tempo di vita”), nota anche come hop limit (“limite di salti”), che offre una metrica circa il numero massimo di dispositivi di rete che un package di dati può attraversare prima della sua scadenza.
Un diagramma del campo TTL registra, in pratica, l’andamento del valore numerico di TTL: definito come n il numero massimo di network device attraversabili da un pacchetto di dati, ogni passaggio attraverso un router determinerà un decremento unitario (n-1) e nel momento in cui tale valore sarà pari a 0 il Traceroute invierà, al terminale che ha formulato la richiesta iniziale, una notifica di errore ICMP (Internet Control Message Protocol) che è il protocollo incaricato di trasmettere le informazioni relative ai malfunzionamenti che si verificano in una rete. Nel messaggio sarà presente anche il dato riguardante l’indirizzo del router che ha determinato l’errore stesso.
Come funziona il Traceroute
Come abbiamo detto lo scopo del Traceroute è seguire il percorso di un pacchetto di dati dalla sua sorgente fino a destinazione. Per farlo dovrà registrare ogni singolo "salto" del pacchetto.
In fase di esecuzione un Traceroute invia una serie di pacchetti di dati generando una modifica del valore Max_ttl che viene, inizialmente, impostato su 1 e incrementato via via di una unità sino a quando il pacchetto non giunge a destinazione. Lo scopo è di ottenere da ciascun nodo del percorso una notifica ICMP, “Time Exceeded” in cui vengano restituiti il periodo di tempo passato tra l’invio del package e la sua ricezione, in millisecondi, e l’indirizzo IP del router contattato.
Al primo package viene attribuito un valore Max_ttl pari ad un 1 hop, il record risultante è facilmente riconoscibile perché riporta generalmente l’indirizzo IP (ad esempio “192.168.1.1”) del router associato al terminale che ha lanciato l’istanza di tracerouting:
1 3 ms 2 ms 1 ms home.hub [192.168.1.1]
Ricevuto il primo package (Max_TT = 1) il nodo decrementa il valore di uno ottenendo zero ed inviando, pertanto, la prima notifica ICMP.
Si susseguono poi gli ulteriori package con valore Max_ttl crescente su base unitaria (2 hop, 3 hop.. n hop) e tale incremento prosegue fino al massimo valore consentito di hop (ad esempio non più di 30 punti di passaggio), fino all’arrivo a destinazione del package (notifica ICMP “Echo Reply”) o fino a quando l’ultimo gateway non restituisce il messaggio “port_unreachable” testimoniando che il package ricevuto non può essere più utilizzato in alcun modo.
Al termine dell’analisi il sistema sarà in grado di restituire informazioni dettagliate su ciascun nodo coinvolto nel transito del pacchetto dati.
Vantaggi e svantaggi del tracerouting
Il tracerouting può rivelarsi particolarmente utile quando si ha la necessità di risalire a tutti gli indirizzi IP dei terminali presenti sul percorso attraversato dai package inviati tramite una richiesta. E’ infatti possibile ripercorrere gli itinerari verso diverse tipologie di destinazione, come per esempio un sito Web, un IP specifico, una Webmail, un FTP o un server per la posta elettronica.
Le informazioni ricavate tramite Traceroute possono essere utilizzate inoltre per valutare il grado di affidabilità di una connessione, nello stesso modo il tracerouting è una pratica che consente di misurare i tempi di risposta dei router verificando il periodo che trascorre tra l’invio di un package e l’arrivo dell’eventuale notifica di errore ad esso associata.
Utilizzare (o ripercorrere a seconda del senso che si vuole dare al termine) un Traceroute non offre però delle metriche necessariamente affidabili, package e notifiche di errore possono seguire infatti dei percorsi differenti alterando i valori relativi alla velocità di risposta dei router. E’ poi necessario tenere conto del fatto che non di rado i package stessi attraversano più percorsi, ciò determina l’estrazione di indirizzi IP che fanno riferimento a itinerari diversi impedendo di indentificare il router che ha determinato tale situazione.
Un altro elemento a sfavore del Traceroute riguarda la possibile perdita dei package: nel momento in cui un package non viene tracciato entro un determinato periodo di tempo l’informazione non disponibile sul tempo di risposta viene rimpiazzata in output tramite un asterisco (“*”), la conseguenza è che il router da cui si attendeva la notifica ICMP non sarà identificabile. Il limite di tempo previsto è in genere impostato sui 3 o 5 secondi ma in alcune applicazioni per il tracerouting può essere personalizzato a seconda delle proprie esigenze.
Si consideri infine che gli IP ricavati tramite Traceroute fanno riferimento alle interfacce in ingresso dei router e questo dato non è per forza di cose uguale a quello dell’IP che dovrebbe certificare il passaggio del package.
Traceroute in Windows
Su Windows è disponibile l’applicazione per il tracerouting TRACERT utilizzabile direttamente da linea di comando tramite una sintassi come la seguente:
C:>tracert www.google.it
TRACERT è un’utilità di diagnostica a cui si accede dal “Prompt dei comandi” del sistema operativo di Microsoft, una volta avviato quest’ultimo è poi sufficiente lanciare il comando tracert seguito dal nome (con o senza prefisso “www.”) o dall’indirizzo IP dell’host di destinazione:
Nell’output generato si possono notare i valori Max_ttl da 1 a 10 hop (con un limite di default pari a 30 passaggi), i risultati delle misurazioni relative ai tempi tra ricezione e risposta e gli indirizzi IP dei gateway, il primo dei quali è quello predefinito.
Traceroute in Linux
Su Linux è possibile effettuare operazioni di tracerouting tramite il comando traceroute che però non viene fornito di default su tutte le distribuzioni del “Pinguino”. Se si opera per esempio su Ubuntu o derivate è possibile installare l’applicazione per traceroute tramite una semplice procedura che prevede innanzitutto di aggiornare i repository dei pacchetti software con l’istruzione:
$ sudo apt-get update
Fatto questo si possono aggiornare i software disponibili attraverso il comando:
$ sudo apt-get upgrade
per poi passare definitivamente alla fase di installazione digitando:
$ sudo apt-get install inetutils-traceroute
Una volta conclusa tale operazione è possibile utilizzare il comando traceroute passandogli come parametro l’host di destinazione (con o senza prefisso “www.” nel caso si tratti di un nome a dominio) per i package di dati inviati dall’applicazione:
$ sudo traceroute www.google.it
Dato che, traceroute lavora su UDP (User Datagram Protocol) a differenza di TRACERT, che opera su ICMP, è possibile che per alcune richieste il tracerouting restituisca unicamente degli asterischi. Per ovviare a questa problematica è possibile forzare il tracciamento tramite ICMP utilizzando l’opzione “-I”:
$ sudo traceroute -I www.google.it
Su altre distribuzioni molto utilizzate come per esempio CentOS (una derivata di Red Hat Linux) traceroute invece è generalmente disponibile in modalità predefinita, anche in questo caso è però consigliabile utilizzare l’opzione “-I” per forzare il tracerouting su ICMP:
Traceroute in macOS
Su macOS esistono 2 modalità per eseguire procedure di tracerouting. La prima prevede di utilizzare il Terminale che può essere avviato seguendo il percorso di sistema “Finder > Applicazioni > Utility > Terminale”, in alternativa è possibile aprire Spotlight e cercare il termine “Terminale”.
Fatto questo si potrà lanciare l’applicazione traceroute specificando l’host di destinazione (con o senza prefisso “www.” nel caso si tratti di un nome a dominio):
traceroute www.google.it
La seconda procedura disponibile per questo OS prevede di utilizzare le “Network utility” di macOS reperibili anch’esse tramite il Finder o via Spotlight (percorso di sistema “/System/Library/CoreServices/Applications”).
Fatto questo si può accedere alla tab “Traceroute” e specificare l’hostname di destinazione direttamente nel campo che si aprirà in questa sezione.