Symptom
After a ICA_TCP session is abnormally
terminated, subsequent viewing of the ICA-TCP session in either Citrix
Server Administration, mfadmin.exe, Terminal server Administration,
tsadmin.exe, or CMC, Citrix Management Console shows the connection in
an ACTIVE not a DISCONNECTED state.
TCP/IP uses the initial packet
round-trip time at the moment when the session is initiated to determine
what is "normal" for that connection. Because of this, it is better to
have a consistently slow WAN connection and worse to have a connection
that starts out fast and then becomes slow. Such an erosion of
connection speed is common when connecting through an Internet Service
Provider (ISP), particularly when the connection is opened in the
morning and maintained into the work day.
Using an algorithm, TCP
tunes itself to the "normal" delay of a connection. Because the default
number of retries is five, the round-trip time can double four times (or
in other words become 16X slower than its initial value) before the
session is dropped. By increasing this number to 10, you are allowing
the round-trip time to double nine times instead of four, thereby
allowing the connection quality to erode up to 512X its original value
before being dropped. For example, a connection that begins with a
roundtrip time of 20 milliseconds would have to erode to a round-trip
time of 10,240 milliseconds before being dropped by the
server.
In environments where the TCP/IP network has high
latency, modifying the operation of the Windows TCP/IP stack can improve
TCP-based ICA sessions.
The TCP/IP retransmission is controlled
by the Windows Terminal Server TcpMaxDataRetransmissions registry value.
See Microsoft Knowledgebase Articles Q120642 , Q158474 and Q170359 for more information.
MetaFrame 1.8 (SP1 or higher) for
Windows Terminal Server, MetaFrame 1.8 (SP2 or higher) for Windows 2000,
and MetaFrame XP Application Server for Windows
WARNING: Using Registry Editor
incorrectly can cause serious problems that may require you to reinstall
your operating system. Microsoft cannot guarantee that problems
resulting from the incorrect use of Registry Editor can be solved. Use
Registry Editor at your own risk. For information about how to edit the
registry, view the "Changing Keys and Values" Help topic in Registry
Editor (Regedit.exe) or the "Add and Delete Information in the Registry"
and "Edit Registry Data" Help topics in Regedt32.exe. Note that you
should back up the registry before you edit it. If you are running
Windows NT, you should also update your Emergency Repair Disk
(ERD).
In some networks, ICA Clients might time
out when connected to a session and then receive a new session upon
reconnect, instead of being reconnected to the dropped session. This new
session is received on reconnect because the former host server is not
aware that the previous session was dropped due to high network
latency.
The Service Packs add a new “ICA
KeepAlive” feature so the MetaFrame server can recognize broken ICA
sessions and take appropriate action. When the ICA KeepAlive expires,
the server disconnects or resets the broken session based on the setting
“On broken or timed-out connection...,” which is configurable for the
user or ICA connection. Two registry values control the ICA KeepAlive
feature. Both values can be manually added to the registry
key:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Citrix
IcaEnableKeepAlive
REG_DWORD: 0 or 1
When this value is 0, ICA KeepAlives are
disabled. When this value is set to 1, ICA KeepAlives are enabled. The
IcaEnableKeepAlive is set to 1 by the Service Pack
installation.
ICAKeepAliveInterval
REG_DWORD: <number in seconds>
This parameter
determines the interval separating keep alive retransmissions until a
response is received. Once a response is received, the delay until the
next keep alive transmission is again controlled by the value of
KeepAliveTime. The connection is ended after the number of
retransmissions specified by TcpMaxDataRetransmissions have gone
unanswered. If the IcaEnableKeepAlive value is 1, this value controls
the frequency at which ICA KeepAlives are sent to the client. This
IcaKeepAlive Interval is set to 60 seconds by this hotfix installation.
Sixty seconds is also the default interval if this value is not defined
but IcaEnableKeepAlive is set to 1.
Default: 60 seconds
The time that elapses between an ICA
broken client connection and the MetaFrame server disconnect (or reset)
event may be longer than the IcaKeepAliveInterval. For instance, suppose
the IcaKeepAliveInterval is set to 15 seconds. A client’s ICA WAN
connection is dropped at 12:00:00. The server may not put the session
into a disconnected (or reset) state until sometime after 12:00:15,
although the session will usually disconnect (or reset) within
approximately IcaKeepAliveInterval +2 minutes. This is because the
Windows NT 4.0, Terminal Server Edition TCP/IP stack retransmits the ICA
keep alive packet a number of times at increasing intervals before
timing out. When the TCP/IP stack finishes its retransmissions, the
session is disconnected (or reset).