Passa al contenuto principale
Traceroute può essere uno strumento prezioso quando si cerca di diagnosticare problemi di connessione ad host su altre reti. Tuttavia per essere utilizzato in modo efficace bisogna capire come funziona e cosa significa l'output.

 

Traceroute funziona manipolando il valore Time-To-Live (TTL) nell'intestazione dell'IP (figura 1). Poiché ho dovuto fare i miei esempi utilizzando la rete interna di Stratus ho X'editato la rappresentazione esadecimale dell'indirizzo IP nelle tracce del pacchetto e ho tradotto tutti gli ottetti in qualsiasi notazione decimale doted in un codice univoco di lettere da A a W. Il numero di lettere rappresenta il numero di cifre nell'ottetto. Cioè AAA rappresenta un numero di 3 cifre, mentre J rappresenta un numero di 1 cifra.

 

Xmit IP Ver/HL 45, ToS 0, Len 5c, ID 5447, Flg/Frg 0, TTL 3c, Prtl 1
Cksum e90c, Src XXXXXXXX, Dst XXXXXXXX
ICMP from AAA.BBB.CC.DDD to EEE.FFF.GGG.HHH echo
Figura 1 - Telaio packet_monitor con TTL evidenziato
Ogni router che elabora il pacchetto diminuirà il valore TTL di 1 e se il valore TTL è maggiore di 0 passerà il pacchetto al router successivo o alla destinazione finale. Se il valore TTL è 0 il router scarta il pacchetto e *può* inviare al mittente un messaggio di ritorno al superamento del tempo ICMP. La chiave è *may*, alcuni router non invieranno un messaggio di ritorno del tempo superato o lo faranno solo se non sono occupati. Inoltre alcuni firewall bloccheranno il messaggio ICMP, quindi anche se il router invia il messaggio di superamento del tempo, l'host che esegue il traceroute potrebbe non vederlo mai.
Traceroute inizia con l'invio di un messaggio alla destinazione di destinazione con un valore TTL pari a 1. Il tempo che impiega dal momento in cui invia il messaggio fino a quando non riceve una risposta.

 

17:07:07.797 Xmit IP Ver/HL 45, ToS 0, Len 28, ID 1, Flg/Frg 0, TTL 1, Prtl 11
Cksum 78CC, Src XXXXXXXX, Dst XXXXXXXX
UDP from AAA.BBB.CC.DDD.34611 to EEE.FFF.GGG.HHH.33435 Cksum 0000, 20 data bytes.
17:07:07.799 Rcvd IP Ver/HL 45, ToS c0, Len 38, ID 4a39, Flg/Frg 0, TTL 80, Prtl 1
Cksum 0d1a, Src aXXXXXXXX, Dst XXXXXXXX
ICMP from AAA.BBB.II.J to AAA.BBB.CC.DDD time excdd

 

Figura 2 - traceroute frame traceroute_monitor a pacchetti e risposta
Di default il comando traceroute invia tre messaggi con un TTL di 1 e riporta tutte e tre le volte il nome e/o l'indirizzo IP del router che ha inviato la risposta. Uso sempre l'argomento -numerico per non dover aspettare la risoluzione del nome (figura 3). Traceroute poi incrementa il TTL di 1 e lo fa di nuovo. Continuerà ad aumentare il TTL fino a quando non otterrà una risposta dalla destinazione di destinazione o un qualche limite, 30 (di default), viene raggiunto. Potete trovare la documentazione su tutti gli argomenti del traceroute nel manuale di OpenVOS STREAMS TCP/IP Administrator's Guide (R419 ).

 

traceroute -numeric EEE.FFF.GGG.HHH
traceroute to EEE.FFF.GGG.HHH (EEE.FFF.GGG.HHH), 30 hops max, 40 byte packets
1 AAA.BBB.II.LLL 2 ms 1 ms 1 ms
2 AAA.BBB.II.J 1 ms 1 ms 1 ms
3 AAA.BBB.MM.NN 12 ms 5 ms 6 ms
4 BBB.OOO.PPP.QQQ 76 ms 76 ms 76 ms
5 BBB.RRR.SSS.TTT 80 ms 80 ms 80 ms
6 BBB.RRR.SSS.UUU 87 ms 82 ms 79 ms
7 EEE.FFF.V.J 89 ms 89 ms 86 ms
8 EEE.FFF.GGG.HHH 82 ms 87 ms 80 ms
ready 15:19:12

 

Figura 3 - uscita traceroute
Ci si aspetterebbe che con l'aumento del TTL i tempi aumentino e questo è generalmente il caso, ma non sempre, confrontare i terzi tempi riportati del salto 6 (79 ms) e del salto 5 (80 ms) nella figura 3. Ci sono diverse ragioni per questo. In primo luogo, la rete non è deterministica, a volte ci vuole solo più tempo. In secondo luogo, il router al salto N-1 può essere più occupato del router al salto N e ci vuole più tempo per inviare il messaggio ICMP. Infine, il percorso di ritorno dal router N può essere più veloce del percorso di ritorno dal router N-1. Ad esempio, non è necessario che il 4° router invii la sua risposta alla sorgente tramite i router 3, 2 e 1. Potrebbe inviare la sua risposta direttamente al router 1, che potrebbe essere significativamente più veloce. Questo significa che mentre traceroute è molto bravo a segnalare il percorso che un pacchetto prende dall'host di invio all'host di destinazione non si può fare affidamento sul fatto che un pacchetto inviato dall'host di destinazione all'host di invio prenda lo stesso percorso solo al contrario. Questo è noto come instradamento asimmetrico.

 

Traceroute può aggiungere un flag ad un tempo che indica che ha ricevuto qualcosa di diverso dal messaggio di superamento del tempo previsto. Le bandiere sono:
H - ospite irraggiungibile
N - rete irraggiungibile
P - protocollo irraggiungibile
Ad esempio, la figura 4 mostra che il primo router non sa come raggiungere la rete di destinazione e quindi restituisce un messaggio di rete irraggiungibile e il traceroute termina in quel punto.

 

traceroute EEE.FFF.GGG.HHH -numeric
traceroute to EEE.FFF.GGG.HHH (EEE.FFF.GGG.HHH), 30 hops max, 40 byte packets
1 AAA.BBB.CC.KKK 2 ms !N 0 ms !N 1 ms !N
ready 15:40:03

 

Figura 4 messaggi di rete non raggiungibili
Un asterisco (*) al posto dell'ora indica che traceroute non ha ricevuto risposta. Come ho già detto, potrebbe essere che il router non invii un messaggio ICMP che supera l'orario, potrebbe essere che un firewall abbia bloccato il messaggio che supera l'orario al suo ritorno o che un firewall abbia bloccato il messaggio in uscita. Potrebbe anche essere che la rete abbia semplicemente abbandonato il messaggio in uscita o quello di ritorno.

 

Un singolo o anche due timeout su un salto (figura 5) indica probabilmente o che il router non ha inviato il messaggio perché era occupato o che la rete stava facendo cadere i pacchetti (o entrambi). Notate l'8° hop in figura 5, l'asterisco prima dell'indirizzo IP indica che il primo messaggio nel set è scaduto.

 

traceroute to EEE.FFF.GGG.HHH (EEE.FFF.GGG.HHH), 30 hops max, 40 byte packets
1 AAA.BBB.II.LLL 1 ms 0 ms *
2 AAA.BBB.II.J 1 ms 1 ms 1 ms
3 AAA.BBB.MM.NN 1 ms * 1 ms
4 BBB.OOO.PPP.QQQ 7 ms 8 ms 8 ms
5 BBB.RRR.SSS.TTT 76 ms 76 ms 75 ms
6 BBB.RRR.SSS.UUU 79 ms 77 ms 77 ms
7 EEE.FFF.V.J 79 ms * *
8 * EEE.FFF.W.253 79 ms 79 ms
9 EEE.FFF.GGG.HHH 80 ms 80 ms 80 ms
ready 14:43:16

 

Figura 5 - router occupato o pacchetti caduti
Se il timeout di tutti e tre i messaggi ma i successivi tempi di segnalazione dei luppoli (figura 6) è probabile che il router per quel luppolo non invii semplicemente il tempo ICMP superiore ai messaggi.

 

traceroute to EEE.FFF.GGG.HHH (EEE.FFF.GGG.HHH), 30 hops max, 40 byte packets
1 AAA.BBB.II.LLL 1 ms 0 ms 1 ms
2 AAA.BBB.II.J 1 ms 1 ms 1 ms
3 AAA.BBB.MM.NN 1 ms 1 ms 1 ms
4 BBB.OOO.PPP.QQQ 7 ms 8 ms 8 ms
5 BBB.RRR.SSS.TTT 76 ms 76 ms 75 ms
6 BBB.RRR.SSS.UUU 79 ms 77 ms 77 ms
7 * * *
8 * * *
9 EEE.FFF.GGG.HHH 80 ms 80 ms 80 ms
ready 14:47:01

 

Figura 6 - Router non rispondenti
Se tutti i salti superano un certo punto di timeout (figura 7) è probabile che ci sia un firewall che blocca i messaggi in uscita o di ritorno.

 

traceroute to EEE.FFF.GGG.HHH (EEE.FFF.GGG.HHH), 30 hops max, 40 byte packets
1 AAA.BBB.II.LLL 1 ms 0 ms 0 ms
2 AAA.BBB.II.J 1 ms 1 ms 1 ms
3 AAA.BBB.MM.NN 1 ms 1 ms 1 ms
4 BBB.OOO.PPP.QQQ 7 ms 6 ms 8 ms
5 * * *
6 * * *
7 * * *
8 * * *
. . . .
29 * * *
30 * * *
ready 14:51:05

 

Figura 7 - blocco del firewall
C'è un'altra ragione per cui tutto è andato oltre un certo punto. E' quando l'obiettivo non risponde. Non tutti i bersagli rispondono e quando ciò accade si ha qualcosa che assomiglia alla figura 8. La differenza tra le figure 7 e 8 è che nella figura 8 l'ultimo router che invia una risposta è il router locale all'obiettivo. Come si può dire che questo è il caso? A volte l'indirizzamento lo rende ovvio, ad esempio il target è 192.168.1.12 e 192.168.1.1.1 è l'ultimo router a rispondere. Non è così ovvio nella figura 9, EEE.FFF.W.XXX può essere l'ultimo router prima di EEE.FFF.GGG.HHH, hanno i primi 16 bit in comune. Ma senza conoscere lo schema di subnetting utilizzato dalla rete dell'obiettivo non c'è modo di essere sicuri senza chiedere.

 

traceroute to EEE.FFF.GGG.HHH (EEE.FFF.GGG.HHH), 30 hops max, 40 byte packets
1 AAA.BBB.II.LLL 1 ms * 0 ms
2 AAA.BBB.II.J 1 ms 1 ms 1 ms
3 AAA.BBB.MM.NN 1 ms 1 ms 0 ms
4 BBB.OOO.PPP.QQQ 10 ms 7 ms 6 ms
5 BBB.RRR.SSS.TTT 77 ms 76 ms 75 ms
6 BBB.RRR.SSS.UUU 79 ms 80 ms 81 ms
7 EEE.FFF.V.J 82 ms 78 ms 79 ms
8 EEE.FFF.W.XXX 78 ms 95 ms 77 ms
9 * * *
. . . .
29 * * *
30 * * *
ready 15:00:20

 

Figura 8 - l'obiettivo non risponde
È anche possibile ottenere risposte da due o più router per lo stesso hop (figura 9). Questo può accadere se i router sono in bilanciamento del carico o la rete è instabile e le rotte stanno cambiando o come nel caso della figura 9, il router AAA.BBB.CC.KKK non era il router ottimale e dopo aver inoltrato il pacchetto a AAA.BBB.II.J ha inviato un messaggio di reindirizzamento alla sorgente per cambiare la sua tabella di routing.

 

traceroute EEE.FFF.GGG.HHH -numeric
traceroute to EEE.FFF.GGG.HHH (EEE.FFF.GGG.HHH), 30 hops max, 40 byte packets
1 AAA.BBB.CC.KKK 7 ms 1 ms 0 ms
2 AAA.BBB.II.J 1 ms AAA.BBB.MM.NN 1 ms 1 ms
3 BBB.OOO.PPP.QQQ 9 ms 8 ms 8 ms
4 BBB.RRR.SSS.TTT 81 ms 81 ms 77 ms
5 BBB.RRR.SSS.UUU 80 ms 79 ms 78 ms
6 EEE.FFF.V.J 81 ms 77 ms 77 ms
7 EEE.FFF.W.253 78 ms 80 ms 80 ms
8 EEE.FFF.GGG.HHH 84 ms 83 ms 80 ms
ready 15:47:51

 

Figura 9 - due risposte per lo stesso salto
Esistono due tipi di comandi traceroute che si distinguono per il tipo di messaggio che inviano. Alcuni traceroutes, come quello che si trova sui sistemi Microsoft Windows inviano messaggi ICMP echo request (ping); altri, come quello che gira sotto STCP, inviano messaggi UDP. Sapere quale tipo di traceroute si sta utilizzando è importante se è necessario configurare dei firewall per far passare i pacchetti o scrivere i filtri dell'analizzatore di protocollo. Anche la risposta del target sarà diversa. Se il target riceve una richiesta di ping invierà una risposta ping; se riceve un messaggio UDP, la risposta dipende dal numero di porta. Se la porta è in uso, l'applicazione in ascolto scarterà più che probabilmente il pacchetto perché non soddisfa i requisiti di struttura del messaggio dell'applicazione. Se la porta non è in uso l'host *può* inviare un messaggio ICMP di destinazione non raggiungibile. Per questo motivo traceroute seleziona le porte che in genere non vengono utilizzate.

 

Quale numero di porta viene visto dall'host di destinazione dipenderà dal numero di luppoli necessari per raggiungerlo. Traceroute avvia la porta di destinazione a 33435 (per default) e incrementa il numero di porta per ogni messaggio (figura 10). Il target vede quindi 3 porte diverse, probabilmente non tutte e tre saranno in uso. La porta di origine si basa sull'ID del processo di invio. Un dato processo utilizzerà sempre la stessa porta sorgente.

 

dir len proto source destination src port dst port
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33435
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33436
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33437
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33438
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33439
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33440
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33441
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33442
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33443
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33444
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33445
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33446
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33447
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33448
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33449
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33450
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33451
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33452
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33453
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33454
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33455
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33456
R 28 ICMP EEE.FFF.GGG.HHH AAA.BBB.CC.DDD unreach
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33457
R 28 ICMP EEE.FFF.GGG.HHH AAA.BBB.CC.DDD unreach
T 40 UDP AAA.BBB.CC.DDD EEE.FFF.GGG.HHH 34737 33458
R 28 ICMP EEE.FFF.GGG.HHH AAA.BBB.CC.DDD unreach

 

Figure 10 - (edited) packet traces showing port number changes
Infine, a meno che non ci sia un problema al primo salto, probabilmente non ci sarà molto da fare per risolvere il problema. Una volta che STCP (o lo stack di rete di un qualsiasi host) invia un pacchetto al router locale è fuori dalle sue (e dalle vostre) mani. Tuttavia, se si conosce l'indirizzo IP dell'ultimo hop che risponde o l'hop in cui iniziano a verificarsi improvvisamente dei timeout, si ha un'idea di dove si trova il problema e si può contattare il gruppo corretto di amministratori di rete per risolverlo.

© 2024 Stratus Technologies.