65536 +1 Connexion sur un système

35

Il y a 65536 ports pour chaque système du réseau, et chaque connexion ou envoi / réception utilisera l’un de ceux-ci.

Ma question est: que se passe-t-il si nous avons 65536 + 1 les liaisons?!

Je sais que cela ne se produit pas normalement, mais je suis curieux de savoir comment les systèmes d'exploitation le gèrent.

Omid Golparvar
la source
12
La connexion serait refusée. Mais de manière réaliste, vous aurez des problèmes bien avant les connexions ouvertes.
ChrisInEdmonton
1
@ChrisInEdmonton Non. S'il s'agit d'une connexion sortante, une erreur de liaison se produit car elle ne peut pas allouer de port local. S'il s'agit d'une connexion entrante, la limite de ports ne s'applique pas.
user207421
si la connexion est inbout, vous recevrez une connexion refusée, si elle est sortante, votre appel de socket sera erroné. Je ne vais pas mettre cela comme une réponse parce que je ne suis pas sûr.
Jorge Aldo

Réponses:

61

Veuillez noter qu'un système peut gérer plus de 65 536 connexions simultanées, car ils le font ne pas nécessairement utiliser chacun un port séparé.

Une connexion TCP ou un flux UDP est défini par le 4-tuple:

(source IP address, source port, destination IP address, destination port)

Ainsi, même si vous avez un serveur Web avec une seule adresse IP et un seul logiciel serveur HTTP à écouter uniquement sur le port 80, il pourrait en théorie gérer les connexions 65536. par adresse IP du client qui s'y connecte . Donc, connexions 64Ki de l'adresse IP du client 1, plus connexions 64Ki de l'adresse IP du client 2, etc.

Donc, les protocoles supportent, en première approximation, 2 48 connexions / flux vers un seul port TCP ou UDP sur une seule adresse IPv4. Considérez à la fois les protocoles TCP et UDP, ainsi que l'espace d'adressage IPv4 et l'espace d'adressage cosmique / comique d'IPv6, et vous pouvez voir que les protocoles eux-mêmes ne risquent pas d'être jamais la source du nombre de connexions simultanées qu'un hôte peut gérer.

De même, rien dans les protocoles TCP ou UDP n'empêche un ordinateur client d'utiliser un seul port source sur une seule adresse IP pour établir plusieurs connexions sortantes avec plusieurs adresses et ports de serveur. Parfois, les API de réseau d’un système d’exploitation ne facilitent pas cette tâche, mais il est important de se rappeler que, par exemple, la vénérable vieille API "[BSD] Sockets" n’est qu’une des API pour TCP et UDP. TCP et UDP peuvent avoir des fonctionnalités qui ne sont pas exposées par l'API Sockets traditionnelle.

Ainsi, le nombre de connexions TCP ou de flux UDP simultanés qu'un hôte donné peut gérer est limité non pas par les numéros de port, mais par les ressources système telles que l'espace RAM et le temps CPU nécessaires pour suivre toutes ces connexions et les gérer. De plus, les détails spécifiques à la mise en œuvre d'un système d'exploitation peuvent imposer des limites artificielles. Par exemple, dans la philosophie Unix "tout est un fichier", il peut exister un descripteur de fichier pour chaque connexion TCP ou flux UDP. Si votre noyau Unix a une limite au nombre de descripteurs de fichier qu'il peut suivre, cette limite de descripteur de fichier est une limite artificielle au nombre de connexions TCP ou de flux UDP simultanés que votre noyau peut gérer.

Spiff
la source
2
Peut être intéressant de relier à en.wikipedia.org/wiki/C10k_problem dans cette excellente réponse.
ChrisInEdmonton
1
J'ai mis en place un serveur TCP pouvant gérer simultanément 65 534 connexions à partir de toutes les adresses IP possibles. Il ne fait pas grand chose - il fait simplement écho au texte entrant avec quelques substitutions de caractères - mais il fonctionne sur une très petite plate-forme matérielle. Je ne pense pas que ce soit tout à fait conforme aux RFC, mais cela semble plutôt bien fonctionner, même si on ne sait ni combien de connexions TCP sont ouvertes sur la plupart de ses ports.
supercat
2
Si vous vraiment Si vous avez besoin de connecter plus de 65 536 connexions entre deux machines, vous pouvez configurer les machines pour utiliser plusieurs adresses IP. Chaque adresse IP ajoutée aux deux machines augmente le nombre maximal de connexions de manière quadratique (au moins en théorie, vous rencontrerez probablement d’autres problèmes en premier).
Lie Ryan