Was ist der Unterschied zwischen Unix-Socket und TCP / IP-Socket?

Antworten:

191

Ein UNIX-Socket ist ein prozessübergreifender Kommunikationsmechanismus, der den bidirektionalen Datenaustausch zwischen Prozessen ermöglicht, die auf demselben Computer ausgeführt werden.

IP-Sockets (insbesondere TCP / IP-Sockets) sind ein Mechanismus, der die Kommunikation zwischen Prozessen über das Netzwerk ermöglicht. In einigen Fällen können Sie TCP / IP-Sockets verwenden, um mit Prozessen zu kommunizieren, die auf demselben Computer ausgeführt werden (mithilfe der Loopback-Schnittstelle).

UNIX-Domain-Sockets wissen, dass sie auf demselben System ausgeführt werden, sodass sie einige Überprüfungen und Vorgänge (z. B. Routing) vermeiden können. Das macht sie schneller und leichter als IP-Sockets. Wenn Sie also mit Prozessen auf demselben Host kommunizieren möchten, ist dies eine bessere Option als IP-Sockets.

Bearbeiten: Gemäß Nils Toedtmanns Kommentar : UNIX-Domain-Sockets unterliegen Dateisystemberechtigungen, während TCP-Sockets nur auf Paketfilterebene gesteuert werden können.

pQd
quelle
12
Fügen Sie möglicherweise hinzu, dass UNIX-Domain-Sockets den Dateisystemberechtigungen unterliegen, TCP-Sockets hingegen nicht. Infolgedessen ist es viel einfacher zu regeln, welche Benutzer Zugriff auf einen UNIX-Domänen-Socket haben, als für einen TCP-Socket.
Nils Toedtmann
@pQd, Alter, kannst du es als Unix IPC anstatt als Unix Sockets bezeichnen?
Pacerier
4
@Pacerier-Unix-Sockets sind einfach eine Möglichkeit, Unix-IPC (Shared Interprocess Memory unter anderem) zu erreichen. Daher wäre es nicht richtig, Unix-Sockets als Unix-IPC zu bezeichnen.
fyquah95
TCP-Sockets werden auch von Unix behandelt? TCP-Sockets sind Teil der TCP-Protokollspezifikation, oder kann ein beliebiges Protokoll IP-Sockets verwenden?
Federico
@ Federico Ich habe eine Antwort gepostet, die versucht, Ihre Frage zu beantworten. Wenn Sie mehr Tiefe benötigen, stellen Sie bitte eine neue Frage.
Peter Green
28

Mit dem folgenden Befehl können Sie Ihre eigenen lokalen Unix-Sockets auflisten:

netstat -a -p --unix

Habe Spaß!

Der Unix-Hausmeister
quelle
9
Unix-Sockets existieren unter Windows nicht. netstatfunktioniert jedoch unter Windows.
Mark Tomlin
4
@apache, ähnliches in Windows "Named Pipes" genannt.
Experte
5
Named Pipes gibt es auch unter Linux.
Sahil Singh
9
@expert, named pipes in Windows ist gleich named pipes in Unix. IPC-Sockets in Unix haben keine Entsprechung in Windows
Pacerier
2
Windows 10 unterstützt Unix-Sockets. Es gibt einige Einschränkungen, aber es ist verfügbar: blogs.msdn.microsoft.com/commandline/2017/12/19/…
Tyson
12

Was ist der Unterschied zwischen Unix-Socket und TCP / IP-Socket?

Ein TCP / IP-Socket wird für die Kommunikation über TCP / IP-Netzwerke verwendet. Ein verbundener TCP-Socket wird durch die Kombination aus lokaler IP, lokalem Port, Remote-IP und Remote-Port identifiziert. Ein empfangsbereiter TCP-Socket wird durch den lokalen Port und möglicherweise die lokale IP identifiziert. AIUI zumindest auf Linux-TCP / IP-Sockets führt immer zur Generierung und Dekodierung von TCP / IP-Paketen, auch wenn sich Client und Server auf demselben Computer befinden.

Ein Unix-Domain-Socket (manchmal abgekürzt als Unix-Socket) kann dagegen auf einem einzelnen Computer ausgeführt werden. Listening-Sockets befinden sich in der Dateisystemhierarchie und der Zugriff darauf kann über Dateisystemberechtigungen gesteuert werden.

Darüber hinaus kann ein Prozess, der eine Verbindung über einen Unix-Socket annimmt, die Benutzer-ID des Prozesses ermitteln, der die Verbindung herstellt. Dies kann die Notwendigkeit eines Authentifizierungsschritts vermeiden. Anstatt ein Kennwort für Ihren Datenbankserver zu generieren und eine Kopie davon in den Code Ihrer Webanwendung aufzunehmen, können Sie dem Datenbankserver nur mitteilen, dass der Benutzer, der die Webanwendung ausführt, Zugriff auf das entsprechende Benutzerkonto in der Datenbank hat.


TCP-Sockets werden auch von Unix behandelt?

Na sicher

TCP-Sockets sind Teil der TCP-Protokollspezifikation

Internetprotokollspezifikationen betreffen in der Regel nur das, was auf der Leitung geschieht. Die TCP-Spezifikation enthält eine Definition von Socket, die jedoch nicht mit der Definition übereinstimmt, die der Begriff von der "Sockets-API" verwendet.

Die "Sockets-API", wie wir sie kennen, wurde von BSD eingeführt, aber später überall kopiert und ist Teil des posix-Standards. Das grundlegende Material für TCP- und UDP-Sockets ist in der Regel auf verschiedenen Plattformen ähnlich, aber fortgeschritteneres Material und Material, das mit anderen Teilen des Betriebssystems interagiert, variiert. Auf Unix-ähnlichen Systemen wird ein Socket beispielsweise durch ein Datei-Handle identifiziert und kann von den Datei-APIs gelesen / geschrieben werden, ist dies unter Windows nicht der Fall.

Einige Erweiterungen der Sockets-API wurden in RFCS dokumentiert, aber diese RFCs sind nur "informativ".

oder ein Protokoll könnte IP-Sockets verwenden?

Wenn eine Anwendung explizit einen Socket mit der Funktion "socket" erstellt (Sockets werden auch von der Funktion accept erstellt), werden die drei Parameter "domain", "type" und "protocol" übergeben. Zwischen diesen drei Parametern können viele verschiedene Socket-Typen ausgewählt werden.

  • domain wählt die Familie der verwendeten Protokolle / Adressen aus, z. B. AF_INET für ipv4, AF_INET6 für ipv6, AF_Unix für Unix-Dateisystempfade usw.
  • type wählt die Kommunikationssemantik aus, wobei die wichtigsten Datagramme und Streams sind, es gibt aber auch andere, spezialisiertere Typen.
  • protocol wählt das zu verwendende Protokoll aus. Wenn es auf 0 gesetzt ist, wird ein Standardprotokoll für die Kombination aus Domäne und Typ verwendet.
Peter Green
quelle
"Listening-Sockets befinden sich in der Dateisystemhierarchie und der Zugriff darauf kann über Dateisystemberechtigungen gesteuert werden." Bedeutet dies, dass zwei Server, die Zugriff auf dasselbe Dateisystem haben, möglicherweise über einen Socket kommunizieren können?
user5359531
AIUI leider nicht. superuser.com/questions/352263/…
Peter Green