Plus de 65536 connexions TCP sous Linux


11

Je suis coincé à essayer de configurer plus de 65536 connexions TCP sortantes à partir d'une boîte Linux (RedHat5).

J'ai déjà configuré les boîtes sortantes et acceptantes pour autoriser suffisamment de descripteurs de fichiers.

Je ne crois pas qu'il y ait un problème du côté de l'acceptation - j'ai plusieurs boîtes cibles, chacune avec plusieurs adresses IP et j'utilise plusieurs ports.

Du côté sortant, je ne crois pas que j'atteins une limite par adresse IP - j'utilise plusieurs adresses IP et ports (j'ouvre des connexions à partir des ports 30 000 - 60 000 pour chacune des adresses IP).

Y a-t-il un paramètre ajustable du noyau Linux qui me manque? Ou une limite fondamentale dans TCP?

L'échec est que mon application pour ouvrir les connexions se bloque dans l'appel connect ().

Merci pour toute aide NickB


Quelle limite avez-vous atteinte? Quelle était l'erreur lorsque vous avez atteint cette limite?
nos

connect () se bloque.
NickB

1
Qu'y a-t-il entre vos IP source et de destination? Remplissez-vous éventuellement la table NAT d'un appareil?

Réponses:


10

Voici un blog où quelqu'un a obtenu> 1 000 000 de rebonds d'une boîte.

  • Richard Jones, MetaBrew.com, 2008-11-04, Une application comète à un million d'utilisateurs avec Mochiweb, Partie 3 , section Faire passer ce chiffre à 1 million (Archivé ici .)

Dans la partie 1, nous avons défini la plage sur "1024 65535" - ce qui signifie qu'il y a 65535-1024 = 64511 ports non privilégiés disponibles. Certains d'entre eux seront utilisés par d'autres processus, mais nous n'obtiendrons jamais plus de connexions client 64511, car nous manquerons de ports.

...

Faisons donc apparaître 17 nouvelles adresses IP, avec l'intention d'établir 62 000 connexions chacune - ce qui nous donne un total de 1 054 000 connexions.


Merci! Ça marche pour moi. Plus précisément, les paramètres sysctl de metabrew.com/article/… m'ont permis de configurer plus de 65 536 connexions TCP.
NickB

1

Le protocole TCP n'utilise que 16 bits pour le port de destination et le port source. Il n'y aura aucun moyen d'ouvrir plus de 65536 ports à la fois - même pas avec Linux.


3
Cela n'est vrai que pour une seule adresse IP. Si vous en utilisez plusieurs, chaque adresse IP doit pouvoir avoir 65536 ports ouverts.
Job

1
correct, un port local est requis pour chaque connexion sortante. IIRC, aucun port déjà utilisé ne peut être utilisé pour ces connexions. ainsi, par exemple, si vous exécutez telnet / ftp / http, les ports numérotés 21/23/80 ne sont pas disponibles en tant que ports locaux.
KevinDTimm

1
Vous pouvez également avoir plusieurs connexions sur le même port.
gtrak

@Job - Oui, puisque TCP est empilé sur IP - je ne parle que d'une seule adresse IP.

4
Chaque connexion est identifiée par un tuple composé de l'adresse et du port distants et de l'adresse et du port locaux. Ainsi,> 65536 connexions entrantes provenant de différents hôtes distants sont possibles. > 65536 Les connexions sortantes à partir d'une seule interface sur un hôte ne sont pas possibles et vous seriez limité à un peu moins que de toute façon car il y aura toujours des ports en cours d'utilisation.
Len Holgate

0

Dans ce contexte, une "interface unique" signifie un seul soin réseau avec une seule adresse IP qui lui est affectée. Chaque connexion TCP sortante est liée à un port distinct, votre exemple n'est donc pas possible.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.