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


Es ist von dieser Antwort:

https://stackoverflow.com/questions/2482411/is-this-pdo-bug-fixed-now/2482424#2482424


81
2018-03-20 09:13


Ursprung




Antworten:


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

IP-Buchsen (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-Domänen-Sockets wissen, dass sie auf demselben System ausgeführt werden, so dass sie einige Prüfungen und Operationen (wie 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: Wie per Nils Toedtmanns Kommentar: UNIX-Domänen-Sockets unterliegen Dateisystemberechtigungen, während TCP-Sockets nur auf der Paketfilterebene gesteuert werden können.


144
2018-03-20 09:39



Vielleicht hinzufügen, dass UNIX-Domain-Sockets unterliegen Dateisystem Berechtigungen, während TCP-Sockets nicht sind. Daher 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 kann man es Unix IPC anstelle von Unix Sockets nennen? - Pacerier
@Pacerier Unix-Sockets ist einfach eine Möglichkeit, Unix IPC (Shared Interprozess Speicher unter anderem) zu erreichen, so wäre es nicht korrekt, Unix-Sockets Unix IPC aufzurufen. - fyquah95
TCP-Sockets werden auch von Unix behandelt? TCP-Sockets sind Teil der TCP-Protokollspezifikation oder jedes Protokoll könnte IP-Sockets verwenden? - Federico
@Federico Ich habe eine Antwort geschrieben, die versucht, deine Frage zu beantworten. Wenn du mehr Tiefe brauchst, schreibe bitte eine neue Frage. - Peter Green


Sie können Ihre eigenen lokalen Unix-Sockets für Maschinen mit dem folgenden Befehl auflisten:

netstat -a -p --unix

Habe Spaß!


21
2018-03-20 13:49



Unix-Sockets existieren unter Windows nicht. netstat funktioniert jedoch unter Windows. - Mark Tomlin
@apache, ähnliches in Windows namens "Named Pipes". - expert
Benannte Pipes sind auch unter Linux vorhanden. - Sahil Singh
@expert, Named Pipes in Windows ist gleich Named Pipes in Unix. IPC-Sockets in Unix haben keine Entsprechung in Windows - Pacerier
Beachten Sie, dass Named Pipes nur jeweils einen Client gleichzeitig verbinden können (2 Prozesse kommunizieren insgesamt). Bei UNIX-Sockets, wie IP-Sockets, können mehrere Clients gleichzeitig verbunden sein, die jeweils getrennte Antworten erhalten. - peterflynn


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 empfangender 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 Erzeugung und Decodierung von TCP / IP-Paketen, auch wenn sich Client und Server auf demselben Rechner befinden.

Ein Unix-Domain-Socket (manchmal als Unix-Socket abgekürzt) arbeitet dagegen auf einem einzigen Rechner. Listening-Sockets leben in der Dateisystemhierarchie und der Zugriff darauf kann durch Dateisystemberechtigungen gesteuert werden.

Darüber hinaus kann ein Prozess, der eine Verbindung auf einem Unix-Socket akzeptiert, die Benutzer-ID des Prozesses ermitteln, der eine 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 einzufügen, können Sie dem Datenbankserver einfach 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

Internet-Protokoll-Spezifikationen neigen nur dazu, zu betreffen, was auf der Leitung geschieht, die TCP-Spezifikation enthält eine Definition von Socket, aber diese Definition ist nicht das Gleiche wie der Begriff von der "Sockets-API" verwendet wird.

Die "Socket-API", wie wir sie kennen, wurde von BSD eingeführt, wurde aber später überall kopiert und ist Teil des POSIX-Standards. Das grundlegende Zeug für TCP- und UDP-Sockets ist auf verschiedenen Plattformen sehr ähnlich, aber fortgeschrittenere Sachen und Dinge, die mit anderen Teilen des Betriebssystems interagieren, variieren zum Beispiel auf unixartigen Systemen, die ein Socket 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 irgendein Protokoll könnte IP Sockets verwenden?

Wenn eine Anwendung explizit einen Socket mit der Funktion "socket" erstellt (Sockets werden auch von der accept-Funktion erzeugt), übergibt sie drei Parameter, "domain", "type" und "protocol". Zusammen können diese drei Parameter verwendet werden, um viele verschiedene Arten von Sockeln auszuwählen.

  • Die Domäne wählt die verwendete Familie von Protokollen / Adressen aus, z. AF_INET für ipv4, AF_INET6 für ipv6, AF_Unix für Unix-Dateisystempfade usw.
  • type wählt die Kommunikationssemantik aus, die wichtigsten sind Datagramm und Datenstrom, aber es gibt auch andere speziellere Typen.
  • Das Protokoll 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.

3
2017-09-13 17:32