Sockets: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(12 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=
 
*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.
 
*Das Betriebssystem hat die Aufgabe, alle benutzten Sockets sowie die zugehörigen Verbindungsinformationen zu verwalten.
 
  
=Internet-Sockets=
+
= Funktionsprinzip =
*Internet-Sockets ermöglichen die Kommunikation mittels bestimmter Kommunikationsprotokolle.
+
* Sockets bilden eine plattformunabhängige Schnittstelle zwischen der Netzwerkprotokoll-Implementierung des Betriebssystems und der Anwendungssoftware.
*Generell kann man unterscheiden zwischen Stream Sockets und Datagram Sockets
+
* Ein Computerprogramm fordert einen Socket vom Betriebssystem an; dieses verwaltet alle benutzten Sockets und Verbindungsinformationen.
*Stream Sockets kommunizieren über einen Zeichen-Datenstrom
 
*Datagramm Sockets über einzelne Nachrichten.
 
*In der Netzwerkkommunikation verwenden Stream Sockets meist TCP
 
*Datagramm Sockets üblicherweise UDP.
 
*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.
 
=Server=
 
*Ein Server wartet auf Anfragen auf einer oder mehrere Adresse warten
 
*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,
 
*Der geclonte Prozesse wird nur für die Kommunikation mit diesem einen Client verwendet
 
*Er bleibt solange bestehen, bis die Verbindung zum Client von einer der beiden Seiten beendet wird.  
 
*Unter Unix heisst diese Vorgehensweise Forking
 
=Status=
 
Es gibt nun 2 verschiende Zustände
 
==listening==
 
*Ein Server der auf eingehende Verbindungen wartet.
 
*Er ist konkret nicht verbunden.
 
*Dieser stellt nur die grundsätzlich Möglichkeit einer Verbindung bereit
 
  
==connected==
+
==== Multiplexing und das 5-Tupel ====
*Eine konkrete Instanz einer Verbindungsanfrage
+
* Ein einzelner Server-Port kann tausende Verbindungen gleichzeitig bedienen.
*Der Server Prozesss wurde geforkt
+
* Das Betriebssystem unterscheidet die Pakete anhand des 5-Tupels: {Quell-IP, Quell-Port, Ziel-IP, Ziel-Port, Protokoll}.
*Ein konkreter Client wird bedient.
+
* Solange ein Wert abweicht, wird das Paket einer eindeutigen Verbindung zugeordnet.
  
=Es gibt 3 Arten von Sockets=
+
= Internet-Sockets =
;Allgemein
+
* Man unterscheidet Stream-Sockets (kontinuierlicher Datenstrom, meist TCP) und Datagram-Sockets (geschlossene Nachrichten, meist UDP).
*[[TCP Sockets]]
+
* Ein Socket repräsentiert die Verbindungsstelle durch Adressinformationen (IP und Port) sowohl der lokalen als auch der entfernten Seite.
*[[UDP Sockets]]
 
  
;Unix spezifisch
+
==== Privilegierte Ports unter Unix/Linux ====
*[[UNIX Sockets]]
+
* 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).
 +
{{#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-).