108 votes

Comment les sites à fort trafic peuvent-ils gérer plus de 65535 connexions TCP ?

S'il y a une limite au nombre de ports qu'une machine peut avoir et qu'un socket ne peut se lier qu'à un numéro de port non utilisé, comment les serveurs qui reçoivent un nombre extrêmement élevé de requêtes (plus que le numéro de port maximum) gèrent-ils cela ? Faut-il simplement faire en sorte que le système soit distribué, c'est-à-dire qu'il y ait plusieurs serveurs sur plusieurs machines ?

152voto

jowi Points 111

Vous comprenez mal les numéros de port : un serveur n'écoute que sur un seul port et peut avoir un grand nombre de sockets ouverts par des clients se connectant à ce seul port.

Au niveau du TCP, le tuple (ip source, port source, ip destination, port destination) doit être unique pour chaque connexion simultanée. Cela signifie qu'un même client ne peut pas ouvrir plus de 65535 connexions simultanées à un même serveur. Mais un serveur peut (théoriquement) servir 65535 connexions simultanées. par client .

En pratique, le serveur n'est donc limité que par la puissance du processeur, la mémoire, etc. dont il dispose pour répondre aux demandes, et non par le nombre de connexions TCP au serveur.

0 votes

Je me demande comment le NAT du transporteur va affecter cela.

0 votes

@TheLQ Sans CGN chaque client ne peut ouvrir plus de 65535 connexions au même serveur, aucun client ne devrait avoir besoin de presque autant de connexions au même serveur. Avec le CGN, chaque CGN ne peut pas ouvrir plus de 65535 connexions au même serveur, celles-ci devraient être partagées entre tous les clients utilisant ce CGN. Le fait que le CGN puisse ouvrir simultanément 65535 connexions à un serveur et 65535 connexions à un autre serveur est un détail de mise en œuvre, qui peut varier entre les différentes mises en œuvre du CGN.

0 votes

La limite peut être augmentée en ajoutant plus d'adresses IP au CGN ou en déployant plus de CGN. Mais vous pouvez aussi simplement déployer une double pile. Les connexions aux serveurs prenant en charge IPv6 ne passeront pas par le CGN et ne consommeront donc pas de précieux numéros de port.

27voto

the-wabbit Points 40039

Vous vous trompez - l'unicité de la douille est déterminée par cinq facteurs :

  1. l'adresse IP locale
  2. le numéro du port local
  3. l'adresse IP distante
  4. le numéro de port distant
  5. le protocole de transfert (TCP/UDP)

Lorsque vous offrez des services réseau, les points 1. et 2. sont généralement statiques (par exemple, IP 10.0.0.1, port 80), mais à moins que vous ne vous attendiez à des milliers de connexions d'un seul client (ou une seule passerelle NAT), vous n'allez pas repousser les limites des combinaisons possibles de 3. et 4. avant de manquer de ressources locales.

Ainsi, bien que pratiquement un client n'utilisera pas un port déjà utilisé pour une connexion pour ouvrir une connexion vers une adresse IP de destination différente, l'épuisement des numéros de port sera le dernier de vos problèmes pour presque toutes les applications, que ce soit du côté serveur ou client.

Le problème est très réel avec les passerelles NAT (routeurs) qui desservent des clients ayant un nombre élevé de connexions sortantes ouvertes (par exemple, des torrents) - là, vous verrez un épuisement des numéros de port après que le pool de ports disponibles pour le NAT ait été vidé. Dans ce cas, la passerelle NAT est incapable de créer d'autres associations, ce qui coupe effectivement les clients de l'Internet.

0 votes

Pouvez-vous également examiner cette question ? serverfault.com/questions/1005157/

6voto

user8162 Points 270

La question était de savoir comment gérer les grands nombres de connexions (>64k). Les deux méthodes les plus courantes sont les suivantes :

  • Ajout de serveurs supplémentaires, ce qui augmente le nombre d'adresses src/dst et de tuples de numéros de port. Il existe de multiples façons de répartir la charge entre plusieurs serveurs ; le DNS round robin en est une, mais il en existe d'autres.

  • Déployer une NAT de niveau opérateur (qu'un ami appelle, avec dérision et à juste titre selon moi, une NAT de qualité inférieure). Il s'agit essentiellement d'un NAT de NAT. Cela a de très mauvaises implications pour les applications, mais c'est ce que font certains grands fournisseurs lorsqu'ils sont à court d'espace IPv4 et/ou de numéros de port, et/ou qu'ils ne veulent pas passer à IPv6.

2 votes

Si vous lisez plus que le titre, vous verrez que cette question concerne l'épuisement du port et que le PO s'est trompé sur son fonctionnement. Comment exactement cette réponse ajoute-t-elle quelque chose de nouveau et de valeur à cela ?

2 votes

Le PO demande explicitement (et pas seulement dans le titre) "comment les serveurs qui font face à des quantités extrêmement élevées ... de demandes". En laissant de côté la confusion sur le fonctionnement des sockets, c'est une question valide.

1 votes

Excellent travail de couper la question au milieu de la phrase. Le reste de la phrase dit : (more than the max port number) .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X