Citrix ICA协议虚拟通道
本帖最后由 xiaoyu 于 2016-3-9 11:20 编辑1、什么是ICA虚拟通道?
Citrix的核心是ICA协议,ICA协议连接了运行在Citrix服务器上的应用进程和远端客户端设备,通过ICA的32个虚拟通道(分别传递各种输入输出数据如鼠标、键盘、图像、声音、端口、打印等等),运行在信息中心服务器上的应用进程的输入输出数据重新定向到远端客户端机器的输入输出设备上。ICA默认拥有32个虚拟通道,Citrix使用了前29个虚拟通道。剩下的可以让第三方自定义虚拟通道,虚拟通道是Citrix服务器远程计算体验的一个组成部分。【根据Citrix部分资料显示:现在的ICA协议支持64个静态的虚拟通道,有待权威资料证实,安卓系统开发的Citrix Receiver只支持32个虚拟通道】虚拟通道的架构图如下图所示:虚拟通道是由一个客户端的虚拟驱动与服务器端的驱动程序进行通讯的。在客户端,虚拟通道对应于虚拟驱动程序,各自提供特定的功能。同样的,在服务器端也有相对于客户端的服务器端驱动程序来负责一一对应,并实现双向之间的数据通讯。
虚拟通道的虚拟驱动工作在协议层的表示层。
以下是包含在以下注册表路径VirtualDriver注册表键的功能列表:HKEY_LOCAL_MACHINE\SOFTWARE\Citrix\ICAClient\Engine\Configuration\Advanced\Modules\ICA 3.0我们可以通过该注册表位置查看在我们的环境中包含的虚拟通道的功能和虚拟通道的驱动都有哪些以及对应的相应功能。我们可以删除我们不需要的虚拟通道。详情可以参考本连接到文档http://www.dell.com/downloads/gl ... _ica_web_client.pdf
2、ICA虚拟通道如何工作
我们知道操作系统分为用户模式和内核模式。在ICA虚拟通道中,有些虚拟通道工作与用户模式,有些虚拟通道工作与内核模式。在服务器端的用户模式,一些虚拟通道由Wfshell.exe加载,例如:SpeedBrowse,EUEM,语音麦克风,双音频,剪贴板,多媒体,无缝会话共享,SpeedScreen等。这些虚拟通道就是工作在操作系统的用户模式。其他的虚拟通道工作在操作系统的内核模式,需要使用时则加载至内核模式,例如CDM.sys和vdtw30.sys。所有客户虚拟通道上层通过WinStation驱动进行数据的传输,如果安装了ICA客户端,在服务器端和客户端上,都有相应的WinStation驱动,在服务端上内置到了Wdica.sys中,在客户端中内置到wfica32.exe。下图显示了虚拟通道的客户端 - 服务器连接下面是客户端 - 服务器使用虚拟通道进行数据交换的过程概述。
1、 客户端连接到Citrix后端的服务器进行服务的获取,比如启动一个应用程序。2、 服务器端应用程序启动时,获得一个虚拟通道句柄,该虚拟通道需要将应用程序的启动显示图形界面信息推送到前端的客户端。因此应用层的应用程序根据命令向VM上的显示驱动层调取显示功能时,这时ICA的虚拟通道驱动程序会截取掉相应的显示调取和数据信息,并将其发送到WinStation驱动的缓冲区中。3、在数据和命令到达WinStation驱动之后,WinStation驱动的处理模式有两种,轮询模式和直接模式:
[*]直接模式:如果服务器应用程序有数据要发送到客户端,数据被立即发送到客户端。当收到由虚拟通道驱动转发过来的的数据存放于WinStation驱动缓存区中时,WinStation驱动会根据高虚拟通道的优先级,将数据转发给压缩或着加密驱动程序进行相应的操作。待加密和压缩完成后将其转发至帧协议驱动,将数据包进行封装成数据帧,并通过相应的连接TCP/IP协议栈,有TCP/IP立即将其传递到客户端。
[*]轮询模式:如果客户端的虚拟驱动有数据要发送到服务器,该数据的优先级来说就需要再等待一下,等待WinStation驱动依照轮询的方式执行或着读取他。即如果是客户端发往服务器的数据,数据包将会进行缓存中,并进行排队,等待WinStation驱动读取排队队列,直到WinStation驱动读取它。
4、客户端接收到数据包之后,在客户端上安装的ICA接受模块就会将数据进行反解析,解码出相应的数据与命令,然后通过客户端OS向特定的驱动调用相应接口实现对于的功能。5、当服务器通过虚拟通道将应用程序显示推送完成并使用完成后,关闭虚拟通道,并释放所有分配的资源。
3、ICA虚拟通道优先级
ICA数据包优先级标记为正在传输的ICA会话虚拟通道数据定义传输的优先级。这是通过每个虚拟通道有一个2位的优先级相关联来实现的。此2位的优先级包括在ICA数据报文之内。 他们2位的优先位值结合形成四个优先值:
[*] 00(0)高优先级
[*] 01(1)中优先级
[*] 10(2)低优先级
[*] 11(3)后台优先权
每个虚拟通道被分配这些优先级值中的一个。缺省虚拟通道优先级如下:
Channel NamePriorityDescriptionVirtual Driver
CTXCAM0Client Audio MappingvdcamN.dll
CTXCCM3Client COM Port Mappingvdcom30N.dll
CTXCDM2Client Drive Mappingvdcdm30n.dll
CTXCLIP2Client Clipboard Mappingvdclipn.dll
CTXCM3Client Management (Auto-Update)vdcmN.dll
CTXCOM13Legacy COM1 Port Mappingvdcom30N.dll
CTXCOM23Legacy COM2 Port Mappingvdcom30N.dll
CTXCPM3Printer Mapping for Spooling Clientsvdcpm30N.dll
CTXCTL1ICA Session Controlvdctln.dll
CTXD3D1Direct3D Virtual Channel Adaptervd3dn.dll
CTXEUEM1End User Experience Monitoringvdeuemn.dll
CTXFLSH2Multimedia - Flashvdflash.dll
CTXGUSB2USB Redirectionvdgusbn.dll
CTXLIC1License Managementwfica32.exe
CTXLPT13Legacy LP1 Port Mappingvdcpm30N.dll
CTXLPT23Legacy LPT2 Port Mappingvdcpm30N.dll
CTXMM2Multimedia - Streamingvdmmn.dll
CTXPASS2Transparent Key Pass-Throughvdkbhook.dll
CTXPN1Process Notificationvdpnn.dll
CTXSBR1Citrix Browser Accelerationvdtw30n.dll
CTXSCRD1Smartcardvdscardn.dll
CTXTW1Remote Session Screen Update (THINWIRE)vdtw30n.dll
CTXTWI1Seamless Windows Screen Update (THINWIRE)vdtwin.dll
CTXTWN2Twain Redirectionvdtwn.dll
CTXZLC0Speed Screen Latency Reduction - Screenvdzlcn.dll
CTXZLFK0Speed Screen Latency Reduction - Fontsvdfon30n.dll
OEMOEM3
OEMOEM23
CTXVFM1
所有虚拟通道的优先级设置存储在以下注册表项:(REG_MULTI_SZ)此项包含一行,格式为每个虚拟通道:VirtualChannelName,PriorityVirtualChannelName是如在上述表中指定的标准的虚拟通道的缩VirtualChannelName必须7个字符,所以尾随空格必须逗号在必要的时候才加入。重点是以下数字之一优先级值:0,1,2,3。Thinwire虚拟通道(CTXTW和CTXTWI)是唯一默认的高优先级的虚拟通道,这会确保对延迟敏感的用户界面数据被优先发送。
4.、自定义虚拟通道
以下是自定义虚拟通道的文档连接:https://www.citrix.com/downloads/citrix-receiver/sdks/virtual-channel-sdk.htmlhttps://www.citrix.com/community/receiver-ica-sdks.html
5、动态虚拟通道
动态虚拟通道技术其实现的机制和多路复用分机制差不多,我们可以安装这样的思路去理解就可以了。动态虚拟通道技术封装在ICA协议当中,也可以调用微软的RDP动态虚拟通道API来使用。相当于在ICA虚拟通道不够的情况下,使用RDP协议的虚拟通道API调用其虚拟通道来实现功能。微软的RDP协议的动态虚拟通道:http://msdn.microsoft.com/en-us/library/bb540860(v=vs.85).aspx
6、直通功能的虚拟通道
在Citrix ICA协议中,以下的虚拟通道在单跳或多跳操作方式相同:
[*]Client Drive Mapping,
[*]Client COM Port Mapping,
[*]Client Printer Mapping,
[*]Smartcard support,
[*]Kerberos,
[*]Twain,
[*]Client Local Text Echo/Speed Screen Latency Reduction (ZLC),
[*]Program Neighborhood Support,
[*]Transparent Key Pass-Through,
[*]Multimedia Support,
[*]Client UPD and End User Experience Monitoring.
因为延迟的重要性,如进行压缩和解压缩和呈现在每一跳的功能时可能会稍微影响在性能方面的用户体验。特别是以下的虚拟通道领域:
[*]Seamless,
[*]ThinWire,
[*]Philips Speech Mike recorder and foot pedal and Bi-directional Audio
尽管一些特定场景没有测试,但是Citrix提供虚拟通道大多数情况下,在Windows中使用XenDesktop的ICA会话,大部分都是直通会话。具体来说,zXenDesktop服务器上,有一个VDA Hook【钩子】运行,命名为picaPassthruHook,其唯一目的是让客户端相信其是在CPS服务器上运行,因此将客户端进入其传统的直通模式。
以下是支持的直通模式功能的虚拟通道:
[*]SSON,
[*]Client Drive Mapping,
[*]Client COM Port Mapping,
[*]Client Printer Mapping,
[*]Smartcard support,
[*]Kerberos,
[*]Client Local Text Echo/Speed Screen Latency Reduction (ZLC),
[*]Transparent Key Pass-Through,
[*]Multimedia Support, Client UPD.
页:
[1]