2011-05-10 7 views
6

Étant donné que les numéros de port sont limités à 65536, y a-t-il une limite pour le numéro de connexion?Nombre de connexions réseau possibles

Comment chaque connexion diffère-t-elle l'une de l'autre?

Si c'est par le port, alors il n'y a jamais eu plus de 65536 connexions en même temps?

Répondre

8

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.

+0

'65536^2' est le nombre de connexions entre ** 2 spécifié ** IP, non? – DriverBoy

+1

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

+0

@DriverBoy, oui, c'est le maximum théorique entre deux adresses IP. En pratique, le maximum peut être inférieur. – ikegami

6

Une connexion TCP est en fait identifiée par l'adresse IP du pair + le port homologue + l'adresse IP locale + le port local, donc vous pouvez réellement avoir plus de 64k, mais je ne sais pas si les OS font plus que 64 Ko par adresse IP locale. Windows ne le fait pas.

Une chose intéressante est que les ports peuvent rester réservés à un court moment après leur fermeture. (Ceci est fait pour éviter la diaphonie accidentelle ou intentionnelle entre les anciennes et les nouvelles connexions.) En créant et en fermant simplement une connexion en boucle serrée, vous pouvez réellement rendre votre machine à court de ports. Voir http://www.perlmonks.org/?node_id=897591 pour le code Perl qui bloquera les appels de connexion socket (sur certaines machines) en utilisant toutes les sockets.

UDP a également des ports, mais UDP ne dispose pas de connexions. Le socket n'est donc identifié que par son adresse IP locale + le port local, ce qui permet de disposer d'un maximum de 64k ports UPD par adresse IP locale.

Mise à jour: paragraphe ajouté sur UDP.

Questions connexes