Einfache Erklärung der Unix-Sockets

20

Ich kann suchen und habe mir bereits den Wikipedia-Eintrag und einige andere Stellen angesehen, aber obwohl ich Programmiererfahrung habe, verstehe ich das Konzept nicht wirklich. Können Sie mich wie eine 10-jährige behandeln und mir eine klare Erklärung zur Socket-Kommunikation geben?

Elzo Valugi
quelle
Schreiben Sie mit ihnen ein paar kleine Test-Apps. Sie brauchen nicht einmal zwei Maschinen, nur zwei kleine Apps, um zu starten. Bingo.
Patrick Hughes
Beejs Handbuch zur Netzwerkprogrammierung scheint ein sehr beliebter Einführungstext für Unix-Sockets zu sein, obwohl ich nicht sagen kann, dass es mir gefällt.
Nemanja Trifunovic
Ich habe @DanielPittman bereits als Antwort positiv bewertet. Wenn ich schreiben müsste, hätte ich die gleiche Antwort geschrieben. Aber wenn Sie mehr Hilfe wünschen, würde ich verlängern. Bitte bearbeiten Sie Ihre Frage, geben Sie Hintergrundinformationen zu dem, was Sie wissen und was Sie nicht, und lassen Sie mich wissen, ob Sie Hilfe bei der Verwendung, der Funktionsweise oder dem theoretischen (Protokolldesign) oder dem Versuch suchen für einen bestimmten Zweck zu bewerten?
Dipan Mehta
Hier ist ein Buch: Unix Network Programming . Jeder auf der Erde, der diese Frage beantworten würde, hätte von dieser Mutter gelernt. Lesen Sie dieses Buch, Ihre Frage selbst wird besser.
Dipan Mehta
Meinen Sie BSD-Sockel? Unix-Sockets funktionieren nur lokal.
imel96

Antworten:

15

Lassen Sie mich Ihnen ein Beispiel geben: Angenommen, Sie möchten mit Ihrem Freund kommunizieren / chatten, der nicht an Ihrer Adresse wohnt. Dazu muss ein "Kommunikationskanal" eingerichtet werden. Angenommen, Sie möchten diese Kommunikation über Telefone durchführen. Sie wissen, dass es in der Stadt ein Telefonnetz gibt, das auf jedes Haus ausgedehnt ist.

Jetzt gibt es eine Telefonsteckdose in Ihrem Haus und eine in Ihrem Freundeshaus. Damit die Kommunikation stattfinden kann, müssen Sie und Ihr Freund eine Verbindung zum Netzwerk herstellen, indem Sie Ihr Telefon an beiden Enden der Kommunikation an die Steckdose anschließen. Die Programmierbuchsen sind konzeptionell mit den Telefonbuchsen identisch.

In der Programmierung haben Sie zwei Prozesse (laufende Programme), die miteinander kommunizieren möchten. Dafür müssen sie eine Kommunikationsverbindung zwischen sich herstellen. Auch hier steht ein Netzwerk zur Verfügung. Sie müssen lediglich eine Verbindung zu diesem Netzwerk über eine Art Socket herstellen. Unix-Sockets sind solche Sockets, die diese Konnektivität / Steckbarkeit für das Netzwerk bereitstellen. In jedem der beiden Programme gibt es also einen Code, der die Verbindung zum Netzwerk über Sockets herstellt.

Der Rest sind Details.

Nazar Merza
quelle
2
Ich würde dies ablehnen, wenn ich genug Ruf hätte. Ihr Text erklärt nicht, wie die Steckdose funktioniert. Genau derselbe allgemeine Text wie in Wikipedia. Wie funktioniert die Steckdose hören ? Wie kann Ihre Telefonbuchse auf eine Verbindung warten?
Grün
21

Unix-Sockets sind bidirektionale Sockets - genau wie ein IP-basierter Socket, mit dem Sie wahrscheinlich vertraut sind und der einer Pipe ähnelt, mit der Sie wahrscheinlich vertraut sind.

Sie haben einige interessante Eigenschaften:

  • Sie befinden sich nur in der Domäne "des lokalen Hosts" - Sie können nicht über das Netzwerk auf sie zugreifen, sondern nur auf dem lokalen Computer.
  • Sie können sie im "Stream" -Modus erstellen, in dem sie Daten wie eine Pipe als Bytestrom übergeben.
  • Sie können sie im "Datagramm" -Modus erstellen, in dem sie die Grenzen zwischen Sendevorgängen beibehalten. Auf diese Weise können Sie das Framing beibehalten, ohne ein eigenes Framing-Protokoll über einem Byte-Stream zu erstellen.
  • Sie verwenden das Dateisystem oder unter Linux einen "abstrakten Namespace" als "Adresse".
  • Je nach Betriebssystem können Sie möglicherweise die Identität des anderen Endes annehmen, die Verbindungssoftware sicher identifizieren oder Dateihandles über den Socket übergeben.

Im Wesentlichen sind sie mit jeder anderen Muffe vergleichbar - sie haben etwas interessantere Eigenschaften als Rohre, unterscheiden sich aber ansonsten nicht grundlegend. Sie haben normalerweise eine höhere IPC-Latenz als eine Pipe und häufig größere Puffer - obwohl Sie dies möglicherweise tun können und dies von der Plattform abhängt.

Die letzte interessante Eigenschaft, die man sich merken sollte, ist, dass sie das Dateisystem als Namespace verwenden - also wie eine Named Pipe und nicht wie eine anonyme Pipe, in der Software ohne vorherige Beziehung kommunizieren kann. (Abstrakte Namespace-Sockets sind identisch, der Pfad "file" muss jedoch nicht vorhanden sein.)

Es gibt nichts Tieferes als das - sie haben keine supergeheimen versteckten Eigenschaften, die sie radikal von einer typischen Pipe oder einer TCP-Verbindung zu localhost unterscheiden.

Daniel Pittman
quelle
3
Danke, aber ich finde es immer noch kompliziert und voller Argot.
Elzo Valugi
2
Lassen Sie sich von diesem Versuch, eine einzeilige Antwort zu geben, nicht beleidigen, um herauszufinden, ob dies besser hilft: "Sie wissen, wie TCP / IP- und UDP / IP-Sockets funktionieren? Diese sind dieselben, nur ohne den IP-Teil."
Daniel Pittman
Ich bin nicht beleidigt, ich will nur verstehen. Vielen Dank. Ich werde das genauer untersuchen.
Elzo Valugi,
4
Die Definition eines Begriffs unter Verwendung dieses Begriffs (z. B. "Unix-Sockets sind bidirektionale Sockets") erklärt niemandem etwas, der nicht weiß, mit was für einem Socket er beginnen soll.
Bryan Oakley