TRACEROUTE(8)

JMÉNO
traceroute - vypíše cestu, kterou pakety putují k zadanému počítači

POUŽITÍ
traceroute [ -dFInrvx ] [ -f první_ttl ] [ -g brána ]
[ -i iface ] [ -m max_ttl ] [ -p port ]
[ -q nqueries ] [ -s src_addr ] [ -t tos ]
[ -w čekací_čas ] [ -z pauza_msecs ]
host [ délka_paketu ]

POPIS
Internet je velké komplexní seskupení síťového hardware, spojeného dohromady branami (routery). Zjišťování cesty, po které pakety chodí (nebo nalezení brány, která odmítá vaše pakety) může být obtížné. Traceroute využívá možnosti položky TTL (Time To Live) v hlavičce IP datagramu a pokouší se vyvolat u každé brány na cestě k cíli odezvu ICMP TIME_EXCEEDED (tj. hlášení o chybě, resp. o vypršení TTL).

Jediný povinný parametr je jméno nebo IP adresa cílového počítače. Standardní délka datagramu je 40 bytů, ale dá se zvýšit udáním jiné hodnoty (v bytech) za adresou cíle.

Další možné parametry:

-f  Nastavení počáteční hodnoty TTL pro první vysílaný datagram.

-F  Nastav příznak "don't fragment".

-d  Zapni ladění na úrovni soketu.

-g  Přímá specifikace routerů na cestě (max 8).

-i  Určení síťového rozhraní, ze kterého budou datagramy vysílány (tj. určení zdrojové IP adresy). Obvykle se hodí pouze na počítači s více síťovými rozhraními (viz také parametr -s).

-I  Místo UDP datagramů použij datagramy ICMP ECHO.

-m  Nastavení maximálního TTL používaného v odcházejících datagramech. Standardně je použita hodnota 30 (stejně jako u TCP spojení).

-n  Adresy bran jsou vypisovány čísly, není prováděn převod na DNS jména (používá se pro urychlení výstupu nebo pokud DNS nefunguje).

-p  Nastavení čísla UDP portu používaného pro traceroute (standardně je 33434). Traceroute předpokládá, že na cílových UDP portech od čísla port do čísla port + počet_hopů - 1 na trase k cíli nic nenaslouchá (takže se zpět vrátí zpráva ICMP PORT_UNREACHABLE). Pokud na některém z portů naslouchá nějaká aplikace, lze tímto parametrem určit počátek nepoužívaného rozsahu portů.

-r  Přeskoč normální routovací tabulky a vysílej přímo na připojené sítě. Pokud cíl v přímo připojené síti neleží, je vrácena chyba. Tento parametr může být použit pro pinknutí na localhost přes rozhraní, přes které nevede žádná cesta (například, poté co bylo rozhraní vypnuto pomocí routed(8C)).

-s  Použij následující IP adresu (obvykle zadanou spíše jako číslo než jako jméno) jako zdrojovou adresu pro odcházející datagramy. Na počítačích s více síťovými rozhraními (tj. s více než jednou IP adresou), může být tento parametr použit k nastavení jiné zdrojové IP, než jaká je na odesílajícím síťovém rozhraní. Pokud IP adresa nepatří mezi adresy rozhraní tohoto počítače, je vrácena chyba a nic se nevyšle (viz také parametr -i).

-t  Nastavení TOS (Type-Of-Service) v odesílaných paketech (standardně nula). Číslo musí být celé v rozsahu od 0 do 255. Tento parametr lze použít pro zjištění, zda různé typy služeb jsou směrovány různými cestami (pokud nemáte 4.4bsd, je to jen akademické, protože u normálních síťových služeb jako telnet a ftp není TOS možné nastavit). Ne všechny hodnoty jsou legální nebo významné - (viz specifikaci IP). Použitelné hodnoty jsou: `-t 16' (krátká doba odezvy) a `-t 8' (vysoký průtok).

-v  Rozšířený výstup. Jsou vypsány i příchozí datagramy jiné než ICMP TIME_EXCEEDED a UNREACHABLE.

-w  Čas (v sekundách) čekání pro odezvu na vyslané datagramy (standardně 5 sec.).

-x  Přepínání kontrolních součtů. Obvykle jsou kontrolní součty tímto parametrem vypnuty. V některých případech může operační systém přepsat části odcházejících datagramů, ale nepřepočítat kontrolní součet (tj. v některých případech se standardně kontrolní součty nepočítají a použití tohoto parametru způsobí jejich počítání). Nezapomeňte, že kontrolní součty jsou obvykle potřeba pro poslední přeskok, když se používá ICMP ECHO. (-I). Takže pokud se používá ICMP, počítají se vždy.

-z  Nastaví délku pauzy (v milisekundách) mezi vysíláním datagramů (výchozí je 0). Některé systémy, jako např. Solaris, a routery, jako třeba Cisco, omezují icmp zprávy. Vhodná hodnota pro použití je 500 (tj. 0,5 sekundy).

Tento program se pokouší zobrazit cestu, kterou vykoná IP datagram k cílovému počítači tak, že vysílá záměrně UDP datagramy s malými hodnotami TTL (Time To Live) a pak čeká, zda přijde od brány (routeru) ICMP zpráva "Čas vypršel" (Time Exceeded). Začíná se s vysláním datagramu s TTL nastaveným na hodnotu 1 a pak se TTL postupně zvyšuje, dokud není přijat datagram se ICMP zprávou "Port Unreachable" (což znamená, že jsme u cíle) nebo pokud se dosáhne maximální hodnoty TTL (která je standardně 30 skoků a může být změněna pomocí parametru -m). Pro každou hodnotu TTL jsou vyslány tři datagramy (lze změnit pomocí parametru -q) a pak je vypsán řádek s hodnotou TTL, adresou brány a dobami odezvy (round trip time) každého vyslaného datagramu. Přijdou-i odpovědi z různých bran, jsou všechny vypsány. Pokud nepřijde žádná odezva do pěti vteřin (lze změnit pomocí parametru -w) je vypsán znak "*".

Je potřeba, aby cílový počítač nezpracovával UDP výzvy, a tak je cílový port nastaven na nepravděpodobnou hodnotu (pokud nějaký program na cílovém počítači tento port používá, můžete ho změnit pomocí parametru -p).

Příklad použití a následného výstupu:
    [yak 71]% traceroute nis.nsf.net.
    traceroute to nis.nsf.net (35.1.1.48), 30 hops max, 38 byte packet
     1  helios.ee.lbl.gov (128.3.112.1)  19 ms  19 ms  0 ms
     2  lilac-dmc.Berkeley.EDU (128.32.216.1)  39 ms  39 ms  19 ms
     3  lilac-dmc.Berkeley.EDU (128.32.216.1)  39 ms  39 ms  19 ms
     4  ccngw-ner-cc.Berkeley.EDU (128.32.136.23)  39 ms  40 ms  39 ms
     5  ccn-nerif22.Berkeley.EDU (128.32.168.22)  39 ms  39 ms  39 ms
     6  128.32.197.4 (128.32.197.4)  40 ms  59 ms  59 ms
     7  131.119.2.5 (131.119.2.5)  59 ms  59 ms  59 ms
     8  129.140.70.13 (129.140.70.13)  99 ms  99 ms  80 ms
     9  129.140.71.6 (129.140.71.6)  139 ms  239 ms  319 ms
    10  129.140.81.7 (129.140.81.7)  220 ms  199 ms  199 ms
    11  nic.merit.edu (35.1.1.48)  239 ms  239 ms  239 ms
Všimněte si, že řádky 2 a 3 obsahují stejná jména i IP adresy počítačů, což způsobuje chybné 4.3 BSD jádro na druhém přeskoku (lbl-csam.arpa), které přeposílá datagramy s nulovým TTL. Ve spodní části nejsou uvedeny jména počítačů, protože NSFNet (129.140) nemá v DNS zavedeny příslušné reverzní záznamy.

Další příklad:
    [yak 72]% traceroute allspice.lcs.mit.edu.
    traceroute to allspice.lcs.mit.edu (18.26.0.115), 30 hops max
     1  helios.ee.lbl.gov (128.3.112.1)  0 ms  0 ms  0 ms
     2  lilac-dmc.Berkeley.EDU (128.32.216.1)  19 ms  19 ms  19 ms
     3  lilac-dmc.Berkeley.EDU (128.32.216.1)  39 ms  19 ms  19 ms
     4  ccngw-ner-cc.Berkeley.EDU (128.32.136.23)  19 ms  39 ms  39 ms
     5  ccn-nerif22.Berkeley.EDU (128.32.168.22)  20 ms  39 ms  39 ms
     6  128.32.197.4 (128.32.197.4)  59 ms  119 ms  39 ms
     7  131.119.2.5 (131.119.2.5)  59 ms  59 ms  39 ms
     8  129.140.70.13 (129.140.70.13)  80 ms  79 ms  99 ms
     9  129.140.71.6 (129.140.71.6)  139 ms  139 ms  159 ms
    10  129.140.81.7 (129.140.81.7)  199 ms  180 ms  300 ms
    11  129.140.72.17 (129.140.72.17)  300 ms  239 ms  239 ms
    12  * * *
    13  128.121.54.72 (128.121.54.72)  259 ms  499 ms  279 ms
    14  * * *
    15  * * *
    16  * * *
    17  * * *
    18  ALLSPICE.LCS.MIT.EDU (18.26.0.115)  339 ms  279 ms  279 ms
Brány 12, 14, 15, 16 a 17 neposílají ICMP zprávy "Time Exceeded" nebo je posílají s příliš malou hodnotou TTL a proto se k nám nedostanou. Na branách 14 - 17 běží MIT C Gateway, která zprávy "time exceeded" neposílá. Bůh ví, co je s 12.

Ztichlá brána 12 může být způsobena chybou v síťovém kódu 4.[23] BSD (a jeho odvozeniny): 4.x (x <= 3) posílají odpověď s použitím TTL, které bylo v příchozím datagramu, proto odpověď nedojde. Tato chyba se projeví zajímavěji, pokud ji má cílový počítač:
     1  helios.ee.lbl.gov (128.3.112.1)  0 ms  0 ms  0 ms
     2  lilac-dmc.Berkeley.EDU (128.32.216.1)  39 ms  19 ms  39 ms
     3  lilac-dmc.Berkeley.EDU (128.32.216.1)  19 ms  39 ms  19 ms
     4  ccngw-ner-cc.Berkeley.EDU (128.32.136.23)  39 ms  40 ms  19 ms
     5  ccn-nerif35.Berkeley.EDU (128.32.168.35)  39 ms  39 ms  39 ms
     6  csgw.Berkeley.EDU (128.32.133.254)  39 ms  59 ms  39 ms
     7  * * *
     8  * * *
     9  * * *
    10  * * *
    11  * * *
    12  * * *
    13  rip.Berkeley.EDU (128.32.131.22)  59 ms !  39 ms !  39 ms !
Ve výstupu je vidět 12 bran (routerů), třináctý je cíl a přesně druhá polovina odpovědí chybí. Způsobuje to chyba na počítači rip (Sun-3 se systémem Sun OS3.5), který používá TTL v dotazech jako TTL pro ICMP odpovědi. Proto odpověď dojde až v okamžiku, kdy je TTL větší, než dvojnásobek délky zpáteční trasy. Počítač rip je vzdálen skutečně jen sedm hopů. Odpověď vrácená s TTL 1 je vodítkem, že tento problém existuje. Traceroute vypíše znak "!" pokaždé, když je TTL <= 1. Protože je distribuována spousta zastaralého (DEC Ultrix, Sun 3.x) nebo nestandardního (HPUX) software, je tento problém častý. Další možné poznámky za údajem o času jsou: !H, !N nebo !P (cíl, síť nebo protokol nedosažitelné), !S (zdrojová cesta selhala) nebo !F-<pmtu> (je potřebná fragmentace - zobrazí se hodnota Path MTU Discovery z RFC1191), !X (komunikace zakázána administrátory), !V (porušení pořadí cílů), !C (precedence cutoff in effect) nebo !<číslo> (ICMP nedostupné, kód <číslo>). Tyto jsou definovány v RFC1812 (které nahrazuje RFC1716). Pokud téměř všechny výzvy končí hlášeními o nedosažitelnosti, traceroute se ukončí.

Tento program je určen pro testovaní, měření a management sítí. Primárně by měl sloužit pro manuální izolaci chyb. Protože traceroute může síť zatížit, není moudré používat traceroute během normálních operací a z automatických skriptů.

DALŠÍ INFORMACE
pathchar(8), netstat(1), ping(8)

AUTOR
Implementoval Van Jacobson podle návrhu Steve Deeringa. Ladily tisíce lidí, zahrnuty opravy a návrhy od: C. Philip Wood, Tim Seaver a Ken Adelman.

Současné verze programu jsou k dispozici na anonymním ftp:

    ftp://ftp.ee.lbl.gov/traceroute.tar.gz

CHYBY
Prosím posílejte chyby na adresu traceroute@ee.lbl.gov.