Comment plusieurs connexions client sont établies avec un seul serveur Web?

16

En fait, j'apprends les réseaux informatiques et pendant que j'y suis, je suis confus dans la façon dont un serveur Web maintient plusieurs connexions?

Pour dire simplement, j'ai appris à travers Google que les sockets traitent chaque demande client.

Disons donc qu'il y a un serveur web et disons 2 clients avec IP

Client A: 5.5.5.5
Client B: 10.10.10.10 

Ils essaient tous les deux de se connecter au serveur au port 80.

Maintenant, de googler ce que j'ai obtenu, le serveur écoute au port 80 les demandes entrantes. Disons ensuite qu'un client A essaie de se connecter au serveur (établir une connexion TCP / IP). Au cours de laquelle un socket est créé entre ces deux. Ensuite, il est exécuté en tant que thread séparé pour sa communication ultérieure, ce qui fait que le serveur écoute à nouveau les autres demandes des clients sur ce port particulier. Et le client B se connecte de la même manière.

Maintenant ma première question est:

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

Désormais, pratiquement non seulement 2 clients, mais des milliers et des millions d'utilisateurs peuvent se connecter à un serveur.

Alors ma prochaine question est:

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?

Enfin, ma 3ème question est:

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.

Ce sont mes questions de base que je ne reçois pas. Veuillez me corriger si je me trompe. Vous pouvez me suggérer quelques livres / fichiers PDF à lire si les réponses sont détaillées ou ne sont pas particulièrement axées sur une partie spécifique. Merci

Sagaryal
la source
Une réponse vous a-t-elle aidé? Si c'est le cas, vous devez accepter la réponse afin que la question ne continue pas d'apparaître indéfiniment, à la recherche d'une réponse. Alternativement, vous pouvez fournir et accepter votre propre réponse.
Ron Maupin

Réponses:

6

Maintenant, de googler ce que j'ai obtenu, le serveur écoute au port 80 les demandes entrantes.

En effet, plus spécifiquement, il existe un type particulier de socket appelé socket "écoute".

Normalement, un socket est associé à une combinaison d'IP local, de port local, d'IP distant et de port distant.

Une prise d'écoute est différente. Il n'est associé à aucun IP et port distant spécifique. Il est associé à un port local spécifique. Il peut ou non être associé à une adresse IP locale spécifique.

Normalement, votre serveur Web aura une prise d'écoute avec un port local de 80

Disons ensuite qu'un client A essaie de se connecter au serveur (établir une connexion TCP / IP). Au cours de laquelle un socket est créé entre ces deux.

Une paire de sockets en fait une sur le client, une sur le serveur.

L'application cliente crée un socket et demande au système d'exploitation client de le connecter au serveur.

Le système d'exploitation client alloue un port local aléatoire, choisit une adresse IP locale (normalement en fonction de l'interface sur laquelle le paquet sera envoyé) et remplit l'adresse IP distante et le port demandés par l'application cliente. Ensuite, il démarre le processus de connexion au serveur.

Le système d'exploitation du serveur informe le détenteur du socket d'écoute qu'une nouvelle connexion arrive. L'application serveur accepte la connexion et un nouveau socket est créé pour le gérer.

Plusieurs threads ou même processus peuvent surveiller le même socket de listage. Le système d'exploitation veillera à ce que l'un d'entre eux accepte une connexion donnée.

Ensuite, il est exécuté en tant que thread séparé pour sa communication ultérieure

Cela dépend de l'implémenteur de l'application serveur. Ils peuvent choisir d'utiliser plusieurs threads ou ils peuvent choisir d'utiliser une API telle que "select" ou "poll" qui permet à un seul thread de surveiller plusieurs sockets pour l'activité.

  1. Comment le serveur communique-t-il simultanément avec ces deux clients une
    fois la connexion établie?

Le système d'exploitation du serveur fera correspondre les paquets aux sockets par la combinaison de l'IP source, du port source, de l'IP de destination et du port de destination et les livrera au socket approprié.

  1. Maintenant, comment ces milliers de clients sont-ils connectés à un seul serveur?

    Si nous supposons que chaque client est connecté au serveur via un câble, il n'est pratiquement pas possible de maintenir autant de sockets sur un matériel pour la connexion. Comment ces milliers de connexions sont-elles établies et gérées?

Dans ce contexte, «socket» ne fait pas référence à un socket physique, mais simplement à une structure de données au sein du système d'exploitation.

Il y a toujours des limites, des milliers sont facilement réalisables sur un serveur moderne, des millions deviennent difficiles.

N'est-ce pas comme si un élève pose une question à un enseignant, d'autres ne peuvent pas poser en même temps car cet élève en particulier est occupé ou occupe l'enseignant en ce moment, alors les autres devraient attendre, ce que nous comparons que le client B devrait attendre lorsque le client A communique.

Les ordinateurs sont bien meilleurs pour partager leur attention que les gens. Évidemment, si le serveur n'a qu'un seul cœur de processeur, il ne peut faire qu'une seule chose à la fois, mais s'il peut basculer entre les choses assez rapidement, les clients ne le remarqueront pas.

Et bien sûr, de nombreux serveurs ont de nos jours plusieurs cœurs de processeur.


Une nouvelle connexion, et non socket, est créée. Je pense que vous étendez la confusion de l'OP sur ce qu'est une prise.

Il semble que le problème soit que le rfc diffère de la pratique réelle dans sa définition de socket.

Je suis juste allé chercher la documentation pour "accepter" pour trois principaux systèmes d'exploitation, tous parlent d'accepter de créer un nouveau socket.

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
la source
Pour la réponse de 1. Je connais le caractère unique de la prise. Ce que je voulais demander, c'est s'il y a 2 sockets uniques et le serveur sait qu'ils sont différents. Le serveur donne-t-il alors à chaque socket une tranche de temps à exécuter en traitant la demande en même temps? Comme si je me connecte à Google et que je traite ma demande, cela ne signifie pas que d'autres millions de demandes d'utilisateurs sont en attente?
Sagaryal
Aussi 2. Je voulais dire les ports comme un réel lorsque vous voulez vous connecter à un réseau, comme dans le LAN. Je peux mal interpréter les mots ici. Disons que je me connecte à nouveau à Google. Et comme des millions d'autres personnes se connectent à ce serveur google unique. Je me connecte à Google sans fil depuis mon domicile et de même ces millions de personnes. Comment ces connexions sont-elles gérées par le serveur? Comme pour que mon ordinateur utilise Internet, je dois me connecter à un port de mon routeur ou sans fil. Ont-ils physiquement des millions de ces ports? Maintenant, je pense que ce n'est pas une question de serveur mais de connexion sans fil, n'est-ce pas?
Sagaryal
" Normalement, un socket est associé à une combinaison d'IP local, de port local, d'IP distant et de port distant. " Un socket , par définition du RFC, est l'adresse IP locale et le port TCP, et cela n'a rien à voir avec les adresses distantes . Une connexion est la combinaison des sockets locaux et distants, donc l'adresse IP locale, le port TCP local, l'adresse IP distante et le port TCP distant. Vous avez confondu le problème.
Ron Maupin
2
" Le système d'exploitation du serveur informe le détenteur du socket d'écoute qu'une nouvelle connexion arrive. L'application serveur accepte la connexion et un nouveau socket est créé pour la gérer. " Une nouvelle connexion , et non un socket , est créée. Je pense que vous étendez la confusion de l'OP sur ce qu'est une prise.
Ron Maupin
" Le système d'exploitation du serveur fera correspondre les paquets aux sockets par la combinaison de l'IP source, du port source, de l'IP de destination et du port de destination et les fournira au socket approprié. " Encore une fois, vous confondez socket avec connexion .
Ron Maupin