You are reading Terminal Server Windows 2003 - Ich kann mich mit bestehenden Sitzungen nicht mehr verbinden. You can leave a comment or trackback this post.
Posted on July 13th, 2006 by Reiner.
Categories: Deutsch, Computers.
Mist! Eben wurde ich aus einer Sitzung geworfen und ich komme ums Zerplatzen nicht wieder ran: Entweder wird eine völlig neue Sitzung erstellt (z.B. an einem “echten” Terminal Server) oder ich komme überhaupt nicht mehr auf den Server, da die Maximalzahl der Verbindungen überschritten wurde (Administrationsmodus = max. 2 Verbindungen, das sind nicht allzu viele).
Woran liegt das in der Regel?
Wenn die Verbindung zwischen Client und Server eher indirekt (z.B. über NAT-Router o.ä.) läuft, kann es sein, dass der Terminal Server einen eingetretenen Verbindungsverlust gar nicht erkennen kann. Der Client hat keine Verbindung mehr, aber für den Server ist der Client immer noch verbunden. Er ist für ihn halt einfach nur “idle”.
Das passiert besonders gerne und reproduzierbar, wenn man z.B. die Sitzung minimiert, da dann keinerlei Daten mehr zwischen Client und Server ausgetauscht werden (nicht mal mehr die Uhr in der Taskleiste). Diese Inaktivität ist gerade auch bei clientseitigen NAT-Routern (immer mehr verbreitete “DSL-Router”) fatal, da diese wg. der fehlenden Aktivität nach einer bestimmten geräteabhängigen Zeitspanne (i.d.R. einige Minuten) die Zuordnung zwischen lokalem Gerät (mit privater IP + Port) zum Verbindungsziel (i.d.R. öffentliche IP + Port) löschen, wenn keine Daten über die Verbindung ausgetauscht werden. Keiner der Verbindungspartner bekommt dabei von dem so ausgelösten Verbindungsverlust etwas mit und wenn ich am Client die minimierte Sitzung wieder herstelle oder maximiere, ist sie einfach nur mausetot
Was kann man dagegen tun?
Die Abhilfe ist zum Glück in Windows 2003 (evtl. auch XP - aber von mir nicht getestet) ganz trivial, aber leider aus mir nicht nachvollziehbaren Gründen von Microsoft standardmäßig nicht aktiviert. Der Terminal Server kann sog. Keep Alives schicken. Das bedeutet, dass der Terminal Server statt der wegen der Inaktivität ausbleibenden Nutzdaten in regelmäßigen Intervallen leere Dummy-Datenblöcke an den Client sendet.
Dies hat zuerst auch gleich eine sehr mild negative Auswirkung: Es wird (ganz wenig) zusätzlicher Netzwerkverkehr erzeugt (standardmäßig jede Minute ein winziger Block + Quittung).
Dem stehen jedoch zwei grandiose Vorteile gegenüber
Und wo muss ich jetzt was einstellen?
Wie immer in der Registry - wo denn sonst? Dabei gibt es zwei Möglichkeiten:
Vertraue mir: Die o.a. Keep Alives sind die richtigen. Es gibt zwar weitere TCP/IP-Keep Alives in der Registry, die aber wer-weiß-was bewirken, eine RDP-Verbindung aber nicht beeindrucken. Für Citrix existieren ggf. eigene andere Keys…
Was noch?
Keep Alives können auch clientseitig aktiviert werden (z.B. als Parameter für das Browser-ActiveX mit “MsRdpClient.AdvancedSettings2.KeepAliveInterval = 60000″, hier in Millisekunden), die ich jedoch nicht getestet habe und von denen ich böserweise annehme, dass sie zwar ggf. eine NAT-Verbindung offen halten können, aber bei einem Verbindungsverlust aus sonstigen Gründen lediglich bewirken, dass der nur Client erkennt, dass keine Verbindung mehr besteht, nicht aber den Server dazu veranlasst den Sitzungszustand von Verbunden auf Getrennt zu aktualisieren.
Fröhliches Home- und Inseloffice wünscht
Reiner
0 comments.
Comments can contain some xhtml. Names and emails are required (emails aren't displayed), url's are optional.