460 votes

Comment plusieurs clients se connectent-ils simultanément à un port, disons 80, sur un serveur?

Je comprends les bases du fonctionnement des ports. Cependant, ce que je ne comprends pas, c'est comment plusieurs clients peuvent se connecter simultanément au port 80. Je sais que chaque client a un port unique (pour leur machine). Le serveur répond-il d'un port disponible au client, et indique simplement que la réponse provient de 80? Comment cela marche-t-il?

533voto

Borealid Points 35075

Tout d'abord, un "port" est juste un nombre. Une "connexion à un port" représente vraiment est un paquet qui a un nombre spécifié dans son "port de destination" champ d'en-tête.

Maintenant, il y a deux réponses à votre question, l'un pour la dynamique des protocoles et une pour les apatrides protocoles.

Pour un protocole sans état (c'est à dire UDP), il n'y a pas de problème parce que les "connexions" n'existent pas - plusieurs personnes peuvent envoyer des paquets vers le même port, et leurs paquets arriveront quelle que soit la séquence. Personne n'est jamais dans le "connecté" de l'état.

Pour une dynamique de protocole (comme TCP), une connexion est identifiée par un 4-tuple composé de source et de destination, les ports et les adresses IP source et destination. Ainsi, si deux machines différentes, se connecter sur le même port sur une troisième machine, il y a deux connexions différentes parce que les adresses ip source diffèrent. Si la même machine (ou deux derrière un NAT ou partager la même adresse IP) se connecte à deux reprises pour une seule télécommande fin, les connexions sont différenciés par le port source (qui est généralement un hasard élevées de port).

Simplement, si je me connecter au même serveur web deux fois à partir de mon client, les deux connexions seront différents ports source de mon point de vue et les ports de destination à partir du serveur web. Donc, il n'y a pas d'ambiguïté, même si les deux connexions sont les mêmes adresses IP source et destination.

Les Ports sont un moyen de multiplex adresses IP ainsi que les différentes applications peuvent écouter sur la même adresse IP ou le protocole de paire. À moins qu'une demande définit son propre protocole de niveau supérieur, il n'y a aucun moyen de multiplexer un port. Si deux connexions à l'aide du même protocole identique la source et la destination de l'IPs et de l'identique ports source et destination, ils doivent être de la même connexion.

479voto

BuckCherry Points 919

Important:

Je suis désolé de dire que la réponse de "Borealid" est imprécis et parfois incorrect - tout d'abord il n'y a pas de rapport avec l'état de plénitude et de l'apatridie pour répondre à cette question, et surtout, la définition de la n-uplet pour un socket est incorrect.

D'abord rappeler deux règles ci-dessous:

  1. La clé primaire d'une socket: socket est identifié par {SRC-IP, SRC-PORT, DEST-IP, DEST-PORT, PROTOCOL} pas en {SRC-IP, SRC-PORT, DEST-IP, DEST-PORT} - Protocole est une partie importante d'une prise de définition.

  2. Processus du système d'exploitation Et Douille de la cartographie: Un processus peut être associé à (ouvrir/pouvez écouter) prises multiples qui pourraient être évident pour beaucoup de lecteurs.

Exemple 1: Deux clients qui se connectent à la même serveur port: socket1 {SRC-A, 100, DEST-X,80, TCP} et socket2{SRC-B, 100, DEST-X,80, TCP}. Cela signifie que l'hôte d'Un se connecte au serveur X sur le port 80 et un autre hôte B se connecte également à même serveur X sur le même port 80. Maintenant, comment le serveur s'occupe de ces deux prises décide si un serveur est mono-thread ou plusieurs filetée (j'expliquerai cela plus tard), ce qui est important qu'un serveur peut écouter à prises multiples simultanément.

Pour répondre à la question initiale du post:

Indépendamment de l'état ou d'apatride, de protocoles, de deux les clients peuvent se connecter au même serveur, port, car, pour chaque client, nous pouvons attribuer une autre prise de courant (comme l'adresse IP du client sera certainement différent). Un même client peut aussi avoir deux prises de connexion à même le port du serveur - depuis ces sockets diffèrent par SRC-PORT. Avec toute équité, "Borealid" essentiellement mentionné la même réponse correcte, mais la référence à l'état-moins de/plein était un peu inutile/confus.

Pour répondre à la deuxième partie de la question sur la façon dont un serveur connaît la prise de réponse. D'abord comprendre que pour un seul processus serveur qui est à l'écoute même port, il pourrait y avoir plus d'une sockets (peut-être à partir d'un même client ou à partir de différents clients). Maintenant, tant que serveur connaît la demande est associé avec quel support, il peut toujours répondre à un client en utilisant le même socket. Donc un serveur n'a jamais besoin d'ouvrir un autre port dans son propre nœud que celui d'origine sur le client qui a d'abord essayé de se lier. Si un serveur alloue serveur différent-ports après une socket est lié, alors à mon avis le serveur est de gaspiller ses ressources et il faut avoir besoin du client pour lier de nouveau à la nouvelle port attribué.

Un peu plus complet:

Exemple 2: Il est question très intéressante qui peut d'un serveur à deux processus différents écouter même port. Si vous ne considérez pas le protocole comme l'un des paramètre définissant socket alors la réponse est non. Initiatively c'est donc parce que nous pouvons dire que dans ce cas, pour un seul client tente de se connecter à un serveur-port n'aura pas de mécanisme de mentionner lequel des deux processus d'écoute le client a l'intention de. C'est le même thème affirmé par la règle (2). Cependant c'est la MAUVAISE réponse, car "protocole" est également une partie de la prise de définition. Ainsi, deux processus en même nœud peut écouter le même port que si ils sont en utilisant un protocole différent. Par exemple deux indépendants des clients (dire qu'on est à l'aide de TCP et l'autre est à l'aide du protocole UDP) peuvent se lier et de communiquer à un même nœud de serveur et pour le même port, mais ils doivent être desservis par deux différentes serveur de processus.

Types de serveur unique et multiple:

Lorsqu'un serveur de processus de l'écoute d'un port-à-dire plusieurs sockets peut se connecter simultanément et de communiquer avec le même serveur. Si un serveur n'utilise qu'un seul enfant-processus pour répondre à toutes les sockets puis le serveur est appelé mono-processus/thread et si le serveur utilise plusieurs sous-processus pour servir de chaque prise par l'un des sous-processus, alors le serveur est appelée multi-processus/fileté serveur. Notez que quel que soit le type du serveur un serveur peut/doit utilise toujours le même socket pour répondre de retour (pas besoin d'allouer un autre serveur-port).

A suggéré de Livres et de repos des deux volumes si vous le pouvez.

** Une Note sur la relation Parent/Enfant (en réponse à requête/commentaire de "Alexandru Ioan Cucu') **

Partout où je l'ai mentionné tout concept dans le cas de deux processus disons A et B, qui considèrent qu'ils ne sont pas liés par la relation de parent-enfant. OS (surtout UNIX) par conception, un processus enfant d'hériter de tous les Fichiers descripteurs (FD) de parents. Ainsi, tous les sockets (UNIX comme système d'exploitation sont également une partie de FD) qu'un processus d'écoute, peut être écouté par beaucoup plus de processus A1, A2, .. tant qu'ils sont liés par la relation parent-enfant à A. Mais un processus indépendant de B (c'est à dire n'ayant aucune relation parent-enfant à Un) ne peut pas écouter même socket. En outre, notez également que cette règle interdisant de deux processus indépendants pour écouter de la même prise se trouve sur un OS (ou de son réseau de bibliothèques), et de loin, c'est obéi par la plupart des OS. Cependant, on peut créer ses propres OS, ce qui peut très bien violer cette restriction.

31voto

m1tk4 Points 2217

Normalement, pour chaque client se connectant, le serveur crée un processus fils communiquant avec le client (TCP). Le serveur parent transmet à l'enfant un socket établi qui communique avec le client.

Lorsque vous envoyez les données à un socket à partir de votre serveur enfant, la pile TCP dans le système d'exploitation crée un paquet qui revient au client et définit le "from port" sur 80.

-1voto

yosh Points 11

Trouvé ceci sur mon cisco livre:

"L'Application des processus s'exécutant sur des serveurs. Un seul serveur peut exécuter plusieurs processus en même temps. Ces processus attendre jusqu'à ce qu'un client établit une communication avec une demande de renseignements ou d'autres services.

Chaque processus de l'application en cours d'exécution sur le serveur est configuré pour utiliser un numéro de port, soit par défaut ou manuellement par un administrateur système. Un serveur ne peut pas avoir deux services attribué le même numéro de port dans le même mode de transport, les services de la couche. Un hôte exécutant une application de serveur web et d'une application de transfert de fichiers ne peut pas avoir tous les deux configurés pour utiliser le même port (par exemple, le port TCP 8080). Un serveur actif de l'application affecté à un port spécifique est considéré comme ouvert, ce qui signifie que la couche de transport accepte et traite les segments adressée à ce port. Toutes les demandes entrantes des clients adressée à la prise correcte est accepté et les données sont transmises au serveur d'application. Il peut y avoir simultanément un grand nombre de ports ouverts sur un serveur, un pour chaque actif de l'application serveur. Il est commun pour un serveur afin de fournir plus d'un service dans le même temps, comme un serveur web et un serveur FTP."

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X