web-dev-qa-db-fra.com

Comment un serveur Web peut-il gérer les demandes entrantes de plusieurs utilisateurs à la fois sur un seul port (80)?

Comment un serveur Web gère-t-il plusieurs demandes entrantes simultanément sur un seul port (80)?

Exemple: Parallèlement, 300 000 utilisateurs souhaitent voir une image provenant de www.abcdef.com, affectée à l’IP 10.10.100.100 et au port 80. Comment donc www.abcdef.com peut-il gérer la charge des nouveaux utilisateurs?

Est-ce qu'un seul serveur (affecté à l'adresse IP 10.10.100.100) peut gérer cette grande quantité d'utilisateurs entrants? Sinon, comment une adresse IP peut-elle être attribuée à plusieurs serveurs pour gérer cette charge? 

26
user2032344

De tcpipguide

Cette identification des connexions utilisant à la fois les sockets client et serveur est ce qui offre la souplesse nécessaire pour permettre plusieurs connexions entre des périphériques que nous prenons pour acquis sur Internet. Par exemple, les processus de serveur d'applications occupés (tels que les serveurs Web) doivent être en mesure de gérer les connexions de plusieurs clients, sinon le Web serait pratiquement inutilisable. Étant donné que la connexion est identifiée à l'aide du socket du client et du serveur, cela ne pose aucun problème. En même temps que le serveur Web maintient la connexion mentionnée ci-dessus, il peut facilement avoir une autre connexion, le port 2199 à l'adresse IP 219.31.0.44. Ceci est représenté par l'identifiant de connexion:

(41.199.222.3:80, 219.31.0.44:2199). 

En fait, nous pouvons avoir plusieurs connexions du même client au même serveur. Chaque processus client se voit attribuer un numéro de port éphémère différent. Par conséquent, même s’ils tentent tous d’accéder au même processus serveur (tel que le processus serveur Web à 41.199.222.3:80), ils auront tous un socket client les liaisons. C'est ce qui vous permet de faire plusieurs demandes simultanées au même site Web à partir de votre ordinateur.

Encore une fois, TCP garde une trace de chacune de ces connexions indépendamment, de sorte que chaque connexion ignore les autres. TCP peut gérer des centaines voire des milliers de connexions simultanées. La seule limite est la capacité de l'ordinateur exécutant TCP et la bande passante des connexions physiques: plus il y a de connexions simultanées, plus chacune doit partager des ressources limitées.

14
a.m.

Un port est juste un nombre magique. Cela ne correspond pas à un matériel. Le serveur ouvre un socket qui "écoute" le port 80 et "accepte" les nouvelles connexions de ce socket. Chaque nouvelle connexion est représentée par un nouveau socket dont le port local est également le port 80 mais dont l'adresse ip: port distante correspond au client qui s'est connecté. Donc, ils ne sont pas mêlés. Vous n'avez donc pas besoin de plusieurs adresses IP ou même de plusieurs ports du côté serveur.

12
user207421

TCP prend en charge l'identification du client
Comme le dit une heure, TCP se charge de l’identification du client et le serveur ne voit qu’une "socket" par client.
Dites qu'un serveur de 10.10.100.100 écoute le port 80 pour les connexions entrantes TCP (HTTP est construit sur TCP). Le navigateur d'un client (sous 10.9.8.7) se connecte au serveur à l'aide du port client 27143. Le serveur voit: "le client 10.9.8.7:27143 veut se connecter, acceptez-vous?". L'application serveur accepte et reçoit un "descripteur" (un socket) pour gérer toutes les communications avec ce client. Le descripteur envoie toujours les paquets à l'adresse 10.9.8.7:27143 avec les en-têtes appropriés TCP.

Les paquets ne sont jamais simultanés
Maintenant, physiquement, il n’ya généralement qu’une (ou deux) connexions reliant le serveur à Internet, de sorte que les paquets ne peuvent arriver que dans un ordre séquentiel. La question est la suivante: quel est le débit maximum dans la fibre et combien de réponses le serveur peut-il calculer et envoyer en retour? Outre le temps passé par le processeur ou les goulots d'étranglement de la mémoire lors de la réponse aux demandes, le serveur doit également conserver certaines ressources (au moins 1 socket actif par client) jusqu'à la fin de la communication et donc consommer de la RAM. Le débit est obtenu via certaines optimisations (non mutuellement exclusives): sockets non bloquants (pour éviter les latences de traitement en pipeline), multi-threading (pour utiliser plus de cœurs/threads de processeur).

Améliorer davantage le débit des demandes: équilibrage de la charge
Enfin, les serveurs situés sur la face avant des sites Web ne font généralement pas tout le travail eux-mêmes (en particulier les tâches les plus compliquées, telles que l'interrogation de base de données, les calculs, etc.), ni les tâches différées, ni même les demandes HTTP aux serveurs distribués, tout en continuant à traiter de manière triviale (par exemple, le transfert) autant de demandes par seconde que possible. La répartition du travail sur plusieurs serveurs est appelée équilibrage de la charge .

4
maxbc

la réponse est: hôtes virtuels, dans l'en-tête HTTP est le nom du domaine afin que le serveur Web sache quels fichiers sont exécutés ou envoyés au client

0
Muflix