![]() |
Sockets sind sowohl ein Konzept als auch eine Software-Schnittstelle:
Die Metapher
Der Name Socket (dt. Stecker) ist Programm:
Lebenszyklus eines Sockets
Will ein Client-Prozess (Rechner, Programm ... ) mit einem Server-Prozess mittels solcher Sockets kommunizieren, muss er
Ein Server-Prozess muss nun, damit der Client ihn finden kann:
Wird nun vom Server-Prozess eine solche Verbindungsanforderung empfangen, muss er also
Definition Socket
Ein Socket ist ein
Kommunikationsendpunkt (ein Objekt), durch das
Datenpakete sowohl gesendet als auch empfangen werden (bidirektionaler
Datenfluss). Man unterscheidet dabei zwei verschiedene Typen von
Sockets:
|
Streamsockets
Sockets des Typen Streamsocket sind verbindungsorientiert und zuverlässig. Verbindungsorientiert bedeutet in diesem Fall, dass zwischen den beiden beteiligten Prozessen stets eine feste Verbindung gegeben ist. Diese feste Verbindung bei der Kommunikation gewährleistet, dass ein kontinuierlicher Datentransport in Form eines „Byte-Stroms“ vorhanden ist, was vor allem den Transport von besonders großen Datenmengen ermöglicht. Vergleichbar mit einer Standleitung, besteht die kontinuierliche Verbindung bis einer der beiden Kommunikationspartnern die Verbindung beendet und somit den Datenaustausch unterbricht.
Die Zuverlässigkeit der Streamsockets ergibt sich dadurch, dass bei jedem Datenaustausch die gesendeten Daten garantiert in der abgesendeten Reihenfolge ankommen. Die Kommunikation anhand der Steamsockets ist mit einem Telefonat zu vergleichen und ist den Datagrammsockets vorzuziehen wenn der Datenempfang unbedingt gewährleistet sein muss und große Datenmengen übertragen werden. Das Internet basiert z. B. auf diesem Sockettyp anhand des TCP/IP Protokolls.Datagrammsockets
Im Gegensatz zu den Streamsockets sind Datagrammsockets
verbindungslos und garantieren keine Zuverlässigkeit. Die Kommunikation
anhand der Datagrammsockets erfolgt anhand des Versand von Paketen. Da
zwischen den Kommunikationspartnern keine feste Verbindung besteht,
muss jedes verschickte Datenpaket mit der Adresse des Empfängers
versehen sein. Greift man beim Datenaustausch nun auf Datagrammsockets
zurück, so wird nur das Absenden der Datenpakete garantiert, der
Empfang und die richtige Reihenfolge können jedoch unter Umständen
fehlerhaft sein.
Ein Beispiel für die Verwendung von Datagrammsockets ist die Anfrage an einen Server: Erfolgt nach kurzer Zeit keine Antwort, so wird erneut ein Datenpaket, welches die Zieladresse beinhaltet, losgeschickt. Ein weiteres Beispiel für die Verwendung von Datagrammsockets ist die Synchronisierung vom Systemuhren im Netzwerk. Kurz formuliert liegt die Stärke von Datagrammsockets darin, eine Meldungsübertragung an eine große Anzahl an Netzwerkadressen zu gewährleisten.
Ports
Den einzelnen Prozessen werden bei beiden Sockettypen Ports
zugeordnet, dies sind Integer-Zahlen im Bereich 0...65535. Da die
beiden Sockets in unterschiedlichen Namensräumen liegen, kann eine
Port-Nummer gleichzeitig für TCP- und UDP Sockets verwendet werden.

(Quelle: Microsoft Technischer Support)
Um eine Socketverbindung aufzubauen und zu nutzen, muss zuerst ein Socket-Server eingerichtet werden. Das läuft in zwei Schritten ab.
1. Erst wird der Socket erstellt
und anschließend wird ihm eine Portnummer zugewiesen,
auf der er auf
eingehende Verbindungen wartet.
Danach unterscheidet sich der Ablauf abhängig davon, ob ein Streamsocket oder ein Datagrammsocket eingesetzt wird.
2.a) Bei einem Stream-Socket meldet sich ein Client an und teilt dem Server dabei seine IP Adresse und die Portnummer mit.
Dann besteht eine dauerhafte Verbindung und es können Daten in
beliebig vielen Lese- und Schreibzyklen ausgetauscht werden.
Anschließend wird die Verbindung beendet. Dabei ist sichergestellt,
dass alle Pakte eintreffen, da die Pakete durchnummeriert sind. Fehlt
also ein Paket, stellt der Server oder der Client das Überspringen einer
Nummer fest und kann darauf reagieren.

2.b) Bei einem Datagrammsocket findet keine Anmeldung statt.
Der Client schickt ohne Anmeldung sofort die zu Übertragenden Daten.
Durch diese Pakete bekommt der Server die IP Adresse und die Portnummer
mitgeteilt und kann gegebenenfalls dem Client antworten. Eine
Verbindung muss nicht beendet werden, da jedes Paket selbstständig und
ohne Kontrolle übertragen wird. Dadurch gehen allerdings leicht Daten
verloren, da weder Server noch Client feststellen können ob der jeweils
andere die Pakete erhalten hat.

Der Clientsocket muss ebenfalls zuerst erstellt werden. Dann muss ihm die IP Adresse und die Portnummer des Servers mitgeteilt werden, damit er sich dort anmelden (Streamsocket) bzw. direkt mit ihm kommunizieren kann (Datagrammsocket). Sind alle Daten ausgetauscht beendet der Client die Verbindung und kann wieder aus dem Speicher entfernt werden.
Sockets im Betriebssystem Windows
Die folgende Grafik verdeutlicht die Position dieses Windows-Sockets
im Schichtenmodell:

(Quelle: Lars Gollub, Messen, Steuern
und Regeln mit TCP/IP, Franzis' Verlag, Poing 2003)