La chose la plus importante à retenir est que les routes ne sont pas statiques . De par leur conception, les routes sur l'internet public changent en permanence. Parfois, les routes changent en raison de l'équilibrage de la charge ; parfois, elles changent parce qu'un nœud tombe en panne ; parfois, elles changent parce que les routeurs décident littéralement au hasard de modifier les règles de routage (juste pour faire bouger les choses).
Du point de vue d'un utilisateur final qui ne dispose pas d'un accès de niveau administrateur système à tous les routeurs et concentrateurs Internet intermédiaires entre l'origine et la destination d'un paquet, il faut traiter cette question un peu comme le principe d'incertitude d'Heisenberg.
Les choses à considérer :
-
En fonction de la "destination" IP déclarée dans votre paquet, les routeurs intermédiaires peuvent décider de vous acheminer différemment . Par conséquent, si un traceroute est une tentative de cartographie séquentielle des routeurs entre la source et la destination, un traceroute peut être détourné de son but en faisant emprunter aux routes des chemins différents selon le nœud que vous essayez d'atteindre.
-
Tous les routeurs n'écoutent pas les pings ICMP ou UDP. Ils peuvent choisir d'ignorer silencieusement ce trafic et de le laisser tomber sur la carte réseau (souvent pour lutter contre les attaques DDoS). Cela peut contrarier votre tentative de tracer une route.
-
Même si vous réussissez à mapper une route, et que tous les nœuds intermédiaires répondent à vos pings et ne tentent pas de jouer avec votre tentative de mappage, la route peut changer lors des prochains paquets que vous enverrez en utilisant un protocole "réel" (ou même si vous tentez une traceroute une deuxième fois).
-
La QoS peut amener des réseaux qui fonctionnent normalement à acheminer le trafic différemment. Par exemple, la voix sur IP ou la vidéo en continu peuvent emprunter un chemin, tandis que la navigation Web ordinaire peut en emprunter un autre.
-
El type de trafic peut entraîner une différence de routage. Par exemple, même sans tenir compte de la qualité de service, vous pouvez obtenir un chemin différent pour FTP et pour SSH. Les noeuds intermédiaires peuvent exercer tout pouvoir discrétionnaire, quel qu'il soit (qu'il s'agisse d'une sélection totalement aléatoire des routes, d'une tentative malveillante de ralentir votre trafic ou d'une tentative honnête de rendre votre connexion plus rapide en acheminant le trafic vers le nœud le moins chargé) lorsqu'il s'agit de déterminer où acheminer votre trafic à partir de chaque saut.
-
En théorie, les routeurs intermédiaires peuvent également, s'ils le souhaitent, transformer votre tentative de traceroute en un cycle infini : le noeud A pointe vers le noeud B, le noeud B pointe vers le noeud C, et le noeud C pointe à nouveau vers le noeud A. Rien n'empêche les routeurs de faire cela (je ne sais pas pourquoi ils le feraient, mais c'est une possibilité) pour les paquets détectés comme "traceroutes" (pings ICMP ou UDP). Il peut le faire pour tenter de déjouer vos efforts, ou pour toute autre raison.
L'algorithme de découverte de chemins multiples est utile, mais il ne peut pas surmonter ces limitations théoriques.
En gros, pour déterminer un chemin, il faut envoyer un ou plusieurs paquets. Ces paquets peuvent être acheminés de la manière dont les nœuds intermédiaires le souhaitent. Mais dès que vous envoyez un autre paquet, il n'y a absolument rien qui empêche les routeurs de modifier le chemin. Il s'agit en quelque sorte d'une analogie réseau du principe d'incertitude d'Heisenberg.
Les chemins sont éphémère y transitoire . Vous ne devriez pas vous fier aux informations reçues d'un traceroute pour quoi que ce soit d'important, sauf pour diagnostiquer un problème de connectivité sur un réseau dont vous avez déjà une connaissance approfondie de la topologie (sur un réseau local d'entreprise compliqué, par exemple) et dont vous pouvez contrôler le comportement des noeuds participants. Si l'un des nœuds participants n'est pas le vôtre (si vous ne pouvez pas vous y connecter avec des privilèges d'administrateur système), les résultats du traceroute sont effectivement arbitraires.
D'autre part, si tous les nœuds participants sont le vôtre, vous pouvez, en tant qu'administrateur, contrôler le comportement exact de chaque nœud. Par exemple, vous pouvez activer ICMP, et configurer statique (routes qui ne changent pas). Vous pouvez alors être sûr que votre traceroute est exact. Mais si vous placez un équilibreur de charge au milieu, vous devrez être conscient du comportement de l'équilibreur de charge et de la façon dont il peut changer de route pratiquement au besoin (bien qu'il ne soit généralement pas aléatoire et qu'il n'essaie généralement pas de vous tromper volontairement).