27 points par GN⁺ 2025-11-09 | 1 commentaires | Partager sur WhatsApp
  • Une page interactive visualise en temps réel le trajet emprunté par les paquets de l’utilisateur jusqu’au serveur d’un site web via Internet
  • Son propre programme de traceroute, ktr, exploite la valeur TTL des paquets ICMP pour collecter les informations de chaque saut réseau
  • Le site web fonctionne même sans JavaScript, le serveur injectant les résultats du traceroute dans le HTML sous forme de flux
  • Pour l’analyse du cheminement, il utilise les données WHOIS et PeeringDB afin d’afficher le système autonome (AS) auquel appartient chaque IP ainsi que les informations sur l’entreprise concernée
  • En combinant traceroute et structure de l’Internet fondée sur BGP, il montre qu’Internet est un ensemble de réseaux reliés par des relations de peering entre entreprises

Le voyage parcouru par votre paquet

  • Le traceroute en haut de la page montre le chemin suivi par les paquets entre l’ordinateur de l’utilisateur et le serveur
    • Il traverse successivement des réseaux comme ceux de routeurs, de FAI, d’Amazon, de NTT Global IP Network et de Hetzner
    • Certaines sections sont indiquées comme « (no response) », car certains serveurs ne répondent pas
  • À l’intérieur du réseau Hetzner, le paquet passe par plusieurs routeurs avant d’atteindre le serveur final
  • L’adresse IP 213.239.252.10 est affichée comme core0.fra.hetzner.com grâce à une recherche DNS inverse

Behind the Scenes

  • Quand le site web reçoit une requête de l’utilisateur, il exécute un traceroute côté serveur puis transmet les résultats en temps réel
  • Le traceroute utilise le protocole ICMP et collecte la réponse de chaque saut en augmentant la valeur TTL (Time To Live) d’une unité à chaque fois
  • Quand le TTL atteint 0, le routeur concerné renvoie un message d’erreur, ce qui permet de retracer le chemin emprunté par le paquet
  • ktr diffuse les résultats du traceroute en flux tout en interrogeant en parallèle les informations d’IP, d’ASN et de réseau propriétaire de chaque saut

Frontend Fun

  • Le site fonctionne même sans JavaScript, et le navigateur le perçoit simplement comme une page qui se charge lentement
  • Le serveur maintient la connexion HTTP ouverte et insère progressivement les résultats du traceroute dans le HTML
  • À chaque mise à jour, il insère un bloc CSS pour masquer les résultats précédents, ce qui produit un effet d’actualisation en temps réel

Front to Back, Back to Front

  • En réalité, le site exécute le traceroute depuis le serveur vers l’IP de l’utilisateur et affiche ensuite les résultats dans l’ordre inverse
  • Il s’agit donc d’un « reverse traceroute » : même si les chemins aller et retour ne sont pas parfaitement identiques, ils sont généralement assez similaires

Les réseaux et les systèmes autonomes (AS)

  • Internet est un réseau de réseaux d’entreprises appelés systèmes autonomes (Autonomous System, AS)
  • Chaque AS possède son propre ASN (Autonomous System Number) et échange du trafic avec d’autres via le peering
  • Internet n’est pas un ensemble appartenant à des particuliers, mais une collection de réseaux détenus par des entreprises, dont les interconnexions sont déterminées par des contrats financiers et des procédures administratives
  • Un ASN peut être demandé auprès de l’un des 5 registres Internet régionaux (RIR)

WHOIS et PeeringDB

  • Pour identifier l’AS auquel appartient chaque IP du traceroute, le site utilise le protocole WHOIS et la base de données PeeringDB
  • WHOIS repose sur une structure simple : après l’ouverture d’une connexion TCP, on envoie une requête et le serveur renvoie les informations
  • Comme les noms de champs et les formats varient selon les serveurs, l’analyseur a été implémenté sous la forme d’un simulateur simple, proche d’une lecture humaine
  • PeeringDB fournit des informations sur les entreprises pour environ un tiers de l’ensemble des AS

BGP (Border Gateway Protocol)

  • BGP est le protocole central qui détermine la forme d’Internet, en échangeant les informations de routage entre AS
  • Les routeurs de bordure (border routers) maintiennent une table de routage BGP contenant la liste des ASN pour chaque chemin
  • Lorsque deux AS établissent un peering, leurs routeurs ouvrent une session BGP et échangent des annonces de routes (route advertisements)
  • Parmi plusieurs chemins possibles, les routeurs choisissent le plus court ou celui ayant la préférence la plus élevée pour acheminer les paquets

L’histoire de BGP

  • Les expérimentations réseau commencées en 1969 avec ARPANET ont conduit en 1989 à la RFC 1105 de Cisco et IBM, marquant l’apparition de BGP v1
  • Ont ensuite été publiées BGP v2 (1990) puis v4 (1994), cette dernière étant toujours utilisée aujourd’hui
  • BGP s’est imposé comme le protocole standard qui détermine les chemins d’interconnexion entre tous les réseaux d’Internet

La relation entre traceroute et BGP

  • Exemple de chemin : AS16509 → AS2914 → AS24940
    • Amazon (AS16509) → NTT Global IP Network (AS2914) → Hetzner (AS24940)
  • Même au sein d’un même ASN, plusieurs sauts peuvent exister, gérés par des protocoles de routage internes ou des chemins statiques
  • Ce sont les relations de peering entre AS qui déterminent la véritable atteignabilité sur Internet

Récapitulatif

  • Le site exécute un traceroute vers l’IP de l’utilisateur et transmet le résultat sous forme de flux HTTP
  • Le traceroute exploite le TTL des paquets ICMP pour visualiser le chemin entre routeurs
  • Chaque routeur appartient à un système autonome (AS), interconnecté avec les autres via BGP
  • Les relations de peering déterminent la structure et l’accessibilité d’Internet

Épilogue

  • L’auteur, conscient de sa compréhension encore incomplète de l’architecture d’Internet, a créé un article interactif à vocation pédagogique centré sur les protocoles
  • Plutôt que d’attendre un grand projet parfaitement abouti, il a choisi de publier quelque chose de plus modeste mais terminé
  • Le projet a été mené à bien grâce aux encouragements de la communauté Hack Club, en s’appuyant sur un programme de traceroute open source
  • Avec le message « mieux vaut quelque chose de petit mais terminé », l’auteur espère que cela restera un contenu web durable

1 commentaires

 
GN⁺ 2025-11-09
Avis Hacker News
  • Je pense que cette fonctionnalité de reverse traceroute reste utile Mais en pratique, même si le chemin AS est le même, les points de peering sont presque toujours différents La plupart des AS utilisent le hot-potato routing, en remettant les paquets au point de peering le plus proche de l’origine du trafic Même avec du cold-potato, cela reste asymétrique. Et lorsque la longueur de l’AS-path est identique, une politique de hot-potato peut aussi conduire à choisir un autre chemin (Édition : correction d’une confusion entre hot et cold)

    • J’ai lancé plusieurs fois traceroute et reverse traceroute, et dans la plupart des cas, le chemin AS était similaire Cela dit, il arrivait que traceroute montre davantage le chemin interne à l’ISP Globalement, tu as raison, et j’aimerais plus tard expliquer plus en détail la différence entre le routage hot-potato vs cold-potato Quoi qu’il en soit, même ces résultats de reverse traceroute suffisent à expliquer la structure d’Internet
    • Pour info, ce que tu décris, c’est précisément le hot-potato routing Chaque AS transfère les paquets aussi vite que possible Cela peut sembler injuste, mais c’est un choix rationnel puisqu’on ne connaît pas les détails du chemin interne à l’AS de destination Par exemple, si ton réseau est présent à Berlin et Hambourg, et que l’autre partie a aussi du peering dans ces deux villes, le plus logique est de remettre le trafic à proximité pour éviter des allers-retours inutiles
  • J’ai trouvé intéressante l’explication sur la raison pour laquelle traceroute se charge ligne par ligne de bas en haut Le fait d’injecter périodiquement des blocs CSS pour masquer l’état précédent, sans JavaScript, est vraiment très hacky et créatif

    • Même sans JavaScript, on peut implémenter du streaming HTML hors ordre avec le Declarative Shadow DOM Des exemples et explications sont bien résumés dans cet article de blog
  • La formule « This is not my beautiful website. » m’a paru bien trouvée

    • La réponse « This is not my beautiful home-page. » était aussi très bien sentie
  • Si vous ne l’avez pas encore essayé,

    tracepath -m60 bad.horse
    

    puis

    openssl s_client -connect signed.bad.horse:443 -servername signed.bad.horse
    

    valent le détour

    • Excellent ! On dirait un hommage geek à Dr. Horrible Le résultat de tracepath commence par « bad.horse » puis continue avec « he.rides.across.the.nation », etc., c’est vraiment amusant
    • Il y a aussi ceci
      ssh funky.nondeterministic.computer
      
    • Et
      ssh watch.ascii.theater
      
      mérite aussi d’être essayé
  • Ce projet est remonté sur la page principale de Hacker News, ce qui a fait tousser le serveur pendant un moment Lexi a annoncé de « revenir voir demain »

    • Apparemment, c’est déjà un peu mieux. Ils ont ajouté un peu plus de concurrency, et la leçon retenue est que la prochaine fois, ils utiliseront Tokio
  • En voyant le titre, je m’attendais à une référence à une chanson de Talking Heads

    • Les paroles « letting the days go by » me sont venues automatiquement à l’esprit
    • En regardant le HTML, il y a peut-être quelque chose de caché :)
  • Le lien vers « Once in a Lifetime » s’est imprimé dans mon cerveau Rien qu’en voyant le titre, cette ligne de basse se lance toute seule dans ma tête

    • Moi aussi, j’ai immédiatement ressenti une crise existentielle
  • Je l’ai exécuté moi-même, et j’ai découvert que ma connexion Internet principale avait sauté et basculé sur la liaison de secours Il y a eu une coupure de courant aujourd’hui, et c’est cet outil qui m’a permis de m’en rendre compte. Plutôt utile

    • On peut dire que tu as trouvé une route less travelled
  • Parfois, les informations « You are here » en haut de page s’affichent ainsi

    Host               ASN   Network         Region
    123-456-789-101.static.kc.net.uk AS19905 UltraDDoS Protect    Global
    

    Mais à d’autres moments, c’est

    Host               ASN   Network         Region
    123-456-789-101.static.kc.net.uk AS12390 Kingston Communications Europe
    

    qui apparaît en alternance. Je me demande pourquoi, pour la même IP, l’ASN change dans un rapport de 50:50. On dirait que cela bascule aléatoirement

  • Au début, la page fonctionnait bien sans JavaScript, puis plus tard le HTML remplacé s’est retrouvé encodé comme du texte

    
     #strYQt8 { display: none; }
    
    

    ce qui a tout cassé J’ai ouvert une PR de correction sur GitHub