In XenApp 6.5 and XenDesktop 5.5, with Receiver 3.0 (including Online Plugin 13.0), Citrix introduced support for true network based Quality of Service (QoS) to the ICA or HDX protocol.
What is QoS ?
QoS is a mechanism to prioritize network traffic to help ensure that the most important data gets through the network as quickly as possible.
What is ICA ?
The ICA protocol is a protocol optimized for Wide Area Networks or WANs with high latency links. It also supports Quality-Of-Service (QoS) and other bandwidth optimization features. The ICA packet is made up of the following:
- Frame Head – Stream Oriented Transport data
- Reliable – Detection of errors and recovery
- Encryption – Managed data within encryption
- Compression – indicator of compression
- Command (required) – Starting point of the ICA protocol
- Command Data – Data bytes
- Frame Trailer – Asynchronous Transport Protocol Data
What is an ICA Virtual Channel ?
Within the ICA stream exist virtual channels, these virtual channels are for functions such as printing, audio, keyboard, mouse, video, drive mapping etc. on between the client and the XenApp server. There is a maximum of 32 channels that are available on each ICA stream. Each of the virtual channels above for both client and server would communicate with each other over the correct virtual channel. For example, the client Graphics channel would communicate with the Graphics channel of the server within the ICA stream.
Multi-Stream and Multi-Port ICA
In XenApp 6.5 and Citrix XenDesktop 5.5 there is an option to configure multiple TCP connections to carry the ICA traffic between the client and the server (there are four streams available to use). In addition in XenDesktop 5.5, there is an optional UDP connection along with multiple TCP connections (there are five streams available to use). Each of these connections (streams) will be associated with a different class of service. Each ICA virtual channel will be associated with a specific class of service and be transported in the corresponding TCP connection using configured unique port number. In XenDesktop 5.5, UDP channel is used for Very High Priority data like real-time audio. Similar to TCP port number, the relevant configured UDP port number could be used by network administrators to prioritize UDP traffic.
The network administrator will be able to prioritize each of these classes of service, independently from each other, based on the connection port number used for the connection. The four classes of service are the following:
- Very High Priority: used for real-time channels such as audio
- High Priority: used for interactive channels such as graphics, keyboard, and mouse
- Medium Priority: used for bulk virtual channels such as drive mapping, scanners (TWAIN), and so forth
- Low Priority: used for background virtual channels such as printing
The following are the numerical priorities in the XenApp 6.5 ICA/GPO:
- Very High = 0
- High = 1
- Medium = 2
- Low = 3
Default values for ICA chanels are presented in the table below:
Channel Name | Description | Single Stream (XenApp 6.5) | Multi-stream (XenApp 6.5) |
---|---|---|---|
CTXCAM | Client audio mapping | 0 | 0 |
CTXTWI | Seamless Windows screen update data (ThinWire) | 0 | 1 |
CTXCTL | Citrix Control Virtual Channel | 0* | 1 |
CTXEUEM | End User Experience Monitoring | 0* | 1 |
CTXFLASH | Citrix Flash Redirection | 0* | 2 |
CTXGUSB | USB Redirection | 0* | 2 |
CTXSBR | No longer used. Previously: Citrix Browser Acceleration | 0* | 1 |
CTXSCRD | Smartcard | 0* | 1 |
CTXCLIP | Clipboard | 1 | 2 |
CTXLIC | License management | 1 | 1 |
CTXPN | Program Neighborhood | 1 | 1 |
CTXTW | Remote Windows screen update data (ThinWire) | 1 | 1 |
CTXVFM | Video server video (not ThinWire video) | 1 | 1 |
CTXCCM | Client COM port mapping | 2 | 3 |
CTXCDM | Client drive mapping | 2 | 2 |
CTXMM | Citrix Windows Multimedia Redirection | 2 | 2 |
CTXCM | Client management (Auto Client Update) | 3 | 3 |
CTXCOM1 | Printer mapping for non-spooling client (Thin client devices) | 3 | 3 |
CTXCOM2 | Printer mapping for non-spooling client (Thin client devices) | 3 | 3 |
CTXCPM | Printer mapping for spooling clients | 3 | 3 |
CTXLPT1 | Printer mapping for non-spooling client (Thin client devices) | 3 | 3 |
CTXLPT2 | Printer mapping for non-spooling client (Thin client devices) | 3 | 3 |
OEMOEM | Used by Original Equipment Manufacturers (OEMs) | 3 | 3 |
OEMOEM2 | Used by Original Equipment Manufacturers (OEMs) | 3 | 3 |
The separation of ICA traffic into multiple streams lets administrators apply Quality of Service (QoS) prioritizations to individual components of an ICA session.
Please note that in the previous versions of XenDesktop and XenApp, QoS is available to ICA virtual channels within the single TCP connection based ICA session. In other words, ICA virtual channels can be placed into one of four priority groups within the single TCP connection. However, this method had the limitation that on the network an administrator can’t give QoS or a priority to a specific ICA virtual channel or group of ICA virtual channels. The administrator can only give QoS to the entire ICA TCP session comprising of all the ICA virtual channels based on TCP port number (ICA Port 1494 or CGP port 2598).
Multi Stream ICA Configuration Registry key
This key is created when XenApp or XenDesktop is installed. You can locate the registry key at:
HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\icawd\MultiStreamIca.
Streams and VirtualChannels are the two sub-keys available.
- Streams – sub-key that contain the ICA streams. The ICA streams can be either a secondary stream or a primary stream. There can only be one primary stream in the registry key. The format for this key is “Stream#,Stream Type;” where Stream# starts with 0 and increments by one, Stream type is either ‘S’ for Secondary or ‘P’ for primary. The installed configuration for this key are “0,S;1,P;2,S;3,S;”
- Virtual Channels – sub-key contains the Virtual Channel Stream Pairs. The format for this key is “VirtualChannlName,Stream#;” where VirtualChannelNameis the name of the virtual channel and Stream# is the stream number that virtual channel uses. Installed configuration is the following: “CTXCAM ,0; CTXTW ,1; CTXTWI,1; CTXLIC,1; CTXVFM,1; CTXPN ,1; CTXSBR,1; CTXSCRD,1; CTXCTL ,1; CTXEUEM,1; CTXMM 2; CTXFLSH,2; CTXGUSB,2; CTXCLIP,2; CTXCDM ,2; CTXCCM ,3; CTXCM,3; CTXLPT1,3; CTXLPT2,3; CTXCOM1,3; CTXCOM2,3; CTXCPM ,3; OEMOEM ,3; OEMOEM2,3”
I was really looking for this info.
Thank you
I’m glad I could help you.
Andrzej
Linux Receiver 13.0 does it support Multi Stream ICA ?
Yes, it should – I have never configured it to use with Linux receiver but Citrix Multi-Stream settings are configured on server site via policies and should work with receiver 3+

HI,
Thanks for the explanation. I am wondering if you can help on a slightly different topic.
Is it possible to disable ICA encryption and compression in single or multi – stream for use with 3rd party WAN optimisers?
We used to do this on our old farm (XenApp 5.0) but on the new farm (XenApp 7.6) we don’t seem to get it to work.
Thanks in advance.
Oscar
Hi Oscar,
Did you manage to find a solution for your XenApp 7.6 and Citrix Multi-stream?
Hi,
We would like to use WebEx within Citrix Xenapp.
All our branch office have two internet lines:
– One (expensive) low latency with limited bandwidth
– One (cheaper) with much more bandwidth. This redundant line is used for automatic fall back and for things like printing and FTP.
Is it possible to redirect the video part of WebEx to this second line, in order to prevent congestion on the primary line?
How is this done? Can you assign a certain IP-address to a ICA channel of port? Or…?
Thanks,
Nocla
Hi, i found your site which is really helpful. i’m a student currently working on a thesis which is based on ICA authentication environment in CITRIX clouds. there are 2 requiremnts for this
1. To understand the ICA authentication protocol and operations details in Citrix clouds environment
2.to modify the authentication packets between the servers and the clients and to control authentication procedures.
i understand the first one but i don’t understand the 2nd one. could you tell me about it a little bit.
and also how to create .ica file as i tried but i don’t know to how to create one step by step.
it will be greatful to you if you could help me out. please let me know ASAP
thank you
Hi,
I second Nocla’s question above. Is it possible to route ICA streams over different paths?
Regards,
Danny