Sockets

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Allgemein

  • Ein Socket ist ein vom Betriebssystem bereitgestelltes Objekt, das als Kommunikationsendpunkt dient.
  • Ein Programm verwendet Sockets, um Daten mit anderen Programmen auszutauschen.
  • Das andere Programm kann sich dabei auf demselben Computer (Interprozesskommunikation) befinden oder auf einem anderen, über das Netzwerk erreichbaren Computer.
  • Die Kommunikation über Sockets erfolgt in der Regel bidirektional (Senden und Empfangen).

Funktionsprinzip

  • Sockets bilden eine plattformunabhängige Schnittstelle zwischen der Netzwerkprotokoll-Implementierung des Betriebssystems und der Anwendungssoftware.
  • Ein Computerprogramm fordert einen Socket vom Betriebssystem an; dieses verwaltet alle benutzten Sockets und Verbindungsinformationen.

Multiplexing und das 5-Tupel

  • Ein einzelner Server-Port kann tausende Verbindungen gleichzeitig bedienen.
  • Das Betriebssystem unterscheidet die Pakete anhand des 5-Tupels: {Quell-IP, Quell-Port, Ziel-IP, Ziel-Port, Protokoll}.
  • Solange ein Wert abweicht, wird das Paket einer eindeutigen Verbindung zugeordnet.

Internet-Sockets

  • Man unterscheidet Stream-Sockets (kontinuierlicher Datenstrom, meist TCP) und Datagram-Sockets (geschlossene Nachrichten, meist UDP).
  • Ein Socket repräsentiert die Verbindungsstelle durch Adressinformationen (IP und Port) sowohl der lokalen als auch der entfernten Seite.

Privilegierte Ports unter Unix/Linux

  • Ports von 0 bis 1023 sind privilegiert; nur Prozesse mit Root-Rechten dürfen diese binden.
  • Dies verhindert, dass unbefugte Benutzer Standard-Dienste (wie SSH oder HTTP) fälschen.

Server-Logik

  • Ein Server wartet auf Anfragen; bei Erfolg wird die Verbindung oft geklont (Forking), damit der Haupt-Socket weiter auf neue Anfragen warten kann.
  • Der geklonte Prozess bedient nur diesen einen Client, bis die Verbindung beendet wird.

Ephemeral Ports und TIME_WAIT

  • Clients nutzen zufällige, kurzlebige Ports (Ephemeral Ports) für ausgehende Verbindungen.
  • Nach dem Schließen verbleibt ein Socket oft kurz im Zustand TIME_WAIT, um verspätete Pakete der alten Verbindung abzufangen.

TCP Status

  • listening: Der Server wartet auf eingehende Anfragen; der Socket ist noch nicht fest verbunden.
  • connected: Eine konkrete Instanz einer Verbindung; ein Client wird aktiv bedient.

Die drei Arten von Sockets

TCP Sockets

  • Kombination aus IP-Adresse und Port, einem Service fest zugewiesen.
  • Nutzt eine etablierte Verbindung (Aufbau/Abbau).
  • Beispiel: tcp 192.168.4.1:80 LISTEN httpd

UDP Sockets

  • Kombination aus IP-Adresse und Port, verbindungslos.
  • Beispiel: udp 0.0.0.0:5353 avahi-daemon (0.0.0.0 bedeutet Bindung an alle lokalen IPs).

UNIX Sockets

  • Kommunikation lokaler Prozesse über eine spezielle Datei im Dateisystem.
  • Unterstützt sowohl "stream" als auch "datagram".
  • Beispiel: unix LISTENING /run/snapd.socket
  • Dateityp prüfen: ls -l /run/snapd.socket (Kennung 's' am Anfang: srw-rw-rw-).