Wie sind wir hierher gekommen?
(how-did-i-get-here.net)- Eine interaktive Seite, die den Weg der Pakete eines Nutzers über das Internet bis zum Server einer Website in Echtzeit visualisiert
- Das selbst entwickelte traceroute-Programm
ktrnutzt den TTL-Wert von ICMP-Paketen, um Informationen zu jedem Netzwerk-Hop zu sammeln - Die Website funktioniert auch ohne JavaScript, wobei der Server die traceroute-Ergebnisse als Stream in das HTML einfließen lässt
- Für die Pfadanalyse werden WHOIS- und PeeringDB-Daten verwendet, um das Autonome System (AS) und die Unternehmensinformationen zu jeder IP anzuzeigen
- Durch die Kombination von traceroute und der BGP-basierten Internetstruktur wird gezeigt, dass das Internet aus einer Sammlung von Netzwerken besteht, die über Peering-Beziehungen zwischen Unternehmen verbunden sind
Die Reise Ihres Pakets
- Das traceroute am Seitenanfang zeigt den Weg der Pakete vom Computer des Nutzers bis zum Server
- Es durchläuft nacheinander Netzwerke wie Router, ISP, Amazon, NTT Global IP Network und Hetzner
- Einige Abschnitte werden als „(no response)“ angezeigt, was auf Server zurückzuführen ist, die nicht antworten
- Innerhalb des Hetzner-Netzwerks erreicht es über mehrere Router schließlich den Zielserver
- Die IP-Adresse
213.239.252.10wird über eine Reverse-DNS-Abfrage alscore0.fra.hetzner.comangezeigt
Behind the Scenes
- Wenn die Website eine Anfrage des Nutzers erhält, führt der Server traceroute aus und sendet die Ergebnisse in Echtzeit
- traceroute verwendet das ICMP-Protokoll und sammelt Antworten von jedem Hop, indem der TTL-Wert (Time To Live) schrittweise um 1 erhöht wird
- Wenn der TTL-Wert 0 erreicht, gibt der betreffende Router eine Fehlermeldung zurück, wodurch sich der vom Paket durchlaufene Pfad nachverfolgen lässt
ktrstreamt die traceroute-Ergebnisse und fragt gleichzeitig zu jedem Hop IP-, ASN- und Netzwerkbesitzinformationen ab
Frontend Fun
- Es funktioniert auch ohne JavaScript, und der Browser erkennt es einfach als langsam ladende Seite
- Der Server hält die HTTP-Verbindung offen und fügt die traceroute-Ergebnisse nacheinander in das HTML ein
- Bei jedem Update wird ein CSS-Block eingefügt, um vorherige Ergebnisse auszublenden, wodurch ein Echtzeit-Aktualisierungseffekt entsteht
Front to Back, Back to Front
- Tatsächlich führt der Server traceroute zur IP des Nutzers aus und zeigt die Ergebnisse in umgekehrter Reihenfolge an
- Das ist ein „reverse traceroute“; auch wenn der Pfad in beide Richtungen nicht vollständig identisch ist, zeigt es im Großen und Ganzen einen ähnlichen Weg
Netzwerke und Autonome Systeme (AS)
- Das Internet ist ein Verbund von Netzwerken auf Unternehmensebene, die als Autonome Systeme (Autonomous System, AS) bezeichnet werden
- Jedes AS besitzt eine eindeutige ASN (Autonomous System Number) und tauscht über Peering Traffic mit anderen aus
- Das Internet ist kein Besitz einzelner Personen, sondern eine Sammlung von Netzwerken im Besitz von Unternehmen, deren Verbindungen durch finanzielle Verträge und administrative Verfahren bestimmt werden
- Eine ASN kann über eine der fünf Regional Internet Registries (RIR) beantragt werden
WHOIS und PeeringDB
- Um das AS zu finden, zu dem jede IP in traceroute gehört, werden das WHOIS-Protokoll und die PeeringDB-Datenbank verwendet
- WHOIS hat eine einfache Struktur: Nach dem Aufbau einer TCP-Verbindung wird eine Anfrage gesendet, und der Server gibt die Informationen zurück
- Da sich Feldnamen und Formate je nach Server unterscheiden, ist der Parser als einfache Simulation umgesetzt, die eher der menschlichen Leseweise ähnelt
- PeeringDB liefert Unternehmensinformationen für etwa ein Drittel aller AS
BGP (Border Gateway Protocol)
- BGP ist das zentrale Protokoll, das die Form des Internets bestimmt, indem es Pfadinformationen zwischen AS austauscht
- Border Router pflegen eine BGP-Routing-Tabelle und speichern die ASN-Listen für jeden Pfad
- Wenn zwei AS Peering betreiben, bauen ihre Router eine BGP-Session auf und tauschen Route Advertisements aus
- Router wählen unter mehreren Wegen den kürzesten oder bevorzugten Pfad aus und leiten Pakete entsprechend weiter
Die Geschichte von BGP
- Netzwerkexperimente, die 1969 im ARPANET begannen, führten 1989 mit RFC 1105 von Cisco und IBM zur Einführung von BGP v1
- Danach wurden BGP v2 (1990) und v4 (1994) veröffentlicht; v4 wird bis heute verwendet
- BGP etablierte sich als Standardprotokoll zur Bestimmung der Verbindungswege zwischen allen Netzwerken im Internet
Die Beziehung zwischen Traceroute und BGP
- Beispielpfad: AS16509 → AS2914 → AS24940
- In der Reihenfolge Amazon (AS16509) → NTT Global IP Network (AS2914) → Hetzner (AS24940)
- Auch innerhalb derselben ASN gibt es mehrere Hops; diese werden über interne Routing-Protokolle oder statische Pfade verarbeitet
- Peering-Beziehungen zwischen AS bestimmen die tatsächliche Erreichbarkeit im Internet
Zusammenfassung
- Die Website führt traceroute zur IP des Nutzers aus und überträgt das Ergebnis als HTTP-Stream
- traceroute nutzt den TTL-Wert von ICMP-Paketen, um Pfade zwischen Routern zu visualisieren
- Jeder Router gehört zu einem Autonomen System (AS) und ist über BGP mit anderen verbunden
- Peering-Beziehungen bestimmen Erreichbarkeit und Struktur des Internets
Epilog
- Der Autor stellte fest, dass ihm ein tieferes Verständnis der Internetstruktur fehlte, und erstellte deshalb einen interaktiven, protokollzentrierten Lehrtext
- Statt auf ein großes, hochpoliertes Projekt zu warten, entschied er sich, auch in kleiner Form etwas zu veröffentlichen
- Das Projekt wurde durch die Ermutigung der Hack-Club-Community vollendet und nutzt ein Open-Source-traceroute-Programm
- Mit der Botschaft „Auch etwas Kleines ist besser, wenn es fertig ist“ hofft er, dass es als nachhaltiger Webinhalt bestehen bleibt
1 Kommentare
Hacker-News-Kommentar
Ich denke, diese Reverse-Traceroute-Funktion ist immer noch nützlich. In der Praxis sind die Peering-Punkte aber fast immer unterschiedlich, selbst wenn der AS-Pfad gleich ist. Die meisten AS verwenden Hot-Potato Routing und übergeben Pakete am Peering-Punkt, der dem Ursprung des Traffics am nächsten liegt. Selbst bei Cold-Potato bleibt es asymmetrisch. Außerdem kann bei gleicher AS-Path-Länge wegen der Hot-Potato-Policy ein anderer Pfad gewählt werden. (Bearbeitung: Verwechslung von hot/cold korrigiert)
Ich fand die Erklärung interessant, warum traceroute von unten nach oben Zeile für Zeile geladen wird. Dass dafür ohne JavaScript regelmäßig CSS-Blöcke eingefügt werden, um den vorherigen Zustand zu verbergen, ist wirklich hacky und kreativ.
Die Formulierung „This is not my beautiful website.“ fand ich ziemlich witzig.
Falls du es noch nicht ausprobiert hast:
und dann
würde ich empfehlen.
Dieses Projekt landete erneut auf der Hacker-News-Startseite, wodurch der Server kurzzeitig ins Stocken geriet. Lexi kündigte an, man solle „morgen noch mal nachsehen“.
Beim Titel dachte ich, es würde ein Song von Talking Heads kommen.
Der Link zu „Once in a Lifetime“ fühlt sich an, als wäre er direkt ins Gehirn eingebrannt. Schon beim Titel läuft diese Basslinie automatisch ab.
Ich habe es selbst ausprobiert und dabei festgestellt, dass meine primäre Internetverbindung ausgefallen war und auf die Backup-Leitung umgeschaltet wurde. Heute gab es einen Stromausfall, und dank dieses Tools habe ich das bemerkt. Ziemlich nützlich.
Manchmal sieht die obere Info „You are here“ so aus:
Und ein anderes Mal dann so:
Das wechselt sich ab. Es ist dieselbe IP, daher frage ich mich, warum sich die ASN im 50:50-Verhältnis ändert. Es wirkt zufällig.
Die Seite funktionierte anfangs ohne JavaScript problemlos, aber später wurde das ersetzte HTML als Text encodiert.
So sah es dann kaputt aus. Ich habe dazu einen Fix-PR auf GitHub eingereicht.