Wie viele TCP-Verbindungen kann ich maximal in Windows Server 2008 herstellen?

11

Ich möchte so viele Verbindungen (einzelne Verbindungen von vielen verschiedenen Clients) wie möglich auf einem Server unter Windows Server 2008 haben, um eine Anwendung im Comet-Stil zu unterstützen. Die Anwendung ist in C # geschrieben. Die Verbindungen werden nicht gesprächig sein, sie müssen nur offen sein (und offen bleiben). Der Kauf von Schiffsladungen Speicher und schnellen CPUs ist kein Problem.

Soweit ich das beurteilen kann, bin ich auf 65.000 gleichzeitige offene Verbindungen pro Netzwerkkarte beschränkt - die maximale Anzahl von Ports. Ist das richtig? Oder kann ich irgendwie über 65.000 Verbindungen / Netzwerkkarte hinausgehen? Es scheint, dass es zumindest Serverprodukte für Linux gibt, die Hunderttausende von Verbindungen unterstützen. Wie machen sie das?


quelle

Antworten:

9

Sie können weit über 65.000 Verbindungen hinausgehen. Da Sie mehrere Verbindungen pro Port haben können (sobald diese akzeptiert wurden, kann der Listener eine Verbindung zu einem anderen Client herstellen). Das eine oder andere Ende muss einen Unterschied haben, normalerweise wählt der Client einen zufälligen Port. Windows ist standardmäßig auf einige mehr als 3000 dieser zufälligen Ports beschränkt. Ihr typischer Kunde wird also das Maximum herausholen. Es ist jedoch möglich, den Client anders zu konfigurieren, und viele * nix sind auf viel mehr als Windows beschränkt.

Es gibt eine Registrierungseinstellung, die die maximale Anzahl von Verbindungen auf 16 Millionen begrenzt. Es gibt jedoch andere praktischere Probleme, die Sie normalerweise auf weniger beschränken (Sie können den Registrierungswert ändern).

  • Windows belegt ungefähr 1 KB RAM pro Verbindung (das sind ~ 16 GB für 16 MB-Verbindungen). und Ihre App muss auch irgendwie die aktiven Verbindungen verfolgen (mehr Speicher).
  • Windows sucht außerdem alle 2 Stunden nach nicht reagierenden Verbindungen. Bei 16M-Verbindungen ist dies ungefähr alle 0,5 ms; Es würde eine erhebliche Bandbreite beanspruchen, wenn nur diese Überprüfungen durchgeführt würden.
Chris S.
quelle
1
@evilfred: Kurzlebige Ports sind für ausgehende TCP-Verbindungen vorgesehen. Dies bedeutet, dass ein Clientcomputer einen kurzlebigen Port verwendet, wenn er eine Verbindung zu Ihrem Webserver über Port 80 herstellt. Wie Chris S feststellte, kann der Webserver nach dem Aufbau dieser Sitzung einen anderen einrichten Verbindung an Port 80 von einem anderen Client. Ich denke auch, dass er das kurzlebige Portlimit des Clients erwähnt hat, als er versuchte, in seiner Antwort erschöpfend zu sein. Dieses kurzlebige Portlimit des Clients ist nicht Ihr Anliegen, sondern das Anliegen des Kunden. @ Chris S: Ich hoffe, ich sage nicht falsch, was Sie in Ihrer Antwort gemeint haben.
Joeqwerty
1
Es gibt also keine wirkliche Begrenzung für die Anzahl der eingehenden Verbindungen, die ein Server auf einer einzelnen IP unterstützen kann. Woher weiß der Server, wohin er Daten senden soll, die er von einem Client empfängt, wenn der Zielport gemeinsam genutzt wird?
1
Der Kunde ist mir egal.
1
@evilfred: Jede TCP-Sitzung wird über ein sogenanntes 4-Tupel "verwaltet", das ist Client-IP | Client-Port <> Server-IP | Server-Port. Auf diese Weise verwaltet der Server den Datenverkehr zwischen den einzelnen Sitzungen an einem "gemeinsam genutzten" Port, z. B. Port 80 auf einem Webserver.
Joeqwerty
1
Ich weiß das. Es gibt nur 65.000 mögliche Serverports pro IP. Daher gibt es maximal 65.000 aktive Sockets pro IP.