Artykuł Serwery

Traceroute i tracert - jak przesledzic trase pakietu i czytac hopy

Traceroute (w Windows: tracert) to narzędzie, które pokazuje trasę pakietu przez kolejne routery do serwera i czas każdego przeskoku. Uruchamiasz je jedną komendą w wierszu poleceń lub terminalu. Służy do diagnozy, gdzie w sieci powstaje opóźnienie albo zerwanie połączenia.

Co to jest traceroute i tracert

Traceroute to narzędzie diagnostyczne, które śledzi drogę pakietu danych od Twojego komputera do serwera docelowego. Po drodze pakiet przechodzi przez wiele routerów - każdy taki punkt to przeskok, po angielsku hop. Traceroute wypisuje je po kolei: adres IP każdego routera, jego nazwę (jeśli ma wpis w DNS) i czas, jaki pakiet potrzebował, żeby tam dotrzeć i wrócić.

Konkret: tracert (Windows) i traceroute (Linux, macOS) to ta sama idea pod dwiema nazwami. Microsoft skrócił polecenie do ośmiu znaków w czasach DOS-u i nazwa została. Różni je też domyślny protokół, o czym za chwilę, ale efekt jest ten sam - lista skoków od Ciebie do celu.

Jeśli ping odpowiada na pytanie "czy host żyje i jak szybko", to traceroute odpowiada "którędy tam idę i gdzie się to sypie". To naturalny drugi krok po pingu - najpierw sprawdzasz, czy w ogóle jest odpowiedź, potem szukasz, na którym odcinku trasy siedzi problem. Po drodze przydaje się rozumienie tego, czym jest adres IP zmniejsza TTL do zera, odrzuca pakiet i odsyła "Time Exceeded". W ten sposób poznajesz adres pierwszego skoku.

  1. Drugi pakiet leci z TTL równym 2. Pierwszy router go przepuszcza, drugi zeruje TTL i się zgłasza. Masz drugi hop.
  2. Wartość TTL rośnie o jeden przy każdej kolejnej próbie, aż pakiet dotrze do celu. Serwer docelowy nie odsyła "Time Exceeded" - odpowiada inaczej, i to jest sygnał, że dotarłeś na miejsce.

Dla każdego skoku traceroute wysyła zwykle trzy pakiety, dlatego w wyniku widzisz trzy czasy w milisekundach obok jednego adresu. To po prostu trzy pomiary tego samego odcinka.

Trade-off protokołów: Windowsowy tracert domyślnie używa pakietów ICMP Echo (tych samych, co ping). Linuksowy traceroute domyślnie wysyła pakiety UDP na wysokie porty. To dlatego ten sam adres bywa raz widoczny, raz nie - część routerów i firewalli flagą -T.

Traceroute w Windows - polecenie tracert

Krok po kroku:

  1. Otwórz menu Start, wpisz cmd i naciśnij Enter - uruchomi się Wiersz poleceń. Uprawnienia administratora nie są potrzebne.
  2. Wpisz polecenie z adresem celu, na przykład:
tracert google.com
  1. Naciśnij Enter i poczekaj. Windows wypisuje kolejne skoki na bieżąco, aż dojdzie do celu lub do limitu 30 przeskoków.

Kilka przełączników, które realnie się przydają:

  • tracert -d google.com - pomija zamianę adresów IP na nazwy DNS. Wynik leci znacznie szybciej, bo traceroute nie czeka na odpowiedzi serwerów DNS dla każdego skoku.

Pro tip admina: jeśli chcesz wynik komuś wysłać (na przykład do supportu hostingu), przekieruj go od razu do pliku: tracert google.com > trasa.txt. Support zwykle prosi właśnie o pełny traceroute, a nie o zrzut ekranu.

Traceroute w Linux i macOS

Na macOS narzędzie jest wbudowane. W większości dystrybucji Linuksa też, a jeśli nie - doinstalujesz je z repozytorium. W skrócie, dla systemów z rodziny Debian i Ubuntu:

sudo apt install traceroute

Uruchomienie jest analogiczne do Windows, zmienia się tylko nazwa polecenia:

traceroute google.com

Przydatne warianty:

  • traceroute -n google.com - odpowiednik windowsowego -d, pomija DNS i przyspiesza wynik.
  • traceroute -I google.com - wymusza pakiety ICMP zamiast domyślnego UDP. Częściej przechodzi przez routery, które ignorują UDP.
  • traceroute -T -p 443 google.com - tryb TCP na port 443. Świetny, gdy sprawdzasz dostępność konkretnej usługi (na przykład HTTPS), a klasyczny traceroute gubi się na firewallu. To pokrewna technika do sprawdzania portu przez telnet, czyli czas w obie strony w milisekundach. Trzy wartości, bo traceroute wysyła trzy pakiety na skok.
  • ae-1.warszawa.example.net - nazwa DNS routera. Często koduje lokalizację lub rolę urządzenia, tu miasto Warszawa.
  • [83.238.x.x] - adres IP routera.

Na co realnie patrzeć:

  • Rosnące, stabilne opóźnienia z każdym skokiem to norma - im dalej geograficznie, tym większy RTT. Trasa z Polski do serwera w USA na ostatnich skokach spokojnie osiągnie 100-150 ms i to jest zdrowe.
  • Nagły skok czasu, który trzyma się do końca trasy, wskazuje wąskie gardło. Jeśli między skokiem 7 a 8 RTT rośnie z 15 ms do 90 ms i tak zostaje, to na tym odcinku jest problem albo po prostu dłuższa trasa (na przykład wyjście za granicę).
  • Gwiazdki * * * zamiast czasów oznaczają, że router nie odpowiedział w wyznaczonym czasie. Sprawdź: to najczęściej nie awaria. Wiele routerów celowo depriorytetyzuje lub blokuje odpowiedzi ICMP, a mimo to normalnie przepuszcza ruch użytkowy. Jeśli gwiazdki są na jednym skoku w środku, a trasa idzie dalej i dochodzi do celu - wszystko gra.
  • Gwiazdki dopiero od pewnego skoku aż do końca to inna historia - tam trasa faktycznie się urywa i to jest punkt, od którego zaczynasz szukać przyczyny.

Pułapka interpretacji: pojedynczy wysoki pomiar na jednym skoku, gdy sąsiednie są niskie (na przykład 11 ms 250 ms 12 ms), zwykle nie znaczy nic złego. To router, który sam wolno generuje odpowiedź ICMP, ale ruch tranzytowy obsługuje szybko. Liczy się trend na całej trasie, nie jeden odczyt.

Kiedy używać traceroute do diagnostyki

To zależy od objawu, ale traceroute wyciągasz zwykle w tych sytuacjach:

  • Strona lub usługa działa wolno tylko u Ciebie - traceroute pokaże, czy opóźnienie rośnie u Twojego dostawcy, gdzieś w tranzycie, czy dopiero przy serwerze docelowym.
  • Połączenie się zrywa i nie wiesz, po czyjej stronie - jeśli trasa urywa się na pierwszych skokach, problem jest lokalny (Twój router, dostawca). Jeśli dochodzi prawie do celu i pada przy hostingu, kierujesz zgłoszenie do hostingu.
  • Chcesz wiedzieć, czy ruch nie idzie dziwną trasą - czasem pakiety do polskiego serwera wychodzą przez zagraniczny węzeł i wracają, co dokłada kilkadziesiąt milisekund.

Most do ping: te dwa narzędzia grają w parze. Ping mówi Ci, że host jest nieosiągalny albo wolny - traceroute mówi, na którym odcinku. Typowa kolejność: najpierw ping serwer, żeby zobaczyć, czy w ogóle odpowiada i z jakim opóźnieniem. Jeśli ping jest zły lub milczy, odpalasz tracert serwer i patrzysz, przy którym skoku zaczynają się gwiazdki albo skok RTT. To zawęża winowajcę z "cały internet" do jednego routera. O samych maszynach na końcu trasy więcej w materiale o tym, czym jest serwer łączy traceroute z pingiem w pętli. Zamiast jednego przebiegu bez końca odpytuje trasę i pokazuje na żywo statystykę: procent utraty pakietów i średni RTT na każdym skoku. To najlepsze narzędzie, gdy problem jest przerywany - jeden traceroute może trafić w dobry moment, MTR uśrednia dziesiątki prób i wyłapie router, który gubi na przykład 5% pakietów.

  • tracepath w Linuksie działa podobnie do traceroute, nie wymaga uprawnień root i przy okazji wykrywa MTU trasy.
  • Traceroute online (na przykład dnschecker.org czy traceroute-online.com) uruchamiasz z serwera zewnętrznego, nie ze swojego łącza. Sprawdź go, gdy chcesz zobaczyć trasę do Twojego serwera z innego kraju albo gdy podejrzewasz, że problem jest po Twojej stronie - jeśli traceroute z zewnątrz dochodzi do celu bez problemu, wąskie gardło jest u Ciebie lub u Twojego dostawcy.

Konkret o bezpieczeństwie: traceroute ujawnia adresy IP routerów na trasie, w tym Twój publiczny adres na starcie. Dlatego mapowanie trasy bywa też pierwszym krokiem rozpoznania sieci przez atakującego - to znane i skatalogowane (MITRE CAPEC-293). W codziennej diagnostyce to nieistotne, ale warto wiedzieć, że pełny traceroute do wewnętrznej infrastruktury lepiej trzymać dla siebie, a nie wklejać publicznie.

FAQ

Czym różni się tracert od traceroute?

To ta sama funkcja pod dwiema nazwami. tracert to polecenie w Windows, traceroute w Linux i macOS. Różnią się też domyślnym protokołem: tracert wysyła pakiety ICMP, a linuksowy traceroute domyślnie UDP. Efekt jest identyczny - lista routerów i czasów na trasie do celu.

Jak zrobić traceroute w Windows?

Otwórz menu Start, wpisz cmd i naciśnij Enter. W Wierszu poleceń wpisz tracert oraz adres celu, na przykład tracert google.com, i zatwierdź Enterem. Windows wypisze kolejne skoki wraz z czasami. Uprawnienia administratora nie są potrzebne.

Co oznaczają gwiazdki w traceroute?

Gwiazdki * * * znaczą, że router nie odpowiedział w wyznaczonym czasie. Najczęściej nie jest to awaria - wiele routerów celowo blokuje lub spowalnia odpowiedzi ICMP, przepuszczając normalny ruch. Problemem są dopiero gwiazdki, które ciągną się od pewnego skoku aż do końca trasy.

Czy traceroute pokazuje mój adres IP?

Tak, pierwszy skok to zwykle Twoja brama domyślna, a cała operacja startuje z Twojego publicznego adresu IP. Traceroute uruchamiany z Twojego komputera ujawnia też adresy routerów po drodze. Dlatego pełnych wyników z wewnętrznej sieci lepiej nie publikować w otwartych miejscach.

Traceroute czy ping - czego użyć najpierw?

Zacznij od pinga - jest natychmiastowy i mówi, czy host w ogóle odpowiada i jak szybko. Jeśli ping jest zły albo milczy, uruchom traceroute, żeby zobaczyć, na którym odcinku trasy powstaje opóźnienie lub zerwanie. Ping to szybki test, traceroute to lokalizacja problemu.

Dlaczego traceroute pokazuje inne trasy przy każdym uruchomieniu?

Bo duże sieci równoważą ruch po kilku łączach naraz. Kolejne pakiety mogą iść nieco inną drogą, więc pojedyncze skoki bywają różne w kolejnych przebiegach. To normalne. Jeśli chcesz stabilny obraz z uśrednieniem, użyj MTR zamiast jednorazowego traceroute.