Fachkonzept - Client-Server-System
Anbieter und Kunde
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. Dabei tauschen Client und Server drei speziell gekennzeichnete Pakete aus, was man sich wie eine Verabredung per Messenger vorstellen kann:
- "Können wir uns morgen um 18:00 Uhr im Kino treffen?" (SYN)
- "Ja, gute Idee." (SYN+ACK)
- "Also, dann bis morgen!" (ACK)
Im Detail läuft das 3-Wege-Handschlag-Verfahren folgendermaßen ab:
In einem ersten Schritt sendet der Client-Prozess ein SYN-Datenpaket ("SYNchronize sequence numbers"). In diesem Datenpaket wird dem Server-Prozess zur Synchronisation eine Anfangssequenznummer x mitgeteilt, von welcher ausgehend alle weiteren Pakete nummeriert werden, die der Client-Prozess in dieser TCP-Sitzung sendet.
In einem zweiten Schritt sendet der Server-Prozess dem Client-Prozess ebenfalls ein SYN-Datenpaket und eine eigene Anfangssequenznummer y. 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 ("ACKnowledgement").
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.