Hur man använder traceroute-kommandot på Linux

Du kan använda kommandot Linux traceroute för att upptäcka den långsamma delen av ett nätverkspakets resa och felsöka tröga nätverksanslutningar. Vi visar dig hur!

Hur traceroute fungerar

När du förstår hur traceroute fungerar, gör det mycket lättare att förstå resultaten. Ju mer komplicerad rutten a nätverkspaket måste ta för att nå sin destination, desto svårare är det att lokalisera var eventuella avmattningar kan inträffa.

En liten organisation lokalt nätverk (LAN) kan vara relativt enkelt. Den kommer förmodligen att ha minst en server och en router eller två. Komplexiteten ökar på en wide area network (WAN) som kommunicerar mellan olika platser eller via internet. Ditt nätverkspaket stöter sedan på (och vidarebefordras och dirigeras av) mycket hårdvara, som routrar och gateways.

Rubrikerna för metadata på datapaket beskriver dess längd, var den kom ifrån, vart den är på väg, protokollet den använder och så vidare. Specifikationen för protokollet definierar rubriken. Om du kan identifiera protokollet kan du bestämma början och slutet av varje fält i rubriken och läsa metadata.

traceroute använder TCP/IP svit av protokoll och skickar användardatagram protokoll paket. Rubriken innehåller Tid att leva (TTL)-fält, som innehåller ett åttabitars heltalsvärde. Trots vad namnet antyder representerar det en räkning, inte en varaktighet.

Ett paket färdas från sitt ursprung till sin destination via en router. Varje gång paketet anländer till en router minskar det TTL-räknaren. Om TTL-värdet någonsin når ett, minskar routern som tar emot paketet värdet och märker att det nu är noll. Paketet kasseras sedan och vidarebefordras inte till nästa hopp på resan eftersom det har ”tidsgränsen”.

Routern skickar en Internet Message Control Protocol (ICMP) Tiden har överskridits meddelande tillbaka till paketets ursprung för att meddela att paketet tog timeout. Meddelandet Time Exceeded innehåller originalhuvudet och de första 64 bitarna av originalpaketets data. Detta definieras på sidan sex av Begäran om kommentarer 792.

Så om traceroute skickar ut ett paket, men sedan ställer in TTL-värdet till ett, kommer paketet bara att komma så långt som den första routern innan det kasseras. Den kommer att få ett meddelande om ICMP-tid överskriden från routern, och den kan registrera tiden det tog för tur och retur.

Den upprepar sedan övningen med TTL inställd på 2, vilket kommer att misslyckas efter två hopp. traceroute ökar TTL till tre och försöker igen. Denna process upprepas tills destinationen nås eller det maximala antalet hopp (30, som standard) testas.

Vissa routrar spelar inte bra

Vissa routrar har buggar. De försöker vidarebefordra paket med en TTL på noll istället för att kassera dem och höja ett meddelande om ICMP-tid överskriden.

Enligt Ciscovissa Internet Service Providers (ISP) hastighetsbegränsar antalet ICMP-meddelanden som deras routrar vidarebefordrar.

Vissa enheter är konfigurerade att aldrig skicka ICMP-paket. Detta är ofta för att säkerställa att enheten inte omedvetet kan tvingas att delta i en distribuerad denial of servicesom en smurf attack.

traceroute har en standard timeout för svar på fem sekunder. Om den inte får något svar inom dessa fem sekunder avbryts försöket. Detta innebär att svar från mycket långsamma routrar ignoreras.

Installerar traceroute

traceroute var redan installerat på Fedora 31 men måste installeras på Manjaro 18.1 och Ubuntu 18.04. För att installera traceroute på Manjaro använd följande kommando:

sudo pacman -Sy traceroute

De

För att installera traceroute på Ubuntu, använd följande kommando:

sudo apt-get install traceroute

De

Använder traceroute

Som vi behandlade ovan är traceroutes syfte att få fram ett svar från routern vid varje hopp från din dator till destinationen. Vissa kanske är fåniga och ger ingenting bort, medan andra förmodligen kommer att spilla bönorna utan betänkligheter.

Som ett exempel kommer vi att köra en traceroute till Blarney slott webbplats i Irland, hem för de berömda Blarney Stone. Legenden säger att om du kysser Blarney-stenen kommer du att bli välsignad med ”gabbens gåva”. Låt oss hoppas att routrarna vi möter på vägen är lämpligt stökiga.

Vi skriver följande kommando:

traceroute www.blarneycastle.ie

De

Den första raden ger oss följande information:

Destinationen och dess IP-adress.
Antalet humle traceroute kommer att prova innan du ger upp.
Storleken på UDP-paketen vi skickar.

Alla de andra raderna innehåller information om en av humlen. Innan vi går in i detaljerna kan vi dock se att det finns 11 hopp mellan vår dator och Blarney Castle-webbplatsen. Hopp 11 berättar också att vi nått vårt mål.

Formatet för varje hopplinje är som följer:

Namnet på enheten eller, om enheten inte identifierar sig, IP-adressen.
IP-adressen.
Tiden det tog tur och retur för vart och ett av de tre testerna. Om en asterisk är här betyder det att det inte fanns något svar för det testet. Om enheten inte svarar alls kommer du att se tre asterisker och inget enhetsnamn eller IP-adress.

Låt oss granska vad vi har nedan:

Hopp 1: Den första anropsporten (ingen ordlek) är DrayTek Vigor Router på det lokala nätverket. Så här lämnar våra UDP-paket det lokala nätverket och kommer ut på internet.
Hop 2: Den här enheten svarade inte. Kanske var det konfigurerat att aldrig skicka ICMP-paket. Eller så kanske den svarade men var för långsam, så traceroute tog timeout.
Hopp 3: En enhet svarade, men vi fick inte dess namn, bara IP-adressen. Observera att det finns en asterisk på den här raden, vilket betyder att vi inte fick något svar på alla tre förfrågningarna. Detta kan tyda på paketförlust.
Humle 4 och 5: Mer anonyma humle.
Hopp 6: Det finns mycket text här eftersom en annan fjärrenhet hanterade var och en av våra tre UDP-förfrågningar. De (ganska långa) namnen och IP-adresserna för varje enhet skrevs ut. Detta kan hända när du stöter på ett ”rikt befolkat” nätverk där det finns mycket hårdvara för att hantera stora trafikvolymer. Denna hop är inom en av de största internetleverantörerna i Storbritannien. Så det skulle vara ett mindre mirakel om samma del av fjärrmaskinvara hanterade våra tre anslutningsförfrågningar.
Hopp 7: Detta är hoppet som våra UDP-paket gjorde när de lämnade Internetleverantörens nätverk.
Hopp 8: Återigen får vi en IP-adress men inte enhetsnamnet. Alla tre testerna gick tillbaka framgångsrikt.
Humle 9 och 10: Ytterligare två anonyma hopp.
Hopp 11: Vi har kommit till Blarney Castles webbplats. Slottet ligger i Cork, Irland, men enligt IP-adress geolokaliseringwebbplatsen finns i London.

Så det var blandat. Vissa enheter spelade boll, vissa svarade men berättade inte vad de hette och andra förblev helt anonyma.

Men vi kom till destinationen, vi vet att det är 11 hopp bort och resan var 13,773 och 14,715 millisekunder.

Döljer enhetsnamn

Som vi har sett leder ibland inkludering av enhetsnamn till en rörig skärm. För att göra det lättare att se data kan du använda alternativet -n (ingen mappning).

För att göra detta med vårt exempel skriver vi följande:

traceroute -n blarneycastle.ie

De

Detta gör det lättare att plocka ut stora siffror för tider för tur och retur som kan tyda på en flaskhals.

Hop 3 börjar se lite misstänkt ut. Förra gången svarade den bara två gånger, och den här gången svarade den bara en gång. I det här scenariot är det naturligtvis utanför vår kontroll.

Men om du undersökte ditt företagsnätverk skulle det vara värt det att gräva lite djupare i den noden.

Ställa in traceroute timeout-värde

Om vi ​​förlänger den förinställda timeoutperioden (fem sekunder) kanske vi får fler svar. För att göra detta använder vi alternativet -w (väntetid) för att ändra det till sju sekunder. (Observera att detta är ett flyttal.)

Vi skriver följande kommando:

traceroute -w 7.0 blarneycastle.ie

De

Det gjorde inte så stor skillnad, så svaren tar förmodligen timeout. Det är troligt att de anonyma humlen är målmedvetet hemliga.

Ställa in antalet tester

Som standard skickar traceroute tre UDP-paket till varje hopp. Vi kan använda alternativet -q (antal frågor) för att justera detta uppåt eller nedåt.

För att påskynda traceroute-testet skriver vi följande för att minska antalet UDP-sondpaket vi skickar till ett:

traceroute -q 1 blarneycastle.ie

De

Detta skickar en enda sond till varje hopp.

Ställa in det initiala TTL-värdet

Vi kan ställa in initialvärdet för TTL till något annat än ett och hoppa över några hopp. Vanligtvis sätts TTL-värdena till ett för den första uppsättningen tester, två för nästa uppsättning tester och så vidare. Om vi ​​ställer in den på fem kommer det första testet att försöka komma till hopp fem och hoppa över hopp ett till fyra.

Eftersom vi vet att Blarney Castle-webbplatsen är 11 hopp från den här datorn, skriver vi följande för att gå direkt till Hop 11:

traceroute -f 11 blarneycastle.ie

De

Det ger oss en trevlig, sammanfattad rapport om tillståndet för anslutningen till destinationen.

Var hänsynsfull

traceroute är ett utmärkt verktyg för att undersöka nätverksrouting, kontrollera anslutningshastigheter eller identifiera flaskhalsar. Windows har också ett tracert-kommando som fungerar på liknande sätt.

Du vill dock inte bombardera okända enheter med torrents av UDP-paket, och var försiktig med att inkludera traceroute i skript eller obevakade jobb.

Den belastning som traceroute kan placera på ett nätverk kan påverka dess prestanda negativt. Såvida du inte befinner dig i en situation som fixar det nu, kanske du vill använda den utanför normala öppettider.