Przejdź do treści

Traceroute: odkrywanie ścieżek sieciowych

Wprowadzenie

Traceroute jest jednym z podstawowych narzędzi diagnostycznych używanych przez administratorów IT do analizy ścieżek, którymi pakiety danych przemieszczają się przez sieci (zarówno lokalne, jak i Internet). To narzędzie pozwala śledzić trasę pakietów od źródła do celu, pokazując każdy węzeł (router) po drodze oraz czas potrzebny do jego osiągnięcia. W tym artykule przyjrzę się temu, jak działa traceroute.

Jak działa traceroute?

Podstawowa koncepcja

Traceroute wykorzystuje protokół IP i mechanizm TTL (Time To Live) do odkrywania ścieżek sieciowych. Zasada działania jest następująca:

  1. Narzędzie wysyła serię pakietów (domyślnie używając protokołu UDP, ICMP lub TCP) do hosta docelowego.
  2. Każdy pakiet ma przypisaną wartość TTL, która określa maksymalną liczbę przeskoków, jakie może wykonać, zanim zostanie odrzucony.
  3. Traceroute zaczyna od wysłania pakietu z TTL=1, a następnie stopniowo zwiększa tę wartość dla kolejnych pakietów.
  4. Gdy router otrzymuje pakiet, zmniejsza wartość TTL o 1. Jeśli TTL osiągnie 0, router odrzuca pakiet i zwraca do nadawcy komunikat ICMP "Time Exceeded" (Przekroczony czas).
  5. Traceroute mierzy czas między wysłaniem pakietu a otrzymaniem odpowiedzi ICMP, co określa opóźnienie do tego routera.
  6. Narzędzie kontynuuje wysyłanie pakietów z rosnącymi wartościami TTL, aż osiągnie host docelowy lub przekroczy maksymalną liczbę przeskoków.

Typy implementacji

Traceroute może używać różnych protokołów do działania:

  • UDP (tradycyjna implementacja Unix/Linux): Wysyła pakiety UDP na prawdopodobnie nieużywane porty docelowe. Gdy pakiet dotrze do celu, serwer docelowy odpowiada komunikatem ICMP "Port Unreachable" (Port nieosiągalny).
  • ICMP: Wykorzystuje pakiety Echo Request (ping) z rosnącym TTL.
  • TCP: Wykorzystuje pakiety TCP, co może być przydatne w sieciach, w których pakiety UDP/ICMP są filtrowane przez zapory sieciowe.

Interpretacja wyników

Typowe wyniki traceroute zawierają:

  • Numer przeskoku
  • Adresy IP routerów (a czasem ich nazwy DNS)
  • Czasy odpowiedzi (RTT - Round Trip Time) dla każdego routera (zwykle pokazywane są trzy próby)
  • Gwiazdki (*) wskazujące brak odpowiedzi (z powodu filtrowania, przeciążenia itp.)

Nowoczesne implementacje

Współczesne implementacje traceroute w Linuksie, takie jak te w pakiecie iputils, oferują dodatkowe funkcje:

  • Równoległe sondowanie - Wysyłanie pakietów do wielu przeskoków jednocześnie dla szybszych wyników
  • Wyszukiwanie ścieżki AS - Pokazywanie numeru systemu autonomicznego (AS) dla każdego przeskoku
  • Wykrywanie MTU - Wykrywanie maksymalnej jednostki transmisji wzdłuż trasy

Przykłady użycia traceroute

Podstawowe użycie jest bardzo proste:

traceroute example.com

Przykładowy wynik:

traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
 1  _gateway (192.168.1.1)  2.162 ms  2.187 ms  2.324 ms
 2  192.168.100.1 (192.168.100.1)  12.644 ms  12.862 ms  13.030 ms
 3  host-72-174-144-1.broadband.pl (72.174.144.1)  14.221 ms  14.371 ms  14.516 ms
 4  ae21-0.icr01.waw04.atlas.cogentco.com (149.14.58.133)  15.578 ms  15.689 ms  19.404 ms
 5  be3035.ccr21.ham01.atlas.cogentco.com (154.54.38.205)  32.141 ms  32.247 ms  32.352 ms
 6  be3037.ccr21.ams03.atlas.cogentco.com (154.54.56.93)  35.170 ms  35.289 ms  35.400 ms
 7  * * *
 8  * * *
 9  93.184.216.34 (93.184.216.34)  88.305 ms  88.410 ms  88.510 ms

Inne funkcje traceroute

Równoległe sondowanie

# Wysyłanie równoległych sond do wielu węzłów (domyślnie 16)
traceroute -N 20 example.com

Przykładowy wynik:

traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
 1  _gateway (192.168.1.1)  1.923 ms
 2  192.168.100.1 (192.168.100.1)  10.552 ms
 3  host-72-174-144-1.broadband.pl (72.174.144.1)  12.411 ms
 4  ae21-0.icr01.waw04.atlas.cogentco.com (149.14.58.133)  14.563 ms
 5  be3035.ccr21.ham01.atlas.cogentco.com (154.54.38.205)  30.984 ms
 6  be3037.ccr21.ams03.atlas.cogentco.com (154.54.56.93)  33.847 ms
 7  * 
 8  * 
 9  93.184.216.34 (93.184.216.34)  87.219 ms

Wyszukiwanie ścieżki AS

# Pokazywanie numerów AS dla każdego przeskoku
traceroute -A example.com

Przykładowy wynik:

traceroute to example.com (93.184.216.34), 30 hops max, 60 byte packets
 1  _gateway (192.168.1.1) [*]  2.015 ms  2.133 ms  2.255 ms
 2  192.168.100.1 (192.168.100.1) [*]  10.763 ms  10.971 ms  11.140 ms
 3  host-72-174-144-1.broadband.pl (72.174.144.1) [AS12741]  12.538 ms  12.714 ms  12.880 ms
 4  ae21-0.icr01.waw04.atlas.cogentco.com (149.14.58.133) [AS174]  14.723 ms  14.859 ms  15.002 ms
 5  be3035.ccr21.ham01.atlas.cogentco.com (154.54.38.205) [AS174]  31.239 ms  31.352 ms  31.465 ms
 6  be3037.ccr21.ams03.atlas.cogentco.com (154.54.56.93) [AS174]  34.140 ms  34.259 ms  34.370 ms
 7  * * *
 8  * * *
 9  93.184.216.34 (93.184.216.34) [AS15133]  87.497 ms  87.615 ms  87.728 ms

Wykrywanie MTU

Czym jest MTU ?

MTU (Maximum Transmission Unit) to maksymalny rozmiar pakietu (w bajtach), który może być przesyłany przez interfejs sieciowy bez fragmentacji. Dla Ethernetu standardowe MTU wynosi 1500 bajtów.

Dlaczego to jest ważne:

  1. Wydajność – Zbyt małe MTU oznacza więcej pakietów dla tej samej ilości danych → więcej nagłówków → większe obciążenie CPU i sieci.
  2. Fragmentacja – Jeśli pakiet jest większy niż MTU, zostanie podzielony (sfragmentowany), co może:
    • zwiększyć opóźnienia,
    • prowadzić do błędów transmisji, gdy jeden fragment zostanie utracony.
  3. Problemy z Path MTU – Jeśli na drodze znajduje się urządzenie z mniejszym MTU, a bit DF (Don't Fragment - Nie fragmentuj) jest ustawiony, pakiet może nigdy nie dotrzeć
  4. Tunelowanie/VPN – często zmniejszają efektywne MTU (np. IPsec dodaje nagłówki), co należy wziąć pod uwagę.

Jak sprawdzić i ustawić MTU: Standard dla wszystkich dystrybucji. W systemach typu RHEL zazwyczaj używamy nmcli/nmtui lub ethtool

ip link show
ip link set dev eth0 mtu 1400
ping -M do -s 1472 8.8.8.8  # bez fragmentacji (1472 + 28 = 1500)
# Używanie tracepath do wykrywania MTU
tracepath example.com

Przykładowy wynik:

 1?: [LOCALHOST]                      pmtu 1500
 1:  _gateway                                               1.849ms 
 1:  _gateway                                               1.755ms 
 2:  192.168.100.1                                         11.079ms 
 3:  host-72-174-144-1.broadband.pl                        12.755ms 
 4:  ae21-0.icr01.waw04.atlas.cogentco.com                 14.903ms asymm  5 
 5:  be3035.ccr21.ham01.atlas.cogentco.com                 31.577ms asymm  6 
 6:  be3037.ccr21.ams03.atlas.cogentco.com                 34.455ms asymm  7 
 7:  no reply
 8:  no reply
 9:  example.com                                            87.890ms reached
     Resume: pmtu 1500 hops 9 back 58
Co oznacza asymm N?

Co oznacza asymm N?

asymm w wyniku traceroute wskazuje, że ścieżka powrotna pakietu różni się od ścieżki wychodzącej - oznacza to, że jest asymetryczna.

  • asymm 5 oznacza, że pakiet wraca przez pięć różnych przeskoków w porównaniu ze ścieżką wychodzącą.
  • Może to wpływać na diagnostykę - np. różne opóźnienia w zależności od kierunku.
  • traceroute opiera się na odpowiedziach ICMP TTL Exceeded (lub innych, w zależności od opcji), więc otrzymuje informacje tylko z jednej strony ścieżki.

Dlaczego występuje asymetria:

  • Różne ścieżki routingu (np. BGP w zależności od kierunku).
  • Równoważenie obciążenia - niektóre routery używają ECMP (Equal Cost Multi Path).
  • Polityki ISP - np. preferowanie tańszych tras w jednym kierunku.

Kiedy ma to znaczenie:

  • Diagnostyka problemów (utrata pakietów może dotyczyć tylko jednej ścieżki).
  • Pomiar opóźnień nie odzwierciedla całej trasy.
  • Tunelowanie/VPN - np. różne MTU w zależności od ścieżki może prowadzić do fragmentacji w jednym kierunku, ale nie w drugim.

Alternatywnie:

traceroute --mtu example.com

Podsumowanie

Traceroute jest potężnym narzędziem diagnostycznym, które pozwala nam zobaczyć, jak pakiety danych są przesyłane między sieciami. Analiza kodu traceroute może pokazać, jak elegancko wykorzystuje on podstawowe protokoły internetowe (IP, UDP, ICMP) do mapowania złożonych tras sieciowych.