最新の Linux ボックスが保持できるオープン TCP 接続の理論上の最大数はどれくらいですか?

StackOverflow https://stackoverflow.com/questions/2332741

質問

ハードウェアのパフォーマンスが無限であると仮定すると、Linux ボックスは 65536 を超えるオープン TCP 接続をサポートできますか?

エフェメラル ポートの数 (<65536) により、1 つのローカル IP から 1 つのリモート IP 上の 1 つのポートへの接続数が制限されることを理解しています。

タプル (ローカル IP、ローカル ポート、リモート IP、リモート ポート) は、TCP 接続を一意に定義するものです。これは、これらのパラメーターの 1 つ以上が空いていれば、65K を超える接続がサポートできることを意味しますか。例えば複数のローカル IP から複数のリモート ホスト上の単一のポート番号への接続。

システムにはさらに 16 ビット制限がありますか?おそらくファイル記述子の数でしょうか?

役に立ちましたか?

解決

単一のリスニングポートが同時に複数の接続を受け付けることができます。

しばしば引用される「64K」は制限があり、それはのサーバポートごとにクライアントあたりの、そして明確なニーズます。

各TCP / IPパケットは、対処するための基本的に4つのフィールドがあり、これらは次のとおりです:

source_ip source_port destination_ip destination_port
< client            > < server                      >

の内部TCPスタック、これら四つのフィールドは接続(例えば、ファイルディスクリプタ)にパケットを一致させるために複合キーとして使用されます。

クライアントが同じ宛先に同じポートに多くの接続を持っている場合は、

、その後、それらのフィールドの3つが同じになります - だけsource_portは異なる接続を区別するために変わります。ポートは16ビットの数であり、したがって、任意の所与のクライアントは、任意のホストポートに持つことができる接続の最大数は64Kである。

しかし、複数のクライアントがそれぞれいくつかのサーバーのポートへの接続64Kまで持つことができ、サーバは複数のポートを持っているかのどちらか、その後することができます乗算そのさらにます。

マルチホームされている場合 だから、本当の制限は、ファイル記述子です。制限は、システムが許可するように設定されていて、リソースが処理することをファイル記述子の数が実際にあるように、各個別のソケット接続は、ファイルディスクリプタを与えています。最大限界は、最大300Kを超える典型的であるが、構成可能であり、例えばのsysctlするます。

通常の箱のために自慢している現実的な限界は、例えば80Kの周りにある単一のJabberは、メッセージングサーバをねじ込みます。

他のヒント

サーバーの実行を考えていて、1 台のマシンからどれだけの接続を処理できるかを判断しようとしている場合は、次の記事を読んでください。 C10k問題 そして、同時に多数のクライアントにサービスを提供する際に伴う潜在的な問題。

あなたはユーザランドでTCPを生ソケット(SOCK_RAW)を使用して再実装した場合、私は答えのみ(local address, source port, destination address, destination port)タプルの数(ローカルアドレスあたり〜2 ^ 64)で、この場合に限られていると思います。

これは、もちろん、すべてのこれらの接続の状態を維持するために多くのメモリを取るだろう、と私はあなたが動揺を取得&/またはユーザーに代わって応答から、カーネルのTCPスタックを維持するために、いくつかのiptablesのルールを設定しなければならないと思います。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top