Terminal Server for Windows Server2003の動作

ターミナルサーバーは、ターミナルサーバー環境では、複数の同時ユーザーをサポートするために主要なコンポーネントが追加または変更されていることを除いて、通常のWindows Serverオペレーティングシステムと基本的に同じです。

Microsoft Windowsは、複数のユーザーがいつでも単一のサーバーに接続できるという意味で、常に”マルチユーザー”オペレーティングシステムでした。 ただし、これらのユーザーは、サーバー上のファイルサービスまたはプリンターサービスに接続されていました。 彼らはローカルコンピュータ上でローカルWindowsインターフェイスを実行し、サーバーはローカルキーボード、マウス、およびモニタを介して一つのデスクトッ ターミナルサーバーとの主な違いは、複数のユーザーがサーバー上で独自のWindowsデスクトップセッションを実行できることです。 そのため、ターミナルサーバーは、複数のデスクトップインターフェイスをサポートするという意味で”マルチユーザー”です。 一部の人々は、ターミナルサーバーは、各ユーザーが完全に別の何かをして、同時にそれを”リモート制御”多くのユーザーを収容することができることを除いて、これを”リモ

ターミナルサーバーが複数のユーザーセッションをサポートするためには、通常のMicrosoft Windowsサーバーソフトウェアからいくつかの変更を行う必要がありました。 通常のWindowsサーバーとターミナルサーバーがインストールされているWindowsサーバーとの間には、基本的な違いが二つあります:

  • ターミナルサーバーがWindows2003サーバーにインストールされている場合、Windowsオペレーティングシステムの特定のコアコンポーネントは、複数の同時ユーザーインターフェイ たとえば、仮想メモリマネージャとオブジェクトマネージャは、混乱することなく、複数の同時デスクトップインターフェイスをサポートするように変更されています。 これらは主要な変更であり、ターミナルサーバーをインストールした後にシステムを再起動する必要があります。
  • ターミナルサーバーのインストール時に、サーバーが複数のユーザーセッションをサポートできるようにする新しいサービスとコンポーネ これらの中で最も重要なのは”ターミナルサーバー”サービスです。 このサービスは、サーバーの内部で深く実行され、複数のユーザーセッションをオペレーティングシステムとインターフェイ また、セッションの作成、ユーザーの受信、セッションの終了などの機能も担当します。

ターミナルサーバーのコンポーネント

ターミナルサーバーは基本的に栄光のPCAnywhereシステムであるようですが、実際にはいくつかの異なるコンポーネント、サブシ ターミナルサーバーコンポーネントのより完全な図を図2.1に示します。 Windows2003Terminal Serverを構成する各コンポーネントについて説明する次のいくつかのセクションを読むときに参照してください。

図2.1: Terminal Server2003コンポーネント

Windows Server2003カーネル

サーバーベースのコンピューティング環境の重要なコンポーネントは、マルチユーザーオペレーティングシステムであること Windows Server2003では、このシステムはカーネルによって制御されます。

Windows Server2003には、重要なオペレーティングシステムコンポーネントをすべての狂ったユーザーから遠ざける方法が必要です。 これを実現するために、Windowsプロセスは、ユーザーモードまたはカーネルモードのいずれかのモードで動作します。 Windows NTのトレーニングに戻って考えると、ユーザーモードアプリケーションはOSメモリに直接書き込むことができないことを覚えています。 代わりに、それはそれ自身の4GBのメモリ空間へのフルアクセスを持っています。 仮想メモリマネージャと呼ばれるオペレーティングシステムコンポーネント(カーネルモードで実行されます)は、このすべてを制御し、ユーザーモードアプリケーシ

ターミナルサーバー環境では、ユーザーモードとカーネルモードアプリケーションを分離することで、システムはユーザーを分離および分離できます。 あるユーザーのアプリケーションクラッシュは、システム全体をダウンさせません。 (もちろん、アプリケーションのクラッシュがシステムをダウンさせる可能性があると考えていますが、これは通常、カーネルモードで実行されるデバイ)

単一のユーザーのみが対話的にログオンする”標準”(すなわち非ターミナルサーバー)Windows環境では、すべてのカーネルモードプロセスは一つのメモリ領域と名前空間 ただし、ターミナルサーバーのようなマルチユーザー環境では、異なるユーザーのセッションからの要求が互いに競合する可能性があるため、この共有は機能し そのため、ターミナルサーバー上のカーネルはマルチセッションに対応しています; これは、分離されたプロセスとメモリと別々の各ユーザーのセッションを保持します。 Windows Server2003では、ターミナルサーバーコンポーネントがインストールされているときにカーネルにいくつかの変更が加えられます。

まず、サーバーはカーネルのメモリアドレス空間の一部を仮想メモリに配置します。 これにより、シングルユーザー環境で競合する要求をマルチユーザー環境で適切に処理し、カーネルモードデバイスドライバの複数のインスタンスを複数のユーザーがロードして使用することができます(一人のユーザーが技術的にシステム全体をクラッシュさせる理由)。

一部のシステムプロセスはセッション固有ではないため、すべてのセッションのすべてのユーザーがそれらにアクセスする必要があります。 これらのプロセスは、すべてのユーザーが共有する単一の(グローバルな)メモリ領域に格納されます。

ターミナルサーバー環境でこのようなプロセスを共有することの副作用は、”セッション認識”ではないプロセスに遭遇することがあるということです。”潜在的な(そして面白い)結果の1つは、ユーザーのセッション内で実行されているアプリケーションからサーバーコンソールに表示されるエラーメッセージです。 通常、サーバールームにはメッセージを確認する人がいないため、ユーザーのアプリケーションが続行されないようにする可能性があります。

ターミナルサービスサービス

“ターミナルサービスサービス”とは、”ターミナルサービス”と呼ばれる通常のWindowsサービス(スタート|管理ツール|サービス)を指します。「現実の世界では、人々は通常それを「ターミナルサービス」と呼び、ターミナルサービスを実行しているWindowsサーバーを指すときに「ターミナルサーバー」という用語を使用します。

マルチユーザーカーネルがwindows Server2003のサーバーベースのコンピューティングの基盤である場合、ターミナルサービスが基礎となります。 このサービス(termserv経由でロードされます。dll)は、カーネルがオンラインになった直後にロードされます。 サーバーのコンソール(キーボード、ビデオ、マウスドライバ)がロードされた後、ターミナルサービスはセッションマネージャーサブシステム(smss。exe)サーバー上のすべてのユーザーセッションの管理と追跡を担当します。

ターミナルサーバーセッション

ユーザーがターミナルサーバーにログオンするたびに新しいセッションが作成されます。 セッションは、基本的に、ユーザーがアプリケーションを実行し、ワークステーションと同じように対話できる仮想デスクトップで構成されます。 セッションはコンソールのリモート制御ではなく、実際にはコンソールとは別の新しいデスクトップであるため、サーバーセッションをサーバーコンソールと混同してはいけません。

ユーザーがターミナルサーバーに接続してこの”仮想デスクトップ”を作成するたびに、一意のセッションID番号が作成され、ユーザー(したがって、ユーザーのプロセス)を他 また、セッションIdを使用すると、サーバーはユーザーのセッションごとにメモリを別々に保持することができます。 ユーザーがターミナルサービスクライアントからログオフすると、使用されていたセッションが削除され、そのセッションによって起動および使用されたプ 各ターミナルサーバーは、独自のセッションIdを追跡し、それらの発行、追跡、および削除のタスクを処理します。

サーバーセッションは”仮想”であるため(メモリとプロセスはセッション間で別々に保持されます)、あるセッションでアプリケーションがクラッシュしたりロ

しかし、ここでのキーフレーズは”should not”他のユーザーに影響を与えません。 ユーザーセッションはサーバー上で別々になっていても、サーバーリソースと特定のコードセグメントを共有します。 あるユーザーがサーバーをブルースクリーンにするプロセスを呼び出すと、これは明らかに他のユーザーに影響を与えます。 一方、タイムアウト要求にハングしたアプリケーションや、ユーザーが破損した文書を開いたときにMicrosoft Wordがクラッシュするなどの単純な発生は、システム上の他のユーザー(自分のセッション内)には表示されません。

セッション状態

セッションは実際にはユーザーのデスクトップなので、通常のワークステーションのように、セッションがさまざまな状態になることが たとえば、ユーザーがワークステーションから一定期間離れた場合、ワークステーションの電源はオフになりません。 むしろ、それは単にアイドル状態であり、ユーザーの入力を待っています。 ターミナルサーバーセッションの動作はほぼ同じで、ユーザーのアクティビティ(または非アクティブ)、クライアントとサーバー間の接続、およびセッションタイムアウ

図2.2:各ターミナルサーバーが多数の個別のユーザーセッションを維持する

ターミナルサーバー上のすべてのユーザーセッションは、次の6つの状態のいずれかで:

  • Activeは、ライブおよびアクティブなユーザーです。 ユーザーがターミナルサーバーセッションと対話しており、アクティブでない期間やサーバーからのネットワーク切断が発生していません。 これはセッションの”通常の”状態です。
  • Idleは、指定された期間、ユーザーからの入力がない場合にセッションが開始される状態です。
  • 切断されたセッションは、”ライブ”セッションのプロセスとプログラムが実行されているが、RDCクライアントが接続されていない場合に発生します。 (最初の章をスキップした場合、”RDC Client”はRDPクライアントの新しい名前です。)一般的な原因は、ネットワークの切断またはユーザーがRDCクライアントソフトウェアの右上隅にある”X”をクリックしたときです。 ユーザーは、切断されたセッションに再接続して、”アクティブ”状態に戻すことができます(そして、中断したところで作業を再開することができます)。 切断されたセッションは、ユーザーが建物内の任意のコンピュータからワークステーションを”ロック解除”できることを除いて、ロックされたワー
  • 接続されたセッションは、クライアントデバイスがサーバーセッションに接続されている状態ですが、ワークステーションのCTRL+ALT+DELプロンプトのように、ユーザー
  • Downは、セッションが終了し、セッション内のプロセスが強制終了される一時的な状態です。 Downは、セッションが終了する前の最終状態です。
  • Listenは、受信接続を受け入れる準備ができているリスナーポートでのみ表示される状態です。 この状態は通常のセッションには適用されません。 むしろ、新しいセッション接続要求を待つ(リッスンする)サーバー上で実行されているプロセスに適用されます。

ほとんどの環境では、管理者はさまざまなタイムアウトを持つセッションを設定します。 単一のセッションを開くことができる時間を制限したり、アイドル状態のセッションを切断されたセッションに自動的に変換したりできます。 タイムアウトは、サーバーが実際にサーバー上で動作していないユーザーのプロセスの実行に費やす時間を制限するのに役立ちます。 これらを設定するための正確なテクニックと戦略については、この本の後半で説明します。

接続ポートとリスナー

すべてのユーザーのRDPセッションは、接続ポートを介してターミナルサーバーに接続します。 接続ポート(一般的には”接続”とのみ呼ばれます)は、特定のネットワークカードとプロトコルの組み合わせに関連付けられたサーバー上の仮想ポートです。

ターミナルサーバーコンポーネントのインストール時にターミナルサーバー接続ポートが自動的に作成されます。 既定では、”remote desktop users”グループ内のすべてのユーザーが、任意のネットワークカードを介してサーバー上のターミナルサーバーセッションに接続できます。 ただし、デフォルトの接続ポートは、TCP/IPがインストールされているネットワークカードで動作しますが、ターミナルサーバー接続ポートは実際にはネットワー 複数のネットワークカードを持つサーバーを構成して、複数のターミナルサーバー接続ポートをカードごとに1つずつ設定できます。 実際、各接続はまったく異なるプロパティと権限を持つことができます。

図2.3:複数の接続ポートを持つターミナルサーバー

ターミナルサーバー接続とそれに関連するリスナーは、二つの場所で構成できます。 最初の方法は、ターミナルサービス構成(TSC)MMCスナップインを使用する方法です。 TSCを使用して、設定、アクセス許可、接続が有効なネットワークカードなど、RDPベースのターミナルサーバー接続のオプションを構成できます。 ターミナルサーバー接続を構成する2番目の方法は、Windows2003ドメイン内のActive Directoryグループポリシーオブジェクト(GPO)を使用することです。 この機能を使用すると、Active Directory内のOUに含まれる複数のサーバーに接続を割り当てることができます。

リスナー

各ターミナルサーバー接続ポートには、”リスナー”と呼ばれるサブコンポーネントがあります。”Listenerコンポーネント”は、接続ポートが構成されている特定のネットワークカードとプロトコルの組み合わせで”listen”します。 ユーザーがサーバー上で新しいセッションを確立する場合は、RDCクライアントソフトウェアを使用してサーバーに接続します。 サーバーのリスナーは、クライアント要求をピックアップし、セッションマネージャーに転送します。 その後、リスナーはより多くの接続要求をリッスンするように戻ります。

仮想チャネル

前に説明したように、TCP/IP上で実行されているMicrosoftのRDPプロトコルは、ユーザーをサーバーセッションに接続する実際のプロトコルです。 また、このプロトコルは純粋な仮想デスクトップ以上のものをサポートできることにも言及しました。 RDPを使用すると、サーバーからのリモートセッションオーディオをクライアントデバイスのスピーカーにチャネリングできます。 また、クライアントのシリアルポートに接続されたデバイスを、サーバーに接続されているかのように表示することもできます。 これらの”エクストラ”は、RDPの仮想チャネルを介して利用可能です。 仮想チャネルは、単にターミナルサーバーセッションとクライアントの間でデータを前後に移動するメカニズムです。 既定では、ターミナルサーバー2003のRDPプロトコルには複数の仮想チャネルが含まれています。

  • : サーバーセッションで生成されたサウンドイベントは、RDPプロトコルを介してRDCクライアントデバイスにリダイレクトされ、クライアントのスピー
  • クライアントドライブ:クライアントデバイス上のローカルディスクドライブをサーバーで使用できるようにして、ユーザーはリモートセッション内でサー
  • プリンター:ターミナルサーバーでセッションが起動される前にクライアントデバイスで使用できるプリンターは、サーバーセッション内からユーザーが使用で ユーザーは、クライアントデバイスに直接接続されたプリンタを含む標準のWindowsプリンタに印刷できます。
  • シリアルポート:シリアルポート仮想チャネルを使用すると、クライアントデバイスのシリアルポートにプラグインされたデバイスにリモートターミナルサーバセッ
  • Windows Clipboard:ローカルアプリケーションをリモートターミナルサーバーセッションと統合するために、Windows clipboard仮想チャネルは、リモートターミナルサーバークリップボードの内容 ユーザーは、ローカルアプリケーションとリモートアプリケーション間でシームレスにカットアンドペーストできます。

既定の仮想チャネルがニーズを満たしていない場合、MSDNおよびWindows Server2003Sdkには、独自のカスタム仮想チャネルの作成に関する情報が含まれています。 仮想チャネルは、クライアント側のコンポーネントとサーバー側のコンポーネントの2つのコンポーネントの組み合わせです。 どちらも仮想チャネルを介してデータを送受信できるため、一方向または双方向の通信が可能です。 つまり、実際のクライアントまたはサーバーソフトウェアをアップグレードまたは変更することなく、環境に合わせてカスタマイズできます。

なぜすべてが仮想チャネルに焦点を当てているのですか? これは開発者の本ではなく、おそらく独自の仮想チャネルを開発することはありませんが、それらがどのように機能するかを理解することが重 ターミナルサーバー用のほぼすべてのサードパーティ製アドオン製品は、仮想チャネルを利用しています。 仮想チャネルがどのように機能するかを理解することで、ターミナルサーバーのキャリアで間違いなく遭遇するサードパーティ製品のトラブルシューテ

ということで、仮想チャネルのアーキテクチャを最後に見てみましょう。 図2.4を参照してください。

図2.4:ターミナルサーバー2003の仮想チャネルアーキテクチャ

サーバー側の仮想チャネルコンポーネントは、通常、ターミナルサーバー上で実行される実行可能 サーバーはセッションIDを使用して、どのクライアント側セッションとの間でデータを送受信するかを決定するため、このコンポーネントはユーザーモードコンポー

クライアント側の仮想チャネルコンポーネントは、通常、サードパーティのソフトウェアベンダーであるMicrosoftが提供するDLL、または開発者がカスタム作成し RDCクライアントプログラムが起動され、サーバーへの接続が開始されるときに、DLLをクライアントコンピューターにロードする必要があります。 ほとんどの場合、これはクライアントレベルでスクリプト化またはプログラムで実行されます。

これらすべてのコンポーネントがどのように適合するか

さまざまなターミナルサーバーコンポーネントのそれぞれを理解したので、それらがどのように適合するかを見てみましょう。 図2.5を参照して、クライアント接続が行われるときに行われるプロセスに従います。

図2.5:新しいセッションが確立される

  1. 何かが起こる前に、ターミナルサーバー上のリスナーは、セッションを開始するための受信要求のための特定のネットワー
  2. ユーザーがリモートアプリケーションを使用することを決定したため、RDCクライアントを起動し、”server1への接続を要求します。”彼女のRDCクライアントは、インストールされている仮想チャネルDllを確認します。
  3. この環境では、”server1″という名前はIPアドレス192.168.14.42を指します(このサーバーではNIC#1になります)。 ユーザーのRDCクライアントは、セッション接続要求を192.168.14.42に送信します。
  4. サーバーのリスナーはリクエストをピックアップし、セッションマネージャーに渡します。 セッションマネージャーが引き継ぐと、リスナーはより多くのセッションのリッスンを再開します。
  5. サーバーは、暗号化レベルと仮想チャネル機能について要求元のクライアントとネゴシエートします。
  6. その後、ユーザーはドメインに対して認証され、接続へのアクセス権がチェックされます。
  7. マイクロソフトのライセンスが確認されています。 最初にサーバークライアントアクセスライセンスが検証され、次にターミナルサーバークライアントアクセスライセンスが検証されます。 (ライセンスの詳細は第4章で説明しています。)
  8. この時点で、ユーザーセッションを開始する準備が整いました。 ログオンスクリプトが実行され、デスクトップが読み込まれます。

Windows Server2003では、リスナーポートは”接続”に関連付けられています。「実際には、2つの用語はほぼ互換性があります。 接続のプロパティを構成すると、接続のリスナーポートが適切に変更されます。

Windows2003ターミナルサーバーを構成するすべてのコンポーネントについて説明したので、要件に目を向けます。

コメントを残す

メールアドレスが公開されることはありません。