Windows Server 2008で保持できるTCP接続の最大数はいくつですか?


11

Cometスタイルのアプリケーションをサポートするために、Windows Server 2008で実行されているサーバーで、できるだけ多くの接続(多くの異なるクライアントからの単一の接続)をできるだけ多く持ちたいです。アプリケーションはC#で記述されています。接続はおしゃべりではなく、開いている必要があります(そして開いたままにします)。大量のメモリと高速CPUを購入することは問題ではありません。

私が知る限り、NICごとに65kの同時オープン接続(ポートの最大数)に制限されます。これは正確ですか?または、なんとか65k接続/ NICを超えることができますか?少なくとも数十万の接続をサポートするLinux用のサーバー製品があるようです。彼らはどうやってこれをしますか?

回答:


9

65k接続をはるかに超えることができます。ポートごとに複数の接続を確立できるため(受け入れられると、リスナーは別のクライアントに接続できます)。通常、クライアントはランダムポートを選択します。Windowsはデフォルトで、これらのランダムポートのうち3000以上に制限されています。そのため、一般的なクライアントはそれを最大限に活用できます。ただし、クライアントを別の方法で構成することもでき、多くの* nixはWindowsよりも多くに制限されています。

接続の最大数を1600万に制限するレジストリ設定があります。しかし、他のより実用的な問題があり、通常はこれを制限します(レジストリ値を変更できます)。

  • Windowsは、接続ごとに約1KBのRAMを使用します(16M接続の場合は最大16GB)。また、アプリは何らかの方法でアクティブな接続を追跡する必要があります(より多くのメモリ)。
  • Windowsは、2時間ごとに応答しない接続もチェックします。16M接続では、これは約0.5ミリ秒ごとです。それらのチェックを行うだけでかなりの帯域幅を消費します。

1
@evilfred:一時ポートは発信TCP接続用です。つまり、クライアントマシンがポート80でWebサーバーに接続するときに一時ポートを使用します。ChrisSが述べたように、そのセッションが確立されると、Webサーバーは別の別のクライアントからのポート80での接続。また、私は彼が答えで徹底的にしようとする際にクライアントの一時的なポート制限について言及したと思います。このクライアントの一時的なポート制限はあなたの懸念ではなく、クライアントの懸念です。@クリスS:私はあなたがあなたの答えで何を意味したかを誤解していないことを願っています。
joeqwerty

1
サーバーが単一のIPでサポートできるインバウンド接続の数に実際の制限はありませんか?宛先ポートが共有されている場合、サーバーはクライアントから受信したデータの送信先をどのように知るのですか?

1
私はクライアントを気にしません。

1
@evilfred:各TCPセッションは、クライアントip | client port <> server ip | server portである4タプルと呼ばれるものを介して「管理」されます。これが、サーバーがWebサーバー上のポート80などの「共有」ポート上の各セッション間のトラフィックを管理する方法です。
joeqwerty

1
そんなこと知ってる。IPごとに可能なサーバーポートは65kのみです。したがって、IPごとに最大65k個のアクティブなソケットがあります。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.