# Traceroute

traceroute (ou tracert sous Windows) est un programme utilitaire qui permet de suivre les chemins qu'un paquet de données (paquet IP) va prendre pour aller de la machine locale à une autre machine connectée au réseau IP. Il a été conçu au sein du Laboratoire national Lawrence-Berkeley.

## Fonctionnement

Les paquets IP sont acheminés vers la destination en passant d'un routeur à un autre. Chaque routeur examine sa table de routage pour déterminer le routeur suivant. Traceroute va permettre d'identifier les routeurs empruntés, indiquer le délai entre chacun des routeurs et les éventuelles pertes de paquets. Ces informations seront utiles pour diagnostiquer des problèmes de routage, comme des boucles, pour déterminer s'il y a de la congestion ou un autre problème sur un des liens vers la destination.
Le principe de fonctionnement de Traceroute consiste à envoyer des paquets UDP (certaines versions peuvent aussi utiliser TCP ou bien ICMP ECHO Request) avec un paramètre Time-To-Live (TTL) de plus en plus grand (en commençant à 1). Chaque routeur qui reçoit un paquet IP en décrémente le TTL avant de le transmettre. Lorsque le TTL atteint 0, le routeur émet un paquet ICMP d'erreur Time to live exceeded vers la source. Traceroute découvre ainsi les routeurs de proche en proche.
Une fois le paquet sonde arrivé à sa destination finale, traceroute cesse de recevoir des TTL exceeded, et reçoit un paquet réponse ayant pour adresse IP source celle de l'interface de l'équipement sondé à travers laquelle est émis le paquet ICMP. Traceroute essaie volontairement de contacter un port invalide, donc le paquet réponse est normalement de type ICMP Port Unreachable. Si la machine destination avait par hasard un programme écoutant sur ce port, le comportement n'est pas certain et dépend du programme.
Il existe cependant un certain nombre d'éléments qui peuvent compliquer l'interprétation du résultat :
* le chemin suivi par les paquets peut-être asymétrique et traceroute ne montre que l'aller ;
* le chemin suivi peut être radicalement différent depuis un autre point, même proche géographiquement ;
* les routeurs émettent le paquet ICMP avec l'adresse source de l'interface utilisée pour vous joindre, ce n'est pas forcément l'interface par laquelle votre paquet sonde est passé ;
* les routeurs ne traitent pas nécessairement les paquets ICMP en transit de la même façon que le trafic de données. Les temps de réponse en cours de route peuvent ne pas refléter ceux que l'on observerait au niveau du trafic applicatif. Ce sera particulièrement le cas si le réseau fait usage de qualité de service et que le trafic sur certains liens approche la congestion.
* la création du paquet ICMP « TTL exceeded » est une opération complexe qui sollicite le processeur du routeur, alors que le trafic est habituellement traité au niveau du matériel spécialisé. Il se peut qu'un délai supplémentaire soit observé si le processeur est occupé à d'autres tâches plus essentielles (gestion des tables de routage, traitement des requêtes de gestion du réseau), alors que ce délai n'a pas d'effet sur le trafic de transit du routeur.
* un routeur peut ne pas répondre aux requêtes ICMP. Dans ce cas, on voit généralement des signes astérisques (*) sur les nœuds intermédiaires qui ne répondent pas aux requêtes ICMP. Il se peut aussi que, pour des raisons de performance, le routeur limite le nombre de paquets ICMP généré par unité de temps, ce qui cause l'apparition d'étoiles sur le parcours, qui ne sont cependant pas le symptôme d'un problème.
* l'adresse IP de la réponse ICMP TTL Exceeded peut être privée (RFC 1918), et donc bloquée en cas de transit par Internet, ou impossible à identifier.
Sous Windows, on utilise l'utilitaire tracert.

## Exemple sous Unix

On voit ici que le paquet a transité via Londres (« lhr » est le code international de l'aéroport d'Heathrow) avant d'être acheminé vers Amsterdam « ams ». Cette convention de nommage des routeurs, bien qu'assez répandue en pratique chez les opérateurs de télécommunications, n'est en aucun cas un standard ou une règle.

## Exemple sous Windows

Le client avec l'adresse IP 62.202.32.1 se connecte au serveur wikipedia en passant par différents routeurs.