Client-Server-Modell (Client-Server-Architektur)
Client-Server ist eine Beziehung, in der ein Programm (der Client) einen Dienst oder eine Ressource von einem anderen Programm (dem Server) anfordert. Um die Jahrhundertwende wurde die Bezeichnung Client-Server verwendet, um das verteilte Computing von Personal Computern (PCs) vom monolithischen, zentralisierten Computing-Modell von Großrechnern zu unterscheiden.
Heute sind Computertransaktionen, bei denen der Server eine von einem Client gestellte Anfrage erfüllt, sehr verbreitet und das Client-Server-Modell ist zu einer der zentralen Ideen des Netzwerk-Computing geworden. Dabei stellt der Client über ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), wie z. B. das Internet, eine Verbindung zum Server her. Sobald der Server die Anfrage des Clients erfüllt hat, wird die Verbindung beendet. Da sich mehrere Client-Programme die Dienste desselben Server-Programms teilen, kann ein spezieller Server, ein sogenannter Daemon, aktiviert werden, um auf Client-Anfragen zu warten.
In den Anfängen des Internets fand der meiste Netzwerkverkehr zwischen entfernten Clients, die Web-Inhalte anforderten, und den Servern im Rechenzentrum statt, die die Inhalte bereitstellten. Dieses Verkehrsmuster wird als Nord-Süd-Verkehr bezeichnet. Heute, mit der Reife von Virtualisierung und Cloud Computing, findet der Netzwerkverkehr eher von Server zu Server statt, ein Muster, das als Ost-West-Verkehr bezeichnet wird. Dies wiederum hat den Fokus der Administratoren von einem zentralisierten Sicherheitsmodell, das den Netzwerkrand schützen soll, zu einem dezentralisierten Sicherheitsmodell verändert, das sich mehr auf die Kontrolle des individuellen Benutzerzugriffs auf Dienste und Daten und die Überprüfung ihres Verhaltens konzentriert, um die Einhaltung von Richtlinien und Vorschriften zu gewährleisten.
Vor- und Nachteile des Client-Server-Modells
Ein wichtiger Vorteil des Client-Server-Modells ist, dass seine zentralisierte Architektur dazu beiträgt, den Schutz von Daten mit Zugriffskontrollen zu erleichtern, die durch Sicherheitsrichtlinien erzwungen werden. Außerdem spielt es keine Rolle, ob die Clients und der Server auf demselben Betriebssystem aufgebaut sind, da die Daten über Client-Server-Protokolle übertragen werden, die plattformunabhängig sind.
Ein wichtiger Nachteil des Client-Server-Modells ist, dass der Server überlastet werden kann, wenn zu viele Clients gleichzeitig Daten vom Server anfordern. Neben der Überlastung des Netzwerks können zu viele Anfragen zu einer Dienstverweigerung führen.
Client-Server-Protokolle
Clients kommunizieren typischerweise mit Servern unter Verwendung der TCP/IP-Protokollsuite. TCP ist ein verbindungsorientiertes Protokoll, d. h. eine Verbindung wird aufgebaut und aufrechterhalten, bis die Anwendungsprogramme auf beiden Seiten den Austausch von Nachrichten beendet haben. Es legt fest, wie die Anwendungsdaten in Pakete zerlegt werden, die von den Netzwerken übertragen werden können, sendet Pakete an die Netzwerkschicht und nimmt Pakete von ihr entgegen, verwaltet die Flusskontrolle und kümmert sich um die erneute Übertragung von verworfenen oder verstümmelten Paketen sowie um die Bestätigung aller ankommenden Pakete. Im Open Systems Interconnection (OSI)-Kommunikationsmodell deckt TCP Teile der Schicht 4, der Transportschicht, und Teile der Schicht 5, der Sitzungsschicht, ab.
Im Gegensatz dazu ist IP ein verbindungsloses Protokoll, was bedeutet, dass es keine fortlaufende Verbindung zwischen den Endpunkten gibt, die miteinander kommunizieren. Jedes Paket, das das Internet durchläuft, wird als eigenständige Dateneinheit behandelt, die in keiner Beziehung zu einer anderen Dateneinheit steht. (Der Grund dafür, dass die Pakete in die richtige Reihenfolge gebracht werden, ist TCP.) Im Open Systems Interconnection (OSI)-Kommunikationsmodell befindet sich IP in Schicht 3, der Netzwerkschicht.
Andere Modelle für Programmbeziehungen
Andere Modelle für Programmbeziehungen umfassen Master/Slave und Peer-to-Peer (P2P). Im P2P-Modell kann jeder Knoten im Netzwerk sowohl als Server als auch als Client fungieren. Im Master/Slave-Modell steuert ein Gerät oder Prozess (bekannt als Master) ein oder mehrere andere Geräte oder Prozesse (bekannt als Slaves). Sobald die Master/Slave-Beziehung etabliert ist, ist die Richtung der Steuerung immer eine Richtung, vom Master zum Slave.