単一のWebサーバーへの複数のクライアント接続はどのように行われますか?


16

実際、私はコンピューターネットワークを学んでいますが、その間、Webサーバーが複数の接続を維持する方法について混乱していますか?

簡単に言うと、いくつかのグーグルでは、ソケットが各クライアント要求を処理することを学びました。

Webサーバーがあり、IPを持つ2つのクライアントがあるとしましょう

Client A: 5.5.5.5
Client B: 10.10.10.10 

どちらもポート80でサーバーに接続しようとします

今、私が得たものをグーグルで調べると、サーバーはポート80で着信要求をリッスンします。次に、クライアントAがサーバーに接続(TCP / IP接続を確立)しようとするとします。この2つの間にソケットが作成されます。その後、さらに通信を行うために別のスレッドとして実行され、サーバーはその特定のポートで他のクライアント要求を再度リッスンします。そして、クライアントBは、同じように接続しています。

今、私の最初の質問は:

1. How does server communicate with these two clients simultaneously  
   after the connection has been established?

現在、実際には2つのクライアントだけでなく、数千および数百万のユーザーがサーバーに接続できます。

それから私の次の質問は:

2. Now, how do those thousands of clients get connected to a single server?

   If we assume every client is connected to the server through wire, it is not 
   practically possible to maintain that many sockets on a hardware for
   connection. How those thousands connections are made and handled?

最後に、3番目の質問は次のとおりです。

3. Above I said (actually heard) how **client A** connected to the the server
   and similarly the client B.

   But I didn't get the part stating "after a TCP/IP connection is made they
   continue separately in a separate socket and making server to listen for 
   other client requests." What does that mean? If one client is communicating
   to the server, how come other can communicate at the same time to same server.

   Isn't it like while a student is asking question to a teacher, other can't
   ask at the same time since that particular student is busy or occupying the
   teacher at the moment so others should wait, which we compare than client B 
   should wait when client A is communicating.

これらは私が得ていない私の基本的な質問です。間違っている場合は修正してください。回答が詳細であるか、特定の部分に特に焦点を合わせていない場合は、いくつかの書籍やPDFを読むことをお勧めします。ありがとう


何か答えがありましたか?もしそうなら、質問が永遠にポップアップし続けないように答えを受け入れて、答えを探してください。または、独自の回答を提供して受け入れることもできます。
ロンモーピン

回答:


6

今、私が得たものをグーグルで調べると、サーバーはポート80で着信要求をリッスンします。

実際、より具体的には、「リスニング」ソケットと呼ばれる特別なタイプのソケットがあります。

通常、ソケットは、ローカルIP、ローカルポート、リモートIP、およびリモートポートの組み合わせに関連付けられます。

リスニングソケットは異なります。特定のリモートIPおよびポートに関連付けられていません。特定のローカルポートに関連付けられています。特定のローカルIPに関連付けられている場合と関連付けられていない場合があります。

通常、Webサーバーにはローカルポート80のリスニングソケットがあります。

次に、クライアントAがサーバーに接続(TCP / IP接続を確立)しようとするとします。この2つの間にソケットが作成されます。

ソケットのペアは、実際にはクライアントに1つ、サーバーに1つです。

クライアントアプリケーションはソケットを作成し、クライアントOSにサーバーに接続するよう要求します。

クライアントOSは、ランダムなローカルポートを割り当て、ローカルIPを選択し(通常、パケットが送信されるインターフェイスに基づいて)、クライアントアプリケーションによって要求されたリモートIPとポートを埋めます。次に、サーバーへの接続プロセスを開始します。

サーバーOSは、新しい接続が着信していることを待機ソケットの所有者に通知します。サーバーアプリケーションは接続を受け入れ、それを処理するために新しいソケットが作成されます。

複数のスレッドまたはプロセスでさえ、同じリストソケットを監視できます。OSは、そのうちの1つだけが特定の接続を受け入れるようにします。

その後、さらなる通信のために別のスレッドとして実行されます

これは、サーバーアプリケーションの実装者次第です。複数のスレッドを使用するか、単一のスレッドが複数のソケットのアクティビティを監視できるようにする「選択」や「ポール」などのAPIを使用することもできます。


  1. 接続が確立された後、サーバーはこれら2つのクライアントと同時にどのように通信しますか?

サーバーOSは、送信元IP、送信元ポート、宛先IP、および宛先ポートの組み合わせによってパケットをソケットと照合し、適切なソケットに配信します。

  1. さて、これらの数千のクライアントはどのようにして単一のサーバーに接続しますか?

    すべてのクライアントが有線でサーバーに接続されていると仮定した場合、接続用のハードウェア上にその数のソケットを維持することは実際上不可能です。これらの何千もの接続がどのように行われ、処理されますか?

このコンテキストの「ソケット」は、物理ソケットを指すのではなく、オペレーティングシステム内のデータ構造を指すだけです。

それでも制限があり、数千は最新のサーバーで簡単に実行できますが、数百万は困難になります。

生徒が教師に質問している間は、他の人は同時に質問することはできませんクライアントAが通信しているとき。

コンピューターは、人々よりも注意を分割するのに優れています。サーバーにプロセッサコアが1つしかない場合は、一度に1つの処理しか実行できないことは明らかですが、クライアントが十分にすばやく切り替えられる場合、クライアントはそれに気付かないでしょう。

もちろん、今日の多くのサーバーには複数のプロセッサコアが搭載されています。


ソケットではなく、新しい接続が作成されます。ソケットとは何かというOPの混乱を広げていると思います。

問題は、rfcが実際のプラクティスとはソケットの定義が異なることです。

私は行って、3つの主要なオペレーティングシステムの「accept」のドキュメントを調べましたが、それらはすべて新しいソケットの作成を受け入れることについて語っています。

http://man7.org/linux/man-pages/man2/accept.2.html

https://www.freebsd.org/cgi/man.cgi?query=accept&sektion=2

https://msdn.microsoft.com/en-us/library/windows/desktop/ms737526%28v=vs.85%29.aspx


1の答えについては、ソケットの一意性について知っています。私が尋ねたいのは、2つのユニークなソケットがあり、サーバーがそれらが異なることを知っているかどうかです。次に、サーバーは各ソケットにリクエストを同時に処理することで実行するタイムスライスを与えますか?Googleに接続してリクエストを処理している場合、他の100万人のユーザーリクエストが保留になっているわけではありませんか?
サガリャル

また、2。LANなどのネットワークに接続する場合、実際の物理ポートのようなポートを意味します。ここで言葉を誤解しているかもしれません。もう一度Googleに接続するとします。そして、他の何百万人もの人々がその単一のGoogleサーバーに接続しています。私は自宅からワイヤレスでグーグルに接続しています。これらの接続はサーバーによってどのように処理されますか。コンピューターがインターネットを使用するように、ルーターのポートに接続するか、ワイヤレスで接続する必要があります。彼らは物理的に何百万ものそのようなポートを持っていますか?今私はサーバーについてではないと思うが、無線接続はそれですか?
サガリャル

通常、ソケットはローカルIP、ローカルポート、リモートIP、およびリモートポートの組み合わせに関連付けられています。」RFCの定義によるソケットは、ローカルIPアドレスとTCPポートであり、リモートアドレスとは関係ありません。 。接続は、ローカルIPアドレス、ローカルTCPポート、リモートIPアドレス、およびリモートのTCPポートので、ローカルおよびリモートのソケットの組み合わせです。問題を混同しました。
ロンモーピン

2
サーバーOSは、新しい接続が着信していることをリスニングソケットの所有者に通知します。サーバーアプリケーションは接続を受け入れ、それを処理するために新しいソケットが作成されます。ソケットではなく、新しい接続が作成されます。ソケットとは何かというOPの混乱を広げていると思います。
ロンMaupinの

サーバーOSは、送信元IP、送信元ポート、宛先IP、および宛先ポートの組み合わせによってパケットをソケットと照合し、適切なソケットに配信します。」再び、ソケット接続を混同しています
ロンモーピン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.