kopf
brlogo
fensterobenrechts
   
   
fensteruntenblau
   
 
header
 

  bt_backward  bt_index  bt_forward

Was sind eigentlich Sockets?

 

Sockets sind sowohl ein Konzept als auch eine Software-Schnittstelle:

 

  • In den Gründerjahren des Internets wuchs das Bedürfnis für eine einheitliche und standardisierte Schnittstelle für die Rechnerkommunikation mittels TCP/IP.

  • Zu dieser Zeit existierte in der Unix-Welt das sogenannte Berkley Sockets-API (= Software-Paket) als Schnittstelle zwischen  Prozessen auf demselben oder verschiedenen Rechnern. Diese Schnittstelle basierte auf dem Socket-Konzept (siehe unten).

  • Für die restliche Welt, wurde dieses Konzept adaptiert. In der Windows-Welt entstanden verschiedene Versionen des WinSock-API (Application Programming Interface), eine Sammlung sämtlicher Routinen für die Rechnerkommunikation mittels IP Protokollen (z. B. TCP oder UDP). Früheren Windows-Versionen wurden die benötigten Dateien manuell (z. B. WinSock32) hinzugefügt, in neueren Versionen des Betriebsystems und insbesondere in  der "NT-Schiene" (Windows NT 3.1 bis Windows XP Pro) sind diese Routinen integraler Bestandteil des Betriebssystems.

 

Die Metapher

 

Der Name Socket (dt. Stecker) ist Programm:

  • Das Server-Programm besitzt einen "Stecker" (eigentlich eine Steckdose), in die dann sich ein Client-Programm "andocken" kann.
  • Der Client-Stecker wird beim Anmelden mit dem Server-Programm über diese Steckdose verbunden.
  • Durch das Verbindungskabel findet der Datenaustausch statt.

 

Lebenszyklus eines Sockets

 

Will ein Client-Prozess (Rechner, Programm ... ) mit einem Server-Prozess mittels solcher Sockets kommunizieren, muss er

  • einen Socket erzeugen,
  • dem Socket bei Bedarf einen eigenen Port zuweisen,
  • den Socket mit einem anderen (Server-) Socket verbinden,
  • Daten über diese Sockets austauschen,
  • den Socket am Ende der Kommunikation wieder schließen und freigeben.

Ein Server-Prozess muss nun, damit der Client ihn finden kann:

  • einen Socket erzeugen und öffnen,
  • diesem eine Adresse zuweisen (IP Adresse + Port-Nummer),
  • mit diesem auftretende Verbindungsanforderungen empfangen,
  • jedem Client, der sich anmeldet, einen weiteren Socket für die Kommunikation zur Verfügung stellen,
  • diesen speziellen "Verbindungs-Socket" wieder freigeben, wenn der Prozess endet..

Wird nun vom Server-Prozess eine solche Verbindungsanforderung empfangen, muss er also

  • einen weiteren Socket für die Datenkommunikation erzeugen,
  • mit diesem dann Daten zum Client senden oder Daten vom Client empfangen,
  • diesen Socket wieder entfernen, wenn die Kommunikation mit dem Client-Prozess beendet ist.
 

Vereinfachend kann man also sagen, dass ein Socket-Server sich von einem Socket-Client darin unterscheidet,

 

  • dass der Server-Prozess vor Kontaktaufnahme läuft und hierbei einen Socket für die Kontaktaufnahme zur Verfügung stellt, den der Client für seine Kontaktaufnahme ansprechen kann,
  • dass er ferner mehrere Sockets verwalten kann, damit er zeitgleich unterschiedliche Clients bedienen kann (z. B. Chat-Server).

 

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 (TCP Sockets = Transmission Control Portocol)
  • Datagrammsockets (UDP Sockest = User Datagramm Protocol)
 

 

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.

 

Das nachfolgende Schaubild soll noch einmal anhand verschiedener Prozesse die Einordnung der einzelnen Sockettypen in den Gesamtprozess verdeutlichen:

 

socket.10

       (Quelle: Microsoft Technischer Support)

 

Wie benutzt man Sockets und wie kommuniziert man über sie?

 

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.

socket.20

 

     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.

socket.30

 

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:

 

  • Anwendungen können  direkt auf den Windows-Socket (WinSock-API) aufsetzen, oder Komponenten verwenden, die ihrerseits die Funktionalität des WinSock-APIs verwenden.

  • Die Programmierumgebung von Delphi stellt mit der Datei WinSock.pas bzw. WinSock.dcu ein an Object-Pascal angepasstes zwischengeschaltetes API zur Verfügung.

  • In Delphi stehen ferner fertige Komponenten zur Verfügung (TServerSocket, TClientSocket), die die Verwendung der WinSock-Funktionalität in Form eines Steuerelement (Controls, Komponente der VCL) kapseln.

 

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

 

  bt_top  

 


(FvSG 30.1.2006)
 
 
Friday, 24. November 2017 / 10:23:40