Come usare il comando traceroute su Linux

La riga di comando in una finestra terminale su un computer Linux.
Fatmawati Achmad Zaenuri / Shutterstock

Puoi usare Linux traceroute comando per individuare la tappa lenta del viaggio di un pacchetto di rete e risolvere problemi di connessioni di rete lente. Ti mostreremo come!

Come funziona traceroute

Quando apprezzi come traceroute funziona, rende molto più semplice la comprensione dei risultati. Quanto più complicato è il percorso che un pacchetto di rete deve prendere per raggiungere la sua destinazione, tanto più difficile è individuare dove potrebbero verificarsi rallentamenti.

La rete locale (LAN) di una piccola organizzazione potrebbe essere relativamente semplice. Probabilmente avrà almeno un server e un router o due. La complessità aumenta su una rete WAN (Wide Area Network) che comunica tra località diverse o via Internet. Il pacchetto di rete quindi incontra (e viene inoltrato e instradato da) un sacco di hardware, come router e gateway.

Le intestazioni dei metadati sui pacchetti di dati descrivono la sua lunghezza, da dove proviene, dove sta andando, il protocollo che sta usando e così via. La specifica del protocollo definisce l'intestazione. Se è possibile identificare il protocollo, è possibile determinare l'inizio e la fine di ciascun campo nell'intestazione e leggere i metadati.

traceroute utilizza la suite di protocolli TCP / IP e invia i pacchetti User Datagram Protocol. L'intestazione contiene il campo Time to Live (TTL), che contiene un valore intero a otto bit. Nonostante ciò che suggerisce il nome, rappresenta un conteggio, non una durata.

Un pacchetto viaggia dalla sua origine alla sua destinazione tramite un router. Ogni volta che il pacchetto arriva a un router, diminuisce il contatore TTL. Se il valore TTL raggiunge mai uno, il router che riceve il pacchetto decrementa il valore e nota che ora è zero. Il pacchetto viene quindi scartato e non inoltrato al successivo hop del suo viaggio perché è “scaduto”.

Il router invia un messaggio Tempo scaduto ICMP (Internet Message Control Protocol) all'origine del pacchetto per comunicarlo al timeout del pacchetto. Il messaggio Tempo scaduto contiene l'intestazione originale e i primi 64 bit dei dati del pacchetto originale. Questo è definito a pagina sei della Richiesta di commenti 792.

Quindi se traceroute invia un pacchetto, ma quindi imposta il valore TTL su uno, il pacchetto arriverà fino al primo router prima di essere scartato. Riceverà dal router un messaggio di tempo ICMP superato e potrà registrare il tempo impiegato per il round trip.

Quindi ripete l'esercizio con TTL impostato su 2, che fallirà dopo due salti. traceroute aumenta il TTL a tre e riprova. Questo processo si ripete fino a quando non viene raggiunta la destinazione o viene verificato il numero massimo di salti (30, per impostazione predefinita).

Alcuni router non funzionano bene

Alcuni router hanno dei bug. Tentano di inoltrare i pacchetti con un TTL pari a zero invece di scartarli e aumentare un messaggio di tempo ICMP superato.

Secondo Cisco, alcuni provider di servizi Internet (ISP) limitano il numero di messaggi ICMP che i loro router trasmettono.

Alcuni dispositivi sono configurati per non inviare mai pacchetti ICMP. Questo è spesso per garantire che il dispositivo non possa essere involontariamente costretto a partecipare a un denial of service distribuito, come un attacco di puffo.

traceroute ha un timeout predefinito per le risposte di cinque secondi. Se non riceve una risposta entro quei cinque secondi, il tentativo viene abbandonato. Ciò significa che le risposte da router molto lenti vengono ignorate.

Installazione di traceroute

traceroute era già installato su Fedora 31 ma deve essere installato su Manjaro 18.1 e Ubuntu 18.04. Installare traceroute su Manjaro usa il seguente comando:

sudo pacman -Sy traceroute

Il comando "sudo pacman -Sy traceroute" in una finestra terminale.

Installare traceroute su Ubuntu, utilizzare il seguente comando:

sudo apt-get install traceroute

Il comando "sudo apt-get install traceroute" in una finestra del terminale.

Usando traceroute

Come abbiamo spiegato sopra, traceroute's lo scopo è quello di ottenere una risposta dal router ad ogni hop dal tuo computer alla destinazione. Alcuni potrebbero avere le labbra strette e non regalare nulla, mentre altri probabilmente verseranno i fagioli senza scrupoli.

Ad esempio, eseguiremo un traceroute al sito web del castello di Blarney in Irlanda, sede della famosa pietra di Blarney. La leggenda narra che se baci la Pietra di Blarney sarai benedetto con il “dono della parlantina”. Speriamo che i router che incontriamo lungo la strada siano adeguatamente garruli.

Digitiamo il seguente comando:

traceroute www.blarneycastle.ie

Il comando "traceroute www.blarneycastle.ie" in una finestra del terminale.

La prima riga ci fornisce le seguenti informazioni:

  • La destinazione e il suo indirizzo IP.
  • Il numero di salti traceroute proverò prima di arrendermi.
  • La dimensione dei pacchetti UDP che stiamo inviando.

Tutte le altre righe contengono informazioni su uno dei salti. Prima di scavare nei dettagli, tuttavia, possiamo vedere che ci sono 11 salti tra il nostro computer e il sito Web del Castello di Blarney. Hop 11 ci dice anche che abbiamo raggiunto la nostra destinazione.

Il formato di ciascuna linea hop è il seguente:

  • Il nome del dispositivo o, se il dispositivo non si identifica da solo, l'indirizzo IP.
  • L'indirizzo IP
  • Il tempo impiegato per il viaggio di andata e ritorno per ciascuna delle tre prove. Se un asterisco è qui, significa che non c'è stata una risposta per quel test. Se il dispositivo non risponde affatto, vedrai tre asterischi e nessun nome o indirizzo IP del dispositivo.

Rivediamo ciò che abbiamo di seguito:

  • Luppolo 1: La prima porta di chiamata (nessun gioco di parole previsto) è il router DrayTek Vigor sulla rete locale. Ecco come i nostri pacchetti UDP lasciano la rete locale e accedono a Internet.
  • Luppolo 2: Questo dispositivo non ha risposto. Forse è stato configurato per non inviare mai pacchetti ICMP. O forse ha risposto ma era troppo lento, quindi traceroute fuori tempo.
  • Hop 3: Un dispositivo ha risposto, ma non abbiamo ottenuto il suo nome, ma solo l'indirizzo IP. Nota che c'è un asterisco in questa riga, il che significa che non abbiamo ricevuto una risposta a tutte e tre le richieste. Ciò potrebbe indicare la perdita di pacchetti.
  • Luppolo 4 e 5: Luppolo più anonimo.
  • Luppolo 6: C'è molto testo qui perché un diverso dispositivo remoto ha gestito ciascuna delle nostre tre richieste UDP. Sono stati stampati i nomi (piuttosto lunghi) e gli indirizzi IP per ciascun dispositivo. Questo può accadere quando si incontra una rete “popolata” su cui è presente molto hardware per gestire elevati volumi di traffico. Questo hop è all'interno di uno dei più grandi ISP del Regno Unito. Quindi, sarebbe un piccolo miracolo se lo stesso hardware remoto gestisse le nostre tre richieste di connessione.
  • Luppolo 7: Questo è il vantaggio che hanno fatto i nostri pacchetti UDP quando hanno lasciato la rete degli ISP.
  • Luppolo 8: Ancora una volta, otteniamo un indirizzo IP ma non il nome del dispositivo. Tutti e tre i test sono stati restituiti correttamente.
  • Luppolo 9 e 10: Altri due luppoli anonimi.
  • Luppolo 11: Siamo arrivati ​​al sito web del Castello di Blarney. Il castello si trova a Cork, in Irlanda, ma, secondo la geolocalizzazione dell'indirizzo IP, il sito web è a Londra.

Quindi, era un miscuglio. Alcuni dispositivi hanno giocato a palla, alcuni hanno risposto ma non ci hanno detto i loro nomi e altri sono rimasti completamente anonimi.

Tuttavia, siamo arrivati ​​a destinazione, sappiamo che mancano 11 salti e il tempo di andata e ritorno per il viaggio è stato di 13.773 e 14.715 millisecondi.

Nascondere i nomi dei dispositivi

Come abbiamo visto, a volte l'inclusione dei nomi dei dispositivi porta a una visualizzazione ingombra. Per semplificare la visualizzazione dei dati, è possibile utilizzare -n (nessuna mappatura) opzione.

Per fare questo con il nostro esempio, digitiamo quanto segue:

traceroute -n blarneycastle.ie

Il comando "traceroute -n blarneycastle.ie" in una finestra di terminale.

Ciò semplifica la selezione di grandi numeri per i tempi di andata e ritorno che potrebbero indicare un collo di bottiglia.

Hop 3 inizia a sembrare un po 'sospetto. L'ultima volta ha risposto solo due volte e questa volta ha risposto solo una volta. In questo scenario, ovviamente, è fuori dal nostro controllo.

Tuttavia, se stavi indagando sulla tua rete aziendale, varrebbe la pena approfondire un po 'più a fondo in quel nodo.

Impostazione del valore di timeout traceroute

Forse se prolunghiamo il periodo di timeout predefinito (cinque secondi), avremo più risposte. Per fare questo, useremo il -w (tempo di attesa) per cambiarlo in sette secondi. (Nota che questo è un numero in virgola mobile.)

Digitiamo il seguente comando:

traceroute -w 7.0 blarneycastle.ie

Il comando "traceroute -w 7.0 blarneycastle.ie" in una finestra di terminale.

Ciò non ha fatto molta differenza, quindi le risposte probabilmente stanno scadendo. È probabile che il luppolo anonimo sia intenzionalmente riservato.

Impostazione del numero di test

Di default, traceroute invia tre pacchetti UDP a ciascun hop. Possiamo usare il -q (numero di query) opzione per regolare su o giù.

Per accelerare il traceroute test, digitiamo quanto segue per ridurre il numero di pacchetti sonda UDP che inviamo a uno:

traceroute -q 1 blarneycastle.ie

Il comando "traceroute -q 1 blarneycastle.ie" in una finestra di terminale.

Questo invia una singola sonda ad ogni hop.

Impostazione del valore TTL iniziale

Possiamo impostare il valore iniziale di TTL su qualcosa di diverso da uno e saltare alcuni salti. Di solito, i valori TTL sono impostati su uno per il primo set di test, due per il set successivo di test e così via. Se lo impostiamo su cinque, il primo test tenterà di saltare cinque e saltare i salti da uno a quattro.

Poiché sappiamo che il sito Web di Blarney Castle è composto da 11 hop da questo computer, digitiamo quanto segue per andare direttamente a Hop 11:

traceroute -f 11 blarneycastle.ie

Il comando "traceroute -f 11 blarneycastle.ie" in una finestra di terminale.

Questo ci dà un rapporto piacevole e condensato sullo stato della connessione con la destinazione.

Sii attento

traceroute è un ottimo strumento per studiare il routing di rete, controllare le velocità di connessione o identificare i colli di bottiglia. Windows ha anche un tracert comando che funziona in modo simile.

Tuttavia, non vuoi bombardare dispositivi sconosciuti con torrent di pacchetti UDP e diffidare di includere traceroute in script o lavori non presidiati.

Il carico traceroute può essere inserito in una rete potrebbe influire negativamente sulle sue prestazioni. A meno che non ti trovi in ​​una situazione di tipo risolvilo adesso, potresti voler usarlo al di fuori del normale orario lavorativo.

Articoli correlati

Ultimi articoli