Mehr als 65536 TCP-Verbindungen unter Linux

11

Ich bin festgefahren, mehr als 65536 ausgehende TCP-Verbindungen von einer Linux-Box (RedHat5) einzurichten.

Ich habe bereits ausgehende und akzeptierende Boxen konfiguriert, um genügend Dateideskriptoren zuzulassen.

Ich glaube nicht, dass es auf der akzeptierenden Seite ein Problem gibt - ich habe mehrere Zielboxen mit jeweils mehreren IP-Adressen und verwende mehrere Ports.

Auf der ausgehenden Seite glaube ich nicht, dass ich ein Limit pro IP-Adresse erreiche - ich verwende mehrere IP-Adressen und Ports (ich öffne Verbindungen von den Ports 30.000 bis 60.000 für jede von mehreren IP-Adressen).

Gibt es einen durch den Linux-Kernel einstellbaren Parameter, den ich vermisse? Oder eine grundlegende Grenze in TCP?

Der Fehler ist, dass meine App zum Öffnen der Verbindungen im Aufruf von connect () hängt.

Vielen Dank für jede Hilfe NickB

NickB
quelle
Welches Limit hast du erreicht? Was war der Fehler, als Sie dieses Limit erreichten?
Nr.
connect () hängt.
NickB
1
Was ist zwischen Ihren Quell- und Ziel-IPs? Füllen Sie möglicherweise die NAT-Tabelle eines Geräts aus?

Antworten:

10

Hier ist ein Blog, in dem jemand> 1.000.000 Outbounds aus einer Box hat.

  • Richard Jones, MetaBrew.com, 04.11.2008, Eine Kometenanwendung für Millionen Benutzer mit Mochiweb, Teil 3 , Abschnitt Auf 1 Million erhöhen ( hier archiviert )

In Teil 1 setzen wir den Bereich auf "1024 65535" - was bedeutet, dass 65535-1024 = 64511 nicht privilegierte Ports verfügbar sind. Einige von ihnen werden von anderen Prozessen verwendet, aber wir werden nie über 64511 Clientverbindungen hinwegkommen, da uns die Ports ausgehen.

...

Lassen Sie uns also 17 neue IP-Adressen ansprechen, mit der Absicht, jeweils 62.000 Verbindungen herzustellen - das ergibt insgesamt 1.054.000 Verbindungen

StackzOfZtuff
quelle
Vielen Dank! Das ist für mich in Ordnung. Insbesondere die sysctl-Einstellungen von metabrew.com/article/… ermöglichten es mir, über 65.536 TCP-Verbindungen einzurichten .
NickB
1

Das TCP-Protokoll verwendet nur 16 Bit für den Ziel- und den Quellport. Es wird nicht möglich sein, mehr als 65536 Ports gleichzeitig zu öffnen - auch nicht unter Linux.


quelle
3
Dies gilt nur für eine einzelne IP-Adresse. Wenn Sie mehr als eine verwenden, sollte jede IP-Adresse 65536 offene Ports haben können.
Job
1
Richtig, für jede ausgehende Verbindung ist ein lokaler Port erforderlich. IIRC, bereits verwendete Ports können für diese Verbindungen nicht verwendet werden. Wenn Sie beispielsweise Telnet / FTP / http ausführen, sind die Ports mit der Nummer 21/23/80 nicht als lokale Ports verfügbar.
KevinDTimm
1
Sie können auch mehrere Verbindungen zum selben Port haben.
Gtrak
@Job - Ja, da TCP über IP gestapelt ist, spreche ich nur von einer IP-Adresse.
4
Jede Verbindung wird durch ein Tupel identifiziert, das aus der Remote-Adresse und dem Port sowie der lokalen Adresse und dem Port besteht. Es sind also> 65536 eingehende Verbindungen von verschiedenen Remote-Hosts möglich. > 65536 ausgehende Verbindungen von einer einzelnen Schnittstelle auf einem Host sind nicht möglich, und Sie wären ohnehin auf etwas weniger beschränkt, da immer einige Ports verwendet werden.
Len Holgate
0

In diesem Zusammenhang bedeutet eine "einzelne Schnittstelle" eine einzelne Netzwerkpflege mit einer einzelnen zugewiesenen IP-Adresse. Jede ausgehende TCP-Verbindung ist an einen separaten Port gebunden, sodass Ihr Beispiel nicht möglich ist.

Len Holgate
quelle