Le parallélisme est une raison majeure de variation de la vitesse de ces outils. Un autre facteur contributif est le temps pendant lequel ils attendent une réponse avant que le saut soit considéré comme ne répondant pas. Si le DNS inversé est effectué, vous devez également attendre cela. La commande plain traceroute devient beaucoup plus rapide si vous désactivez le DNS inversé.
Une autre différence importante, que je n'ai pas vue mentionnée, est la façon dont les deux outils rendent la sortie. Traceroute produit la sortie dans l'ordre descendant. Mtr rend la sortie d'une manière différente, où mtr peut revenir en arrière et mettre à jour la sortie sur les lignes précédentes.
Cela signifie que mtr peut afficher la sortie dès qu'elle est disponible, car si des réponses ultérieures rendent cette sortie imprécise, mtr peut revenir en arrière et la mettre à jour. Étant donné que traceroute ne peut pas revenir en arrière et mettre à jour la sortie, il doit attendre jusqu'à ce qu'il ait finalement décidé ce qu'il affichera.
Par exemple, si le saut numéro 2 ne répond pas (ce qui est un symptôme que j'ai vu sur plusieurs FAI), traceroute affichera le saut numéro 1 puis attendra un moment avant d'afficher le saut numéro 2 et 3. Même si la réponse du numéro de saut 3 est arrivé, il n'est pas affiché car traceroute attend toujours la réponse du saut numéro 2. Mtr n'a pas cette restriction et peut afficher la réponse du saut numéro 3 et revenir en arrière pour afficher la réponse du saut numéro 2, si il arrive plus tard.
Trop de parallélisme peut rendre la sortie imprécise. Dans certains scénarios, le nombre de paquets pour lesquels vous pouvez obtenir des réponses est limité. L'envoi de plus de paquets dans ces cas n'accélérera pas le processus, mais cela entraînera plus de paquets perdus, car vous obtenez le même nombre de réponses avec plus de paquets envoyés.
Un exemple de ceci est lorsqu'un saut sur la route ne répond pas aux requêtes ARP. Habituellement, le premier paquet déclenche une demande ARP, et si plus de paquets arrivent avant l'expiration de la demande ARP, seul le dernier de ces paquets sera mis en mémoire tampon et recevra une réponse.
Une autre différence réside dans le nombre de sauts sans réponse qui seront affichés avant que l'outil cesse d'afficher plus de sauts. J'ai vu la commande traceroute continuer pendant autant de sauts que demandé (30 par défaut), tandis que la commande mtr s'arrêtait dès qu'elle avait passé cinq sauts sans réponse.
La commande traceroute envoie 3 sondes par saut si vous la limitez à 1 sonde
-q 1
alors les résultats deviennent comparablesJe m'attendrais à ce que les principales différences entre des tests comparables soient liées au temps de requête DNS et aux différences de chemin. Vous remarquerez que mon traceroute est plus rapide que le mtr mais ce n'est pas toujours le cas.
la source
Je suppose que cela vient de la façon dont le traçage des routes est implémenté.
traceroute
envoyé au moins 3 paquets pour chaque saut dans la route vers la destination, séquentiellement.mtr
découvrez d'abord les sauts de la route, puis envoyez des paquets à chaque nœud en parallèle.Il me semble également qu'il existe une différence dans la façon dont les
mtr
poignées ne répondent pas aux ping / sondes; il ignore alors plus rapidement que celuitraceroute
qui semble envoyer ses 3 paquets tout le temps, même si les premières tentatives n'ont pas réussi à obtenir de réponse.la source
La raison principale est le fonctionnement de traceroute. Il envoie un paquet UDP (ou ICMP sous Windows) avec un TTL de un au premier hôte, et lorsqu'il reçoit une réponse d'expiration (ou qu'il passe un délai d'expiration interne), il génère ensuite le paquet suivant pour l'hôte suivant avec un TTL de deux, et ainsi de suite (en ajoutant un au TTL pour chaque hôte). Le temps total de traceroute comprend donc l'envoi et la réception de paquets pour chaque hôte, séquentiellement.
mtr, après avoir déterminé le chemin emprunté par les paquets, envoie tous les paquets ICMP ECHO en parallèle.
la source
[mtr] investigates the network connection between the host mtr runs on and a user-specified destination host. After it determines the address of each network hop between the machines