找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9574|回复: 1

Citrix ICA协议虚拟通道

[复制链接]

238

主题

329

帖子

2119

积分

超级版主

Rank: 8Rank: 8

积分
2119
QQ
发表于 2016-3-9 10:02:19 | 显示全部楼层 |阅读模式
本帖最后由 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个虚拟通道】
虚拟通道的架构图如下图所示:
IMG_6130.PNG
虚拟通道是由一个客户端的虚拟驱动与服务器端的驱动程序进行通讯的。在客户端,虚拟通道对应于虚拟驱动程序,各自提供特定的功能。同样的,在服务器端也有相对于客户端的服务器端驱动程序来负责一一对应,并实现双向之间的数据通讯。

虚拟通道的虚拟驱动工作在协议层的表示层。

以下是包含在以下注册表路径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。
下图显示了虚拟通道的客户端 - 服务器连接
IMG_6131.PNG
下面是客户端 - 服务器使用虚拟通道进行数据交换的过程概述。

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 Name
Priority
Description
Virtual Driver
CTXCAM
0
Client Audio Mapping
vdcamN.dll
CTXCCM
3
Client COM Port Mapping
vdcom30N.dll
CTXCDM
2
Client Drive Mapping
vdcdm30n.dll
CTXCLIP
2
Client Clipboard Mapping
vdclipn.dll
CTXCM
3
Client Management (Auto-Update)
vdcmN.dll
CTXCOM1
3
Legacy COM1 Port Mapping
vdcom30N.dll
CTXCOM2
3
Legacy COM2 Port Mapping
vdcom30N.dll
CTXCPM
3
Printer Mapping for Spooling Clients
vdcpm30N.dll
CTXCTL
1
ICA Session Control
vdctln.dll
CTXD3D
1
Direct3D Virtual Channel Adapter
vd3dn.dll
CTXEUEM
1
End User Experience Monitoring
vdeuemn.dll
CTXFLSH
2
Multimedia - Flash
vdflash.dll
CTXGUSB
2
USB Redirection
vdgusbn.dll
CTXLIC
1
License Management
wfica32.exe
CTXLPT1
3
Legacy LP1 Port Mapping
vdcpm30N.dll
CTXLPT2
3
Legacy LPT2 Port Mapping
vdcpm30N.dll
CTXMM
2
Multimedia - Streaming
vdmmn.dll
CTXPASS
2
Transparent Key Pass-Through
vdkbhook.dll
CTXPN
1
Process Notification
vdpnn.dll
CTXSBR
1
Citrix Browser Acceleration
vdtw30n.dll
CTXSCRD
1
Smartcard
vdscardn.dll
CTXTW
1
Remote Session Screen Update (THINWIRE)
vdtw30n.dll
CTXTWI
1
Seamless Windows Screen Update (THINWIRE)
vdtwin.dll
CTXTWN
2
Twain Redirection
vdtwn.dll
CTXZLC
0
Speed Screen Latency Reduction - Screen
vdzlcn.dll
CTXZLFK
0
Speed Screen Latency Reduction - Fonts
vdfon30n.dll
OEMOEM
3

OEMOEM2
3

CTXVFM
1

  所有虚拟通道的优先级设置存储在以下注册表项:
[HKLM\System\CurrentControlSet\Control\TerminalServer\Wds\icawd\Priority](REG_MULTI_SZ)
此项包含一行,格式为每个虚拟通道:
VirtualChannelName,Priority
VirtualChannelName是如在上述表中指定的标准的虚拟通道的缩
VirtualChannelName必须7个字符,所以尾随空格必须逗号在必要的时候才加入。重点是以下数字之一优先级值:0,1,2,3。
Thinwire虚拟通道(CTXTW和CTXTWI)是唯一默认的高优先级的虚拟通道,这会确保对延迟敏感的用户界面数据被优先发送。


4.、自定义虚拟通道
以下是自定义虚拟通道的文档连接:
https://www.citrix.com/downloads/citrix-receiver/sdks/virtual-channel-sdk.html
https://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.


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表