TCP/IP KeepAliveTime

Microsoft empfiehlt für MS-Exchange-Server die KeepAliveTime auf 30 Minuten zu reduzieren. Ohne den folgend beschriebenen Registry-Key beträgt die KeepAliveTime 2h.
Zum Aktivieren der neuen KeepAliveTime muss der Server neu gestartet werden.

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\Parameters

{DWORD: “KeepAliveTime”, Value (dec): “1800000”}

(1’800’000 Millisekunden entsprechen 30 Minuten)

Wofür wird die TCP/IP KeepAliveTime verwendet ?

Wenn ein Client (z.B. Notebook) die Verbindung zu einem Server (z.B. E-Mail-Server) nicht korrekt beendet, verbleibt auf dem Server eine halboffene Verbindung zurück. Mit Hilfe der KeepAliveTime können diese halboffenen Verbindungen gemanaged werden.

Wann wird eine Verbindung nicht korrekt beendet ? 

Der ganz normale Umgang mit einem Notebook kann zu nicht korrekt beendeten Client-Server-Verbindungen führen. Eine typische Ursache dafür kann sein, wenn man mit dem Notebook durch das Haus geht und dabei die Verbindung zum (W)LAN verliert. Aber auch das Zuklappen des Notebooks, ohne zuvor die Applikationen zu schliessen bzw. das Notebook herunter zu fahren, führt zu nicht korrekt beendeten Client-Server-Verbindungen.

Halboffene Verbindungen und ihre Auswirkungen

In diesem Fall bleiben auf dem Server die Verbindungen zum Notebook (Client) bestehen, obwohl dieser gar nicht mehr online ist. Das Resultat: eine halboffene Verbindung verbleibt auf dem Server. Über die Zeit würden die halboffenen Verbindungen zunehmen, bis alle möglichen Verbindungen auf dem Server belegt wären (2exp16 = 65536). Sobald alle Verbindungen belegt wären, könnten keine neuen Verbindungen zum Server mehr aufgebaut werden. Das hätte zur Folge das beispielsweise keine E-Mails mehr abgerufen werden können.

Mit Hilfe der KeepAliveTime geht es den halboffenen Verbindungen an den Kragen !

Damit auf Servern die Anzahl der halboffenen Verbindungen nicht stetig anwächst, bis alle verfügbaren Verbindungen belegt sind, wird die KeepAliveTime zu Hilfe genommen. Die KeepAliveTime definiert, wie lange eine halboffene Verbindung auf dem Server bestehen bleibt. Ist eine Verbindung so alt wie die KeepAliveTime, so sendet der Server eine Nachricht an den Client. Bekommt der Server keine Antwort vom Client, weil bespielsweise der Client nicht mehr online ist, löscht der Server die Verbindung. So wird sichergestellt, das halboffene Verbindungen nach der KeepAliveTime gelöscht werden.

Kurze oder lange KeepAliveTime ?

Eine Verringerung der KeepAliveTime führt dazu, dass zeitweilig weniger halboffene Client-Server-Verbindungen auf einem Server bestehen und verfügbare Verbindungen belegen. Das bedeutet aber auch, dass die Kommunikation zwischen Client und Server zunimmt. Der Server fragt nun viel öfter den Client an und dieser muss dem Server entsprechend antworten.

Beispiel aus der Praxis

Meeting

Ein Mitarbeiter geht in an Meeting. Dazu nimmt er seinen Laptop mit. Bevor der den Laptop von seinem Arbeitsplatz nimmt, schliesst er ihn. Der Laptop (Client) ist offline. Im Meeting öffnet er den Laptop wieder und benutzt ihn. Nun ist der Laptop wieder online. Bei einer kurzen KeepAliveTime wären die Verbindungen des Laptops zu den jeweiligen Servern bereits gelöscht worden. Der Client müsste nun die Verbindungen zu den Servern wieder neu herstellen. Das benötigt Ressourcen, Zeit und ggf. sogar eine Neuanmeldung des Users.

Telefonat

Bei einer zu kleinen KeepAliveTime würde ein Telefonat immer dann direkt beendet werden, sobald ein Gesprächspartner länger als 2 Sekunden nichts sagt. Das Telefonat wäre nun direkt beendet. Man würde nun wieder neu anrufen und weitersprechen.

Wäre die KeepAliveTime zu hoch, so würde man seinen Gesprächsparter am frühen Morgen anrufen um etwas zu besprechen. Da es möglicherweise im Laufe des Tages noch mehr zu besprechen gibt, lässt man das Telefonat einfach laufen und legt den Hörer bei Seite. Das Telefonat wird nicht beendet bzw. erst nach Feierabend.

Bei einer relativ hohen KeepAliveTime kann der Mitarbeiter seine bestehenden Verbindungen auch nach einer längeren Zeit noch nutzen, ohne dass diese neu hergestellt werden müssen. Das bedeutet aber auch, dass gleichzeitig eine höhere Anzahl an Client-Server-Verbindungen auf dem Server bestehen, da es tendenziell mehr halboffene Verbindungen gibt.

Wie viel Verbindungsmöglichkeiten gibt es ?

Jedes Gerät, welches mit TCP/IP kommuniziert, hat 2exp16 (65536) parallele Verbindungsmöglichkeiten (Ports). Von diesen Ports sind ca. 2000 für fest definierte Services reserviert. Die restlichen 63635 Ports können zur Kommunikation genutzt werden.

Welche KeepAliveTime ist für meine Situation passend ?

Es gibt also relativ viele parallele Verbindungsmöglichkeiten (65536 pro Server). Wie viele Verbindungen eine Applikation, ein Benutzer oder ein System benötigt, kann pauschal nicht beantwortet werden. Manche Applikationen benötigen pro Benutzer eine Verbindung, andere hingegen benötigen 100 Verbindungen.
Mit Hilfe von Netstat kann man alle aktuellen Verbindungen auf einem Server anzeigen lassen. Daraus kann abgeleitet werden, wie viele Verbindungen entstehen bzw. wie die KeepAliveTime gestaltet werden sollte.
Microsoft empfiehlt für MS-Exchange eine KeepAliveTime von 30 Minuten.

Fazit

Schlussendlich kommt es darauf an, eine gut ausgewogene KeepAliveTime zu finden.
Sie sollte nicht zu hoch sein, um sicherzustellen, dass halboffene Verbindungen nicht zu Serverausfällen führen.
Anders herum sollte die KeepAliveTime aber auch nicht zu klein sein, da dies zu mehr Netzwerkverkehr sowie zu mehr Verbindungsaufbau und -abbau führt.

Für Server mit sehr vielen Serviceanfragen bzw. für Unternehmen mit sehr vielen Mitarbeitern und relativ wenig Servern könnte es sinnvoll sein die KeepAliveTime zu verkleinern, um sicherzustellen, dass immer genügend freie Verbindungen (Ports) auf den Servern zur Verfügung stehen.