Polecenie traceroute w systemach unixowych to prawdziwa klasyka, jeśli chodzi o diagnozowanie połączeń sieciowych. Za jego pomocą można dokładnie prześledzić, jak pakiety przemierzają kolejne routery od komputera źródłowego do hosta docelowego. Co ciekawe – traceroute wykorzystuje pakiety UDP (choć można też użyć ICMP lub TCP, w zależności od wersji narzędzia i systemu), ustawiając rosnącą wartość TTL (Time To Live). Każdy router po drodze zmniejsza TTL o 1, a gdy dojdzie on do zera, router odsyła komunikat ICMP Time Exceeded. Dzięki temu użytkownik dostaje listę kolejnych przystanków, czyli tzw. hopów, przez które przechodzą pakiety. Jak dla mnie, to narzędzie obowiązkowe dla każdego administratora sieci czy nawet zwykłego użytkownika, który próbuje rozwiązać problem z połączeniem. Bardzo często dzięki traceroute można ustalić, czy problem tkwi gdzieś po stronie lokalnej, pośredniego operatora, czy może już na końcu, w serwerowni odbiorcy. Warto też pamiętać, że polecenie traceroute jest domyślnie dostępne w większości dystrybucji Linuksa czy systemów BSD – nie trzeba niczego dodatkowo instalować. Standardowo używa się go tak: traceroute adres_docelowy. Narzędzie to jest zgodne z praktykami branżowymi dotyczącymi diagnostyki i monitorowania sieci, bardzo często wymieniane jest w podręcznikach lub dokumentacji technicznej jako jedno z podstawowych narzędzi debugowania tras sieciowych. W środowiskach production bywa nieocenione, bo szybko wskazuje, gdzie pojawia się opóźnienie lub gdzie giną pakiety.
Często można spotkać się z nieporozumieniami dotyczącymi narzędzi do diagnozowania sieci, bo wszystkie wymienione polecenia mają coś wspólnego z analizą ruchu lub połączeń, ale ich zastosowanie jest zupełnie różne. Windump to tak naprawdę wersja tcpdump na Windowsa, czyli narzędzie służące do przechwytywania pakietów – ono nie pokazuje trasy pakietów w sieci, tylko pozwala zobaczyć, co dokładnie leci po interfejsie sieciowym. Pomaga bardziej w analizie ruchu czy szukaniu nietypowych pakietów, a nie w określaniu ścieżki do hosta. Z kolei tracert brzmi bardzo znajomo, bo jest to windowsowy odpowiednik traceroute; działa na podobnej zasadzie, ale na systemach unixowych nie jest dostępny, więc w pytaniu o unixowe systemy nie pasuje. Bardzo często osoby przyzwyczajone do środowiska Windows mylą te dwa narzędzia, co jest zrozumiałe, ale jednak niepoprawne w kontekście Linuksa czy BSD. Ping natomiast to polecenie, które wysyła pakiety ICMP Echo Request do hosta i sprawdza, czy odpowiedzi wracają – jest świetne do sprawdzenia, czy host jest osiągalny, ile wynosi opóźnienie, czy w ogóle jest jakaś reakcja, ale nie daje żadnej informacji o trasie, którą pakiety przebywają w sieci. To bardzo popularny błąd myślowy: zakładać, że skoro ping 'coś pokazuje', to również wyświetli trasę. Niestety, ping jest dużo prostszy i nie pozwala na analizę poszczególnych hopów. W praktyce, kiedy chcemy zdiagnozować, gdzie występuje problem z połączeniem (np. czy na którymś routerze jest opóźnienie lub pakiety giną), korzystamy właśnie z traceroute. Dlatego tak ważne jest rozróżnianie tych narzędzi i wiedza, które z nich stosować w danej sytuacji – to bardzo przydaje się w codziennej pracy z siecią, zwłaszcza jak trzeba szybko znaleźć wąskie gardło w połączeniach internetowych.