IP Sockets vs Unix Domain Sockets - Unterschiede, Funktion, etc...

ServerSide

New Member
Hallo.

Ich habe die Anbindung an meinen PostgreSQL Server per Unix Domain Socket konfiguriert.
Das funktioniert auch Alles, aber ich hab das ganze Thema nicht so ganz vollumfänglich verstanden wie ich es gern würde. Wenn ich im Internet nach Unix Socket Tutorials suche, dann sind es fast immer nur C/C++ Programmier Tutorials. Vielleicht kann mir als jemand von Euch etwas Hilfestellung geben.
Ich fasse das was ich bisher zu verstehen glaube mal zusammen:

IP Sockets: Kommuniziert über das Loopback interface in TCP und UDP. Demnach kann ich es wahrscheinlich auch per Paketfilter einschränken (Wobei ich da den Nutzen jetzt nicht erkennen kann).

Unix Domain Sockets: Der entsprechende Service (hier: postgresql) erstellt eine Datei (hier: /var/run/postgresql/.s.PGSQL.5432) über die mit dem Service kommuniziert werden kann. Welches Protokoll wird hier verwendet?

Meine Schlussfolgerungen:
Daten über einen Unix Domain Socket müssen nicht erst intern über das Loopback interface geschickt werden und kann somit wohl etwas schneller kommunizieren.
Ausserdem fällt wohl auch der IP/TCP/UDP Overhead weg, was das ganze nochmal etwas schneller macht.

Ist dies soweit korrekt? Gibt es noch andere wichtige Dinge die ich nicht genannt habe?

Gibt es einen sicherheitsrelevanten Unterschied zwischen Unix Domain Sockets und einem IP-Socket bei dem man nur von localhost zugreifen kann (wie es beim postgresql Server der Fall ist)?

Und vor Allem eine Frage noch: Wieso ist in meiner postgresql Unix Domain Socket Datei die Portnummer des IP-Sockets inkludiert? Unix Domain Sockets haben - als "Datei" - doch keine Ports?

Vielen Dank schonmal!
 
Last edited by a moderator:

DeaD_EyE

Blog Benutzer
Hab hier etwas dazu gefunden: https://lists.freebsd.org/pipermail/freebsd-performance/2005-February/001143.html

Wenn ich es richtig verstandenen habe, braucht ein IP-Paket mindestens zwei Contextswitches bis es überhaupt gesendet wird. Unix Domain Sockets brauchen nur einen Contextswitch. Addressierung geschieht über das Dateisystem. Zugriffsberechtigung geschieht auch über das Dateisystem. Für IPC sind Unix Sockets ideal. Nach meinem Verständnis kannst du mit iptables Unix Domain Sockets nicht beeinflussen. WIeso jetzt der ProstgreSQL-Server den TCP-Port in den Namen des Unix Sockets integriert, weiß ich nicht. Vielleicht hat der Server die Fähigkeit mehrere Ports gleichzeitig zu öffnen. IPC ist schon was cooles.
 

.A.

Korrekt, mit PostgreSQL kannst Du mehrere Cluster (Instanzen) laufen lassen. Jeder Cluster benötigt einen eigenen Port bzw. einen eigenen Socket. Warum man den Port in den Socket integriert hat statt einen eigenen Parameter dafür zu implementieren, musst Du natürlich die Entwickler fragen (aber einfach zu konfigurieren ist das über diese Konvention schon).

--
.A.
 

Top