Citrix Multistream ICA explained

Home/XenApp, XenDesktop/Citrix Multistream ICA explained

Citrix Multistream ICA explained

Share this post

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

ica packet

ica 1

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.

ica structure


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 NameDescriptionSingle Stream (XenApp 6.5)Multi-stream (XenApp 6.5)
CTXCAMClient audio mapping00
CTXTWISeamless Windows screen update data (ThinWire)01
CTXCTL Citrix Control Virtual Channel0*1
CTXEUEMEnd User Experience Monitoring0*1
CTXFLASHCitrix Flash Redirection0*2
CTXGUSBUSB Redirection0*2
CTXSBRNo longer used. Previously: Citrix Browser Acceleration0*1
CTXLICLicense management11
CTXPNProgram Neighborhood11
CTXTWRemote Windows screen update data (ThinWire)11
CTXVFMVideo server video (not ThinWire video)11
CTXCCMClient COM port mapping23
CTXCDMClient drive mapping22
CTXMMCitrix Windows Multimedia Redirection22
CTXCMClient management (Auto Client Update)33
CTXCOM1Printer mapping for non-spooling client (Thin client devices)33
CTXCOM2Printer mapping for non-spooling client (Thin client devices)33
CTXCPMPrinter mapping for spooling clients33
CTXLPT1Printer mapping for non-spooling client (Thin client devices)33
CTXLPT2Printer mapping for non-spooling client (Thin client devices)33
OEMOEMUsed by Original Equipment Manufacturers (OEMs)33
OEMOEM2Used by Original Equipment Manufacturers (OEMs)33

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”

By | 2016-12-18T19:21:38+00:00 December 27th, 2013|XenApp, XenDesktop|9 Comments

About the Author:

I’m a Citrix Architect with 17 years experience in Microsoft and Citrix infrastructure. I have been working with Citrix since Metaframe 1.8 and my primary focus is on Server, Desktop and Application virtualisation with a preference for Citrix products. I’m an enthusiast of Citrix XenDesktop and Provisioning Server.


  1. Brian May 7, 2014 at 7:03 am - Reply

    I was really looking for this info.

    Thank you

    • Andrzej Gołębiowski May 7, 2014 at 8:14 am - Reply

      I’m glad I could help you.


  2. mayur February 23, 2015 at 6:44 pm - Reply

    Linux Receiver 13.0 does it support Multi Stream ICA ?

    • Andrzej Gołębiowski February 24, 2015 at 12:34 pm - Reply

      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+
      Multi-Stream policy

  3. Oscar M April 23, 2015 at 2:19 pm - Reply

    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.


    • Gbenga December 1, 2015 at 2:22 pm - Reply

      Hi Oscar,

      Did you manage to find a solution for your XenApp 7.6 and Citrix Multi-stream?

  4. Nocla February 10, 2016 at 9:19 am - Reply

    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…?

  5. Shawn May 25, 2016 at 5:49 am - Reply

    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 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

  6. Danny September 8, 2016 at 8:28 am - Reply


    I second Nocla’s question above. Is it possible to route ICA streams over different paths?


Leave A Comment

To protect our website from spam. * Time limit is exhausted. Please reload the CAPTCHA.