
このコラムでは、Windows Sockets アプリケーションおよび Windows XP や Windows Server 2003 のそれらの範囲に利用可能な伝送制御プロトコル (TCP) およびユーザー データグラム プロトコル (UDP) ポートの様々な種類について説明します。
| はじめに | |
| 短命ポート | |
| ポートの予約 | |
| ポートのブロック | |
| ポートの範囲 | |
| 詳細情報 |
TCP および UDP はポート番号を使用してソースおよび宛先のアプリケーションを識別します。Web および電子メールのアクセスに使用されているような典型的なクライアント サーバー プロトコルについて、クライアント コンピュータはその通信を開始します。サーバー アプリケーションは通常、Internet Assigned Numbers Authority (IANA) により割り当てられたよく知られている TCP または UDP ポートをリッスンします。ソース ポートについて、クライアント アプリケーションは通常、別のアプリケーションにより既に使用されていない動的に割り当てられた TCP または UDP ポートについて、オペレーティング システムをクエリします。アプリケーションがリクエストを行い、次に動的に割り当てられたポートにバインドする場合、これはワイルドカード バインドとして知られています。
動的に割り当てられたポートは短命ポートとも呼ばれています。「短命」という用語はポートの寿命が短いということを意味しているのではありません。たとえば、データの伝送が完了した後、ハイパーテキスト伝送プロトコルに使用されたポートが直ちに閉じられます。「短命」とは、クライアント アプリケーション ポートが、サーバー コンピュータが実行されている間ずっと通常開いているサーバー アプリケーション ポートと比べると、比較的寿命が短い (最長、アプリケーションが実行されている間開いています) という事実を指しています。
クライアント コンピュータはよく知られているポートを使用している可能性のあるローカル サーバーとの競合を避けるため、よく知られているポートではなく短命ポートを使用します。たとえば、Microsoft Windows XP を実行しているコンピュータは Internet Explorer を使用することができ、また Internet Information Services (IIS) を実行することもできます。Internet Explorer が Web ページにアクセスする場合、TCP ポート 80 をソース ポートとして使用することはできません。この理由はそのローカル ポートは既に IIS により使用されている可能性があるためです。両方のアプリケーションがもっぱら同じポートを使用するよう設計されているとしたら、1 度に正常に実行できるものはこれらのいずれか 1 つのみとなるでしょう。
Microsoft Windows XP または Windows Server 2003 の Windows Sockets によりアプリケーションに割り当てられている短命の TCP または UDP ポート番号の最大値は MaxUserPort レジストリ設定 (既定値は 5000 です) により制御されます。短命ポートは、ポート番号 1025 で始まります。このため、既定で Windows XP または Windows Server 2003 はワイルドカード バインドを実行するアプリケーションに 1025 から 5000 までの番号を割り当てます。
Windows XP または Windows Server 2003 を実行しているコンピュータの短命ポートの最大値を変更するためには、次を行なってください。
1. | [スタート] をクリックし、[ファイル名を指定して実行] をクリックします。regedit.exeと入力し、次に [OK] をクリックします。 |
2. | 次のレジストリ サブキーを見つけ、それをクリックします。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters |
3. | [編集] メニューで、[New] をポイントし、次に DWORD Valueをクリックします。 |
4. | MaxUserPortと入力し、次に [ENTER] を押します。 |
5. | MaxUserPort値をダブルクリックし、次に 10 進法または 16 進法で最大値を入力します。 5000 から 65534 (10 進法) の数字を入力しなければなりません。このパラメータを有効範囲外の値に設定すると、最も近い有効な値 (5000 または 65534) が使用される原因となります。 |
6. | [OK] をクリックします。 |
7. | [レジストリ エディタ] を終了します。 |
警告: レジストリ エディタを不正確に使用すると、オペレーティング システムの再インストールが必要となる可能性のある深刻な問題が発生する場合があります。マイクロソフトは、お客様がレジストリ エディタを不正確に利用した場合、その問題の解決を保証することはできません。レジストリ エディタはお客様の自己の責任の上で使用してください。 |
MaxUserPort レジストリ設定への変更を有効にするために、コンピュータを再起動する必要があります。
アプリケーションがワイルドカード バインドを使用して多数の同時接続を開いており、そのアプリケーションが利用可能な短命ポートを使いはたさないようにしたい場合に、この値を変更する必要がある可能性があります。たとえば、ファイル転送プロトコル (FTP) を使用して大量の小さなファイルを伝送するデータ バックアップ アプリケーションは短命ポートを使い果たす可能性があります。
ポートの予約により、アプリケーションはワイルドカード バインド中にポートの範囲が割り当てられることを防ぐことができます。しかし、ポートの範囲を予約しても、アプリケーションが予約された範囲内で特定のバインド (特定のポートの使用についてのリクエスト) を実行することを防ぎません。ポートの範囲を予約する時、1025 から MaxUserPort 設定の値 (既定で 5000) または 49152 から 65535 までの連続的な範囲のポート番号を選択する必要があります。複数のクライアント アプリケーションは同じ範囲を予約することができます。予約を取り消す場合、Windows Sockets は、予約取り消しリクエストにより完全に含まれていると確認した最初のエントリを削除します。
また、次を行なうことにより、レジストリで予約されたポートの範囲を指定することもできます。
1. | [スタート] をクリックし、[ファイル名を指定して実行] をクリックし、regedit.exeと入力し、次に [OK] をクリックします。 |
2. | 次のレジストリ サブキーを見つけ、クリックします。 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters |
3. | [編集] メニューで、[New] をポイントし、次に [複数業文字列値] をクリックします。 |
4. | ReservedPorts と入力し、次に ENTER を押します。 |
5. | ReservedPorts 値をダブルクリックし、構文: x-y を使用してポートの範囲を入力します。 単一のポートを指定するためには、x および y について同じ値を使用します。たとえば、ポート 4000 を指定するためには、4000-4000 と入力します。 |
6. | [OK] をクリックします。 |
7. | レジストリ エディタを終了します。 |
ポートのブロックにより、アプリケーションはそのほかのアプリケーションが指定された範囲内のポートに対し特定のバインドを実行することを防ぐことができます。ポートの範囲をブロックする場合、アプリケーションは MaxUserPort 設定の値 (既定で 5000) + 1 と 49151 (サービス パックがインストールされていない Windows XP および Windows Server 2003 について) または 65535 (Windows Server 2003 Service Pack 1 について) のいずれかの間のポート番号の連続的な範囲を選択する必要があります。ブロックされているポートの範囲内ではポートへの既存のバインドが存在すべきではありません。Windows Sockets はブロックされた範囲で最後のポート番号をハンドルとして返します。ブロックを解除する場合、Windows Sockets はブロック解除のリクエストとして同じレフト エッジを持つ範囲のブロックを解除します。
サービス パックがインストールされていない Windows XP または Windows Server 2003 を実行しているコンピュータについての異なるポートの範囲は次の通りです。
| • | よく知られているポートの範囲 (IANA により予約される): 0 から 1023 |
| • | 短命ポートの範囲 (ワイルドカード バインドについて): 1025 から MaxUserPort レジストリ設定の値 |
| • | 特定のポートとして利用可能 (特定のバインドについて): ブロックされていない 0 から 65535 までのポートd |
| • | 予約されているポートに利用可能な範囲: 1025 から MaxUserPort および 49152 から 65535 |
| • | ブロックされたポートに利用可能な範囲: MaxUserPort + 1 から 49151 (MaxUserPort が値 49152 またはそれ以上に設定されていない場合。このような場合はブロック可能なポートの範囲がありません。) |
次の図は、サービス パックがインストールされていない Windows XP または Windows Server 2003 を実行しているコンピュータについての異なるポートの範囲を示しています。

よく知られているポートの範囲、予約可能なポートの範囲およびブロック可能なポートの範囲を分離することは道理にかなっていますが、MaxUserPort が 49152 以上に設定される必要があり、またポートのブロックが必要とされるシナリオがあります。ポート リクエストをサービスし、以前のバージョンとの互換性を保持するために、Windows Server 2003 Service Pack 1 (SP1) は予約された範囲でポートのブロックを許可します。このため、Windows Server 2003 SP1 について、範囲は次の通りです。
| • | よく知られているポートの範囲 (IANA により予約される): 0 から 1023 |
| • | 短命ポートの範囲: 1025 から MaxUserPort レジストリ設定の値 |
| • | 特定のポートとして利用可能: ブロックされていない 0 から 65535 のポート |
| • | 予約されているポートに利用可能な範囲: 1025 から MaxUserPort および 49152 から 65535 |
| • | ブロックされたポートに利用可能な範囲: MaxUserPort + 1 から 65535 |
次の図は SP1 を適用した Windows Server 2003 を実行しているコンピュータについての異なるポートの範囲を示しています。

このトピックに関する詳細情報は、次のリソースを参照してください。
| • | Microsoft Windows Server 2003 TCP/IP Implementation Details (英語) |
| • |
The Cable Guy の全コラムの一覧と概要をご覧になるには、ここをクリックしてください。