Wie kann Ping kein Transportprotokoll verwenden?

563
ToniAz

Ich habe gerade erfahren, dass Ping ICMP direkt verwendet, dh die Transportschicht umgeht. Wie ist das möglich? Sollte eine Anwendung (L5) nicht UDP oder TCP in der Transportschicht (L4) verwenden? Wie ich es kenne, ist jede Schicht blind für alles, was zwei Ebenen tiefer ist, dh eine Anwendung ist mit L4 über Sockets verbunden, ist aber für L3 bis zu L1 blind.

3
Das OSI-Modell ist eine Zusammenfassung, die noch nie vollständig in einem Stack implementiert wurde. Denken Sie daran, dass keine der Ebenen über 2 tatsächlich obligatorisch ist. Eine Anwendung auf Layer 7 kann Aufgaben auf Layer 2 oder 3 oder 4 ausführen, falls dies gewünscht wird. Sehen Sie sich hier meine Antwort an, wie eine Anwendung die Sockets-Bibliothek verwendet, um eine Verbindung mit Sockets-Funktionsaufrufen aufzubauen, die auf verschiedenen Ebenen des Stapels arbeiten: https://superuser.com/questions/984182/what-are-the-detailed -osi-model-step-beteiligte-in-connection-to-a-website / 984253 # 984253 Frank Thomas vor 5 Jahren 1

1 Antwort auf die Frage

3
Fanatique

Wenn man "Ping" sagt, beziehen sie sich auf ICMP-Ping, da dies der ursprüngliche Ping ist. ICMP arbeitet tatsächlich auf einer niedrigeren Ebene als die UDP- und TCP-Transportprotokolle und verwendet keine Ports [ 1 ]:

ICMP verwendet die grundlegende Unterstützung von IP, als wäre es ein Protokoll auf höherer Ebene. ICMP ist jedoch ein integraler Bestandteil von IP und muss von jedem IP-Modul implementiert werden.

Dies liegt vor allem daran, dass ICMP zum Melden von Fehlern verwendet wird, da IP an sich nicht vollständig zuverlässig ist. ICMP ist also ein Protokoll auf niedrigerer Ebene, das IP und nicht TCP / UDP verwendet. Ping ist nur ein Werkzeug, das ICMP verwendet (dank Low-Level-C). ICMP ist jedoch nicht nur Ping oder Traceroute. Sein Hauptzweck ist, wie gesagt, völlig anders.

Und ich weiß nicht, wie Sie gelernt haben, dass Schichten für darunterliegende Schichten blind sind. Das stimmt nicht oder zumindest meines Wissens. Ping kann jedes gewünschte Protokoll verwenden, indem es in C implementiert wird.

Low-Level-Sprachen wie C haben direkten Zugriff auf IP-basierte Systemmodule. Daher ist es möglich, ein solches Protokoll mithilfe von C (und fast jeder anderen in C geschriebenen Sprache) zu verwenden.

Um es genauer zu erklären (tl; dr):

Ping ist ein ICMP-basiertes Tool, es verwendet kein TCP und UDP und funktioniert daher nicht mit Ports (da ein Protokoll keine Ports benötigt, tun dies nur Dienste). Es erfordert nicht die Funktionalität von Protokollen höherer Ebene wie TCP, daher werden sie nicht implementiert. Und obwohl Ping eine Anwendung ist, funktioniert es mit ICMP und verwendet keinen Port.

* Ping kann jedes gewünschte Protokoll verwenden * Ich denke, Sie können zusätzlich erklären, dass wenn Sie "Ping" sagen, er "ICMP-Ping" bedeutet. Akina vor 5 Jahren 1
Vielen Dank, dass Sie @Akina erwähnt haben. Ich habe meine Antwort entsprechend aktualisiert. Fanatique vor 5 Jahren 0
@Fanatique Danke für die Klarstellung. Ich habe nicht impliziert, dass ICMP ein Protokoll auf Anwendungsebene ist. Vielleicht handelt es sich bei der Verwirrung um das "es" im ersten Satz. Mit "es umgeht" meine ich "Ping-Umgehungen". ToniAz vor 5 Jahren 0
Ja, ich weiß, ich glaube, es war tatsächlich eine Fehlinterpretation von meiner Seite. Ich werde meine Antwort bearbeiten, um das nicht zu implizieren. Wie ich bereits gesagt habe, basiert die Quelle von ping nicht auf tcp oder udp, sondern auf icmp. Fanatique vor 5 Jahren 1