Funktionsweise des Terminalservers für Windows Server 2003

Ein Terminalserver entspricht im Wesentlichen dem regulären Windows Server-Betriebssystem, mit der Ausnahme, dass in Terminalserverumgebungen Schlüsselkomponenten hinzugefügt oder geändert wurden, um Unterstützung für mehrere Benutzer gleichzeitig bereitzustellen.

Microsoft Windows war schon immer ein „Mehrbenutzer“ -Betriebssystem in dem Sinne, dass mehrere Benutzer zu einem bestimmten Zeitpunkt mit einem einzelnen Server verbunden werden konnten. Diese Benutzer waren jedoch mit Dateidiensten oder Druckerdiensten auf den Servern verbunden. Sie führten ihre lokalen Windows-Schnittstellen auf ihren lokalen Computern aus, und der Server unterstützte nur eine Desktop-Schnittstelle über die lokale Tastatur, Maus und den Monitor. Der Hauptunterschied zum Terminalserver besteht darin, dass mehrere Benutzer ihre eigenen Windows-Desktopsitzungen auf dem Server ausführen können. Der Terminalserver ist also „Mehrbenutzer“ in dem Sinne, dass er mehrere Desktop-Schnittstellen unterstützt. Einige Leute betrachten dies gerne als eine „Fernsteuerungs“ -Umgebung, mit der Ausnahme, dass der Terminalserver viele Benutzer gleichzeitig „fernsteuern“ kann, wobei jeder Benutzer etwas völlig anderes tut.

Damit Terminal Server mehrere Benutzersitzungen unterstützt, mussten einige Änderungen an der regulären Microsoft Windows Server-Software vorgenommen werden. Es gibt zwei grundlegende Unterschiede zwischen einem normalen Windows-Server und einem mit installiertem Terminalserver:

  • Wenn Terminalserver auf einem Windows 2003-Server installiert ist, werden bestimmte Kernkomponenten des Windows-Betriebssystems geändert, um mehrere gleichzeitige Benutzeroberflächen zu unterstützen. Beispielsweise werden der virtuelle Speichermanager und der Objektmanager so modifiziert, dass sie mehrere gleichzeitige Desktop-Schnittstellen unterstützen, ohne verwirrt zu werden. Dies sind wichtige Änderungen, bei denen Sie das System nach der Installation des Terminalservers neu starten müssen.
  • Bei der Installation des Terminalservers werden neue Dienste und Komponenten hinzugefügt, die es dem Server ermöglichen, mehrere Benutzersitzungen zu unterstützen. Der wichtigste davon ist der Dienst „Terminal Server“. Dieser Dienst, der tief im Server ausgeführt wird, ist für die Verbindung der mehreren Benutzersitzungen mit dem Betriebssystem verantwortlich. Es ist auch für Funktionen wie das Erstellen von Sitzungen, das Empfangen von Benutzern und das Beenden von Sitzungen verantwortlich.

Terminalserver-Komponenten

Obwohl es scheint, dass der Terminalserver im Grunde ein verherrlichtes pcAnywhere-System ist, ist es tatsächlich ein komplexes System, das aus mehreren verschiedenen Komponenten, Subsystemen und Schnittstellen besteht. Ein vollständigeres Diagramm der Terminalserverkomponenten ist in Abbildung 2.1 dargestellt. Beziehen Sie sich darauf, wenn Sie die nächsten Abschnitte lesen, in denen die einzelnen Komponenten beschrieben werden, aus denen Windows 2003 Terminal Server besteht.

Abbildung 2.1: Terminal Server 2003-Komponenten

Der Windows Server 2003-Kernel

Sie werden sich daran erinnern, dass eine Schlüsselkomponente jeder serverbasierten Computerumgebung ein Mehrbenutzer-Betriebssystem ist. In Windows Server 2003 wird dieses System vom Kernel gesteuert.

Windows Server 2003 benötigt eine Möglichkeit, kritische Betriebssystemkomponenten von allen verrückten Benutzern zu distanzieren. Um dies zu erreichen, arbeiten Windows-Prozesse in einem von zwei Modi: Benutzermodus oder Kernelmodus. Wenn Sie an Ihre Windows NT-Schulung zurückdenken, werden Sie sich daran erinnern, dass eine Anwendung im Benutzermodus nicht direkt in den Betriebssystemspeicher schreiben kann. Stattdessen hat es vollen Zugriff auf seinen eigenen 4GB-Speicherplatz. Eine Betriebssystemkomponente namens Virtual Memory Manager (die selbst im Kernelmodus ausgeführt wird) steuert all dies und schreibt im Namen der Anwendung im Benutzermodus in den Systemspeicher.

In Terminalserverumgebungen ermöglicht die Trennung von Benutzermodus- und Kernelmodusanwendungen dem System, die Benutzer zu trennen und zu isolieren. Der Absturz einer Benutzeranwendung wird nicht das gesamte System lahmlegen. (Natürlich denken Sie, dass ein Anwendungsabsturz ein System zum Erliegen bringen kann, dies ist jedoch normalerweise an Gerätetreiber gebunden, die im Kernelmodus ausgeführt werden.)

In „Standard“ (d. H. Nicht-Terminalserver) Windows-Umgebungen, in denen sich nur ein einzelner Benutzer interaktiv anmeldet, leben alle Prozesse im Kernelmodus glücklich zusammen in einem Speicherbereich und Namespace. In Mehrbenutzerumgebungen wie Terminalserver funktioniert diese Freigabe jedoch nicht, da Anforderungen aus verschiedenen Benutzersitzungen miteinander in Konflikt geraten können. Der Kernel auf einem Terminalserver ist folglich Multi-Session-fähig; es hält die Sitzung jedes Benutzers mit isolierten Prozessen und Speicher getrennt. Windows Server 2003 nimmt einige Änderungen am Kernel vor, wenn die Terminalserverkomponente installiert wird, um dies zu erreichen.

Zunächst legt der Server einen Teil des Speicheradressraums des Kernels in den virtuellen Speicher. Auf diese Weise können widersprüchliche Anforderungen in einer Einzelbenutzerumgebung in der Mehrbenutzerumgebung ordnungsgemäß verarbeitet und mehrere Instanzen von Gerätetreibern im Kernelmodus von mehreren Benutzern geladen und verwendet werden (der Grund, warum ein Benutzer dies tun kann) technisch das gesamte System zum Absturz bringen).

Einige Systemprozesse sind nicht sitzungsspezifisch, was bedeutet, dass alle Benutzer in allen Sitzungen Zugriff auf sie benötigen. Diese Prozesse werden in einem einzigen (globalen) Speicherbereich gespeichert, der von allen Benutzern gemeinsam genutzt wird.

Ein Nebeneffekt der Freigabe solcher Prozesse in einer Terminalserver-Umgebung besteht darin, dass Sie manchmal auf Prozesse stoßen, die nicht „sitzungsbewusst“ sind.“ Ein potenzielles (und irgendwie lustiges) Ergebnis können Fehlermeldungen sein, die auf der Serverkonsole von Anwendungen angezeigt werden, die in einer Benutzersitzung ausgeführt werden. Da sich normalerweise niemand im Serverraum befindet, der die Nachricht bestätigt, besteht die Möglichkeit, die Fortsetzung der Anwendung eines Benutzers zu verhindern.

Der Terminaldienste-Dienst

„Der Terminaldienste-Dienst“ bezieht sich auf einen regulären Windows-Dienst (Start | Verwaltung | Dienste) mit dem Namen „Terminaldienste. In der realen Welt wird es normalerweise als „Terminaldienst“ bezeichnet, und sie verwenden den Begriff „Terminalserver“, wenn sie sich auf einen Windows-Server beziehen, auf dem der Terminaldienst ausgeführt wird.

Wenn der Mehrbenutzerkernel die Grundlage für serverbasiertes Computing in Windows Server 2003 ist, ist der Terminaldienst der Eckpfeiler. Dieser Dienst (geladen über termserv.dll) wird direkt geladen, nachdem der Kernel online gegangen ist. Nachdem die Konsole des Servers (Tastatur-, Video- und Maustreiber) geladen wurde, initiiert der Terminaldienst das Session Manager Subsystem (smss.exe) verantwortlich für die Verwaltung und Verfolgung aller Benutzersitzungen auf dem Server.

Terminalserver-Sitzungen

Jedes Mal, wenn sich ein Benutzer am Terminalserver anmeldet, wird eine neue Sitzung erstellt. Eine Sitzung besteht im Wesentlichen aus einem virtuellen Desktop, von dem aus der Benutzer Anwendungen ausführen kann und mit dem er wie mit einer Workstation interagieren kann. Eine Serversitzung sollte nicht mit der Serverkonsole verwechselt werden, da eine Sitzung keine Fernbedienung der Konsole ist, sondern tatsächlich ein neuer Desktop, der von der Konsole getrennt ist.

Jedes Mal, wenn ein Benutzer eine Verbindung zu einem Terminalserver herstellt und diesen „virtuellen Desktop“ erstellt, wird eine eindeutige Sitzungs-ID-Nummer erstellt, um den Benutzer (und damit die Prozesse des Benutzers) von allen anderen Sitzungen und Benutzern zu unterscheiden. Sitzungs-IDs ermöglichen es dem Server auch, den Speicher für die Sitzung jedes Benutzers getrennt zu halten. Wenn sich ein Benutzer von einem Terminaldienste-Client abmeldet, wird die verwendete Sitzung gelöscht und die Prozesse und der Speicher, die von dieser Sitzung gestartet und verwendet wurden, werden entfernt. Jeder Terminalserver verfolgt seine eigenen Sitzungs-IDs und übernimmt die Aufgabe, sie auszugeben, zu verfolgen und zu entfernen.

Da Serversitzungen „virtuell“ sind (und Speicher und Prozesse zwischen den Sitzungen getrennt gehalten werden), sollte ein Anwendungsabsturz oder -abbruch in einer Sitzung keine Auswirkungen auf andere Benutzersitzungen haben, selbst wenn andere Benutzer dieselbe Anwendung verwenden.

Der Schlüsselbegriff hier lautet jedoch „sollte andere Benutzer nicht betreffen“. Obwohl Benutzersitzungen auf einem Server getrennt sind, teilen sie immer noch Serverressourcen und bestimmte Codesegmente. Wenn ein Benutzer einen Prozess aufruft, der den Server zum Bluescreen veranlasst, hat dies offensichtlich Auswirkungen auf die anderen Benutzer. Auf der anderen Seite werden einfache Ereignisse wie eine Anwendung, die an einer zeitüberschreitenden Anforderung hängt, oder Microsoft Word, das abstürzt, wenn ein Benutzer ein beschädigtes Dokument öffnet, von den anderen Benutzern (innerhalb ihrer eigenen Sitzungen) auf dem System nicht gesehen.

Sitzungszustände

Da eine Sitzung wirklich der Desktop eines Benutzers ist, kann sich eine Sitzung manchmal in verschiedenen Zuständen befinden, ähnlich wie eine normale Workstation. Wenn sich beispielsweise ein Benutzer für einen bestimmten Zeitraum von seiner Workstation entfernt, wird die Workstation nicht ausgeschaltet. Es ist vielmehr nur im Leerlauf und wartet auf Benutzereingaben. Terminalserversitzungen verhalten sich weitgehend gleich und können sich je nach Aktivität (oder Inaktivität) des Benutzers, Konnektivität zwischen Client und Server und Sitzungszeitüberschreitungseinstellungen in einem von mehreren verschiedenen Zuständen befinden.

Abbildung 2.2: Jeder Terminalserver verwaltet viele separate Benutzersitzungen

Alle Benutzersitzungen auf einem Terminalserver müssen sich in einem der folgenden sechs Zustände befinden:

  • Active ist ein Live- und aktiver Benutzer. Der Benutzer interagiert mit der Terminalserversitzung und hatte keine Zeit der Inaktivität oder einer Netzwerktrennung vom Server. Dies ist der „normale“ Zustand einer Sitzung.
  • Idle ist der Zustand, in den eine Sitzung übergeht, wenn der Benutzer für einen bestimmten Zeitraum keine Eingaben vornimmt.
  • Getrennte Sitzungen treten auf, wenn die Prozesse und Programme einer „Live“ -Sitzung ausgeführt werden, aber kein RDC-Client verbunden ist. (Wenn Sie das erste Kapitel übersprungen haben, ist „RDC-Client“ der neue Name für den RDP-Client.) Die häufigste Ursache ist eine Netzwerktrennung oder wenn ein Benutzer auf das „X“ in der oberen rechten Ecke seiner RDC-Client-Software klickt. Ein Benutzer kann sich wieder mit seiner getrennten Sitzung verbinden, um sie wieder in einen „aktiven“ Zustand zu versetzen (und seine Arbeit dort fortzusetzen, wo er aufgehört hat). Stellen Sie sich eine getrennte Sitzung wie eine gesperrte Workstation vor, mit der Ausnahme, dass der Benutzer seine Workstation von jedem Computer im Gebäude aus „entsperren“ kann.
  • Verbundene Sitzungen befinden sich in einem Zustand, in dem ein Clientgerät mit einer Serversitzung verbunden ist, aber kein Benutzer angemeldet ist, ähnlich wie die Eingabeaufforderung STRG +ALT+ENTF auf einer Workstation.
  • Down ist ein temporärer Zustand, in dem eine Sitzung beendet wird und Prozesse innerhalb der Sitzung beendet werden. Down ist der Endzustand einer Sitzung, bevor sie endet.
  • Listen ist ein Zustand, der nur an Listener-Ports angezeigt wird, die bereit sind, eingehende Verbindungen zu akzeptieren. Dieser Status gilt nicht für reguläre Sitzungen. Es gilt vielmehr für die auf dem Server ausgeführten Prozesse, die auf neue Sitzungsverbindungsanforderungen warten (warten).

In den meisten Umgebungen konfigurieren Administratoren Sitzungen mit verschiedenen Zeitüberschreitungen. Sie können die Zeit begrenzen, die eine einzelne Sitzung geöffnet sein kann, oder Sie können eine inaktive Sitzung automatisch in eine getrennte Sitzung konvertieren. Timeouts helfen dabei, die Zeit zu begrenzen, die der Server mit der Ausführung von Prozessen für Benutzer verbringt, die wirklich nicht auf dem Server arbeiten. Wir werden die genauen Techniken und Strategien zur Konfiguration dieser später in diesem Buch behandeln.

Verbindungsports und Listener

Die RDP-Sitzung jedes Benutzers stellt über einen Verbindungsport eine Verbindung zum Terminalserver her. Ein Verbindungsport (im Allgemeinen nur als „Verbindung“ bezeichnet) ist ein virtueller Port auf dem Server, der einer bestimmten Netzwerkkarte und Protokollkombination zugeordnet ist.

Ein Terminalserver-Verbindungsport wird automatisch erstellt, wenn die Terminalserver-Komponente installiert wird. Standardmäßig kann jeder Benutzer in der Gruppe „Remotedesktopbenutzer“ über eine beliebige Netzwerkkarte eine Verbindung zu Terminalserversitzungen auf dem Server herstellen. Obwohl der Standardverbindungsport mit jeder Netzwerkkarte mit installiertem TCP / IP funktioniert, sind Terminalserver-Verbindungsports wirklich netzwerkkartenspezifisch. Sie können einen Server mit mehreren Netzwerkkarten so konfigurieren, dass er über mehrere Terminalserver-Verbindungsports verfügt — einen für jede Karte. Tatsächlich kann jede Verbindung völlig unterschiedliche Eigenschaften und Berechtigungen haben.

Abbildung 2.3: Ein Terminalserver mit mehreren Verbindungsports

Terminalserververbindungen und die zugehörigen Listener können an zwei Stellen konfiguriert werden. Die erste ist über das MMC-Snap-In Terminal Services Configuration (TSC). Mit dem TSC können Sie Optionen für RDP-basierte Terminalserververbindungen konfigurieren, z. B. Einstellungen, Berechtigungen und die Netzwerkkarte, über die eine Verbindung gültig ist. Die zweite Möglichkeit zum Konfigurieren von Terminalserververbindungen besteht in einem Active Directory-Gruppenrichtlinienobjekt (GPO) in einer Windows 2003-Domäne. Mit dieser Funktion können Sie Verbindungen für mehrere Server zuweisen, die in einer Organisationseinheit in Active Directory enthalten sind.

Listener

Jeder Terminalserver-Verbindungsport verfügt über eine Unterkomponente, die als „Listener“ bezeichnet wird. Die Listenerkomponente „hört“ auf eine bestimmte Netzwerkkarte und Protokollkombination, für die der Verbindungsport konfiguriert ist. Wenn ein Benutzer eine neue Sitzung auf dem Server einrichten möchte, verwendet er seine RDC-Clientsoftware, um den Server zu kontaktieren. Der Listener des Servers nimmt die Clientanforderung auf und leitet sie an den Sitzungsmanager weiter. Der Listener wartet dann wieder auf weitere Verbindungsanforderungen.

Virtuelle Kanäle

Wie bereits erwähnt, ist das RDP-Protokoll von Microsoft, das auf TCP / IP ausgeführt wird, das eigentliche Protokoll, das Benutzer mit Serversitzungen verbindet. Wir haben auch erwähnt, dass dieses Protokoll mehr als nur reine virtuelle Desktops unterstützen kann. Mit RDP kann Remote-Sitzungsaudio vom Server zu den Lautsprechern des Client-Geräts geleitet werden. Außerdem können Geräte, die an die seriellen Anschlüsse des Clients angeschlossen sind, so aussehen, als wären sie an den Server angeschlossen. Diese „Extras“ sind über die virtuellen Kanäle von RDP verfügbar. Ein virtueller Kanal ist einfach ein Mechanismus, um Daten zwischen einer Terminalserversitzung und einem Client hin und her zu verschieben. Standardmäßig enthält das RDP-Protokoll auf Terminal Server 2003 mehrere virtuelle Kanäle.

  • Ton: In der Serversitzung generierte Klangereignisse werden über das RDP-Protokoll an das RDC-Clientgerät umgeleitet, wo sie auf den Lautsprechern des Clients abgespielt werden.
  • Clientlaufwerke: Lokale Laufwerke auf dem Clientgerät werden dem Server zur Verfügung gestellt, sodass Benutzer innerhalb ihrer Remotesitzungen sowohl auf Serverlaufwerke als auch auf ihre lokalen Clientgerätlaufwerke zugreifen können.
  • Drucker: Drucker, die dem Clientgerät vor dem Start einer Sitzung auf einem Terminalserver zur Verfügung stehen, werden Benutzern innerhalb ihrer Serversitzungen zur Verfügung gestellt. Benutzer können dann auf ihren Standard-Windows-Druckern drucken, einschließlich Druckern, die direkt an ihre Clientgeräte angeschlossen sind.
  • Serielle Ports: Der virtuelle Kanal der seriellen Schnittstelle ermöglicht den Zugriff auf Geräte, die an die serielle Schnittstelle eines Client-Geräts angeschlossen sind, über dessen Remote-Terminalserver-Sitzungen.
  • Windows-Zwischenablage: Um lokale Anwendungen in Remote-Terminalserver-Sitzungen zu integrieren, synchronisiert der virtuelle Windows-Zwischenablage-Kanal den Inhalt der Zwischenablage des Remote-Terminalservers mit dem Inhalt der Zwischenablage des Clientgeräts. Benutzer können nahtlos zwischen lokalen und Remote-Anwendungen ausschneiden und einfügen.

Wenn virtuelle Standardkanäle nicht Ihren Anforderungen entsprechen, enthalten MSDN und die Windows Server 2003-SDKs Informationen zum Schreiben eigener benutzerdefinierter virtueller Kanäle. Ein virtueller Kanal ist eine Kombination aus zwei Komponenten — einer clientseitigen Komponente und einer serverseitigen Komponente. Beide können Daten über den virtuellen Kanal senden und empfangen, was eine ein- oder bidirektionale Kommunikation ermöglicht. Virtuelle Kanäle können auch RDP-unabhängig sein, was bedeutet, dass Sie sie an Ihre Umgebung anpassen können, ohne die tatsächliche Client- oder Serversoftware zu aktualisieren oder zu ändern.

Warum der ganze Fokus auf virtuelle Kanäle? Obwohl dies kein Entwicklerbuch ist und Sie wahrscheinlich nie Ihren eigenen virtuellen Kanal entwickeln werden, ist es wichtig, dass Sie verstehen, wie sie funktionieren. Nahezu jedes Add-On-Produkt eines Drittanbieters für Terminal Server verwendet virtuelle Kanäle. Wenn Sie wissen, wie virtuelle Kanäle funktionieren, können Sie Fehler bei Produkten von Drittanbietern beheben, auf die Sie in Ihrer Terminalserver-Karriere zweifellos stoßen werden.

Lassen Sie uns nun einen letzten Blick auf die Architektur eines virtuellen Kanals werfen. Siehe Abbildung 2.4.

Abbildung 2.4: Virtuelle Kanalarchitektur von Terminal Server 2003

Die serverseitige virtuelle Kanalkomponente ist normalerweise eine ausführbare Datei, die auf dem Terminalserver ausgeführt wird. Diese Komponente muss eine Komponente im Benutzermodus sein, da der Server die Sitzungs-ID verwendet, um zu bestimmen, an welche clientseitige Sitzung er Daten senden und von der er Daten empfangen soll.

Die clientseitige virtuelle Kanalkomponente ist normalerweise eine DLL, die von Microsoft, dem Drittanbieter von Software, bereitgestellt oder von Ihren Entwicklern speziell geschrieben wurde. Die DLL muss auf dem Clientcomputer geladen werden, wenn das RDC-Clientprogramm gestartet wird und die Verbindung zum Server beginnt. In den meisten Fällen erfolgt dies skriptgesteuert oder programmgesteuert auf Clientebene.

Wie alle diese Komponenten zusammenpassen

Nachdem Sie nun die verschiedenen Terminalserver-Komponenten verstanden haben, wollen wir sehen, wie sie alle zusammenpassen. Folgen Sie dem Prozess, der stattfindet, wenn eine Clientverbindung hergestellt wird, siehe Abbildung 2.5.

Abbildung 2.5: Eine neue Sitzung wird eingerichtet

  1. Bevor etwas passiert, überwachen die Listener auf dem Terminalserver bestimmte Netzwerkkarten, IP-Adressen und TCP-Portkombinationen auf eingehende Anforderungen, um Sitzungen zu starten.
  2. Ein Benutzer entscheidet sich für eine Remote-Anwendung, also startet er seinen RDC-Client und fordert eine Verbindung zu „server1.“ Ihr RDC-Client überprüft, welche virtuellen Kanal-DLLs installiert sind.
  3. In dieser Umgebung bezieht sich der Name „server1“ auf die IP-Adresse 192.168.14.42 (die zufällig NIC # 1 in diesem Server ist). Der RDC-Client des Benutzers sendet eine Sitzungsverbindungsanforderung an 192.168.14.42.
  4. Der Listener des Servers nimmt die Anforderung auf und übergibt sie an den Sitzungsmanager. Wenn der Sitzungsmanager übernimmt, hört der Listener weitere Sitzungen ab.
  5. Der Server verhandelt mit dem anfordernden Client über die Verschlüsselungsstufe und die virtuellen Kanalfunktionen.
  6. Der Benutzer wird dann bei der Domäne authentifiziert und seine Rechte auf Zugriff auf die Verbindung überprüft.
  7. Die Microsoft-Lizenzen sind verifiziert. Die Server-Clientzugriffslizenz wird zuerst überprüft, und dann wird die Terminalserver-Clientzugriffslizenz überprüft. (Die Lizenzierung ist in Kapitel 4 beschrieben.)
  8. Zu diesem Zeitpunkt kann die Benutzersitzung beginnen. Die Anmeldeskripte werden ausgeführt und der Desktop wird geladen.

In Windows Server 2003 ist ein Listener-Port einer „Verbindung“ zugeordnet.“ Tatsächlich sind die beiden Begriffe fast austauschbar. Sie konfigurieren Eigenschaften für eine Verbindung, und der Listener-Port der Verbindung wird entsprechend geändert.

Nachdem wir nun alle Komponenten eines Windows 2003-Terminalservers behandelt haben, wenden wir uns den Anforderungen zu.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.