1.基础组件

Citrix Virtual Apps and Desktops (CVAD)是用来部署虚拟应用和虚拟桌面的产品解决方案。如上图所示,逻辑上可以分成四个层次:用户层、接入层、控制层以及资源层。
用户层
用户层是指用户的终端,包括Linux、Windows、Mac、iOS、Android、HTML5等不同的OS和平台,需要在终端上安装Citrix Workspce App(CWA)来连接虚拟应用和虚拟桌面,也可以不安装CWA采用HTML5的方式。虚拟应用和桌面运行在服务器端,所以相比较而言通常把CWA端称为客户端。
接入层
Netscaler Gateway:也称为ADC,可以理解为以虚拟应用和桌面的接入网关,如果客户端在公网想访问公司内部网络的虚拟桌面,那么需要借助Netscaler Gateway。
StoreFront:简称SF,可以理解为虚拟应用和桌面的商店,类似于手机上的应用商店,登录SF的store之后可以看到分配给自己的虚拟应用和桌面图标。
控制层
Delivery Controller,为了与domain controller的简写区分开,通常简称为DDC,是CVAD的大脑,控制用户资源的分配和启动等。
Studio:基于MMC的管理console,用来管理整个CVAD站点。
Licenses server:Citrix的许可服务器。
Director:基于web的console界面,可以查看整个站点的运行状态。
Database:基于Micsoft SQL的数据库,用于存放整个站点的数据。
资源层
Windows/Linux Apps: 基于Windows和Linux OS发布的虚拟应用。
VDA:用于发布虚拟桌面和虚拟应用。
Hypervisor: 服务器虚拟化,用来创建VM。
2.通信端口

详细端口请参考以下链接:
3.会话启动过程
会话启动分成两个场景:通过ADC和通过SF访问
3.1通过Storefront
资源枚举

- 客户端访问SF输入用户密码,SF联系AD通过Kerberos协议来认证用户
- AD将认证结果返回给SF
- SF将user credential传递给DDC
- DDC联系AD做LDAP查询用户的SID和group
- AD返回结果
- DDC访问数据库查询分配给用户的资源
- SQL返回结果给DDC
- DDC将结果返回给SF
- SF将结果返回给客户端,此时用户可以看到桌面和应用图标
ICA文件下载

- 用户点击桌面图标
- SF将请求传递给DDC
- DDC去数据库查找最合适的VDA
- 数据库返回结果
- DDC通知VDA做好会话准备
- VDA返回结果
- DDC将VDA信息返回给SF
- SF生成ICA文件返回给客户端
会话启动

- 客户端启动ICA文件来联系VDA
- VDA通知DDC ICA session建立,
- DDC会访问License server来获取许可
- License返回结果
- DDC返回VDA license结果
- VDA去AD做kerberos认证
- AD返回认证结果
- 会话建立完毕
参考:https://support.citrix.com/article/CTX236889
3.2通过ADC
未完待续
4.ICA virtual channel
Citrix通过ICA协议连接云桌面(VDA)和客户端,这样用户就可以在客户端操作云桌面。ICA协议是个应用层的协议,在传输层可以使用UDP或者TCP协议。如果把ICA协议比作一个大的管道,那么在这个管道内有很多小的管道来负责不同的功能,这些小的管道称为virtual channel。例如:
- 声音
- 图像
- USB外设
- 打印机
- 鼠标
- 视频

https://docs.citrix.com/en-us/citrix-daas/hdx-transport/adaptive-transport.html
客户端通过virtual Channel和Server(VDA)端进行通信,新的virtual channel有时候会随着VDA和workspace app新版本而发布,所以如果VDA的版本比较新,那么用很老的workspace app或者Receiver进行连接就可能会出现问题。

https://docs.citrix.com/en-us/citrix-virtual-apps-desktops/technical-overview/virtual-channels.html
每个virtual channel对应了相关的虚拟驱动,虚拟驱动是由dll文件实现的:
- d3dn.dll – Direct3D virtual channel used for desktop composition redirection
- vdcamN.dll – Bidirectional audio
- vdcdm30n.dll – Client drive mapping
- vdcom30N.dll – Client COM port mapping
- vdcpm30N.dll – Client printer mapping
- vdctln.dll – ICA controls channel
- vddvc0n.dll – Dynamic virtual channel
- vdeuemn.dll – End user experience monitoring
- vdgusbn.dll – Generic USB virtual channel
- vdkbhook.dll – Transparent key pass-through
- vdlfpn.dll – Framehawk display channel over UDP like transport
- vdmmn.dll – Multimedia support
- vdmrvc.dll – Mobile Receiver virtual channel
- vdmtchn.dll – Multi-touch support
- vdscardn.dll – Smartcard support
- vdsens.dll – Sensors virtual channel
- vdspl30n.dll – Client UPD
- vdsspin.dll – Kerberos
- vdtuin.dll – Transparent UI
- vdtw30n.dll – Client Thinwire
- vdtwin.dll – Seamless
- vdtwn.dll – Twain
USB外设的虚拟驱动比较特殊,是kernel mode的驱动:
- ctxusbm.sys
- ctxusbr.sys