Quel est le nombre maximal de connexions TCP que je peux avoir dans Windows Server 2008?

11

J'aimerais avoir autant de connexions (connexions uniques de nombreux clients différents) que possible sur un serveur fonctionnant sur Windows Server 2008, afin de prendre en charge une application de style Comet. L'application est écrite en C #. Les connexions ne seront pas bavardes, elles doivent simplement être ouvertes (et rester ouvertes). L'achat de charges de mémoire et de processeurs rapides ne pose pas de problème.

Pour autant que je sache, je serai limité à 65 000 connexions ouvertes simultanées par carte réseau - le nombre maximal de ports. Est-ce exact? Ou puis-je aller au-delà des connexions 65k / NIC d'une manière ou d'une autre? Il semble qu'il existe au moins des produits serveurs pour Linux qui prennent en charge des centaines de milliers de connexions. comment font-ils ça?


la source

Réponses:

9

Vous pouvez aller bien au-delà des connexions 65k; car vous pouvez avoir plusieurs connexions par port (une fois accepté, l'auditeur peut se connecter à un autre client). Une extrémité ou l'autre doit avoir une certaine différence, généralement le client choisit un port aléatoire. Windows est par défaut limité à quelques-uns de plus de 3000 de ces ports aléatoires; de sorte que votre client typique maximisera autour de cela. Il est cependant possible de configurer le client différemment, et beaucoup * nix sont limités à beaucoup plus que Windows.

Il existe un paramètre de registre limitant le nombre maximal de connexions à 16 millions. Mais il existe d'autres problèmes plus pratiques qui vous limiteront généralement à moins (vous pouvez modifier la valeur de registre).

  • Windows prend environ 1 Ko de RAM par connexion (c'est ~ 16 Go pour les connexions 16 Mo); et votre application devra également garder une trace de ses connexions actives d'une manière ou d'une autre (plus de mémoire).
  • Windows vérifiera également les connexions non réactives toutes les 2 heures. À 16 millions de connexions, cela représente environ toutes les 0,5 ms; cela prendrait une bande passante importante juste en faisant ces vérifications.
Chris S
la source
1
@evilfred: les ports éphémères sont destinés aux connexions TCP sortantes, ce qui signifie qu'une machine cliente utilisera un port éphémère lorsqu'elle se connecte à votre serveur Web sur le port 80. Comme Chris S l'a indiqué, une fois cette session établie, le serveur Web est en mesure d'en établir une autre connexion sur le port 80 à partir d'un autre client. De plus, je pense qu'il a mentionné la limite de port éphémère du client en essayant d'être exhaustif dans sa réponse, cette limite de port éphémère du client n'est pas votre préoccupation, c'est la préoccupation des clients. @Chris S: J'espère que je ne dis pas mal ce que vous vouliez dire dans votre réponse.
joeqwerty
1
Il n'y a donc pas de véritable limite sur le nombre de connexions entrantes qu'un serveur peut prendre en charge sur une seule IP? Comment le serveur sait-il où envoyer les données qu'il reçoit d'un client si le port de destination est partagé?
1
Je me fiche du client.
1
@evilfred: Chaque session TCP est "gérée" via ce qu'on appelle un 4-tuple, qui est client ip | port client <> serveur ip | port serveur. C'est ainsi que le serveur gère le trafic entre chaque session sur un port "partagé", tel que le port 80 sur un serveur Web.
joeqwerty
1
Je le sais. Il n'y a que 65 000 ports de serveur possibles par IP. Par conséquent, il y a un maximum de 65 000 sockets actifs par IP.