En grej som är intressant att tillägga i sammanhanget är hur Traceroute fungerar.
När man skickar ett paket ut på internet så finns det en "räknare" på paketet som heter TTL (time to live). Varje gång en IP-router routar ett paket (alltså, när den tar emot ett paket på ett IP-nätverk och skickar ut ett paket på ett annat IP-nätverk) så minskar den TTL med ett.
Om TTL når noll så skickas inte paktet vidare till nästa nätverk, utan paketet går i retur till avsändaren (via ett ICMP Lifetime Exceeded-meddelande). Det är dessa "returpaket" från routrar som traceroute använder.
Traceroute skickar alltså först ut ett paket med TTL=1, ser vem som skickar paketet i return sedan med TTL=2 etc. Ganska listigt. På det sättet kan man få en bild av den väg ett paket tar genom nätet.
Grejen man måste tänka på är att det här endast funkar på IP-nivå, d.v.s. du får bara se när ett paket routas mellan två olika IP-nät. Ett IP-nät kan vara allt från ett rum (ett hemmanät i en etta) till att vara världsomspännande (med VPN-teknik) och kan innehålla allt från en eller två datorer till tusentals.
En traceroute kan alltså bara påvisa att paketet passerat en viss router, inte vilken väg den tagit. För ett konkret exempel, kolla på den här tracerouten jag gjorde till Australien:
C:\Users\pvz>tracert www.treasury.gov.au
Tracing route to treasury.gov.au [202.129.142.179]
over a maximum of 30 hops:
1 <1 ms <1 ms <1 ms router.asus.com [192.168.1.1]
2 <1 ms <1 ms 1 ms 212.37.20.45
3 1 ms 1 ms 1 ms 212.37.20.41
4 <1 ms <1 ms <1 ms 46-236-64-194.customer.t3.se [46.236.64.194]
5 <1 ms <1 ms <1 ms h85-8-9-12.se.a3network.se [85.8.9.12]
6 1 ms 1 ms <1 ms h85-8-10-14.se.a3network.se [85.8.10.14]
7 7 ms 1 ms 1 ms gige-g2-1.core1.sto1.he.net [192.121.80.162]
8 19 ms 20 ms 23 ms 100ge12-1.core1.fra1.he.net [184.105.64.105]
9 37 ms 27 ms 27 ms 100ge5-2.core1.par2.he.net [72.52.92.13]
10 95 ms 97 ms 99 ms 100ge14-1.core1.nyc4.he.net [184.105.81.77]
11 158 ms 157 ms 159 ms 100ge8-1.core1.sjc2.he.net [184.105.81.213]
12 159 ms 157 ms 158 ms 100ge13-2.core1.sjc1.he.net [184.105.65.113]
13 162 ms 160 ms 161 ms vocus.gigabitethernet2-13.core1.sjc1.he.net [64.71.184.46]
14 314 ms 314 ms 314 ms bundle-153.cor02.sjc01.ca.vocus.net [49.255.255.24]
15 310 ms 310 ms 310 ms BE-201.cor02.syd04.nsw.VOCUS.net.au [49.255.255.13]
16 320 ms 318 ms 320 ms bundle-101.bdr01.syd03.nsw.vocus.net.au [114.31.192.87]
17 317 ms 317 ms 318 ms asn17732.cust.bdr03.syd04.nsw.vocus.net.au [175.45.124.234]
18 314 ms 319 ms 313 ms Vl8-0.ds04.syd07.aunsw.bltprf.net [117.53.160.4]
19 320 ms 319 ms 319 ms 179-142-129-202.rev.bulletproof.net [202.129.142.179]
Trace complete.
Hopp 1 är min hemmarouter. Hopp 2 och 3 hör till IP Only (tog jag reda på via WHOIS) som är min stadsnätsoperatör. Hopp 4-7 är hos min leverantör T3 (som just nu byter namn till A3). Hopp 7 är operatören Hurricane Electric som antingen peerar med eller säljer transit till T3, i Stockholm. Vi har alltså 7 "hopp" inom samma stad. Sedan i hopp 8 är vi plötsligt i Frankfurt. Hur kan det vara 7 hopp inom Stockholm och sedan bara ett hopp till ett annat land? Självklart passerar trafiken mellan Stockholm och Frankfurt en massa annan utrustning på vägen, det är dock inte IP-routers. Det kan vara t.ex. MPLS som är ett sätt att switcha data. Men Traceroute kan inte de detta utan utifrån Traceroutes synpunkt så har vi hamnat direkt i Frankfurt efter Stockholm.
Från Frankfurt vidare till Paris (hopp 9) till New York (hopp 10), till San Jose i Kalifornien (hopp 11), där Hurricane Electric lämnar av till Vocus (hopp 12).
Vocus tar sedan vidare trafiken till Sydney (hopp 13), och lämnar till slut över till någon webbhoster eller liknande (bulletproof.net / bltprf.net) på hopp 18 och till slut hamnar vi på servern vi tracar till på hopp 19.
Det jag vill understryka med detta är att antalet hopp inte har något direkt samband med avstånd, latens, kapacitet eller hastighet. Det antalet hopp visar är hur många IP-routrar som ingick i kommunikationen, varken mer eller mindre, och även det är en sanning med modifikation - det kan finnas "dolda" hopp som skickats över IP, om man t.ex. fixat en länk genom en IP-tunnel eller VPN eller liknande...)
När jag kopplar upp mitt VPN till jobbet t.ex. så är hopp 1 jobbets VPN-gateway. Det betyder inte att jag har en sladd som går direkt dit.
Kontentan är att man bör känna till vad Traceroute kan och inte kan visa. Det är fortfarande ett ovärderligt verktyg för att kunna utreda problem och liknande, men det kan inte se allt.
Överkurs: Varför finns det ens ett TTL-värde i paketen? Syftet med det är att förebygga att paket kan gå i en slinga, där paket skickas från router A till router B, och sedan tillbaka till router A igen (antingen direkt eller indirekt). Genom att paket bara kan routas ett visst antal hopp så vet man att de aldrig kan routas "för evigt" och fastna i vinkelvolten.
Överkurs 2: Det finns något som heter en "broadcast-storm" som uppstår när man kopplar ett Ethernet-LAN i en slinga. Borde inte TTL-värden förebygga detta? Nej, eftersom switchar inte är IP-routrar och därmed inte minskar TTL-värdet. Det är också därför en switch inte syns i en traceroute!