Sockets: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| (5 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. |
| − | + | * Die Kommunikation über Sockets erfolgt in der Regel bidirektional (Senden und Empfangen). | |
| − | * Die Kommunikation über Sockets erfolgt in der Regel bidirektional | ||
| − | |||
= Funktionsprinzip = | = Funktionsprinzip = | ||
| − | * Sockets bilden eine plattformunabhängige | + | * 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 | + | |
| + | ==== 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 = | ||
| − | + | * Man unterscheidet Stream-Sockets (kontinuierlicher Datenstrom, meist TCP) und Datagram-Sockets (geschlossene Nachrichten, meist UDP). | |
| − | * Man unterscheidet | + | * Ein Socket repräsentiert die Verbindungsstelle durch Adressinformationen (IP und Port) sowohl der lokalen als auch der entfernten Seite. |
| − | |||
| − | |||
| − | |||
| − | |||
| − | * Ein Socket | ||
| − | |||
| − | = Server = | + | ==== Privilegierte Ports unter Unix/Linux ==== |
| − | * Ein Server wartet auf Anfragen | + | * 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 = | |
| − | * Der geklonte Prozess | + | * 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 = | = 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). | |
| − | |||
| − | |||
| − | |||
| − | ==TCP Sockets | ||
| − | |||
| − | * | ||
| − | |||
| − | * | ||
| − | |||
| − | |||
{{#drawio:tcp-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-).


