Es gibt Szenarien, in denen man wissen möchte, welcher Route eine Verbindung folgt. Mit Route meinen wir hier die IP-Adressen aller Weiterleitungseinheiten (wie Router dazwischen).
Es gibt zwar keine Garantie dafür, dass die Route für alle Pakete einer Verbindung gleich bleibt, aber normalerweise ist sie gleich. Diese routenbezogenen Informationen können beim Debuggen von Netzwerkproblemen sehr nützlich sein.
Das Traceroute-Dienstprogramm druckt die vollständige Route zu einem bestimmten Ziel aus. In diesem Artikel werden wir diskutieren, wie Traceroute funktioniert, und einige praktische Beispiele sehen.
Wie Traceroute funktioniert?
Bevor wir mit Beispielen beginnen, wollen wir das Konzept verstehen, nach dem Traceroute funktioniert.
Das Traceroute-Dienstprogramm verwendet das TTL-Feld im IP-Header, um seinen Betrieb zu erreichen. Für Benutzer, die neu im TTL-Feld sind, beschreibt dieses Feld, wie viele Sprünge ein bestimmtes Paket benötigt, während es im Netzwerk unterwegs ist.
Dies umreißt also effektiv die Lebensdauer des Pakets im Netzwerk. Dieses Feld ist normalerweise auf 32 oder 64 eingestellt. Jedes Mal, wenn das Paket auf einem zwischengeschalteten Router gehalten wird, verringert es den TTL-Wert um 1. Wenn ein Router den TTL-Wert von 1 in einem empfangenen Paket findet, wird dieses Paket nicht weitergeleitet, sondern stattdessen verworfen.
Nach dem Verwerfen des Pakets sendet der Router eine ICMP-Fehlermeldung „Zeit überschritten“ zurück an die Quelle, von der das Paket generiert wurde. Das zurückgesendete ICMP-Paket enthält die IP-Adresse des Routers.
Nun ist also leicht verständlich, dass Traceroute so funktioniert, dass Pakete mit einem TTL-Wert gesendet werden, der bei 1 beginnt und dann jedes Mal um eins erhöht wird. Jedes Mal, wenn ein Router das Paket empfängt, überprüft er das TTL-Feld, wenn das TTL-Feld 1 ist, dann verwirft er das Paket und sendet das ICMP-Fehlerpaket, das seine IP-Adresse enthält, und das ist es, was Traceroute erfordert. Daher ruft Traceroute inkrementell die IP aller Router zwischen der Quelle und dem Ziel ab.
Sie sollten auch die IP-Header-Felder verstehen, die wir vor einiger Zeit besprochen haben.
Traceroute-Beispiele
1. Wie wird Traceroute ausgeführt?
$ traceroute <server-name>
Der obige Servername ist der Zielname oder die IP-Adresse. Beispielsweise wird Traceroute verwendet, um den Netzwerkpfad von meinem Computer zu google.com zu finden:
$ traceroute google.com traceroute to google.com (74.125.236.132), 30 hops max, 60 byte packets 1 220.224.141.129 (220.224.141.129) 89.174 ms 89.094 ms 89.054 ms 2 115.255.239.65 (115.255.239.65) 109.037 ms 108.994 ms 108.963 ms 3 124.124.251.245 (124.124.251.245) 108.937 ms 121.322 ms 121.300 ms 4 * 115.255.239.45 (115.255.239.45) 113.754 ms 113.692 ms 5 72.14.212.118 (72.14.212.118) 123.585 ms 123.558 ms 123.527 ms 6 72.14.232.202 (72.14.232.202) 123.499 ms 123.475 ms 143.523 ms 7 216.239.48.179 (216.239.48.179) 143.503 ms 95.106 ms 95.026 ms 8 bom03s02-in-f4.1e100.net (74.125.236.132) 94.980 ms 104.989 ms 104.954 ms
Jede Zeile gibt die Details der Interaktion mit jedem angetroffenen Router an. Wir sehen also, dass Traceroute nicht nur die IP-Adressen der zwischengeschalteten Router angibt, sondern auch drei Umlaufzeiten für diesen bestimmten Router, da die Traceroute-Befehle für jeden Router drei Pakete abfeuern.
Das '*'-Feld in der Ausgabe
Es kann vorkommen, dass in der Ausgabe ein „*“ anstelle eines Werts auftritt. Dies zeigt, dass das erforderliche Feld nicht abgerufen werden konnte. Der Grund kann alles Mögliche sein, von einem fehlgeschlagenen Reverse-DNS-Lookup über Pakete, die den Zielrouter nicht erreichen, bis hin zu Paketen, die auf dem Rückweg verloren gehen. Wir sehen also, dass es viele Gründe geben könnte, aber für all diese Fälle liefert das Traceroute-Dienstprogramm ein * in der Ausgabe.
2. Zuordnung von IP-Adressen und Hostnamen deaktivieren
Traceroute bietet eine Option, durch die die Zuordnung von IP-Adressen zu Hostnamen (die Traceroute versucht) deaktiviert wird. Die Option dafür ist ‚-n‘ . Das folgende Beispiel veranschaulicht dies:
$ traceroute google.com -n traceroute to google.com (173.194.36.7), 30 hops max, 60 byte packets 1 220.224.141.129 109.352 ms 109.280 ms 109.248 ms 2 115.255.239.65 131.633 ms 131.598 ms 131.573 ms 3 124.124.251.245 131.554 ms 131.529 ms 131.502 ms 4 115.255.239.45 131.478 ms 131.464 ms 199.741 ms 5 72.14.212.118 199.674 ms 199.637 ms 199.603 ms 6 209.85.241.52 199.578 ms 199.549 ms 209.838 ms 7 209.85.241.187 199.488 ms 177.264 ms 177.196 ms 8 173.194.36.7 177.159 ms 187.463 ms 187.434 ms
Wir sehen also, dass in der Ausgabe kein Hostname angezeigt wird.
3. Antwortwartezeit konfigurieren
Die Zeit, die das Traceroute-Dienstprogramm nach dem Ausgeben eines Probe wartet, kann ebenfalls konfiguriert werden. Dies kann über die bereitgestellte Option „-w“ erfolgen. Die Option -w erwartet einen Wert, den das Dienstprogramm als Antwortzeit akzeptiert, auf die gewartet werden soll. In diesem Beispiel beträgt die Wartezeit 0,1 Sekunden und das Traceroute-Dienstprogramm konnte nicht auf eine Antwort warten und hat alle *s ausgegeben.
$ traceroute google.com -w 0.1 traceroute to google.com (74.125.236.101), 30 hops max, 60 byte packets 1 * * * 2 * * * 3 * * * .. 26 * * * 27 * * * 28 * * * 29 * * * 30 * * *
Wir sehen also, dass Traceroute 30 Versuche unternommen hat (die maximalen Hop-Versuche) und dann aufgegeben hat, da innerhalb von 0,1 Sekunden kein ICMP-Paket empfangen wurde.
4. Konfigurieren Sie die Anzahl der Abfragen pro Hop
Wie bereits zuvor erläutert, sendet das Traceroute-Dienstprogramm 3 Pakete pro Hop, um 3 Roundtrip-Zeiten bereitzustellen. Dieser Standardwert von 3 ist mit der Option „-q“ konfigurierbar. Diese Option erwartet eine Ganzzahl, die sie als neuen Wert für die Anzahl der Sonden pro Hop festlegt.
$ traceroute google.com -q 5 traceroute to google.com (173.194.36.46), 30 hops max, 60 byte packets 1 220.224.141.129 (220.224.141.129) 91.579 ms 91.497 ms 91.458 ms 91.422 ms 91.385 ms 2 115.255.239.65 (115.255.239.65) 91.356 ms 91.325 ms 98.868 ms 98.848 ms 98.829 ms 3 124.124.251.245 (124.124.251.245) 94.581 ms 107.083 ms 107.044 ms 107.017 ms 106.981 ms 4 115.255.239.45 (115.255.239.45) 106.948 ms 106.918 ms 144.432 ms 144.412 ms 144.392 ms 5 72.14.212.118 (72.14.212.118) 115.565 ms 115.485 ms 115.446 ms 115.408 ms 115.381 ms 6 72.14.232.202 (72.14.232.202) 115.351 ms 87.232 ms 117.157 ms 117.123 ms 117.049 ms 7 209.85.241.189 (209.85.241.189) 126.998 ms 126.973 ms 126.950 ms 126.929 ms 126.912 ms 8 bom04s02-in-f14.1e100.net (173.194.36.46) 126.889 ms 95.526 ms 95.450 ms 95.418 ms 105.392 ms
Wir sehen also, dass nach dem Konfigurieren der Anzahl der Probes auf 5 die Ausgabe anfing, fünf Umlaufzeiten pro Hop anzuzeigen.
5. Konfigurieren Sie den TTL-Wert, mit dem gestartet werden soll
Das Traceroute-Dienstprogramm ist flexibel genug, um den TTL-Wert zu akzeptieren, mit dem der Benutzer das Dienstprogramm starten möchte. Standardmäßig ist sein Wert 1, was bedeutet, dass er mit dem ersten Router im Pfad beginnt, aber mit der Option „-f“ (die den neuen Wert von TTL erwartet) kann ein neuer Wert des TTL-Felds festgelegt werden. Beispielsweise habe ich eine normale Traceroute-Operation und dann eine Traceroute mit einem anderen TTL-Wert ausprobiert.
$ traceroute google.com traceroute to google.com (74.125.236.132), 30 hops max, 60 byte packets 1 220.224.141.129 (220.224.141.129) 89.181 ms 101.540 ms 101.503 ms 2 115.255.239.65 (115.255.239.65) 101.468 ms 101.431 ms 101.324 ms 3 124.124.251.245 (124.124.251.245) 121.373 ms 121.350 ms 158.694 ms 4 115.255.239.45 (115.255.239.45) 101.223 ms 141.135 ms 123.932 ms 5 72.14.212.118 (72.14.212.118) 123.867 ms 123.832 ms 123.802 ms 6 72.14.232.202 (72.14.232.202) 123.773 ms 123.742 ms 587.812 ms 7 216.239.48.179 (216.239.48.179) 587.723 ms 587.681 ms 587.642 ms 8 bom03s02-in-f4.1e100.net (74.125.236.132) 577.548 ms 577.524 ms 587.512 ms $ traceroute google.com -f 8 traceroute to google.com (74.125.236.129), 30 hops max, 60 byte packets 8 bom03s02-in-f1.1e100.net (74.125.236.129) 96.961 ms 96.886 ms 96.849 ms
Wir sehen also, dass nach Verwendung der Option -f mit dem Wert 8 nur die letzte (8.) Zeile der vorherigen Ausgabe angezeigt wurde.