Y a-t-il une limite fixe de 65536 connexions TCP ouvertes par adresse IP sur Linux?

23

Y a-t-il une limite fixe de 65536 connexions TCP ouvertes par adresse IP sur Linux? J'ai lu quelque part qu'il y en avait, mais quelqu'un demande une confirmation et je ne la trouve tout simplement pas.

Il me semble que c'était quelque chose à propos des descripteurs de fichiers étant un entier de 16 bits qui le limite en quelque sorte?

Ou est-ce hokum, et n'y a-t-il simplement aucune limite autre que la force du serveur?

Chris
la source

Réponses:

35

Vous pensez peut-être au nombre de ports. Il y a 65536 ports disponibles dans le TCP dans les versions actuelles d'IPv4. Ce n'est pas seulement une limitation Linux, sa partie du protocole. Votre adresse IP identifie votre appareil et le port identifie un programme sur votre appareil.

Mais, le nombre de connexions n'est pas limité par cela. Une connexion se compose de 5 informations, en geek parle un 5-tuple. Il est déterminé par le protocole (TCP, UDP), l'adresse IP et le port locaux, et l'adresse IP et le port distants. Alors, prenez un serveur Web. Il peut desservir de nombreuses connexions sur le même port (probablement 80). Votre serveur Web peut même prendre en charge plusieurs connexions à la même machine cliente. Dites, vous vous connectez à google.com à partir de deux fenêtres. Votre machine choisira un port inutilisé pour chaque connexion. Ainsi, le serveur de Google devra garder une trace de (TCP, google.com, 80, yourmachine, someport1) et (TCP, google.com, 80, yourmachine, someport2). À un moment donné, vous vous heurteriez à des limites, mais ce n'est pas une limite stricte et dépend très du système.

Et oui, chaque socket est un descripteur de fichier, mais toutes les machines n'utilisent pas de shorts pour la table fd. Sur mon système, un système pas du tout réglé, cat /proc/sys/fs/file-maxdonne 323997. Je suis sûr que je pourrais le booster si j'en avais besoin.

Il y a donc une limite de 65336, mais cela concerne l'adressage et non le nombre de connexions. Le nombre de connexions est limité, mais plus par la configuration du système et la quantité de mémoire dont il dispose.

Rich Homolka
la source
2
Donc, concernant le 5-tuple: même si je suis limité à 65536 ports, cela ne me limite qu'à 64k connexions par adresse IP entrante , n'est-ce pas? La seule limite est donc les descripteurs de fichiers, mais ils ne sont pas nécessairement 16 bits? Donc, fondamentalement, ce que vous dites, c'est qu'il n'y a pas de limites?
Chris
1
Oui. Voir aussi: en.wikipedia.org/wiki/Transmission_Control_Protocol section "Utilisation des ressources"
user12889
3
@Chris: 64k connexions par adresse IP entrante sur un seul port local , oui.
grawity
@Chris ce que grawity a dit. Le 5-tuple aura jusqu'à (mais jamais atteindre) 65536 combinaisons avec l'autre machine. En réalité, vous n'y arriverez jamais car une machine ne peut utiliser aucun ancien port pour une connexion - certains sont réservés pour des raisons spécifiques.
Rich Homolka