最初にネットワーキングの原則を理解する必要があると思います。ネットワーク インターフェイス上の特定のポートとプロトコルをリッスンできるプロセスは、一度に 1 つだけです。通信はどのように処理されますか?非常に単純な概要では、状況は次のようになります (ポート番号と IP アドレスは意図的に偽造されています)。
- IP アドレス 902.168.13.24 のポート 21 にリスナーがあります (他のプロセスはそのポートをリッスンできないため、同時リスナーはありません)
- 接続要求は、他のホストからその IP アドレスとそのポートに送信されます。
- 現在、ポート 21 が占有されており、誰も接続できません (より多くの着信接続がキューに入れられています)。
- プロトコル レベルでのハンドシェイクの後、接続が成功した場合、前者は別の (任意の) ソケット (ポート 43251) に移動されます。
- ポート 21 は、別の接続を受け入れるために解放されます。
- キュー内の次の接続が受け入れられます。
すべては非常に低いプロトコル レベルで発生し、開発者 (ネットワーク アダプター ドライバーを開発しない限り) は、このポート シフトを認識/気にしません。
本当の問題は、より多くの同時接続を受け入れる方法です。独自の TCP サーバーを開発している場合は、許可される接続の最大数を設定し、(スレッドを管理することによって) 自分でそれらを管理します。他のサードパーティサーバーを使用する場合、許可される同時接続の最大数を設定できるオプションが必要です。
ここで TCP サーバーの簡単な実装を確認できます。ご覧のとおり、接続を処理するために使用されるプライベート フィールド _maxConnections があります。
要約すると、特定のリソース (ソケット) への同時接続の最大数は、そのリソースを提供するサーバーによって異なります。たとえば、IIS8 の既定の最大同時接続制限は 4294967295 に設定されています。