Το traceroute είναι ένα χρήσιμο εργαλείο που χρησιμοποιείται για να εντοπίσει τους ενδιάμεσους κόμβους από τους οποίους περνάει ένα πακέτο IP, πριν φτάσει στον τελικό προορισμό του.
Για να μπορέσουν να μεταφερθούν τα δεδομένα μιας εφαρμογής μέσα σε ένα δίκτυο, τοπικό ή Internet, θα πρέπει αναγκαστικά να χωριστούν σε μικρά στοιχειώδη πακέτα, τα λεγόμενα datagrams.
Σε γενικές γραμμές, το datagram είναι ένα μικρό πακέτο δεδομένων που περιέχει έναν IP header και το τμήμα των δεδομένων που πρόκειται να μεταφερθεί.
Η λειτουργία του traceroute βασίζεται κυρίως στο πεδίο TTL (Time To Live) του IP header ενός datagram. Το πεδίο TTL δηλώνει πόσο θα ζήσει ένα συγκεκριμένο πακέτο, έννοια ιδιαίτερα σημαντική για το Internet, καθώς αποτρέπει την αιώνια κυκλοφορία πακέτων μέσα στους routers.
Η τιμή του TTL δεν περιέχει χρόνο π.χ. σε δευτερόλεπτα, αλλά έναν αριθμό που δηλώνει από πόσους routers επιτρέπεται να περάσει ένα συγκεκριμένο πακέτο, πριν πεθάνει.
Κάθε φορά που το πακέτο περνάει από έναν router, η τιμή του TTL μειώνεται κατά μια μονάδα. Οταν το TTL γίνει ίσο με μηδέν, τότε αυτόματα ο router σβήνει το πακέτο και στέλνει ένα μήνυμα τύπου ”time exceeded” πίσω στον αποστολέα. Σε αυτό το σημείο αποκαλύπτεται η διεύθυνση του router. Για να εντοπίσει τη διαδρομή, το traceroute στέλνει πολλά πακέτα αυξάνοντας κατά μια μονάδα, κάθε φορά, την τιμή του TTL.
Ετσι λοιπόν, το πρώτο πακέτο ξεκινάει με τιμή TTL=1, πράγμα που σημαίνει ότι θα πεθάνει αφού αποκαλύψει τον πρώτο router που συνάντησε, μόλις έφυγε από τον υπολογιστή μας. Κατόπιν, φεύγει ένα δεύτερο πακέτο με την τιμή 2 στο TTL, αποκαλύπτοντας τη διεύθυνση του δεύτερου router κ.λπ. Με αυτόν τον τρόπο αποκαλύπτονται και οι υπόλοιπες διευθύνσεις των ενδιάμεσων routers. Ωστόσο, σίγουρα θα σας έχει δημιουργηθεί το ερώτημα, πώς και πότε σταματάει το traceroute.
Το traceroute ουσιαστικά τερματίζει, όταν η απάντηση του router είναι ”port unreachable” αντί για ”time exceeded”. Αυτό ουσιαστικά είναι ένα μικρό κόλπο του προγράμματος, καθώς στέλνει το πακέτο σε μια πόρτα που κατά πάσα πιθανότητα δεν ακούει κανείς. Όταν θα φθάσει λοιπόν το πακέτο στον τελικό προορισμό του, ο router επιστρέφει ”port unreachable” και το traceroute τερματίζει.