web-dev-qa-db-ja.com

サーバーの単一ポート(ソケット)での同時接続の最大数

同じポート(単一ソケット)上のサーバーと通信できる同時クライアントの最大数(異なるポート番号を使用)はいくつですか?この数に影響を与える可能性のある要因は何ですか? Linux環境でtelnetを使用してこの情報を探しています。

25

これは、オペレーティングシステムによって部分的に異なります。

ただし、特定のポートに制限はありません。同時接続数には制限がありますが、通常、カーネルがサポートするファイル記述子の数(2048など)によって制限されます。

TCP接続は一意であり、接続はエンドポイントのペア(ローカルおよびリモートのIPアドレスとポート)であるため、1000の接続がもう一方の端が異なるため、接続はすべて一意であるため、サーバー上の同じポート。

注意すべきもう1つの制限は、マシンは約64Kのアウトバウンド接続、または接続に対するカーネルの制限のいずれか低い方しか作成できないことです。これは、ポートが符号なしの16ビット番号(0〜65535)であり、各送信接続がこれらのポートの1つを使用するためです。

マシンに追加のIPアドレスを与えることにより、これを拡張できます。各IPアドレスは、64Kアドレスの別のアドレススペースです。

30
cletus

あなたが気にする以上のもの。というより。

  • コードが実際に処理できる以上のもの(他の理由により)
  • クライアントが実際に作成する以上のもの
  • パフォーマンス上の理由から、1つのボックスで処理できる以上のもの
  • いずれにしても、ロードバランサーは可用性の理由で複数のロードバランサーに分散させるため、必要な数は1つだけです。

私はそれがそれらすべてよりも多いことを保証できます。多数のソケットにはスケーラビリティの制限があり、回避できます(c10k問題の場合はGoogle)。実際には、Linuxの単一のプロセスで便利に使用される10,000を超えるソケットを持つことが可能です。サーバーごとに複数のプロセスがある場合は、それを再度増やすことができます。

専用のロードバランサーが必要に応じて複数のポートをラウンドロビンできるため、単一のポートを使用する必要はありません。

数千の数千のクライアントプロセスに対してサービスを実行している場合、おそらくそれが機能し続けることがかなり重要であるため、冗長性を確保するにはいくつかのサーバーが必要になります。したがって、さらにいくつかのサーバーを展開する際に問題は発生しません。

5
MarkR