回答:
ポート番号を非常に誤解しています。サーバーは1つのポートでのみリッスンし、その1つのポートに接続しているクライアントからの多数のオープンソケットを持つことができます。
TCPレベルでは、タプル(ソースIP、ソースポート、宛先IP、宛先ポート)は、同時接続ごとに一意である必要があります。つまり、単一のクライアントはサーバーへの65535を超える同時接続を開くことができません。しかし、サーバーは(理論的に)クライアントごとに 65535の同時接続をサーバーできます。
そのため、実際には、サーバーは、サーバーへのTCP接続の数ではなく、要求を処理するために必要なCPU能力、メモリなどの量によってのみ制限されます。
あなたは間違っています-ソケットの一意性は4つの要因によって決まります。
ネットワークサービスを提供する場合、1および2は通常静的(IP 10.0.0.1、ポート80など)ですが、単一のクライアント(または単一のNATゲートウェイ)から数千の接続が予想される場合を除き、ローカルリソースが不足する前に、3と4の可能な組み合わせの境界。
したがって、実際には、クライアントは接続にすでに使用されているポートを使用して別の宛先IPアドレスへの接続を開くことはありませんが、ポート番号の枯渇は、ほとんどすべてのアプリケーションの問題のうち、サーバー上またはクライアント側。
問題は非常に現実的なものであり、NATゲートウェイ(ルーター)が多数のオープンアウトバウンド接続(トレントなど)を使用するクライアントにサービスを提供しています。この場合、NATゲートウェイは追加のアソシエーションを作成できないため、クライアントをインターネットから効果的に切断します。
問題は、大量(> 64k)の接続カウントを処理する方法でした。最も一般的な2つの方法は次のとおりです。
サーバーを追加すると、src / dstアドレスとポート番号タプルの数が増えます。複数のサーバー間で負荷を共有する方法は複数あります。DNSラウンドロビンは1つです。他のものがあります
「キャリアグレードのNAT」を展開します(私の見解では、友人はばかばかしく正確に「クラム級のNAT」と呼んでいます)。これは本質的にNATのNATです。これはアプリケーションに非常に悪い影響を与えますが、一部の大規模プロバイダーは、IPv4スペースやポート番号が不足したり、IPv6に移行したくない場合にそれを行います。
(more than the max port number)
です。