web-dev-qa-db-fra.com

Nombre maximal de connexions simultanées sur un seul port (socket) du serveur

Quel pourrait être le nombre maximal de clients simultanés (utilisant un numéro de port différent) pouvant communiquer avec un serveur sur le même port (socket unique)? Quels sont les facteurs qui pourraient influencer ce dénombrement? Je recherche ces informations avec telnet dans un environnement Linux.

25
Karthik Balaguru

Cela dépend en partie de votre système d'exploitation.

Il n'y a cependant aucune limite sur un port spécifique. Le nombre de connexions simultanées est cependant limité, généralement limité par le nombre de descripteurs de fichiers pris en charge par le noyau (par exemple 2048).

La chose à retenir est qu'une connexion TCP est unique et qu'une connexion est une paire de points de terminaison (adresse IP locale et distante et port), donc peu importe si 1000 connexions se connectent au même port sur un serveur car les connexions sont toujours uniques car l'autre extrémité est différente.

L'autre limite à savoir est qu'une machine ne peut établir que 64 Ko de connexions sortantes ou la limite du noyau sur les connexions, la valeur la plus faible étant retenue. En effet, le port est un numéro 16 bits non signé (0-65535) et chaque connexion sortante utilise l'un de ces ports.

Vous pouvez l'étendre en donnant à une machine des adresses IP supplémentaires. Chaque adresse IP est un autre espace d'adressage de 64 Ko d'adresses.

30
cletus

Plus que ce dont vous vous souciez. Ou plutôt.

  • Plus que ce que votre code peut réellement gérer (pour d'autres raisons)
  • Plus que vos clients ne gagneront
  • Plus que ce que vous pouvez gérer sur une seule boîte pour des raisons de performances
  • Plus que ce dont vous avez besoin sur une seule boîte, car vos équilibreurs de charge les répartiront entre plusieurs pour des raisons de disponibilité de toute façon

Je peux garantir que c'est plus que tout cela. Il existe des limitations d'évolutivité avec un grand nombre de sockets, qui peuvent être contournées (Google pour le problème c10k). En pratique, il est possible d'avoir plus de 10 000 sockets utilement utilisées par un seul processus sous Linux. Si vous avez plusieurs processus par serveur, vous pouvez à nouveau l'augmenter.

Il n'est pas nécessaire d'utiliser un seul port, car vos équilibreurs de charge dédiés pourront effectuer un round-robin plusieurs ports si nécessaire.

Si vous exécutez un service pour plusieurs dizaines de milliers de processus client, il est probablement assez important qu'il continue de fonctionner, vous aurez donc besoin de plusieurs serveurs pour la redondance de TOUTE FAÇON. Par conséquent, vous n'aurez aucun problème à déployer quelques serveurs supplémentaires.

5
MarkR