174

これは非常に基本的な質問かもしれませんが、私を混乱させます。

接続された2つの異なるソケットでポートを共有できますか?10万を超える同時接続を処理できるアプリケーションサーバーを作成していますが、システムで使用可能なポートの数は約60k(16ビット)であることがわかっています。接続されたソケットは新しい(専用の)ポートに割り当てられるため、複数のソケットが同じポートを共有できない限り、同時接続の数はポートの数によって制限されます。だから質問。

4

6 に答える 6

240

サーバーソケットは、 1つのポートでリッスンします。そのサーバー上で確立されたすべてのクライアント接続は、接続のサーバー側の同じリスニング ポートに関連付けられます。確立された接続は、クライアント側とサーバー側の IP/ポートのペアの組み合わせによって一意に識別されます。同じサーバー上の複数の接続は、異なるクライアント側のIP/ポートのペアに関連付けられている限り、同じサーバー側のIP/ポートのペアを共有できます。サーバーは、利用可能なシステム リソースが許す限り多くのクライアントを処理できます。に。

クライアント側では、新しいアウトバウンド接続でランダムなクライアント側ポートを使用するのが一般的です。この場合、短時間に多数の接続を行うと、使用可能なポートが不足する可能性があります。

于 2012-06-20T23:32:23.850 に答える
51

接続されたソケットは新しい (専用) ポートに割り当てられます

それは一般的な直感ですが、正しくありません。接続されたソケットが新しい/専用ポートに割り当てられていません。TCP スタックが満たさなければならない唯一の実際の制約は、(local_address、local_port、remote_address、remote_port) のタプルがソケット接続ごとに一意でなければならないということです。したがって、ポート上の各ソケットが異なるリモート ロケーションに接続されている限り、サーバーは同じローカル ポートを使用する多数の TCP ソケットを持つことができます。

http://books.google.com/books?id=ptSC4LpwGA0C&lpg=PA52&dq=socket%20pair%20tuple&pg=PA52#v=onepage&q=socket%20pair%20tuple&f=falseの「ソケット ペア」の段落を参照

于 2012-06-20T23:28:19.537 に答える