Informatik

Socket: Netzwerk-Endpunkte einfach erklärt

Socket: Netzwerk-Endpunkte einfach erklärt
Socket: Netzwerk-Endpunkte einfach erklärt
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

Ein Socket ist ein vom Betriebssystem verwalteter Kommunikationsendpunkt. Ein Programm nutzt ihn, um Daten an ein anderes Programm zu senden oder von ihm zu empfangen – auf demselben Rechner oder über ein Netzwerk.

Auf dieser Seite lernst du, wie IP-Adresse und Port einen Netzwerk-Socket adressieren, wie sich TCP- und UDP-Sockets unterscheiden und welche Schritte Client und Server ausführen.

Deine Lernziele

Hake ab, was du schon kannst — und komm am Ende hierher zurück!

Was ist ein Socket?

Stell dir zwei Programme vor, die Nachrichten austauschen sollen. Sie greifen nicht selbst auf Netzwerkkarte, Übertragungswege und sämtliche Protokolldetails zu. Stattdessen fordern sie beim Betriebssystem jeweils einen Socket an.

Definition

Socket

Ein Socket ist ein vom Betriebssystem bereitgestelltes Objekt, über das ein Prozess Daten sendet und empfängt. Ein Prozess ist ein gerade ausgeführtes Programm. Der Socket bildet die Schnittstelle zwischen der Anwendung und den Kommunikationsfunktionen des Betriebssystems.

Bei einer Netzwerkübertragung gibt die Anwendung ihre Daten am Socket ab. Das Betriebssystem verarbeitet sie in den darunterliegenden Protokollschichten. Auf dem Zielrechner läuft der Weg in umgekehrter Richtung, bis die Daten über den dortigen Socket die empfangende Anwendung erreichen.

Für die beiden Programme kann es dadurch so wirken, als seien ihre Sockets direkt miteinander verbunden. Tatsächlich liegen mehrere Kommunikationsschichten und möglicherweise viele Netzwerkgeräte dazwischen.

Merke

Der Socket ist nicht das gesamte Netzwerk und auch nicht das übertragene Datenpaket. Er ist der Endpunkt, über den ein Programm die Kommunikationsdienste des Betriebssystems nutzt.

Teste dich
Frage 1 von 1LeichtWelche Aussage beschreibt einen Socket am besten?
Lösung: Ein Socket ist ein vom Betriebssystem verwalteter Kommunikationsendpunkt für ein Programm. — Ein Socket stellt der Anwendung Funktionen zum Senden und Empfangen bereit. Die übertragenen Daten sind nicht selbst der Socket.
Wie finden Daten das richtige Programm?

Auf einem Rechner laufen meist viele Prozesse gleichzeitig. Deshalb genügt es nicht, nur den Zielrechner zu bestimmen. Die Daten müssen auch beim richtigen Kommunikationsendpunkt ankommen.

Definition

IP-Adresse und Port

Die IP-Adresse bezeichnet bei der Netzwerkkommunikation den Zielrechner beziehungsweise eine seiner Netzwerkschnittstellen. Der Port ist eine 16-Bit-Nummer, mit der das Betriebssystem den passenden TCP- oder UDP-Endpunkt und damit die zugehörige Anwendung zuordnet.

Eine typische Internet-Socket-Adresse besteht deshalb aus zwei Teilen:

  • IP-Adresse: Welcher Rechner beziehungsweise welche Schnittstelle?
  • Port: Welcher Kommunikationsendpunkt auf diesem Rechner?

Beispielsweise bezeichnet 192.168.0.1:5000 die IP-Adresse 192.168.0.1 und den Port 5000. Ein Client muss diese Serveradresse kennen. Seinen eigenen lokalen Port wählt das Betriebssystem häufig automatisch aus.

TCP-Ports und UDP-Ports bilden getrennte Namensräume. TCP-Port 5000 ist daher nicht derselbe Endpunkt wie UDP-Port 5000.

Beispiel

Ein Schulserver bietet einen TCP-Dienst unter 192.168.0.1:5000 an. Zwei Clients verbinden sich mit automatisch gewählten lokalen Ports:

  • Client A: 192.168.0.20:53110
  • Client B: 192.168.0.21:53111

Beide Verbindungen haben auf der Serverseite dieselbe IP-Adresse und denselben Port. Trotzdem kann das Betriebssystem sie unterscheiden, weil jede TCP-Verbindung durch beide Endpunkte gekennzeichnet ist: lokale IP und lokaler Port sowie entfernte IP und entfernter Port.

Teste dich
Frage 1 von 1MittelZwei Clients greifen gleichzeitig auf denselben TCP-Serverport zu. Warum werden ihre Verbindungen nicht verwechselt?
Lösung: Zu jeder Verbindung gehört eine eigene Kombination aus lokalem und entferntem IP-Port-Paar. — Eine konkrete TCP-Verbindung wird durch vier Angaben unterschieden: lokale IP, lokaler Port, entfernte IP und entfernter Port.
Wann passt TCP und wann UDP?

Sockets können unterschiedliche Kommunikationsarten verwenden. Besonders wichtig sind Stream-Sockets mit TCP und Datagramm-Sockets mit UDP.

TCP als geordneter Datenstrom

Ein TCP-Socket überträgt einen zuverlässigen, geordneten Byte-Datenstrom. Vor dem Datenaustausch wird eine Verbindung aufgebaut. TCP erkennt Übertragungsfehler und sorgt dafür, dass fehlende Daten erneut übertragen und in der richtigen Reihenfolge bereitgestellt werden.

Ein Byte-Datenstrom besitzt jedoch keine eingebauten Nachrichtengrenzen. Ein Aufruf wie recv(1024) bedeutet nur: Empfange bis zu 1024 Byte. Er garantiert nicht, dass genau eine vollständige Nachricht oder alle zuvor gesendeten Daten zurückgegeben werden. Die Anwendung braucht deshalb eine eigene Regel für Nachrichtengrenzen, etwa eine bekannte Länge oder ein eindeutiges Trennzeichen.

UDP als einzelne Datagramme

Ein UDP-Socket überträgt einzelne Datagramme, also abgegrenzte Nachrichten. Vorher ist kein TCP-artiger Verbindungsaufbau nötig. UDP garantiert jedoch weder Zustellung noch Reihenfolge. Datagramme können verloren gehen, doppelt eintreffen oder in anderer Reihenfolge ankommen.

Merke

TCP bietet einen zuverlässigen, geordneten Byte-Datenstrom, aber keine automatischen Nachrichtengrenzen. UDP erhält einzelne Datagramme, bietet dafür jedoch keine entsprechenden Zustell- und Reihenfolgegarantien.

Teste dich
Frage 1 von 2MittelEine Anwendung muss erkennen, wo jede Nachricht endet. Warum reicht bei TCP ein einzelnes recv(1024) nicht als Nachrichtenregel?
Lösung: TCP liefert einen Byte-Datenstrom; ein Empfangsaufruf kann weniger oder anders aufgeteilte Daten liefern als ein Sendeaufruf. — TCP bewahrt die Reihenfolge der Bytes, aber nicht die Grenzen einzelner Sendeaufrufe. Das Anwendungsprotokoll muss die Nachrichten rahmen.
Frage 2 von 2SchwerEine Anwendung kann gelegentlichen Verlust verkraften und möchte abgegrenzte Nachrichten ohne TCP-Verbindungsaufbau senden. Welche Wahl passt zum beschriebenen Modell?
Lösung: Ein UDP-Datagramm-Socket — UDP überträgt einzelne Datagramme ohne TCP-artigen Verbindungsaufbau, garantiert aber weder ihre Zustellung noch ihre Reihenfolge.
Wie bauen Client und Server eine TCP-Verbindung auf?

Beim Client-Server-Modell übernimmt der Server eine bekannte Adresse und wartet. Der Client beginnt den Verbindungsaufbau.

Ablauf auf der Serverseite

  1. socket() erzeugt einen Stream-Socket.
  2. bind() bindet ihn an eine lokale IP-Adresse und einen Port.
  3. listen() versetzt ihn in den Listening-Modus.
  4. accept() wartet auf einen Verbindungsversuch und liefert einen neuen Connected-Socket für diesen Client.
  5. Über den Connected-Socket werden Daten empfangen und gesendet.
  6. close() gibt den Kommunikations-Socket wieder frei.

Der ursprüngliche Listening-Socket bleibt für weitere Verbindungsversuche zuständig. Der von accept() gelieferte Socket dient dagegen der Kommunikation mit einem bestimmten Client. So kann ein Server mehrere Verbindungen unterscheiden und – mit zusätzlichen Threads, Prozessen oder asynchroner Verarbeitung – gleichzeitig bearbeiten.

Ablauf auf der Clientseite

  1. socket() erzeugt einen Stream-Socket.
  2. connect() erhält die IP-Adresse und den Port des Servers und startet den Verbindungsaufbau.
  3. Der Client sendet und empfängt Daten.
  4. close() schließt den Socket und gibt Ressourcen frei.
Beispiel

Ein Echo-Dienst läuft unter 127.0.0.1:5000. Die Adresse 127.0.0.1 verweist auf den eigenen Rechner.

Der Server führt socket → bind → listen → accept aus. Danach besitzt er weiterhin seinen Listening-Socket und zusätzlich einen Connected-Socket. Der Client führt socket → connect aus. Über die verbundenen Sockets sendet der Client die Bytes einer Nachricht; der Server sendet sie zurück. Beide Seiten müssen vereinbaren, wie eine vollständige Nachricht erkannt und wann die Verbindung beendet wird.

Teste dich
Frage 1 von 1MittelWas liefert accept() bei einem TCP-Server für eine angenommene Verbindung?
Lösung: Einen neuen Socket für die Kommunikation mit dem betreffenden Client — Der Listening-Socket kann weiter auf neue Verbindungen warten, während der neue Connected-Socket dem angenommenen Client zugeordnet ist.
Welche Grenzen und Fehler solltest du erkennen?

Kurze Lehrbeispiele zeigen oft nur den Grundablauf. Für echte Anwendungen fehlen dann noch wichtige Regeln.

  • Teilweiser Empfang: recv() kann weniger Daten liefern als erwartet. Die Anwendung muss weiter lesen und Nachrichtengrenzen selbst erkennen.
  • Teilweises Senden: Auch beim Senden muss die Anwendung sicherstellen, dass alle vorgesehenen Bytes verarbeitet wurden. Hilfsfunktionen wie sendall() können dies vereinfachen.
  • Leere Empfangsdaten: Bei TCP zeigt ein Empfang von null Byte an, dass die Gegenseite ihren Sendekanal geschlossen hat.
  • Blockieren: accept() und recv() können warten. Timeouts oder eine geeignete Nebenläufigkeit verhindern, dass das ganze Programm unbegrenzt feststeckt.
  • Ressourcen: Sockets müssen auch nach Fehlern geschlossen werden, damit Betriebssystemressourcen freikommen.
  • Sicherheit: Ein normaler TCP-Socket verschlüsselt Daten nicht automatisch. Vertrauliche Netzwerkkommunikation benötigt zusätzliche Schutzmechanismen wie TLS und eine passende Authentifizierung.
Gut zu wissen

Die Warteschlange eines Listening-Sockets und die Zahl gleichzeitig bearbeiteter Clients sind verschiedene Dinge. Der Parameter von listen() betrifft noch nicht angenommene Verbindungsversuche. Ob mehrere bereits angenommene Clients gleichzeitig bedient werden, hängt vom Aufbau des Serverprogramms ab.

Lokale Prozesse können statt einer Internetadresse auch einen Unix Domain Socket verwenden. Er wird durch einen Dateipfad wie /var/run/example.sock adressiert und vermeidet Teile des Netzwerk-Overheads. Diese Socket-Art ist vor allem auf Unix-artigen Systemen verbreitet.

Teste dich
Frage 1 von 1SchwerEin TCP-Client sendet eine lange Nachricht. Der Server ruft einmal recv(1024) auf und behandelt das Ergebnis sofort als vollständige Nachricht. Welches Problem besteht?
Lösung: Der Empfang kann nur einen Teil der Nachricht enthalten; der Server braucht eine Regel zum vollständigen Einlesen. — TCP liefert einen Strom von Bytes. Die Anwendung muss festlegen, woran Länge und Ende einer Nachricht erkannt werden.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • Socket
    • Aufgabe: verbindet Anwendung und Kommunikationsdienste des Betriebssystems
    • Adressierung: IP-Adresse und Port
    • TCP: verbundener, zuverlässiger und geordneter Byte-Datenstrom
    • UDP: einzelne Datagramme ohne Zustell- und Reihenfolgegarantie
    • Server: bind, listen und accept
    • Client: connect
    • Datenaustausch: senden, empfangen und Nachrichtengrenzen beachten
    • Abschluss: Socket schließen und Ressourcen freigeben
Abschluss-Check
Teste dich
Frage 1 von 3LeichtWelche Angabe ordnet eintreffende Netzwerkdaten dem passenden TCP- oder UDP-Endpunkt auf einem Rechner zu?
Lösung: Der Port — Die IP-Adresse führt zum Rechner beziehungsweise zur Schnittstelle; der Port bestimmt dort den TCP- oder UDP-Endpunkt.
Frage 2 von 3MittelWelche Reihenfolge beschreibt den grundlegenden Start eines TCP-Servers?
Lösung: socket → bind → listen → accept — Der Server erzeugt zuerst den Socket, bindet ihn an eine lokale Adresse, lauscht und nimmt anschließend eine Verbindung an.
Frage 3 von 3SchwerEin Server soll weiter neue TCP-Verbindungen annehmen, während ein Client bereits Daten austauscht. Welche Rollenverteilung ist dafür nötig?
Lösung: Der Listening-Socket wartet weiter; ein von accept() gelieferter Connected-Socket bearbeitet den bestehenden Client. — accept() liefert einen eigenen Kommunikations-Socket. Mit Threads, Prozessen oder asynchroner Verarbeitung kann der Server bestehende Clients bearbeiten und zugleich neue Verbindungen annehmen.

Wenn du Socket, IP-Adresse, Port, Transportart und Socket-Rolle auseinanderhalten kannst, kannst du den Weg einer Nachricht erklären und viele typische Fehler in einfachen Client-Server-Programmen gezielt diagnostizieren.

Passend dazu