次の方法で共有


Net.TCP ポート共有

Windows Communication Foundation (WCF) には、高パフォーマンス通信用の新しい TCP ベースのネットワーク プロトコル (net.tcp://) が用意されています。 WCF には、新しいシステム コンポーネントである Net.TCP ポート共有サービスも導入されています。これにより、net.tcp ポートを複数のユーザー プロセス間で共有できます。

背景と動機

TCP/IP プロトコルが最初に導入されたときは、少数のアプリケーション プロトコルしか使用しません。 TCP/IP では、各アプリケーション プロトコルに一意の 16 ビット ポート番号を割り当てることで、ポート番号を使用してアプリケーションを区別しました。 たとえば、現在の HTTP トラフィックは TCP ポート 80 を使用するように標準化されており、SMTP は TCP ポート 25 を使用し、FTP は TCP ポート 20 と 21 を使用します。 TCP をトランスポートとして使用する他のアプリケーションでは、規則または正式な標準化によって、別の使用可能なポート番号を選択できます。

ポート番号を使用してアプリケーションを区別すると、セキュリティ上の問題が発生しました。 一般に、ファイアウォールは、いくつかの既知のエントリ ポイントを除くすべてのポートで TCP トラフィックをブロックするように構成されているため、標準以外のポートを使用するアプリケーションのデプロイは、企業および個人のファイアウォールが存在するため、複雑であったり、不可能であったりすることがよくあります。 既に許可されている標準的な既知のポート経由で通信できるアプリケーションは、外部の攻撃対象領域を減らします。 ほとんどのファイアウォールは既定で TCP ポート 80 でトラフィックを許可するように構成されているため、多くのネットワーク アプリケーションで HTTP プロトコルが使用されます。

多くの異なる HTTP アプリケーションのトラフィックが 1 つの TCP ポートに多重化されるHTTP.SYS モデルは、Windows プラットフォームで標準になっています。 これにより、ファイアウォール管理者にとって一般的な制御ポイントが提供される一方で、アプリケーション開発者はネットワークを利用できる新しいアプリケーションを構築する際のデプロイ コストを最小限に抑えることができます。

複数の HTTP アプリケーション間でポートを共有する機能は、長い間インターネット インフォメーション サービス (IIS) の機能でした。 ただし、このインフラストラクチャが完全に一般化されたのは、IIS 6.0 でHTTP.SYS (カーネル モード HTTP プロトコル リスナー) が導入された場合のみです。 実際には、HTTP.SYSでは、任意のユーザー プロセスが HTTP トラフィック専用の TCP ポートを共有できます。 この機能により、TCP ポート 80 経由でトラフィックを送受信するために必要なネットワーク インフラストラクチャを共有しながら、多数の HTTP アプリケーションを同じ物理マシン上で別々の分離されたプロセスで共存させることができます。 Net.TCP ポート共有サービスでは、net.tcp アプリケーションに対して同じ種類のポート共有が可能になります。

ポート共有アーキテクチャ

WCF のポート共有アーキテクチャには、次の 3 つの主要なコンポーネントがあります。

  • ワーカー プロセス: 共有ポートを使用して net.tcp:// 経由で通信するすべてのプロセス。

  • WCF TCP トランスポート: net.tcp:// プロトコルを実装します。

  • Net.TCP ポート共有サービス: 多くのワーカー プロセスが同じ TCP ポートを共有できるようにします。

Net.TCP ポート共有サービスは、それを介して接続するワーカー プロセスに代わって net.tcp:// 接続を受け入れるユーザー モードの Windows サービスです。 ソケット接続が到着すると、ポート共有サービスは受信メッセージ ストリームを検査して宛先アドレスを取得します。 このアドレスに基づいて、ポート共有サービスは、最終的にデータ ストリームを処理するアプリケーションにデータ ストリームをルーティングできます。

net.tcp:// ポート共有を使用する WCF サービスが開かれると、WCF TCP トランスポート インフラストラクチャは、アプリケーション プロセスで TCP ソケットを直接開くことはありません。 代わりに、トランスポート インフラストラクチャは、サービスのベース アドレス Uniform Resource Identifier (URI) を Net.TCP ポート共有サービスに登録し、ポート共有サービスが代わりにメッセージをリッスンするのを待機します。 ポート共有サービスは、受信時にアプリケーション サービス宛てにメッセージをディスパッチします。

ポート共有のインストール

Net.TCP ポート共有サービスは、WinFX をサポートするすべてのオペレーティング システムで使用できますが、サービスは既定では有効になっていません。 セキュリティ上の予防措置として、管理者は最初に使用する前に Net.TCP ポート共有サービスを手動で有効にする必要があります。 Net.TCP ポート共有サービスでは、ポート共有サービスが所有するネットワーク ソケットのいくつかの特性を操作できる構成オプションが公開されています。 詳細については、「 方法: Net.TCP ポート共有サービスを有効にする」を参照してください。

アプリケーションでの Net.tcp ポート共有の使用

WCF アプリケーションで net.tcp:// ポート共有を使用する最も簡単な方法は、 NetTcpBinding を使用してサービスを公開し、 PortSharingEnabled プロパティを使用して Net.TCP ポート共有サービスを有効にすることです。

これを行う方法の詳細については、「 方法: ポート共有を使用するように WCF サービスを構成する」を参照してください。

ポート共有のセキュリティへの影響

Net.TCP ポート共有サービスでは、アプリケーションとネットワーク間の処理レイヤーが提供されますが、ポート共有を使用するアプリケーションは、ネットワーク上で直接リッスンしているかのように保護する必要があります。 具体的には、ポート共有を使用するアプリケーションでは、実行されるプロセス特権を評価する必要があります。 ネットワーク通信に必要な最小限のプロセス特権で実行される、組み込みのネットワーク サービス アカウントを使用してアプリケーションを実行することを検討してください。

こちらも参照ください