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
Réponses:
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
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.
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é.
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é.
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.
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.
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
la source