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
CTXSCRDSmartcard0*1
CTXCLIPClipboard12
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”