Sockets: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 2: Zeile 2:
 
* Ein Socket ist ein vom Betriebssystem bereitgestelltes Objekt, das als Kommunikationsendpunkt dient.
 
* Ein Socket ist ein vom Betriebssystem bereitgestelltes Objekt, das als Kommunikationsendpunkt dient.
 
* Ein Programm verwendet Sockets, um Daten mit anderen Programmen auszutauschen.
 
* Ein Programm verwendet Sockets, um Daten mit anderen Programmen auszutauschen.
* Das andere Programm kann sich dabei auf demselben Computer (Interprozesskommunikation) befinden
+
* Das andere Programm kann sich dabei auf demselben Computer (Interprozesskommunikation) befinden oder auf einem anderen, über das Netzwerk erreichbaren Computer.
* Oder auf einem anderen, über das Netzwerk erreichbaren Computer.
+
* Die Kommunikation über Sockets erfolgt in der Regel bidirektional (Senden und Empfangen).
* Die Kommunikation über Sockets erfolgt in der Regel bidirektional.
 
* Über ein Socket können Daten sowohl empfangen als auch gesendet werden.
 
  
 
= Funktionsprinzip =
 
= Funktionsprinzip =
* Sockets bilden eine plattformunabhängige, standardisierte Schnittstelle zwischen der Netzwerkprotokoll-Implementierung des Betriebssystems und der Anwendungssoftware.
+
* Sockets bilden eine plattformunabhängige Schnittstelle zwischen der Netzwerkprotokoll-Implementierung des Betriebssystems und der Anwendungssoftware.
* Ein Computerprogramm fordert einen Socket vom Betriebssystem an.
+
* Ein Computerprogramm fordert einen Socket vom Betriebssystem an; dieses verwaltet alle benutzten Sockets und Verbindungsinformationen.
* Das Betriebssystem verwaltet alle benutzten Sockets sowie die zugehörigen 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 =
 
= Internet-Sockets =
* Internet-Sockets ermöglichen die Kommunikation über bestimmte Netzwerkprotokolle.
+
* Man unterscheidet Stream-Sockets (kontinuierlicher Datenstrom, meist TCP) und Datagram-Sockets (geschlossene Nachrichten, meist UDP).
* Man unterscheidet zwischen Stream-Sockets und Datagram-Sockets.
+
* Ein Socket repräsentiert die Verbindungsstelle durch Adressinformationen (IP und Port) sowohl der lokalen als auch der entfernten Seite.
* Stream-Sockets kommunizieren über einen kontinuierlichen Datenstrom.
 
* Datagram-Sockets über einzelne, in sich geschlossene Nachrichten.
 
* In der Netzwerkkommunikation verwenden Stream-Sockets meist TCP.
 
* Datagram-Sockets üblicherweise UDP.
 
* Ein Socket ist die Verbindungsstelle zu einem bestimmten entfernten Programm, repräsentiert durch dessen Adressinformation (z. B. IP-Adresse und Portnummer).
 
* Jedem Socket ist auch die eigene Adressinformation (lokale IP-Adresse und Portnummer) zugeordnet.
 
  
= Server =
+
==== Privilegierte Ports unter Unix/Linux ====
* Ein Server wartet auf Anfragen auf einer oder mehreren Adressen.
+
* Ports von 0 bis 1023 sind privilegiert; nur Prozesse mit Root-Rechten dürfen diese binden.
* Wenn der Server eine Anfrage von einem Client erhält, wird die Verbindung geklont, sodass der Server weitere Anfragen bedienen kann.
+
* Dies verhindert, dass unbefugte Benutzer Standard-Dienste (wie SSH oder HTTP) fälschen.
* Unter Unix heißt diese Vorgehensweise [[Prozesse Eltern und Kinder|Forking]].
+
 
* Der ursprüngliche Server-Socket bleibt erhalten und wartet weiterhin auf neue Verbindungen.
+
= Server-Logik =
* Der geklonte Prozess wird nur für die Kommunikation mit diesem einen Client verwendet.
+
* Ein Server wartet auf Anfragen; bei Erfolg wird die Verbindung oft geklont (Forking), damit der Haupt-Socket weiter auf neue Anfragen warten kann.
* Er bleibt bestehen, bis die Verbindung zum Client von einer der beiden Seiten beendet wird.
+
* 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 =
 
= TCP Status =
Es gibt zwei verschiedene Zustände:
+
* '''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.
  
== listening ==
+
= Die drei Arten von Sockets =
* Ein Server, der auf eingehende Verbindungen wartet.
 
* Er ist noch nicht verbunden.
 
* Dieser Socket stellt nur die grundsätzliche Möglichkeit einer Verbindung bereit.
 
  
== connected ==
+
== TCP Sockets ==
* Eine konkrete Instanz einer Verbindungsanfrage.
+
* Kombination aus IP-Adresse und Port, einem Service fest zugewiesen.
* Der Server-Prozess wurde geforkt.
+
* Nutzt eine etablierte Verbindung (Aufbau/Abbau).
* Ein konkreter Client wird bedient.
 
 
 
= Es gibt drei Arten von Sockets =
 
==TCP Sockets==
 
===Eigenschaften===
 
*Socket besteht aus einer Kombination von IP Adresse und Port
 
*Der Socket ist einem Service zu gewiesen
 
*Es wird eine Verbindung genutzt die etabliert wird
 
*Diese Verbindung wird auch wieder abgebaut
 
===Schaubild===
 
 
{{#drawio:tcp-sockets}}
 
{{#drawio:tcp-sockets}}
===Beispiel===
+
* '''Beispiel:''' tcp 192.168.4.1:80 LISTEN httpd
Der Socket mit der IP Adresse 192.168.4.1 und dem Port 80 ist dem Service named zugewiesen.
 
;<nowiki>tcp 192.168.4.1:80 LISTEN httpd</nowiki>
 
 
 
===UDP Sockets===
 
  
* [[UDP Sockets]]
+
== UDP Sockets ==
 +
* Kombination aus IP-Adresse und Port, verbindungslos.
 +
{{#drawio:udp-sockets}}
 +
* '''Beispiel:''' udp 0.0.0.0:5353 avahi-daemon (0.0.0.0 bedeutet Bindung an alle lokalen IPs).
  
; Unix-spezifisch
+
== UNIX Sockets ==
===UNIX Sockets===
+
* Kommunikation lokaler Prozesse über eine spezielle Datei im Dateisystem.
* [[UNIX Sockets]]
+
* Unterstützt sowohl "stream" als auch "datagram".
 +
{{#drawio:unix-socket}}
 +
* '''Beispiel:''' unix LISTENING /run/snapd.socket
 +
* '''Dateityp prüfen:''' ls -l /run/snapd.socket (Kennung 's' am Anfang: srw-rw-rw-).

Aktuelle Version vom 29. März 2026, 11:16 Uhr

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-).