warum ist mtr viel schneller als traceroute?

12

In den mtrManpages heißt es:

mtr kombiniert die Funktionalität der Traceroute- und Ping-Programme in einem einzigen Netzwerkdiagnosetool

Ich benutze mtrviel und finde, dass es viel schneller ist als traceroute. Instinktiv mtrgibt mir die Antwort sofort, während traceroutejede IP-Adresse alle Sekunden aufgelistet wird . Auf meinem eigenen Computer habe ich time mtr www.google.comund verwendet time traceroute www.google.com, das Ergebnis ist 21,9s VS 6,1s.

Die Frage ist warum? Bedeutet mtr = ping + traceroutedas nicht, dass es langsamer oder zumindest genauso ist wie traceroute.

Kann mir jemand eine vernünftige und detaillierte Antwort geben?

Cizixs
quelle

Antworten:

21

Parallelität ist ein Hauptgrund für die Variation der Geschwindigkeit dieser Werkzeuge. Ein weiterer Faktor ist, wie lange sie auf eine Antwort warten, bevor der Hop als nicht antwortend angesehen wird. Wenn Reverse DNS durchgeführt wird, müssen Sie auch darauf warten. Der einfache Traceroute-Befehl wird viel schneller, wenn Sie Reverse DNS deaktivieren.

Ein weiterer wichtiger Unterschied, den ich nicht erwähnt habe, ist, wie die beiden Tools die Ausgabe rendern. Traceroute erzeugt die Ausgabe in der Reihenfolge von oben nach unten. Mtr rendert die Ausgabe auf eine andere Art und Weise, wobei mtr zurückgehen und die Ausgabe in vorherigen Zeilen aktualisieren kann.

Dies bedeutet, dass mtr die Ausgabe anzeigen kann, sobald sie verfügbar ist. Wenn spätere Antworten dazu führen, dass diese Ausgabe nicht korrekt ist, kann mtr zurückgehen und sie aktualisieren. Da Traceroute nicht zurückgehen und die Ausgabe aktualisieren kann, muss es warten, bis es endgültig entschieden hat, was angezeigt werden soll.

Wenn beispielsweise Hop-Nummer 2 nicht antwortet (was ein Symptom ist, das ich bei mehreren ISPs gesehen habe), zeigt Traceroute Hop-Nummer 1 an und wartet dann eine Weile, bevor Hop-Nummer 2 und 3 angezeigt werden. Auch wenn die Antwort von Hop-Nummer 2 angezeigt wird 3 ist angekommen, es wird nicht angezeigt, da traceroute immer noch auf die Antwort von Hop Nummer 2 wartet. Mtr hat diese Einschränkung nicht und kann die Antwort von Hop Nummer 3 anzeigen und trotzdem zurückgehen, um die Antwort von Hop Nummer 2 anzuzeigen, wenn es kommt später an.

Zu viel Parallelität kann dazu führen, dass die Ausgabe ungenau wird. In einigen Szenarien ist die Anzahl der Pakete, auf die Sie Antworten erhalten können, begrenzt. Das Senden von mehr Paketen in diesen Fällen beschleunigt den Prozess nicht, führt jedoch zu mehr verlorenen Paketen, da Sie die gleiche Anzahl von Antworten erhalten, wenn mehr Pakete gesendet werden.

Ein Beispiel hierfür ist, wenn ein Hop auf der Route nicht auf ARP-Anforderungen antwortet. Normalerweise löst das erste Paket eine ARP-Anforderung aus. Wenn mehr Pakete vor Ablauf der ARP-Anforderung eintreffen, wird nur das letzte dieser Pakete gepuffert und erhält eine Antwort.

Ein weiterer Unterschied besteht darin, wie viele Hops ohne Antworten angezeigt werden, bevor das Tool keine weiteren Hops mehr anzeigt. Ich habe gesehen, dass der Befehl traceroute für so viele Hops wie angefordert fortgesetzt wird (standardmäßig 30), während der Befehl mtr angehalten wird, sobald er fünf Hops ohne Antworten bestanden hat.

Kasperd
quelle
Dies ist eine viel bessere Antwort.
NickW
3

Der Befehl traceroute sendet 3 Sonden pro Hop. Wenn Sie ihn auf 1 Sonde beschränken, werden -q 1die Ergebnisse vergleichbar

time mtr -r -c 1 google.com
.
.
.
real    0m2.640s
user    0m0.003s
sys     0m0.018s


time traceroute6 -q 1 google.com
.
.
.
real    0m0.445s
user    0m0.006s
sys     0m0.007s

Ich würde erwarten, dass die Hauptunterschiede zwischen vergleichbaren Tests mit der DNS-Abfragezeit und den Pfadunterschieden zusammenhängen. Sie werden feststellen, dass meine Traceroute schneller ist als die mtr, aber dies ist nicht immer der Fall.

user9517
quelle
2

Ich nehme an, dass dies von der Art und Weise herrührt, wie die Routenverfolgung implementiert ist. traceroutehat nacheinander mindestens 3 Pakete für jeden Hop auf der Route zum Ziel gesendet.

mtr Ermitteln Sie zuerst die Sprünge in der Route und senden Sie dann parallel ein Paket an jeden Knoten.

Es scheint mir auch, dass es einen Unterschied in der Art und Weise gibt, wie mtrHopfen nicht auf Ping / Sonden reagieren. es ignoriert dann schneller, als es traceroutescheint, seine 3 Pakete die ganze Zeit zu senden, selbst wenn die ersten Versuche fehlgeschlagen sind, eine Antwort zu erhalten.

Benoit
quelle
1

Der Hauptgrund ist die Art und Weise, wie Traceroute ausgeführt wird. Es sendet ein UDP-Paket (oder ICMP unter Windows) mit einer TTL von eins an den ersten Host. Wenn es eine Timeout-Antwort empfängt (oder ein internes Timeout durchläuft), generiert es das nächste Paket für den nächsten Host mit einer TTL von zwei und so weiter (Hinzufügen einer zur TTL für jeden Host). Die Gesamtzeit von traceroute umfasst also das sequentielle Senden und Empfangen von Paketen für jeden Host.

Nachdem mtr den Pfad bestimmt hat, den die Pakete nehmen, sendet mtr alle ICMP-ECHO-Pakete parallel.

NickW
quelle
Woher weiß mtr, wohin die Pakete gesendet werden sollen?
user9517
Ja, ich sollte das hinzufügen, aber wie es "tatsächlich" herausfindet, denke ich, würde es erfordern, dass ich die Quelle lese :)
NickW
[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
NickW
2
@Iain Es sendet alle Pakete an die von Ihnen angegebene Adresse. Die verschiedenen Pakete geben eine unterschiedliche maximale Entfernung für die Entfernung an, bevor ein Fehler zurückgegeben wird. Die von mtr oder traceroute angezeigten Adressen sind erst bekannt, wenn die Antwort zurückkommt.
Kasperd