Warum verwenden einige gängige Traceroute-Implementierungen standardmäßig UDP-Tests?

18

Ich habe kürzlich ein Netzwerkkonnektivitäts-Metaproblem behoben, indem ich wusste, dass ein bestimmtes Ziel erreichbar ist, aber ich konnte dies nicht nachweisen, tracerouteda der Pfad nach einer bestimmten Anzahl von Sprüngen kalt wurde. Angesichts der Tatsache, dass sich der letzte beobachtete Hop direkt vor dem Knoten von Interesse befand, nahm ich am Datenverkehr teil und erwartete, zu bestätigen, dass die Sonden ihn erreichten, und zu erfahren, welche Filterregel sie blockierte. Klar, ich habe erfahren, dass es sich bei den Tests um UDP-Datagramme handelt, die für einen hohen (und variierenden) Port bestimmt sind, den ich natürlich für eingehenden Datenverkehr gesperrt hatte.

Dies überrascht mich, da ich davon ausgegangen bin, dass alle tracerouteSonden standardmäßig ICMP verwenden würden, da die Antworten ICMP sind. Ich habe eine Dokumentationsumfrage durchgeführt und festgestellt, dass verschiedene Implementierungen unterschiedliche Entscheidungen treffen und einige dem Benutzer nicht erlauben, eine nicht standardmäßige Auswahl zu treffen.

Die Zusammenfassung der Traceroute-Sondenmethode und der Weiterleitung der IP-Pfad-Inferenz stützt meine Vorstellung, dass ICMP-Sonden das Ziel häufiger erreichen können.

Es scheint eine gute Idee zu sein, verschiedene Prüfmethoden zuzulassen, aber es scheint eine schlechte Idee zu sein, standardmäßig etwas anderes als ICMP zu verwenden. Könnte jemand die Gründe beschreiben, warum es besser ist, standardmäßig UDP zu verwenden?

neirbowj
quelle

Antworten:

20

Die erste Version von traceroutewurde von Van Jacobson geschrieben und verwendete ICMP, funktionierte aber nicht sehr gut. Die Herstellerinterpretation von ICMP in RFC792 lautete, dass Router keine ICMP-Fehlermeldung als Antwort auf ein ICMP-Paket senden sollten (siehe Anmerkungen zur Bearbeitung unten). Daher würden die meisten Router als Antwort auf eine Echoanforderung mit einer TTL von 1 oder 0 keine "Zeitüberschreitung" -Nachricht senden. Also änderte er sie auf UDP und siehe da, es funktionierte großartig und es gab viel Freude (und Annahme). Das tracerouteTool unter Linux und FreeBSD (und ich nehme an, Cisco) basiert auf Van Jacobsons Arbeit.

Die Spezifikation wurde später in „in Reaktion auf eine ICMP geändert Fehlerpaket.“ Die Welt hat sich weiterentwickelt, Anbieter haben Änderungen an ihren Stacks vorgenommen, die ICMP-Fehlermeldungen als Antwort auf Echoanforderungen zulassen, und mit dem Aufkommen von Firewalls und ACLs werden manchmal streunende UDP-Pakete blockiert, aber ICMP-Echoanforderungen können durchkommen. Ihr heutiger Erfolg ist natürlich sehr unterschiedlich. Ich würde erwarten, dass das tracertund andere Tools zu einer Zeit geschrieben wurden, als die Verwendung von ICMP-Echoantworten nicht so problematisch war.

Heutzutage kann man nicht wirklich sagen, dass UDP besser ist als ICMP. Oder dass beides besser ist als TCP. Dies hängt vollständig von dem Pfad ab, den Sie durchlaufen, und von den geltenden Sicherheitsrichtlinien. Möglicherweise müssen Sie eine, beide oder alle drei Implementierungen ausprobieren.

Quellen:

http://ftp.arl.army.mil/~mike/ping.html http://www.inetdaemon.com/tutorials/troubleshooter/tools/traceroute/definition.shtml

Bearbeiten :

Der RFC wurde von IP (RFC791) in ICMP (RFC792) geändert, in dem im Intro steht:

Um die unendliche Regression von Nachrichten über Nachrichten usw. zu vermeiden, werden keine ICMP-Nachrichten über ICMP-Nachrichten gesendet.

Dies ist das Bit, das dazu geführt hat, dass Anbieter keine "Time Exceeded" -Fehler für Echoanforderungen gesendet haben.

RFC1122, Anforderungen für Internet-Hosts, in Abschnitt 3.2.2. ist das Update, das besagt, dass Hosts nicht auf ICMP- Fehlermeldungen reagieren sollten .

Karyhead
quelle
Zu Ihrer Information, jetzt haben Sie genug Ruf, um Kommentare zu der Frage zu hinterlassen, über die Sie mir eine E-Mail geschickt haben
Mike Pennington,
Gut gemacht. Besonders gut hat mir die Geschichte im ersten Link über den Computer gefallen, in dem "Ping! Ping! Ping!" an der Spitze seiner Lunge.
Neirbowj
Mike, ja, ich beginne zu
verstehen,