La commande Linux traceroute
est un outil précieux pour identifier les points de ralentissement dans le trajet d’un paquet de données sur un réseau et diagnostiquer les problèmes de connexions lentes. Découvrons ensemble comment l’utiliser.
Fonctionnement de traceroute
Comprendre le fonctionnement de traceroute
est essentiel pour interpréter correctement ses résultats. Plus le chemin qu’un paquet réseau doit emprunter pour atteindre sa destination est complexe, plus il est difficile d’identifier les ralentissements éventuels.
Un petit réseau local (LAN) est généralement assez simple, avec au moins un serveur et un ou deux routeurs. La complexité augmente considérablement avec un réseau étendu (WAN), qui connecte plusieurs sites ou utilise Internet. Dans ce cas, votre paquet de données rencontre et est traité par de nombreux équipements, comme des routeurs et des passerelles.
Les en-têtes des paquets de données contiennent des métadonnées précisant leur longueur, leur origine, leur destination, le protocole utilisé, etc. La spécification du protocole définit cet en-tête. En identifiant le protocole, on peut déterminer le début et la fin de chaque champ de l’en-tête et lire les métadonnées.
traceroute
utilise la suite de protocoles TCP/IP et envoie des paquets UDP (User Datagram Protocol). L’en-tête de ces paquets contient un champ Temps de Vie (TTL) codé sur 8 bits. Contrairement à ce que son nom pourrait suggérer, le TTL représente un compteur de sauts, et non une durée.
Un paquet de données voyage de son point de départ à sa destination en traversant plusieurs routeurs. À chaque passage par un routeur, le compteur TTL est décrémenté. Si la valeur TTL atteint zéro, le routeur qui reçoit le paquet le rejette et n’effectue pas le transfert vers le prochain nœud, car le paquet est considéré comme « expiré ».
Le routeur envoie alors un message ICMP (Internet Control Message Protocol) de type « Temps dépassé » à l’origine du paquet, indiquant son expiration. Ce message contient l’en-tête original et les 64 premiers bits de données du paquet initial, comme spécifié dans la RFC 792.
Ainsi, si traceroute
envoie un paquet avec une valeur TTL de 1, le paquet atteindra seulement le premier routeur avant d’être rejeté. traceroute
recevra alors un message « Temps dépassé » de la part du routeur, et pourra enregistrer le temps nécessaire pour l’aller-retour.
Ensuite, l’opération est répétée avec un TTL de 2, puis de 3, et ainsi de suite, jusqu’à ce que la destination soit atteinte, ou que le nombre maximum de sauts (30, par défaut) ait été testé.
Particularités de certains routeurs
Il arrive que certains routeurs présentent des anomalies. Au lieu de rejeter les paquets avec un TTL de zéro et d’envoyer un message ICMP « Temps dépassé », ils essaient parfois de les transmettre malgré tout.
Selon Cisco, certains fournisseurs d’accès Internet (FAI) limitent le nombre de messages ICMP que leurs routeurs sont capables de relayer.
Par ailleurs, certains équipements sont configurés pour ne jamais envoyer de paquets ICMP, afin d’éviter qu’ils ne soient involontairement impliqués dans une attaque par déni de service distribué, comme une attaque Smurf.
traceroute
a un délai d’attente par défaut de cinq secondes pour les réponses. Si aucune réponse n’est reçue dans ce délai, la tentative est abandonnée. Par conséquent, les réponses provenant de routeurs très lents peuvent être ignorées.
Installation de traceroute
traceroute
est préinstallé sur Fedora 31, mais doit être installé sur Manjaro 18.1 et Ubuntu 18.04. Pour installer traceroute
sur Manjaro, utilisez la commande suivante :
sudo pacman -Sy traceroute
Pour installer traceroute
sur Ubuntu, entrez la commande suivante :
sudo apt-get install traceroute
Utilisation de traceroute
Comme vu précédemment, traceroute
a pour objectif de recevoir une réponse de chaque routeur rencontré sur le chemin entre votre ordinateur et la destination. Certains routeurs peuvent rester silencieux, tandis que d’autres répondront volontiers.
À titre d’exemple, nous allons effectuer un traceroute
vers le site web du château de Blarney en Irlande, célèbre pour la pierre de Blarney. La légende raconte que celui qui embrasse cette pierre reçoit le « don de l’éloquence ». Espérons que les routeurs rencontrés en chemin seront aussi bavards.
Nous saisissons la commande suivante :
traceroute www.blarneycastle.ie
La première ligne nous fournit les informations suivantes :
- La destination et son adresse IP.
- Le nombre de sauts que
traceroute
tentera avant d’abandonner. - La taille des paquets UDP envoyés.
Les lignes suivantes affichent des informations sur chaque saut. Avant d’entrer dans les détails, on constate qu’il y a 11 sauts entre notre ordinateur et le site web du château de Blarney. Le saut 11 indique que la destination a été atteinte.
Le format de chaque ligne de saut est le suivant :
- Le nom de l’appareil ou, à défaut, son adresse IP.
- L’adresse IP.
- Le temps d’aller-retour pour chacun des trois tests. Un astérisque indique l’absence de réponse pour un test donné. Si l’appareil ne répond pas du tout, trois astérisques seront affichés, sans nom ni adresse IP.
Analysons les résultats obtenus :
Saut 1 : Le premier point de passage est le routeur DrayTek Vigor de notre réseau local. Il permet à nos paquets UDP de quitter le réseau et d’accéder à Internet.
Saut 2 : Cet appareil n’a pas répondu. Il a peut-être été configuré pour ne pas envoyer de paquets ICMP ou a répondu trop lentement, ce qui a causé l’expiration du délai.
Saut 3 : Un appareil a répondu, mais sans indiquer son nom, seulement son adresse IP. On note la présence d’un astérisque, signe d’une non-réponse à l’une des trois requêtes, ce qui pourrait indiquer une perte de paquets.
Sauts 4 et 5 : Encore des sauts anonymes.
Saut 6 : Beaucoup d’informations ici, car un équipement distant différent a traité chacune de nos trois requêtes UDP. Les noms (plutôt longs) et les adresses IP de chaque appareil sont affichés. Cela peut se produire lorsqu’on rencontre un réseau « richement peuplé », où de nombreux équipements sont mobilisés pour gérer un volume de trafic important. Ce saut se trouve chez l’un des plus grands FAI du Royaume-Uni. Il serait donc surprenant que le même équipement distant traite nos trois requêtes de connexion.
Saut 7 : Il s’agit du saut effectué par nos paquets UDP lorsqu’ils ont quitté le réseau du FAI.
Saut 8 : Encore une fois, nous obtenons une adresse IP, mais pas le nom de l’appareil. Les trois tests ont été renvoyés avec succès.
Sauts 9 et 10 : Deux autres sauts anonymes.
Saut 11 : Nous sommes arrivés sur le site web du château de Blarney. Bien que le château se trouve à Cork en Irlande, selon les données de géolocalisation IP, le site web est hébergé à Londres.
Nous avons donc eu des résultats variables. Certains appareils ont joué le jeu, d’autres ont répondu sans se présenter, et certains sont restés complètement anonymes.
Quoi qu’il en soit, nous sommes arrivés à destination en 11 sauts, avec un temps d’aller-retour compris entre 13.773 et 14.715 millisecondes.
Masquage des noms d’appareils
Comme on a pu le constater, l’affichage des noms d’appareils peut parfois surcharger les résultats. Pour faciliter la lecture des données, on peut utiliser l’option -n
(pas de mappage).
Pour reprendre l’exemple précédent, on saisit la commande suivante :
traceroute -n blarneycastle.ie
Il est ainsi plus aisé d’identifier les temps d’aller-retour anormalement élevés qui pourraient signaler un goulot d’étranglement.
Le saut 3 semble de nouveau suspect. Lors du précédent test, il n’avait répondu que deux fois, et maintenant une seule fois. Dans ce cas, il s’agit d’une situation hors de notre contrôle.
Cependant, si vous étiez en train d’analyser votre propre réseau d’entreprise, il serait judicieux d’investiguer ce point de passage.
Modification du délai d’attente
En augmentant le délai d’attente par défaut (cinq secondes), nous pourrions obtenir plus de réponses. Pour cela, nous utilisons l’option -w
(temps d’attente) pour le passer à sept secondes (notez qu’il s’agit d’un nombre à virgule flottante).
Nous saisissons la commande suivante :
traceroute -w 7.0 blarneycastle.ie
Cela n’a pas changé grand-chose, ce qui laisse penser que les réponses n’arrivent tout simplement pas à temps. Il est probable que les sauts anonymes soient délibérément tenus secrets.
Modification du nombre de tests
Par défaut, traceroute
envoie trois paquets UDP à chaque saut. Il est possible de modifier ce nombre à l’aide de l’option -q
(nombre de requêtes).
Pour accélérer le test, nous allons réduire le nombre de paquets UDP envoyés à un seul :
traceroute -q 1 blarneycastle.ie
Un seul paquet est désormais envoyé à chaque saut.
Définition de la valeur TTL initiale
Il est possible de modifier la valeur initiale du TTL et de « sauter » quelques nœuds. En général, la valeur du TTL est initialisée à 1 pour la première série de tests, puis à 2 pour la deuxième, et ainsi de suite. Si on la définit à 5, le premier test tentera d’atteindre le saut numéro 5, en ignorant les sauts 1 à 4.
Sachant que le site web du château de Blarney se trouve à 11 sauts de notre ordinateur, nous allons utiliser la commande suivante pour nous rendre directement au saut numéro 11 :
traceroute -f 11 blarneycastle.ie
Nous obtenons ainsi un résumé concis de l’état de la connexion vers la destination.
Précautions d’usage
traceroute
est un outil excellent pour étudier le routage du réseau, vérifier la vitesse des connexions et identifier les points de ralentissement. Windows propose également une commande tracert
, qui fonctionne de manière similaire.
Cependant, il est déconseillé de bombarder d’équipements inconnus avec un flot de paquets UDP, et il faut être prudent quant à l’utilisation de traceroute
dans des scripts ou des tâches automatisées.
L’utilisation intensive de traceroute
peut avoir un impact négatif sur les performances d’un réseau. À moins qu’une intervention immédiate soit nécessaire, il est préférable d’utiliser cet outil en dehors des heures de pointe.