# Client-Server-Modell

Das Client-Server-Modell (auch Client-Server-Konzept, -Architektur, -System oder -Prinzip genannt) beschreibt eine Möglichkeit, Aufgaben und Dienstleistungen innerhalb eines Netzwerkes zu verteilen. Die Aufgaben werden von Programmen erledigt, die in Clients und Server unterteilt werden. Der Client kann auf Wunsch einen Dienst vom Server anfordern (z. B. ein Betriebsmittel). Der Server, der sich auf demselben oder einem anderen Rechner im Netzwerk befindet, beantwortet die Anforderung (das heißt, er stellt im Beispiel das Betriebsmittel bereit); üblicherweise kann ein Server gleichzeitig für mehrere Clients arbeiten.

## Definitionen
### Server (deutsch: Bediener, Anbieter, Dienstleister, Bereitsteller, englisch: to serve)

    Ein Server ist ein Programm (Prozess), das mit einem anderen Programm (Prozess), dem Client (deutsch: Kunde), kommuniziert, um ihm Zugang zu einem Dienst zu verschaffen. Hierbei muss abgrenzend beachtet werden, dass es sich bei „Server“ um eine Rolle handelt, nicht um einen Computer an sich. Ein Computer kann nämlich ein Server und Client zugleich sein, siehe: Peer-to-Peer.

### Client (deutsch: Kunde, Dienstnutzer)

    Ein Client kann einen Dienst bei dem Server anfordern, der diesen Dienst bereitstellt.

### Protokoll

    Kommunikationsprotokoll, eine Vereinbarung wie die Datenübertragung zwischen den beiden Parteien Server und Client abläuft.

### Request (deutsch: Anforderung, Anfrage)

    Anforderung eines Clients an den Server, dessen Dienst er benötigt.

### Response (deutsch: Antwort)

    Antwort eines Servers auf eine Anforderung eines Clients.
Ähnlich, jedoch nicht zu verwechseln sind die Ausdrücke "Daemon" und "Service". Mit beiden ist ein Programm gemeint, das im Hintergrund läuft. Ein Server ist immer auch ein Daemon. Jedoch gibt es Daemonen die Clients sind, beispielsweise ein Programm das automatisch Backups macht, oder die Zeit auf einem Computer automatisch einstellt (ntpd, network time protocol daemon). Genauso gut können Daemonen und Services mit niemandem reden, also weder Client noch Server sein.

## Client-Server-Modell

Das Client-Server-Modell ist das Standardkonzept für die Verteilung von Aufgaben innerhalb eines Netzwerks. Aufgaben werden mittels Server auf verschiedene Rechner verteilt und können bei Bedarf von mehreren Clients zur Lösung ihrer eigenen Aufgaben oder Teilen davon angefordert werden. Bei den Aufgaben kann es sich um Standardaufgaben (E-Mail-Versand, E-Mail-Empfang, Web-Zugriff etc.) oder um spezifische Aufgaben einer Software oder eines Programms handeln. Eine Aufgabe wird im Client-Server-Modell als Dienst bezeichnet.
Ein Server ist ein Programm, das einen Netzwerkdienst anbietet. Im Rahmen des Client-Server-Konzepts kann ein anderes Programm, der Client, diesen Dienst nutzen. Die Kommunikation zwischen Client und Server ist abhängig vom Dienst, das heißt, der Dienst bestimmt, welche Daten zwischen beiden ausgetauscht werden. Der Server ist in Bereitschaft, um jederzeit auf die Kontaktaufnahme eines Clients reagieren zu können. Im Unterschied zum Client, der aktiv einen Dienst anfordert, verhält sich der Server passiv und wartet auf Anforderungen. Die Regeln der Kommunikation für einen Dienst (Format, Aufruf des Servers, Bedeutung der zwischen Server und Client ausgetauschten Daten), werden durch ein für den jeweiligen Dienst spezifisches Protokoll festgelegt.
Clients und Server können als Programme auf verschiedenen Rechnern oder auf demselben Rechner ablaufen. Allgemein kann das Konzept ausgebaut werden zu einer Gruppe von Servern (Software), die eine Gruppe von Diensten anbietet. Beispiele: Mail-Server, (erweiterter) Web-Server, Anwendungsserver, Datenbank-Server.
Da in der Praxis diese Server meist gesammelt auf bestimmten Rechnern laufen, hat es sich eingebürgert, diese Rechner selbst als Server zu bezeichnen. Die gleichen Beispiele: Mail-Server, Web-Server, Anwendungsserver, Datenbank-Server.
Im Unterschied zum Peer-to-Peer-Modell (dt.: "Gleiche zu Gleichen"), bei dem ein beteiligtes Programm innerhalb des Netzwerkes gleichzeitig Client und Server darstellt, sind beim Client-Server-Modell die Komponenten Client und Server getrennt und auf verschiedene Programme verteilt.

## Client-Server-System

Ein Client-Server-System ist eine Software (Anwendungssystem), welche für ihre Aufgaben und Funktionen vom Client-Server-Modell Gebrauch macht. Anders ausgedrückt wurde die Software so entwickelt, dass sie das Client-Server-Modell nutzen kann. Das System besteht daher mindestens aus zwei Teilen, einer Server- und einer Client-Komponente, die in der Regel auf verschiedenen Rechnern ablaufen.
Beispielhaft wird ein Client-Server-System mit zentralem Datenbankserver betrachtet. Das Client-Server-System bildet eine Netzwerkstruktur, bestehend aus dem zentralen Datenbankserver als Server-Komponente und mehreren Benutzer-Clients als Client-Komponente. Der Client bildet das Anwendungsprogramm, über dessen Benutzerschnittstelle der Benutzer über das Netzwerk auf Ressourcen des Datenbankservers zugreift. Er liest und pflegt die Daten in der Datenbank durch „Abschicken“ von SQL-Befehlen. Jeden SQL-Befehl sendet der Client als Anforderung an den Server, um diesen dort ausführen zu lassen. Das Ergebnis (Daten oder Fehlermeldung) liefert der Server als Antwort an den Client zurück.