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