Rechnernetze
Home Nach oben

Client/Server-Paradigma

In einem Rechnernetzwerk können Anwendungsprozesse Information austauschen, wenn sie eine Verbindung aufgebaut haben (verbindungsorientiert) bzw. nachdem ein Prozess einem anderen unaufgefordert eine Nachricht sendet (verbindungslos). Dieses Konzept funktioniert aber nur, wenn zwei Prozesse gleichzeitig aktiv sind. Da das in realen Umgebungen nicht garantiert werden kann, werden Dienstprogramme bereitgestellt, die Server, welche stets bereit sind, eine Verbindung mit einem anderen Prozess, dem Client, aufzubauen bzw. von diesem unaufgefordert Daten entgegenzunehmen. Sind diese Daten nicht für den Server bestimmt, so wird er diese gegebenenfalls später auf Anfrage oder selbsttätig dem eigentlichen Empfänger zusenden, z.B. bei der elektronischen Post (E-Mail). Server können auch ständig Zugriff auf Datenbestände bzw. Datenbanken besitzen und Information auf Anfrage einem Client zur Verfügung stellen.

Da Server ständig bereit sein müssen, werden sie meist mit speziellen Betriebssystemen wie UNIX oder Windows NT betrieben. In der Regel müssen Server auch eine hohe Zuverlässigkeit und schnelle Reaktionszeiten trotz großer Anfragelast garantieren, so dass Server meistens auf schnellen, teuren Rechner mit großen Speichern arbeiten. Ein Server ist somit ein Dienst und nicht der Rechner, auf dem dieser Dienst bereitgestellt wird. Clients können jedoch auch auf Arbeitsplatzrechner (Workstation) oder PCs betrieben werden, die mit beliebigen anderen Betriebssystemen wie DOS, Windows, MacIntosh OS, BEOS usw. arbeiten. Da Server mit anderen Servern kommunizieren können, können sie sowohl in der Rolle eines Servers als auch eines Clients auftreten.

Server und Clients kommunizieren untereinander mit Transportprotokollen, welche auf anderen Protokollen wie IP, Ethernet usw. aufsetzen. Daher werden Server und Clients stets einen vollständigen Protokollstapel implementiert haben, heute meistens TCP/IP. In der Regel werden verschiedene Serverdienste wie E-Mail, Web-Server, FTP usw. auf dem gleichen Rechner betrieben. Zur Kennzeichnung des Dienstes müssen die Transportprotokolle über den gewünschten Dienst informiert werden, was beispielsweise über eine Kennzeichnung geschieht, bei TCP und UDP die Port-Nummer.

Server sind aktive Dienstprogramme, die auf eine Anfrage warten. Um das Rechensystem, auf dem mehrere Server betrieben werden, zu entlasten, gibt es meist nur einen speziellen Dienst, der bei einer Anfrage einen passenden Dienstprozess startet (in Unix z.B. inetd). Auf diese Weise laufen nur solche Dienstprozesse, die gerade benötigt werden; alle anderen belasten weder den Hauptspeicher noch die CPU. Um mehrere Dienstprozesse gleichen Typs von verschiedenen Clients gleichzeitig ausführen zu können, benennt das Betriebssystem in der Regel eine neue Portnummer, unter welche die jeweilige Verbindung betrieben werden muss; die allgemeine Portnummer ist danach wieder für weitere Clientaufrufe frei verfügbar.

Wenn ein Client einen Server aufruft, kann dieser Server einen anderen Server aufrufen, usw. Es können dadurch unbeschränkte Zyklen entstehen, die ein solches Serversystem lahm legen würden. Bei komplexen Diensten ist somit stets auf eine beschränkte Aufrufkette zu achten. Dieses kann z.B. durch eine Hierarchie von Servern geschehen, wie etwa beim DNS.

Beispiel

Ändert ein Client Daten in einem Dateiserver, so kann der Dateiserver die Zeit der Änderung verzeichnen und dazu einen Zeitserver aufrufen. Wurde der Zeitserver nun so verändert, dass er alle Anfragen (in einer Datei) aufzeichnet, so ruft er wiederum den Dateiserver auf, usw. Es kann eine Endlosschleife entstehen, die niemals abbricht.