giovedì 23 dicembre 2010

Seguire i pacchetti con traceroute

Com'è possibile? Il sito web che ho visitato qualche ora fa adesso non è più accessibile! Vi è mai capitata una situazione come quella appena descritta? Prima ancora di iniziare a indagare sul nostro computer vi consiglio di seguire il percorso fatto dai vostri pacchetti per giungere a destinazione con il comando traceroute. Passate al comando traceroute il nome o indirizzo dell'host irraggiungibile e osservate bene l'output prodotto dal comando. Ad esempio, traceroute luca-petrosino.blogspot.com:


Il comando traceroute sfrutta il campo TTL (time to live) assegnato ad ogni pacchetto trasmesso. Quando la nostra interfaccia di rete immette nella rete un pacchetto assegna a quest'ultimo un valore per il TTL (di default pari a 30 salti, da router a router). Tutto ciò viene fatto per evitare loop e cammini senza meta all'interno della rete e per non aggiungere un inutile carico di lavoro per i router che devono indirizzare il pacchetto verso la destinazione. Quando un pacchetto transita per un router (che lo indirizza verso un router più vicino all'host di destinazione, oppure, se il prossimo salto lo permette, all'host finale) il campo TTL del pacchetto viene diminuito di un'unità. Se il TTL di un pacchetto si annulla il router che lo riceve non effettua più l'instradamento a destinazione e invia al mittente un messaggio di errore, notificando l'impossibilità a raggiungere l'host di destinazione.
traceroute mostra i router attraversati dai pacchetti, la prima richiesta passa per l'interfaccia di rete del nostro computer. Nell'output vengono mostrati i nomi degli host e gli indirizzi ip delle interfacce attraversate. Nell'immagine sopra, allora, per nascondere il mio indirizzo ip ho coperto la prima riga con un rettangolo rosso. Tutti i successivi salti sono invece visibili.
Il comando traceroute invia pacchetti UDP (protocollo di trasporto dati) con TTL crescente, generalmente tre pacchetti (simultaneamente), e ne attende la ricezione dei rispettivi messaggi di errore ICMP (internet control message protocol, il protocollo usato per inviare i messaggi di errore), segnandone i tempi (quelli visibili in corrispondenza della riga che fa riferimento all'host attraversato). Un pacchetto con TTL pari a 1 attraverserà pertanto un solo router! Se i pacchetti ICMP in risposta ai pacchetti UDP inviati da traceroute tardano ad arrivare (il comando li attende per almeno 5 secondi) leggeremo sulla riga dell'host da raggiungere il simbolo *. Si tratta di un evento molto importante per stabilire il punto esatto della rete in cui i nostri pacchetti si perdono! In tal caso il problema risiede in uno dei router attraversati in fase di instradamento (oppure dall'eccessivo numero di salti compiuti dal pacchetto, che ne annullano il TTL). Se invece traceroute ci mostra che i pacchetti UDP vengono persi già dopo il primo salto è evidente che il problema risiede nel gateway usato dalla nostra rete.
Attenzione, non tutti i pacchetti inviati seguono lo stesso percorso! Questo influenza sia i tempi di risposta che i router visitati per ogni salto, non dimenticatelo.

Nessun commento:

Posta un commento