it-swarm.com.de

Was ist die theoretische maximale Anzahl offener TCP Verbindungen, die eine moderne Linux-Box haben kann?

Kann eine Linux-Box bei unendlicher Leistung der Hardware> 65536 offene TCP Verbindungen unterstützen?

Ich verstehe, dass die Anzahl der kurzlebigen Ports (<65536) die Anzahl der Verbindungen von einer lokalen IP zu einem Port auf einer Remote-IP begrenzt.

Das Tupel (lokale IP, lokaler Port, entfernte IP, entfernter Port) definiert eindeutig eine TCP) - Verbindung; bedeutet dies, dass mehr als 65 KB-Verbindungen unterstützt werden können, wenn mehr als einer dieser Parameter vorhanden ist sind frei, zB Verbindungen zu einer einzelnen Portnummer auf mehreren entfernten Hosts von mehreren lokalen IPs.

Gibt es eine weitere 16-Bit-Grenze im System? Anzahl der Dateideskriptoren vielleicht?

213
fadedbee

Ein einzelner Abhörport kann mehrere Verbindungen gleichzeitig akzeptieren.

Es gibt ein '64K'-Limit, das oft zitiert wird, aber das ist pro Client pro Server-Port und muss geklärt werden.

Jedes TCP/IP-Paket hat grundsätzlich vier Adressfelder. diese sind:

source_ip source_port destination_ip destination_port
< client            > < server                      >

Innerhalb des Stapels TCP) werden diese vier Felder als zusammengesetzter Schlüssel verwendet, um Pakete mit Verbindungen (z. B. Dateideskriptoren) abzugleichen.

Wenn ein Client viele Verbindungen zu demselben Port am selben Ziel hat, sind drei dieser Felder gleich - nur source_port variiert, um die verschiedenen Verbindungen zu unterscheiden. Ports sind 16-Bit-Nummern. Daher kann ein Client maximal 64 KB Verbindungen zu einem bestimmten Host-Port herstellen.

Mehrere Clients können jedoch jeweils bis zu 64 KB Verbindungen zum Port eines Servers haben. Wenn der Server mehrere Ports hat oder einer von beiden mehrfach vernetzt ist, können Sie dies weiter vervielfachen.

Das eigentliche Limit sind also die Dateideskriptoren. Jede einzelne Socket-Verbindung erhält einen Dateideskriptor. Das Limit ist also die Anzahl der Dateideskriptoren, für die das System konfiguriert wurde und die Ressourcen verarbeiten können. Die maximale Grenze liegt normalerweise über 300 KB, ist jedoch konfigurierbar, z. mit sysctl .

Die realistischen Grenzen für normale Boxen liegen bei etwa 80 KB, beispielsweise bei Jabber-Messagingservern mit einem Thread.

317
Will

Wenn Sie darüber nachdenken, einen Server zu betreiben und zu entscheiden, wie viele Verbindungen von einem Computer aus bedient werden können, sollten Sie sich über das C10k-Problem und die potenziellen Probleme informieren, die mit der gleichzeitigen Bedienung vieler Clients verbunden sind.

17
Spaceghost

Wenn Sie einen Raw-Socket (SOCK_RAW) und neu implementiert TCP in userland, ich denke die antwort ist in diesem fall nur durch die anzahl von (local address, source port, destination address, destination port) Tupel (~ 2 ^ 64 pro lokaler Adresse).

Es würde natürlich viel Speicherplatz erfordern, um den Status all dieser Verbindungen aufrechtzuerhalten, und ich denke, Sie müssten einige iptables-Regeln einrichten, um zu verhindern, dass der Kernel TCP Stack verärgert wird &/oder in Ihrem Namen antworten.

11
sbirch