Sockets: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(17 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
=Allgemein=
+
= Allgemein =
*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 einem anderen, via Netzwerk erreichbaren Computer befinden.
+
* Die Kommunikation über Sockets erfolgt in der Regel bidirektional (Senden und Empfangen).
*Die Kommunikation über Sockets erfolgt in der Regel bidirektional,
+
 
*Daten können über das Socket können Daten sowohl empfangen als auch gesendet werden.
+
= Funktionsprinzip =
=Allgemeines Funktionsprinzip=
+
* Sockets bilden eine plattformunabhängige Schnittstelle zwischen der Netzwerkprotokoll-Implementierung des Betriebssystems und der Anwendungssoftware.
*Sockets bilden eine plattformunabhängige standardisierte Schnittstelle zwischen der Netzwerkprotokoll-Implementierung des Betriebssystems und der eigentlichen Anwendungssoftware.  
+
* Ein Computerprogramm fordert einen Socket vom Betriebssystem an; dieses verwaltet alle benutzten Sockets und Verbindungsinformationen.
*Ein Computerprogramm fordert einen Socket vom Betriebssystem an.
+
 
*Das Betriebssystem hat die Aufgabe, alle benutzten Sockets sowie die zugehörigen Verbindungsinformationen zu verwalten.
+
==== Multiplexing und das 5-Tupel ====
=Internet-Sockets=
+
* Ein einzelner Server-Port kann tausende Verbindungen gleichzeitig bedienen.
*Internet-Sockets ermöglichen die Kommunikation mittels bestimmter Kommunikationsprotokolle.
+
* Das Betriebssystem unterscheidet die Pakete anhand des 5-Tupels: {Quell-IP, Quell-Port, Ziel-IP, Ziel-Port, Protokoll}.
*Generell kann man unterscheiden zwischen Stream Sockets und Datagram Sockets
+
* Solange ein Wert abweicht, wird das Paket einer eindeutigen Verbindung zugeordnet.
*Stream Sockets kommunizieren über einen Zeichen-Datenstrom
+
 
*Datagramm Sockets über einzelne Nachrichten.
+
= Internet-Sockets =
*In der Netzwerkkommunikation verwenden Stream Sockets meist TCP
+
* Man unterscheidet Stream-Sockets (kontinuierlicher Datenstrom, meist TCP) und Datagram-Sockets (geschlossene Nachrichten, meist UDP).
*Datagramm Sockets üblicherweise UDP.  
+
* Ein Socket repräsentiert die Verbindungsstelle durch Adressinformationen (IP und Port) sowohl der lokalen als auch der entfernten Seite.
*Ein Socket ist normalerweise die Verbindungsstelle zu einem bestimmten entfernten Programm, repräsentiert durch dessen Adressinformation (z. B. IP-Adresse und Portnummer).  
+
 
*Dem Socket selbst ist natürlich auch die eigene Adressinformation zugeordnet.
+
==== Privilegierte Ports unter Unix/Linux ====
=Server=
+
* Ports von 0 bis 1023 sind privilegiert; nur Prozesse mit Root-Rechten dürfen diese binden.
*Ein Server wartet auf Anfragen auf einer oder mehrere Adresse warten
+
* Dies verhindert, dass unbefugte Benutzer Standard-Dienste (wie SSH oder HTTP) fälschen.
*Wenn der Server eine Anfrage von einem Client erhält, wird praktisch die Verbinung geklont so das der Server weitere Anfragen bedienen kann.
+
 
*Der ursprüngliche Server-Socket bleibt erhalten und wartet weiterhin auf neue Verbindungen,
+
= Server-Logik =
*Der geclonte Prozesse 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 solange 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.
*Unter Unix heisst diese Vorgehensweise Forking
+
 
=Status=
+
==== Ephemeral Ports und TIME_WAIT ====
Es gibt nun 2 verschiende Zustände
+
* Clients nutzen zufällige, kurzlebige Ports (Ephemeral Ports) für ausgehende Verbindungen.
==listen==
+
* Nach dem Schließen verbleibt ein Socket oft kurz im Zustand TIME_WAIT, um verspätete Pakete der alten Verbindung abzufangen.
*Ein Server der auf eingehende Verbindungen wartet.
+
 
*Er ist konkret nicht verbunden.
+
= TCP Status =
*Dieser stellt nur die grundsätzlich Möglichkeit einer Verbindung bereit
+
* '''listening:''' Der Server wartet auf eingehende Anfragen; der Socket ist noch nicht fest verbunden.
==connectet==
+
* '''connected:''' Eine konkrete Instanz einer Verbindung; ein Client wird aktiv bedient.
*Eine konkrete Instanz einer Verbindungsanfrage
+
 
*Der Server Prozesss wurde geforkt
+
= Die drei Arten von Sockets =
*Ein konkreter Client wird bedient.
+
 
=Es gibt 3 Arten von Sockets=
+
== TCP Sockets ==
*[[TCP Sockets]]
+
* Kombination aus IP-Adresse und Port, einem Service fest zugewiesen.
*[[UDP Sockets]]
+
* Nutzt eine etablierte Verbindung (Aufbau/Abbau).
*[[Unix Sockets]]
+
{{#drawio:tcp-sockets}}
 +
* '''Beispiel:''' tcp 192.168.4.1:80 LISTEN httpd
 +
 
 +
== 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 Sockets ==
 +
* Kommunikation lokaler Prozesse über eine spezielle Datei im Dateisystem.
 +
* 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-).