Title: Fachkonzept: Client-Server System
Course: Filius v1.05 > Section: Fachkonzepte

Ein Client-Server-System besteht aus zwei Kommunikationspartnern, einem Server, der bestimmte Dienste zur Verfügung stellt, und einem Client, der angebotene Dienste des Servers in Anspruch nimmt.

Ein Server kann auch mehrere Clients gleichzeitig bedienen.

Bei einer Client-Server-Anwendung nimmt ein Client Kontakt mit dem Server auf. Damit das auch möglich ist, muss der Server stets auf eine solche Kontaktaufnahme vorbereitet sein.

Auf Ebene der Transportschicht müssen Client und Server bei ihrer Kommunikation zwei Grundprobleme lösen: Der Aufbau einer Verbindung und die Regelung eines zuverlässigen Transports der einzelnen Datenpakete.

Aufbau einer Client-Server-Kommunikation

Das Drei-Wege-Handschlag-Verfahren wird auch bei Protokollen wie TCP zum Verbindungsaufbau zwischen einem Client und einem Server benutzt.

In einem ersten Schritt sendet der Client-Prozess ein SYN-Datenpaket (in dem ein spezielles SYN-Bit den Wert 1 hat). In diesem Datenpaket wird dem Server-Prozess auch eine Anfangssequenznummer mitgeteilt.

In einem zweiten Schritt sendet der Server-Prozess dem Client-Prozess ebenfalls ein SYN-Datenpaket und eine Anfangssequenznummer. Zudem bestätigt der Server-Prozess die Anfangssequenznummer x des Client-Prozesses, indem er die nächste erwartete Sequenznummer ACK=x+1 eines vom Client gesendeten Datenpakets zurückschickt.

In einem dritten Schritt antwortet der Client-Prozess mit einer Bestätigung der Anfangssequenznummer y des Server-Prozesses, indem er die nächste erwartete Sequenznummer ACK=y+1 eines Datenpakets vom Server zurückschickt.

Regelung eines zuverlässigen Datentransports

Beim Datenaustausch zwischen Client und Server kann jeder der beiden die Rolle des Senders annehmen. Das im folgenden beschriebene Protokoll zur Transportkontrolle ist an TCP angelehnt und behandelt vier Situationen, die beim Transport zwischen Sender und Empfänger auftreten können:

Situation 1: Wenn kein Datenpaket verloren geht, dann lässt sich der Datentransport wie im folgenden Sequenzdiagramm beschreiben.

Ein Sender verschickt Datenpakete an einen Empfänger. Die Datenpakete sind mit Sequenznummern durchnummeriert. Wenn der Empfänger ein Datenpaket erhält, dann schickt er eine Bestätigungsdatenpaket (ACK) mit der als nächstes erwarteten Sequenznummer an den Sender zurück. Der Sender schickt anschließend das nächste Datenpaket an den Empfänger.

Situation 2: Ein Datenpaket geht verloren. Der Empfänger kann in einem solchen Fall natürlich kein Bestätigungsdatenpaket an den Sender zurückschicken. Der Sender merkt das, indem er beim Versenden einen Timer startet und nach einer voreingestellten Wartezeit registriert, dass er immer noch keine Bestätigung für das gesendete Datenpaket erhalten hat. Der Sender schickt daraufhin eine Kopie des verlorengegangenen Datenpakets an den Empfänger.

Situation 3: Natürlich kann auch ein Bestätigungsdatenpaket verloren gehen. In diesem Fall erhält der Sender ebenfalls keine Bestätigung und verschickt noch einmal eine Kopie des Datenpakets an den Empfänger. Der Empfänger stellt an der Sequenznummer fest, dass er jetzt ein Duplikat eines Datenpakets erhalten hat. Er ignoriert das Datenpaket und sendet erneut ein Bestätigungsdatenpaket.

Situation 4: Es kann auch der Fall eintreten, dass ein Bestätigungsdatenpaket verzögert beim Sender eintrifft. Auch in diesem Fall wird das Datenpaket erneut verschickt. Der Empfänger erkennt das an der Sequenznummer und ignoriert das Datenpaket. Der Sender ignoriert zudem ein erneut erhaltenes Bestätigungsdatenpaket des Empfängers.