1

私の知る限り、(単一の汎用)Webサーバーは(他のtcp/updアプリケーションと同様に)ポートを使用してユーザー/プロセスを識別します。ポートは 16 ビットの符号なし整数であるため、範囲は 0 から 65535 です。制限に達したとき、サーバーはどのように動作しますか?

高レベルのサンプル

  1. server1 が 8080 で応答しています。client1はserver1 に接続します (現在、これらはランダムなポートで接続されています: (ただし一意の) server1: 5123 <--> client1:6123)

  2. 別のclient2が server1 に接続します ( server1: 5124 <--> client2:7123 )

つまり、サーバーは、特定のインスタンスに対して 65535 (実際にはそれよりも少ない) に制限されていますか?

4

1 に答える 1

1

最も単純なケースでは、Web サーバーはサーバー システム上の 1 つの TCP ポート (通常はポート 80) のみを消費します。Web サーバーへのすべての接続は、その単一のポートを介して処理されます。残りの 65534 ポートは、他の用途に引き続き使用できます。

これが機能するのは、TCP 接続がサーバー上のポート番号だけでなく、(サーバー IP、サーバー TCP ポート、クライアント IP、クライアント TCP ポート)の組み合わせによって識別されるためです。したがって、サーバーはポート 80 で膨大な数の同時 TCP 接続を持つことができ、他の 3 つの項目を使用してトラフィックが属する接続を識別します。サーバーの IP アドレスが 1 つしかなく、したがって(サーバー IP、サーバー ポート)の部分が Web サーバーへのすべての接続で同一である場合でも、個々の接続は組み合わせの(クライアント IP、クライアント ポート)の部分によって区別できます。

ビジー状態の Unix Web サーバーでコマンドを実行すると、netstat -aこれが実際に動作することがわかります。このコマンドは、サーバーのポート 80 で多数の接続を表示しますが、クライアント IP やポートはすべて異なります。また、システムがポート 80 で新しい接続をリッスンしていると同時に、そのポートで既存の接続をすべて処理していることも示されます。

Web サーバーへの接続の総数は、他の制約 (おそらくメモリ使用量、Web サーバー自体または OS カーネルの任意の制限) または何らかの外部制約 (おそらく外部ファイアウォールまたはゲートウェイの接続テーブル サイズ) によって制限される可能性があります。ただし、16 ビットの TCP ポート範囲によって制限されることはありません。

また、TCP ポートは UDP ポートとは完全に分離されているため、Web サーバーに TCP ポート 80 を使用しても、UDP ポート 80 が他の目的に使用されるのを防ぐことはできません。およびその逆。

于 2012-06-09T20:27:19.893 に答える