en Terminal Server är i princip samma som det vanliga Windows Server-operativsystemet förutom att i Terminal Server-miljöer har nyckelkomponenter lagts till eller modifierats för att ge stöd för flera samtidiga användare.
Microsoft Windows har alltid varit ett” multi-user ” operativsystem i den meningen att flera användare kan anslutas till en enda server vid varje given tidpunkt. Dessa användare var dock anslutna till filtjänster eller skrivartjänster på servrarna. De körde sina lokala Windows-gränssnitt på sina lokala datorer, och servern stödde bara ett skrivbordsgränssnitt via det lokala tangentbordet, musen och bildskärmen. Huvudskillnaden med Terminal Server är att flera användare kan köra sina egna Windows-skrivbordssessioner på servern. Så Terminal Server är” flera användare ” i den meningen att den stöder flera skrivbordsgränssnitt. Vissa människor tycker om att tänka på detta som en ”fjärrkontroll” miljö, förutom att terminalservern kan rymma många användare ”fjärrstyrning” det samtidigt, med varje användare gör något helt annat.
för att Terminal Server ska kunna stödja flera användarsessioner måste vissa ändringar göras från den vanliga Microsoft Windows server-programvaran. Det finns två grundläggande skillnader mellan en vanlig Windows-Server och en med Terminal Server installerad:
- när Terminal Server är installerad på en Windows 2003-server ändras vissa kärnkomponenter i Windows-operativsystemet för att stödja flera samtidiga användargränssnitt. Till exempel modifieras virtual memory manager och object manager för att stödja flera samtidiga skrivbordsgränssnitt utan att bli förvirrade. Det här är stora ändringar som kräver att du startar om systemet efter installationen av Terminal Server.
- nya tjänster och komponenter läggs till när Terminal Server är installerad som gör att servern kan stödja flera användarsessioner. Den viktigaste av dessa är tjänsten ”Terminal Server”. Den här tjänsten, som körs djupt inuti servern, ansvarar för att koppla samman flera användarsessioner med operativsystemet. Det är också ansvarigt för funktioner som att skapa sessioner, ta emot användare och avsluta sessioner.
Terminalserverkomponenter
även om det verkar som om terminalservern i grunden är ett förhärligat PCAnywhere-system, är det faktiskt ett komplext system som består av flera olika komponenter, delsystem och gränssnitt. Ett mer fullständigt diagram över Terminalserverkomponenterna visas i Figur 2.1. Hänvisa till det när du läser igenom de närmaste avsnitten som beskriver varje komponent som utgör Windows 2003 Terminal Server.
figur 2.1: Terminal Server 2003-komponenter
Windows Server 2003-kärnan
du kommer ihåg att en nyckelkomponent i en serverbaserad datormiljö är ett operativsystem för flera användare. I Windows Server 2003 styrs detta system av kärnan.
Windows Server 2003 behöver ett sätt att distansera kritiska operativsystemkomponenter från alla galna användare. För att uppnå detta fungerar Windows-processer i ett av två lägen: användarläge eller kärnläge. När du tänker tillbaka på din Windows NT-utbildning kommer du ihåg att ett användarläge inte kan skriva direkt till OS-minnet. Istället har den full tillgång till sitt eget 4 GB minnesutrymme. En operativsystemkomponent som heter virtual memory manager (som själv körs i kärnläge) styr allt detta och skriver till systemminnet på uppdrag av användarlägesprogrammet.
i Terminalservermiljöer tillåter separationen av användarläge och kärnlägesapplikationer systemet att separera och isolera användarna. En användares applikationskrasch tar inte ner hela systemet. (Självklart tänker du att en applikationskrasch kan ta ner ett system, men det är vanligtvis knutet till enhetsdrivrutiner som körs i kärnläge.)
i” standard ” (dvs. icke-Terminal Server) Windows-miljöer där endast en enda användare loggar in interaktivt, lever alla kärnlägesprocesser lyckligt tillsammans i ett minnesområde och namnområde. I miljöer med flera användare som Terminal Server fungerar dock inte denna delning eftersom förfrågningar från olika användares sessioner kan komma i konflikt med varandra. Kärnan på en terminalserver är följaktligen medveten om flera sessioner; det håller varje användares session separat med isolerade processer och minne. Windows Server 2003 gör vissa ändringar i kärnan när Terminal Server-komponenten är installerad för att uppnå detta.
först placerar servern en del av kärnans minnesadressutrymme i virtuellt minne. Detta gör att det som skulle vara motstridiga förfrågningar i en enanvändarmiljö kan behandlas korrekt i fleranvändarmiljön och för flera instanser av drivrutiner för kärnläge som ska laddas och användas av flera användare (anledningen till att en användare tekniskt kan krascha hela systemet).
vissa systemprocesser är inte sessionsspecifika, vilket innebär att alla användare i alla sessioner behöver åtkomst till dem. Dessa processer lagras i ett enda (globalt) minnesområde som delas av alla användare.
en bieffekt av att dela processer som detta i en Terminalservermiljö är att du ibland stöter på processer som inte är ”sessionsmedvetna.”Ett potentiellt (och roligt) resultat kan vara felmeddelanden som visas på serverkonsolen från program som körs inom en användares session. Eftersom det vanligtvis inte finns någon i serverrummet som erkänner meddelandet finns det potential att förhindra att en användares applikation fortsätter.
Terminal Services-tjänsten
”Terminal Services-tjänsten” avser en vanlig Windows-tjänst (Start | Administrationsverktyg | Tjänster) som kallas ”Terminal Services.”I den verkliga världen hänvisar folk vanligtvis till det som” Terminaltjänsten ”och de använder termen” Terminalserver ” när de hänvisar till en Windows-Server som kör Terminaltjänsten.
om kärnan för flera användare är grunden för serverbaserad databehandling i Windows Server 2003 är Terminaltjänsten hörnstenen. Denna tjänst (laddas via termserv.dll) laddas direkt efter att kärnan kommer online. När serverns konsol (tangentbord, video och musdrivrutiner) har laddats initierar Terminaltjänsten Sessionshanterarens delsystem (SMS.exe) ansvarig för att hantera och spåra alla användarsessioner på servern.
Terminalserversessioner
en ny session skapas varje gång en användare loggar in på terminalservern. En session består i huvudsak av ett virtuellt skrivbord från vilket användaren kan köra applikationer och som han kan interagera med precis som med en arbetsstation. En serversession ska inte förväxlas med serverkonsolen, eftersom en session inte är en fjärrkontroll av konsolen utan faktiskt ett nytt skrivbord separat från konsolen.
varje gång en användare ansluter till en terminalserver och skapar detta ”virtuella skrivbord” skapas ett unikt sessions-ID-nummer för att skilja användaren (och därmed användarens processer) från alla andra sessioner och användare. Sessions-ID gör det också möjligt för servern att hålla minnet separat för varje användares session. När en användare loggar ut från en Terminal Services-klient raderas sessionen som användes och processerna och minnet som lanserades och användes av den sessionen tas bort. Varje Terminalserver spårar sina egna sessions-ID och hanterar uppgiften att utfärda, spåra och ta bort dem.
eftersom serversessioner är ”virtuella” (och minne och processer hålls åtskilda mellan sessioner), bör en programkrasch eller låsning i en session inte påverka andra användarsessioner, även om andra användare använder samma program.
nyckelfrasen här är dock ”bör inte” påverka andra användare. Även om användarsessioner är separata på en server delar de fortfarande serverresurser och vissa kodsegment. Om en användare åberopar en process som gör att servern blå skärm, Detta kommer naturligtvis att ha en effekt på de andra användarna. Å andra sidan kommer enkla händelser som ett program som hänger på en tidsbegränsad begäran eller Microsoft Word kraschar när en användare öppnar ett korrupt dokument inte att ses av de andra användarna (inom sina egna sessioner) på systemet.
sessionstillstånd
eftersom en session verkligen är en användares skrivbord finns det tillfällen att en session kan vara i olika olika tillstånd, ungefär som en vanlig arbetsstation. Om en användare till exempel går bort från sin arbetsstation under en tidsperiod stängs inte arbetsstationen av. Snarare är det bara inaktiv och väntar på användarinmatning. Terminalserversessioner beter sig ungefär på samma sätt och kan vara i ett av ett antal olika tillstånd beroende på användarens aktivitet (eller inaktivitet), anslutning mellan klienten och servern och inställningar för sessionstid.
figur 2.2: varje Terminalserver upprätthåller många separata användarsessioner
alla användarsessioner på en terminalserver måste vara i ett av följande sex tillstånd:
- Active är en levande och aktiv användare. Användaren interagerar med Terminalserversessionen och har inte haft en period av inaktivitet eller ett nätverk koppla från servern. Detta är det” normala ” tillståndet för en session.
- Idle är det tillstånd en session går in när det inte finns någon inmatning från användaren under en viss tidsperiod.
- frånkopplade sessioner inträffar när processerna och programmen för en ”live” – session körs men ingen RDC-klient är ansluten. (Om du hoppade över det första kapitlet är ”RDC-klient” det nya namnet för RDP-klienten.) Den vanliga orsaken är en nätverksavkoppling eller när en användare klickar på ”X” i det övre högra hörnet av sin RDC-klientprogramvara. En användare kan återansluta till sin frånkopplade session för att få den tillbaka till ett ”aktivt” tillstånd (och att hämta med sitt arbete precis där han slutade). Tänk på en frånkopplad session som en låst arbetsstation, förutom att användaren kan ”låsa upp” sin arbetsstation från vilken dator som helst i byggnaden.
- anslutna sessioner är i ett tillstånd där en klientenhet är ansluten till en serversession, men ingen användare är inloggad, ungefär som CTRL+ALT+DEL-prompten på en arbetsstation.
- Down är ett tillfälligt tillstånd där en session avslutas och processer inom sessionen dödas. Down är det slutliga tillståndet för en session innan den slutar.
- lyssna är ett tillstånd som endast ses på lyssnarportar som är redo att acceptera inkommande anslutningar. Detta tillstånd gäller inte för vanliga sessioner. Snarare gäller det för de processer som körs på servern som väntar på (lyssna på) nya sessionsanslutningsförfrågningar.
i de flesta miljöer konfigurerar administratörer sessioner med olika timeouts. Du kan begränsa den tid som en enskild session kan vara öppen, eller så kan du automatiskt konvertera en ledig session till en frånkopplad session. Timeouts hjälper till att begränsa hur mycket tid servern spenderar på att utföra processer för användare som verkligen inte arbetar på servern. Vi kommer att täcka de exakta tekniker och strategier för att konfigurera dessa senare i denna bok.
anslutningsportar och lyssnare
varje användares RDP-session ansluts till terminalservern via en Anslutningsport. En Anslutningsport (vanligtvis endast kallad ”anslutning”) är en virtuell port på servern som är associerad med ett specifikt nätverkskort och protokollkombination.
en Terminal Server – Anslutningsport skapas automatiskt när Terminal Server-komponenten är installerad. Som standard tillåter det alla användare i gruppen” remote desktop users ” att ansluta till Terminalserversessioner på servern via vilket nätverkskort som helst. Men även om standardanslutningsporten fungerar med alla nätverkskort med TCP/IP installerat, är Terminalserveranslutningsportar verkligen nätverkskortspecifika. Du kan konfigurera en server med flera nätverkskort för att ha flera Terminalserveranslutningsportar—en för varje kort. Faktum är att varje anslutning kan ha helt olika egenskaper och behörigheter.
figur 2.3: en terminalserver med flera anslutningsportar
Terminalserveranslutningar och tillhörande lyssnare kan konfigureras på två ställen. Den första är via Terminal Services Configuration (TSC) MMC snap-in. Du kan använda TSC för att konfigurera alternativ för RDP-baserade Terminalserveranslutningar, till exempel inställningar, behörigheter och över vilket nätverkskort en anslutning är giltig. Det andra sättet att konfigurera Terminal Server-anslutningar är via ett Active Directory Group Policy Object (GPO) inom en Windows 2003-domän. Med den här funktionen kan du tilldela anslutningar för flera servrar som finns med en OU i Active Directory.
lyssnare
varje Terminal Server Anslutningsport har en subkomponent som kallas en ”lyssnare.”Lyssnarkomponenten” lyssnar ” på ett specifikt nätverkskort och protokollkombination för vilken anslutningsporten är konfigurerad. När en användare vill skapa en ny session på servern använder de sin RDC-klientprogramvara för att kontakta servern. Serverns lyssnare hämtar klientförfrågan och vidarebefordrar den till sessionshanteraren. Lyssnaren går sedan tillbaka till att lyssna efter fler anslutningsförfrågningar.
virtuella kanaler
som vi diskuterade tidigare är Microsofts RDP-protokoll som körs på TCP/IP det faktiska protokollet som ansluter användare till serversessioner. Vi nämnde också att detta protokoll kan stödja mer än bara rena virtuella skrivbord. RDP tillåter fjärrsessionsljud från servern kanaliseras till klientenhetens högtalare. Det gör det också möjligt för enheter som är anslutna till klientens seriella portar att visas som om de är anslutna till servern. Dessa ”extra” är tillgängliga via RDP: s virtuella kanaler. En virtuell kanal är helt enkelt en mekanism för att flytta data fram och tillbaka mellan en Terminalserversession och en klient. Som standard innehåller RDP-protokollet på Terminal Server 2003 flera virtuella kanaler.
- ljud: Ljudhändelser som genereras på serversessionen omdirigeras via RDP-protokollet till RDC-klientenheten, där de spelas på klientens högtalare.
- klientenheter: lokala hårddiskar på klientenheten görs tillgängliga för servern, så att användare kan komma åt både serverenheter och deras lokala klientenheter inom sina fjärrsessioner.
- skrivare: skrivare som är tillgängliga för klientenheten innan en session startas på en terminalserver görs tillgängliga för användare från sina serversessioner. Användare kan sedan skriva ut till sina vanliga Windows-skrivare, inklusive skrivare som är direkt anslutna till sina klientenheter.
- seriella portar: den seriella portens virtuella kanal gör att enheter som är anslutna till en klientens seriella port kan nås via sina fjärrterminalserversessioner.
- Windows Urklipp: för att integrera lokala applikationer med fjärrterminalserversessioner synkroniserar Windows clipboard virtual channel innehållet i Urklipp för fjärrterminalserver med innehållet i klientenhetens Urklipp. Användare kan sömlöst klippa och klistra in mellan lokala och fjärranslutna applikationer.
om standard virtuella kanaler inte uppfyller dina behov, MSDN och Windows Server 2003 SDK innehåller information om hur du skriver dina egna virtuella kanaler. En virtuell kanal är en kombination av två komponenter—en komponent på klientsidan och en komponent på serversidan. Båda kan skicka och ta emot data via den virtuella kanalen, vilket möjliggör en – eller tvåvägskommunikation. Virtuella kanaler kan också vara RDP-oberoende, vilket innebär att du kan anpassa till din miljö utan att uppgradera eller ändra den faktiska klient-eller serverprogramvaran.
varför allt fokus på virtuella kanaler? Även om detta inte är en utvecklarbok och du förmodligen aldrig kommer att utveckla din egen virtuella kanal, är det viktigt att du förstår hur de fungerar. Nästan varje tredje part add-on produkt för Terminal Server använder sig av virtuella kanaler. Att förstå hur virtuella kanaler fungerar hjälper dig att felsöka de produkter från tredje part som du utan tvekan kommer att stöta på i din Terminal Server-karriär.
med det sagt, låt oss ta en sista titt på arkitekturen för en virtuell kanal. Se figur 2.4.
figur 2.4: Terminal Server 2003: s virtuella kanalarkitektur
den virtuella kanalkomponenten på serversidan är vanligtvis en körbar som körs på terminalservern. Denna komponent måste vara en komponent i användarläge, eftersom servern använder sessions-ID för att avgöra vilken session på klientsidan den ska sända till och ta emot data från.
den virtuella kanalkomponenten på klientsidan är vanligtvis en DLL som tillhandahålls av Microsoft, programvaruleverantören från tredje part eller specialskriven av dina Utvecklare. DLL-filen måste laddas på klientdatorn när RDC-klientprogrammet startas och börjar anslutningen till servern. I de flesta fall är detta skript eller gjort programmatiskt på klientnivå.
hur alla dessa komponenter passar ihop
nu när du förstår var och en av de olika Terminalserverkomponenterna, låt oss se hur de alla passar ihop. Följ processen som sker när en klientanslutning görs, med hänvisning till figur 2.5.
figur 2.5: en ny session upprättas
- innan något händer tittar lyssnarna på terminalservern på vissa nätverkskort, IP-adress och TCP-portkombinationer för inkommande förfrågningar om att starta sessioner.
- en användare bestämmer sig för att använda en fjärrapplikation, så hon startar sin RDC-klient och begär en anslutning till ”server1.”Hennes RDC-klient kontrollerar för att se vilka virtuella kanal-dll-filer som är installerade.
- i den här miljön hänvisar namnet ”server1” till IP-adress 192.168.14.42 (som råkar vara NIC #1 i den här servern). Användarens RDC-klient skickar en begäran om sessionsanslutning till 192.168.14.42.
- serverns lyssnare tar upp begäran och överlämnar den till sessionshanteraren. När sessionshanteraren tar över fortsätter lyssnaren att lyssna efter fler sessioner.
- servern förhandlar med den begärande klienten för dess krypteringsnivå och virtuella kanalfunktioner.
- användaren autentiseras sedan till domänen och hennes rättigheter kontrolleras för åtkomst till anslutningen.
- Microsoft-licenserna är verifierade. Server client access license verifieras först och sedan Terminal Server client access license verifieras. (Licensiering beskrivs i kapitel 4.)
- vid denna tidpunkt är användarsessionen redo att börja. Inloggningsskripten körs och skrivbordet laddas.
i Windows Server 2003 är en lyssnarport associerad med en ”anslutning.”Faktum är att de två termerna är nästan utbytbara. Du konfigurerar egenskaper för en anslutning och anslutningens lyssnarport ändras på lämpligt sätt.
nu när vi har täckt alla komponenter som utgör en Windows 2003 Terminal Server, vänd dig till kraven.