Gibt es ein festes Limit von 65536 offenen TCP-Verbindungen pro IP-Adresse unter Linux?

23

Gibt es ein festes Limit von 65536 offenen TCP-Verbindungen pro IP-Adresse unter Linux? Ich habe irgendwo gelesen, dass es etwas gab, aber jemand bittet um Bestätigung und ich kann es einfach nicht finden.

Ich erinnere mich anscheinend, dass die Dateideskriptoren eine 16-Bit-Ganzzahl waren, die sie irgendwie einschränkt.

Oder ist das hokum, und gibt es einfach keine andere Grenze, als wie bullig der Server ist?

Chris
quelle

Antworten:

35

Möglicherweise denken Sie an die Anzahl der Ports. In den aktuellen Versionen von IPv4 sind im TCP 65536 Ports verfügbar. Dies ist nicht nur eine Linux-Einschränkung, sondern Teil des Protokolls. Ihre IP-Adresse identifiziert Ihr Gerät und der Port identifiziert ein Programm auf Ihrem Gerät.

Die Anzahl der Verbindungen ist dadurch jedoch nicht begrenzt. Eine Verbindung besteht aus 5 Informationen, in Geek ein 5-Tupel. Es wird durch das Protokoll (TCP, UDP), die lokale IP-Adresse und den Port sowie die Remote-IP-Adresse und den Port bestimmt. Also nimm einen Webserver. Es kann viele Verbindungen auf demselben Port bedienen (höchstwahrscheinlich 80). Ihr Webserver kann sogar mehrere Verbindungen zu demselben Client-Computer unterstützen. Angenommen, Sie stellen über zwei Fenster eine Verbindung zu google.com her. Ihr Computer wählt für jede Verbindung einen nicht verwendeten Port aus. Der Server von Google muss also den Überblick über (TCP, google.com, 80, yourmachine, someport1) und (TCP, google.com, 80, yourmachine, someport2) behalten. Irgendwann würden Sie an Grenzen stoßen, aber es ist kein hartes Limit und sehr systemabhängig.

Und ja, jeder Socket ist ein Dateideskriptor, aber nicht alle Computer verwenden Shorts für die fd-Tabelle. Auf meinem System gibt ein nicht abgestimmtes System cat /proc/sys/fs/file-max323997 an. Ich bin sicher, ich könnte es steigern, wenn ich es brauche.

Es gibt also ein Limit von 65336. Dies hat jedoch mit der Adressierung und nicht mit der Anzahl der Verbindungen zu tun. Die Anzahl der Verbindungen ist begrenzt, hängt jedoch mehr von der Systemkonfiguration und der Größe des Arbeitsspeichers ab.

Reiche Homolka
quelle
2
Also, wieder das 5-Tupel: Auch wenn ich auf 65536 Ports beschränkt bin, beschränkt mich das nur auf 64k Verbindungen pro eingehender IP-Adresse , ist das richtig? Die einzige Beschränkung sind also die Dateideskriptoren, aber sie müssen nicht unbedingt 16-Bit sein. Was Sie sagen, sind also im Grunde genommen keine Grenzen gesetzt?
Chris
1
Ja. Siehe auch: en.wikipedia.org/wiki/Transmission_Control_Protocol Abschnitt "Ressourcennutzung"
user12889
3
@ Chris: 64k Verbindungen pro eingehender IP-Adresse an einem einzelnen lokalen Port , ja.
Grawity
@ Chris, was Grawity sagte. Das 5-Tupel hat bis zu (aber nie erreichende) 65536 Kombinationen mit der anderen Maschine. In Wirklichkeit werden Sie nie dorthin gelangen, weil ein Computer keinen alten Port für eine Verbindung verwenden kann - einige sind aus bestimmten Gründen reserviert.
Rich Homolka