トラフィックの多いサイトは65535を超えるTCP接続をどのように処理しますか?


29

1台のマシンが持つことのできるポートの数に制限があり、ソケットが未使用のポート番号にしかバインドできない場合、サーバーはこれをどのように処理しますか?システムを分散させる、つまり、多くのマシンに多くのサーバーを配置するだけで実現できますか?

回答:


55

ポート番号を非常に誤解しています。サーバーは1つのポートでのみリッスンし、その1つのポートに接続しているクライアントからの多数のオープンソケットを持つことができます。

TCPレベルでは、タプル(ソースIP、ソースポート、宛先IP、宛先ポート)は、同時接続ごとに一意である必要があります。つまり、単一のクライアントはサーバーへの65535を超える同時接続を開くことができません。しかし、サーバーは(理論的に)クライアントごとに 65535の同時接続をサーバーできます

そのため、実際には、サーバーは、サーバーへのTCP接続の数ではなく、要求を処理するために必要なCPU能力、メモリなどの量によってのみ制限されます。


キャリアグレードNATがこれにどのように影響するのだろうか
-TheLQ

@TheLQ CGNを使用しない場合、各クライアントは同じサーバーへの65535以上の接続を開くことができません。同じサーバーへの接続をほぼ必要とするクライアントはありません。CGNでは、各CGNは同じサーバーへの65535を超える接続を開くことができません。それらは、そのCGNを使用するすべてのクライアント間で共有する必要があります。CGNが1つのサーバーへの65535接続と別のサーバーへの65535接続を同時に開くことができるかどうかは実装の詳細であり、CGNの実装によって異なる場合があります。
カスペルド14年

IPアドレスをCGNに追加するか、CGNを展開することにより、制限を増やすことができます。ただし、デュアルスタックを展開することもできます。その後、IPv6をサポートするサーバーへの接続はCGNを通過しないため、貴重なポート番号を消費しません。
カスペルド14年

14

あなたは間違っています-ソケットの一意性は4つの要因によって決まります。

  1. ローカルIPアドレス
  2. ローカルポート番号
  3. リモートIPアドレス
  4. リモートポート番号

ネットワークサービスを提供する場合、1および2は通常静的(IP 10.0.0.1、ポート80など)ですが、単一のクライアント(または単一のNATゲートウェイ)から数千の接続が予想される場合を除き、ローカルリソースが不足する前に、3と4の可能な組み合わせの境界。

したがって、実際には、クライアントは接続にすでに使用されているポートを使用して別の宛先IPアドレスへの接続を開くことはありませんが、ポート番号の枯渇は、ほとんどすべてのアプリケーションの問題のうち、サーバー上またはクライアント側。

問題は非常に現実的なものであり、NATゲートウェイ(ルーター)が多数のオープンアウトバウンド接続(トレントなど)を使用するクライアントにサービスを提供しています。この場合、NATゲートウェイは追加のアソシエーションを作成できないため、クライアントをインターネットから効果的に切断します。


2

問題は、大量(> 64k)の接続カウントを処理する方法でした。最も一般的な2つの方法は次のとおりです。

  • サーバーを追加すると、src / dstアドレスとポート番号タプルの数が増えます。複数のサーバー間で負荷を共有する方法は複数あります。DNSラウンドロビンは1つです。他のものがあります

  • 「キャリアグレードのNAT」を展開します(私の見解では、友人はばかばかしく正確に「クラム級のNAT」と呼んでいます)。これは本質的にNATのNATです。これはアプリケーションに非常に悪い影響を与えますが、一部の大規模プロバイダーは、IPv4スペースやポート番号が不足したり、IPv6に移行したくない場合にそれを行います。


2
タイトル以外を読んでいる場合、この質問はポートの枯渇に関するものであり、OPがどのように機能するかについて誤解されていることがわかります。この回答は、正確に新しい価値をどのように追加しますか?
MDマーラ

2
OPは、「見出しだけでなく」明示的に「サーバーが非常に大量の要求をどのように経験するか」を尋ねます。ソケットがどのように機能するかについての混乱を除けば、それは有効な質問です。
user8162

1
文章の途中で質問をカットする優れた仕事。その文の残りの部分は次のとおり(more than the max port number)です。
MDマーラ

2
おそらく、OPがソケットの仕組みを理解しないと規定した部分を見逃したのでしょう。私は、64kポートを超える方法が議論の有効なトピックであると考えています。あなたが同意しない場合は申し訳ありませんが、それは質問であり、それは私がいくつかの答えを提供したものでした。あなたはこれがどのように反応するか尋ねました。そうです。
user8162

3
それは質問の半分です。OPの最後の文でサポートされているように、より大きな問題は、64kの障壁をどのように破るかです。
user8162
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.