Inspiriert vom letzten Chaosradio-Podcast ( CR182: Klempner des Internets ) habe ich nach langer Zeit mal wieder mit dem Tool traceroute herumgespielt. Mit traceroute kann man erfahren, welchen Weg die TCP-Pakete auf dem Weg von mir zu einem gewünschten Zielserver gehen. Ich war bislang immer von der Vorstellung fasziniert, daß wenn ich in die Adresszeile meines Browsers einen amerikanischen Webserver - z.B. "www.whitehouse.gov" - eingebe, meine Datenpakete mit Mops-Geschwindigkeit durch tausende Kilometer lange Glasfaserkabel, welche tief am Boden des Antlantiks liegen, hindurchjagen. In der Chaosradio-Folge wurde ich allerdings belehrt, daß es sein kann, daß mir statt eines Servers in Amerika (möglicherweise direkt in Washington) irgendeine lumpige Kiste in Europa oder anderswo antwortet. Wie kann das sein?

Das Zauberwort in diesem Zusammenhang heißt Content Delivery Network (CDN). Was für mich etwas entzaubernd wirkte, macht aber im WWW mit seinen Millionen Usern und Traffic-intensiven Angeboten viel Sinn. Wenn jetzt z.B. eine große amerikanische Software-Firma Ihre dortigen Server mit irgendeinem großerem Update-Paket bespielt, welches sich auch viele User in Europa herunterladen wollen, so werden die teuren unterseeischen Glasfaserkabel unnötig mit dem millionenfachem Download eines Downloads belastet. Stattdessen also wird das Downloadpaket auf einer Serverfarm irgendwo in Europa kopiert. Wenn jetzt ein User aus Europa z.B. auf den Downloadlink klickt, werden die hierdurch verursachten Datenpakete automatisch durch den ISP anstelle durch das Seekabel an die Serverfarm irgendwo in Europa geroutet. Der User in Europa bekommt davon überhaupt nichts mit. Im Endeffekt funktioniert das mit den CDNs wie bei Mirror- oder Spiegelserver, nur daß der Spiegelserver durch z.T. dynamische Routing-Metriken automatisch zugewiesen wird.

Einen ersten Hinweis auf CDNs liefert der Linux-Befehl host . Host löst einen Servernamen in eine IP-Adresse auf oder umgekehrt (DNS Lookup Tool). Für whitehouse.gov ergibt sich bspw. folgende Ausgabe:

$ host www.whitehouse.gov
www.whitehouse.gov is an alias for www.whitehouse.gov.edgesuite.net.
www.whitehouse.gov.edgesuite.net is an alias for www.eop-edge-lb.akadns.net.
www.eop-edge-lb.akadns.net is an alias for a1128.h.akamai.net.
a1128.h.akamai.net has address 80.239.216.25
a1128.h.akamai.net has address 80.239.216.65

Akamai ist hierbei einer der großen CDN-Player. Den Weg der Pakete zwischen mir und dem Server kann man nun mit dem Tool traceroute herausbekommen. Unter meinem Ubuntu-Linux benötige ich für traceroute root-Rechte. Alternativ kann man mit

sudo chmod u+s /usr/sbin/traceroute

das SUID-Bit so setzen, daß fortan auch nicht-privilegierte User traceroute ausführen können. Dann:

$traceroute -I whitehouse.gov
traceroute to whitehouse.gov (23.62.144.110), 30 hops max, 60 byte packets
1  router (192.168.1.1)  1.773 ms  4.403 ms  4.824 ms
2  dslb-084-063-096-001.pools.arcor-ip.net (84.63.96.1)  13.606 ms * *
3  * 145.254.9.209 (145.254.9.209)  19.099 ms  19.766 ms
4  92.79.213.146 (92.79.213.146)  24.942 ms  28.850 ms  29.570 ms
5  amsix-amsN.netarch.akamai.com (195.69.145.208)  30.278 ms  32.154 ms  33.461 ms
6  a23-62-144-110.deploy.akamaitechnologies.com (23.62.144.110)  35.482 ms  34.723 ms  34.258 ms

Der erste Eintrag (Zeile beginnend mit 1) ist mein DSL-Router im lokalen Netz. Dann geht es weiter über meinen Provider Arcor. Schon nach wenigen Stationen endet das Paket bei einem Akamai-Server. Blöd ist nur, daß man nicht mit Sicherheit herausfindet, wo die Server stehen. Es gibt im Internet einige Dienste, wo man anhand der IP-Adresse den Standort eines Rechners/Servers herausfinden kann. Für die Akamei-Server ergeben sich jedenfalls Standorte in den USA. Das könnte aber auch daran liegen, daß Akamai seinen Firmensitz dort hat und dort vielleicht auch die IP-Adressen für ihre weltweit verteilten Serverkisten bekommt.

Ein viel "schöneres" Beispiel ohne Akamai-Gedöns ergibt sich, wenn man die Route zum Webserver der University of Colorado nachvollzieht. Hierzu habe ich ein Perl-Skript als Overlay für traceroute geschrieben. Das Perl-Skript "trace.pl" ruft im wesentlichen traceroute auf. Für jede Zeile mit IP-Adresse wird der Standort des Servers mit Hilfe der Datenbank von hostip.info ermittelt und mit ausgegeben:

$ ./trace.pl colorado.edu
traceroute to colorado.edu (128.138.129.98), 30 hops max, 60 byte packets
1  router (192.168.1.1)   1.418 ms  4.078 ms  4.493 ms n/a, n/a
2  dslb-084-063-096-001.pools.arcor-ip.net (84.63.96.1)   13.228 ms * * Koeln, GERMANY
3  * 145.254.9.209 (145.254.9.209)   18.716 ms  19.350 ms Köln, GERMANY
4  92.79.214.98 (92.79.214.98)   31.327 ms  31.956 ms  32.553 ms Unknown City?, Unknown Country?
5  ae53.edge7.Frankfurt1.Level3.net (195.16.162.101)   69.866 ms  70.553 ms  71.139 ms Unknown city, GERMANY
6  vlan60.csw1.Frankfurt1.Level3.net (4.69.154.62)   36.007 ms  36.865 ms  35.951 ms Unknown city, UNITED STATES
7  ae-61-61.ebr1.Frankfurt1.Level3.net (4.69.140.1)   38.739 ms  28.386 ms  26.407 ms TORONTO, ON, CANADA
8  ae-47-47.ebr2.Paris1.Level3.net (4.69.143.142)   36.198 ms *  27.158 ms Unknown city, UNITED STATES
9  ae-44-44.ebr2.Washington1.Level3.net (4.69.137.62)   109.701 ms  107.838 ms  107.461 ms New York, NY, UNITED STATES
10  ae-5-5.ebr2.Washington12.Level3.net (4.69.143.222)   108.223 ms  106.636 ms  107.725 ms Unknown city, UNITED STATES
11  ae-6-6.ebr2.Chicago2.Level3.net (4.69.148.146)   125.247 ms  118.641 ms  119.263 ms Unknown city, UNITED STATES
12  ae-1-100.ebr1.Chicago2.Level3.net (4.69.132.113)   147.412 ms  146.873 ms  149.045 ms Chicago, IL, UNITED STATES
13  ae-3-3.ebr2.Denver1.Level3.net (4.69.132.61)   143.811 ms  143.699 ms  143.686 ms Chicago, IL, UNITED STATES
14  ae-2-52.edge3.Denver1.Level3.net (4.69.147.104)   145.746 ms  146.288 ms  146.529 ms Unknown city, UNITED STATES
15  UNIVERSITY.edge3.Denver1.Level3.net (209.245.23.202)   146.713 ms  146.353 ms  146.537 ms Aurora, CO, UNITED STATES
16  hut-juniper.colorado.edu (128.138.81.249)   146.281 ms  148.069 ms  151.993 ms Boulder, CO, UNITED STATES
17  its-hut.colorado.edu (128.138.81.9)   144.229 ms  144.655 ms  144.572 ms Boulder, CO, UNITED STATES
18  www.colorado.edu (128.138.129.98)   147.279 ms  147.470 ms  147.483 ms Boulder, CO, UNITED STATES

Zuerst passiert das Paket ein Arcor-Rechenzentrum in Köln. Dann gehts weiter nach Frankfurt ins Netz des internationalen Kommunikationsdienstleisters Level3. Frankfurt (DE-CIX) ist einer der großen europäischen Knotenpunkte des Internets . Hier sitzen viele Internetservice-Provider (ISPs) und tauschen sich dort Pakete zwischen Ihren Netzen aus. An den Knotenpunkten wird faktisch aus den ganzen dort vertretenen ISP- und CDN-Netzen das große Internet geknüpft. In den folgenden Zeilen sieht man beim Vergleich der Hostnamen und Lokations-Infos schon, daß letztere nicht so genau sind. Vor dem Sprung über den Atlantik gibt es nämlich noch eine Zwischenstation in Paris (und Paris liegt nicht in den USA). Am Ende nimmt ein Server in Boulder am Campus der Uni Colorado die Pakete entgegen.

Das Skript trace.pl ist Free Software und kann am Ende dieses Beitrags heruntergeladen werden und unter den Bedingungen der GPL v3 weiterverwendet werden. Statt des IP-Location-Services von hostip.info könnte man noch auf die Datenbanken von http://software77.net/geo-ip/ oder https://www.ipligence.com/ zugreifen.