De nombreuses pièces sont en jeu. Comme une connexion est définie par (Src IP, Src Port, Dest IP, Dest Port)
tuples, vous avez droit à 65536^2 connexions entre deux pairs donnés à un moment donné: de 1 à 1, de 1 à 2, .. de 1 à 65535, etc. Et c'est juste entre deux pairs - vous pouvez bien sûr avoir de nombreuses connexions ouvertes à de nombreux pairs simultanément.
MAIS, la plupart des systèmes d'exploitation limitent le nombre de fichiers/handles de fichier ouverts par processus. Cette limite était historiquement basse (20), mais est maintenant souvent plus élevée (1024 sur mon système, ulimit -a
montrera les limites par processus dans bash(1)
).
En plus des setrlimit(3)
limites sur les systèmes Unix, il y a aussi des limites à l'échelle du système; /proc/sys/fs/file-max
sur un système Linux indiquera le nombre maximum de fichiers ouverts autorisés sur l'ensemble du système. (Ceci est 596118 sur mon système.) D'autres systèmes auront des limites différentes.
Et, il peut y avoir une limite au nombre de connexions ouvertes appliquées par un stateful firewall au milieu. Étant donné que chaque état requiert de la mémoire dans les tables de pare-feu, n'importe lequel appliquera probablement une limite arbitraire pour éviter d'être à court de mémoire.
'65536^2' est le nombre de connexions entre ** 2 spécifié ** IP, non? – DriverBoy
Vous n'avez pas besoin d'augmenter le nombre de descripteurs de fichiers pour utiliser beaucoup de ports car les sockets sont plus proches après leur fermeture. – ikegami
@DriverBoy, oui, c'est le maximum théorique entre deux adresses IP. En pratique, le maximum peut être inférieur. – ikegami