Wie werden mehrere Client-Verbindungen zu einem einzelnen Webserver hergestellt?

16

Eigentlich lerne ich Computernetzwerke und bin dabei verwirrt, wie ein Webserver mehrere Verbindungen unterhält?

Um es einfach auszudrücken, ich habe durch ein bisschen googeln gelernt, dass Sockets jede Client-Anfrage bearbeiten.

Nehmen wir also an, es gibt einen Webserver und sagen wir 2 Clients mit IPs

Client A: 5.5.5.5
Client B: 10.10.10.10 

Beide versuchen, über Port 80 eine Verbindung zum Server herzustellen.

Nachdem ich gegoogelt habe, wartet der Server auf Port 80 auf eingehende Anfragen. Nehmen wir an, ein Client A versucht, eine Verbindung zum Server herzustellen (TCP / IP-Verbindung herstellen). Währenddessen wird ein Socket zwischen diesen beiden erstellt. Anschließend wird es als separater Thread für die weitere Kommunikation ausgeführt, sodass der Server erneut auf andere Clientanforderungen an diesem bestimmten Port wartet. Und Client B verbindet sich auf die gleiche Weise.

Jetzt ist meine erste Frage:

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

Jetzt können praktisch nicht nur 2 Clients, sondern Tausende und Abermillionen Benutzer eine Verbindung zu einem Server herstellen.

Dann ist meine nächste Frage:

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?

Zuletzt ist meine dritte Frage:

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.

Dies sind meine grundlegenden Fragen, die ich nicht bekomme. Bitte korrigieren Sie mich, wenn ich alles falsch verstehe. Sie können mir einige Bücher / PDFs zum Lesen vorschlagen, wenn die Antworten detailliert sind oder sich nicht besonders auf einen bestimmten Teil konzentrieren. Vielen Dank

Sagaryal
quelle
Hat dir eine Antwort geholfen? In diesem Fall sollten Sie die Antwort akzeptieren, damit die Frage nicht für immer auftaucht und nach einer Antwort sucht. Alternativ können Sie auch Ihre eigene Antwort eingeben und annehmen.
Ron Maupin

Antworten:

6

Nachdem ich gegoogelt habe, wartet der Server auf Port 80 auf eingehende Anfragen.

Genauer gesagt gibt es eine spezielle Art von Buchse, die als "Abhörbuchse" bezeichnet wird.

Normalerweise ist ein Socket einer Kombination aus lokaler IP, lokalem Port, Remote-IP und Remote-Port zugeordnet.

Eine Hörbuchse ist anders. Es ist keiner bestimmten Remote-IP und keinem bestimmten Remote-Port zugeordnet. Es ist einem bestimmten lokalen Port zugeordnet. Es kann mit einer bestimmten lokalen IP verknüpft sein oder nicht.

Normalerweise verfügt Ihr Webserver über einen Listening-Socket mit einem lokalen Port von 80

Nehmen wir an, ein Client A versucht, eine Verbindung zum Server herzustellen (TCP / IP-Verbindung herstellen). Währenddessen wird ein Socket zwischen diesen beiden erstellt.

Ein Paar Sockets, tatsächlich einer auf dem Client, einer auf dem Server.

Die Client-Anwendung erstellt einen Socket und fordert das Client-Betriebssystem auf, eine Verbindung zum Server herzustellen.

Das Client-Betriebssystem weist einen zufälligen lokalen Port zu, wählt eine lokale IP (normalerweise basierend auf der Schnittstelle, an die das Paket gesendet wird) und gibt die von der Client-Anwendung angeforderte Remote-IP und den angeforderten Port ein. Dann wird der Verbindungsaufbau zum Server gestartet.

Das Serverbetriebssystem benachrichtigt den Inhaber des abhörenden Sockets, dass eine neue Verbindung eingeht. Die Serveranwendung akzeptiert die Verbindung und ein neuer Socket wird erstellt, um diese zu verarbeiten.

Mehrere Threads oder sogar Prozesse können denselben Listing-Socket überwachen. Das Betriebssystem stellt sicher, dass genau einer von ihnen eine bestimmte Verbindung akzeptiert.

Dann wird es als separater Thread für seine weitere Kommunikation ausgeführt

Das liegt beim Implementierer der Serveranwendung. Sie können mehrere Threads verwenden oder eine API wie "select" oder "poll" verwenden, mit der ein einzelner Thread mehrere Sockets auf Aktivität überwachen kann.

  1. Wie kommuniziert der Server mit diesen beiden Clients gleichzeitig,
    nachdem die Verbindung hergestellt wurde?

Das Server-Betriebssystem vergleicht die Pakete anhand der Kombination aus Quell-IP, Quell-Port, Ziel-IP und Ziel-Port mit den Sockets und übermittelt sie an den entsprechenden Socket.

  1. Wie werden nun diese Tausenden von Clients mit einem einzelnen Server verbunden?

    Wenn wir davon ausgehen, dass jeder Client über Kabel mit dem Server verbunden ist, ist es praktisch nicht möglich, so viele Sockets auf einer Hardware für die Verbindung aufrechtzuerhalten. Wie werden diese tausend Verbindungen hergestellt und gehandhabt?

"Socket" bezieht sich in diesem Zusammenhang nicht auf einen physischen Socket, sondern nur auf eine Datenstruktur innerhalb des Betriebssystems.

Trotzdem gibt es Grenzen, Tausende sind auf einem modernen Server mühelos machbar, Millionen werden schwierig.

Ist es nicht so, als würde ein Schüler einem Lehrer Fragen stellen, während ein anderer nicht gleichzeitig fragen kann, da dieser bestimmte Schüler gerade beschäftigt ist oder den Lehrer besetzt, so dass andere warten sollten, was wir vergleichen sollten, als Klient B warten sollte wenn Client A kommuniziert.

Computer können ihre Aufmerksamkeit viel besser aufteilen als Menschen. Wenn der Server nur einen Prozessorkern hat, kann er natürlich immer nur eine Sache gleichzeitig erledigen, aber wenn er schnell genug zwischen den Dingen wechseln kann, bemerken die Clients das nicht.

Und natürlich haben heutzutage viele Server mehrere Prozessorkerne.


Eine neue Verbindung, kein Socket, wird erstellt. Ich denke, Sie erweitern die Verwirrung des OP darüber, was eine Steckdose ist.

Es scheint das Problem zu sein, dass der RFC sich von der tatsächlichen Praxis in seiner Definition des Sockels unterscheidet.

Ich habe gerade in der Dokumentation nach "accept" für drei Hauptbetriebssysteme gesucht. Alle reden davon, einen neuen Socket anzulegen.

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

Peter Green
quelle
Zur Antwort von 1. Ich kenne die Socket-Einzigartigkeit. Was ich fragen wollte, ist, ob es 2 eindeutige Sockets gibt und der Server weiß, dass sie unterschiedlich sind. Gibt der Server jedem Socket eine Ausführungszeit, indem die Anforderung zur gleichen Zeit verarbeitet wird? Wenn ich eine Verbindung zu Google herstelle und meine Anfrage bearbeite, bedeutet dies nicht, dass andere Millionen Nutzer anfragen müssen.
Sagaryal
Auch 2. Ich meinte die Ports wie tatsächliche physische, wenn Sie eine Verbindung zu einem Netzwerk herstellen möchten, wie in LAN. Ich könnte die Worte hier falsch interpretieren. Sagen wir, ich verbinde mich wieder mit Google. Und wie Millionen anderer Menschen stellen sie eine Verbindung zu diesem einzelnen Google-Server her. Ich verbinde mich drahtlos von meinem Zuhause und den Millionen Menschen mit Google. Wie werden diese Verbindungen vom Server behandelt? Damit mein Computer das Internet nutzen kann, muss ich eine Verbindung zu einem Port auf meinem Router oder drahtlos herstellen. Haben sie physisch Millionen solcher Ports? Jetzt denke ich, dass es nicht um Server geht, sondern um eine drahtlose Verbindung, oder?
Sagaryal
" Normalerweise ist ein Socket einer Kombination aus lokaler IP, lokalem Port, Remote-IP und Remote-Port zugeordnet. " Ein Socket ist per Definition des RFC die lokale IP-Adresse und der TCP-Port und hat nichts mit den Remote-Adressen zu tun . Eine Verbindung ist die Kombination aus lokalem und Remote-Socket, also der lokalen IP-Adresse, dem lokalen TCP-Port, der Remote-IP-Adresse und dem Remote-TCP-Port. Sie haben das Problem verwirrt.
Ron Maupin
2
" Das Serverbetriebssystem benachrichtigt den Inhaber des abhörenden Sockets, dass eine neue Verbindung eingeht. Die Serveranwendung akzeptiert die Verbindung und es wird ein neuer Socket erstellt, um dies zu handhaben. " Eine neue Verbindung , nicht ein Socket , wird erstellt. Ich denke, Sie erweitern die Verwirrung des OP darüber, was eine Steckdose ist.
Ron Maupin
" Das Server-Betriebssystem vergleicht die Pakete anhand der Kombination aus Quell-IP, Quell-Port, Ziel-IP und Ziel-Port mit den Sockets und leitet sie an den entsprechenden Socket weiter. " Sie verwechseln Sockets erneut mit Verbindungen .
Ron Maupin