Verwendet Traceroute UDP oder ICMP oder beides?

24

Wenn ich von meinem Laptop aus ein Trace für die Domain www.google.com durchführe, verwende ich icmp oder udp?
Ich dachte, es wäre ICMP Typ 11, aber als ich nach etwas anderem suchte, stieß ich auf Regeln, bei denen ICMP Typ 30 verwendet wurde, und ich sah Regeln, bei denen UDP verwendet wurde.
Kann mir jemand erklären, wie das geht?
Ich arbeite an einer Firewall (Iptables) für einen virtuellen dedizierten Server.

Kris
quelle

Antworten:

26

Der Typ des gesendeten Pakets hängt von der Implementierung ab. Standardmäßig verwendet Windows tracertICMP und sowohl Mac OS X als auch Linux tracerouteverwenden UDP. Ich habe keine BSD- oder Solaris-Maschinen oder andere Betriebssysteme zur Hand, aber die Manpage für die Mac OS X-Version erwähnt, dass sie BSD 4.3 hat.

Die von mir angebotenen Mac- und Linux-Versionen bieten die Möglichkeit, eine Vielzahl verschiedener Protokolle zu wählen, einschließlich ICMP-, TCP-, UDP- und GRE-Paketen. Andere Protokolle können durch ihren Namen oder ihre Nummer angegeben werden, aber Traceroute weiß nichts darüber, wie andere Protokolle funktionieren. Es schickt sie einfach blindlings.

Sie können auch sowohl die Nutzlast als auch die Quell- und Zielports ändern, um Firewalls zu vermeiden oder festzustellen, welcher Router auf dem Pfad Pakete einer bestimmten Größe ablegt.

Alle Versionen von traceroute stützen sich auf ICMP- Antworten vom Typ 11 (Zeitüberschreitung) von jedem Hop entlang der Route. Wenn ICMP-Antworten vom Typ 11 von Ihrer Firewall blockiert werden, funktioniert Traceroute nicht. Diese Pakete sind eingehend und nicht ausgehend.

Der ICMP-Typ 30 ist speziell für Traceroute vorgesehen und wird als "Informationsanforderung" bezeichnet. Ich konnte nirgendwo finden, wo dies tatsächlich verwendet wird. Die man - Seite für den Mac OS X und Linux - Versionen , so dass -Isendet ICMP Typ 8 (Echo - Request). Laut Wikipedia verwendet Windows tracertauch ICMP-Echoanforderungen. ICMP Typ 30 oder Typ 8 sind ausgehende Pakete, nicht eingehend.

ICMP-Typ 0 (Echoantwort) wird möglicherweise als letztes Paket zurückgegeben, wenn die TTL genau der Anzahl der Sprünge entspricht. Traceroute wird wissen, dass es fertig ist, wenn es eines davon erhält. Dies ist ein eingehendes Paket.

TCP-SYN- Pakete verursachen entweder ein RSTPaket oder ein SYN ACKPaket als Antwort, wenn sie ihr Ziel erreichen. Wenn Sie ein SYN ACKPaket erhalten, ist es höflich, darauf zu achten, dass RSTauf dem Server keine halboffene Verbindung besteht.

Es ist möglich, ICMP-Typ-3-Code-4- Antworten anstelle von ICMP-Typ-11-Antworten zurückzugewinnen, wenn Sie ein großes Paket mit gesetztem Flag "Nicht fragmentieren" senden. Auf diese Weise können Sie jedoch wahrscheinlich nur den Hop mit der kleinsten MTU finden . Normalerweise erhalten Sie diese Antwort nur von einem Sprung entlang der Route. Nicht alle von ihnen.

Ladadadada
quelle
8

Herkömmliche Traceroute verwendet UDP zum Inkrementieren von Ports für jeden Hop.

Sie können jede Art von Paket verwenden, um es zu implementieren - ICMP, TCP SYN usw. Alles, was es braucht, ist, dass das IP-Paket abläuft und Sie golden sind.

Verschiedene Implementierungen wie MacOS bieten Unterstützung für mehrere Arten von Traceroute sowie für Modi, die keine Ports usw. erhöhen, um Firewall-Einschränkungen zu umgehen.

Daniel Pittman
quelle
7
Der Standard-UDP-Port bei einer unixähnlichen Implementierung liegt zwischen 33434 und 33534. ICMP-Implementierungen verwenden eine "Echoanforderung" (Typ 8).
Ouki