CitrixXenDesktop5.xXenApp6.5的打开桌面或者应用也就分钟级的时间,但是在这其中整体系统的数据流是比较复杂的,了解这些数据流程有助于我们排错。这是我2013年在一个项目上,根据网上文档整理的。这个项目基于XenDesktop5.6XenApp6.5嵌套部署,底层采用XenServer


虚拟桌面访问数据流

XenDesktop5.x/XenApp6.x访问数据流_IP地址

虚拟桌面和虚拟应用嵌套数据流

XenDesktop5.x/XenApp6.x访问数据流_Desktop_02

其中在虚拟桌面的访问中,有多个流程。下面我将详细描述着这些流程。

虚拟桌面注册数据流程

XenDesktop5.x/XenApp6.x访问数据流_IP地址_03

详细流程:

  1. XenServerVDA(虚拟桌面)启动电源,虚拟桌面开机启动;

  2. VDA开机之后就会在一个vlan内发广播,请求DHCP服务分配ip地址;

  3. DHCP收到这个请求的广播包之后,会在自己的地址池里面随机拿一个ip地址,封装在返回的数据包里面。VDA接受数据包获得ip地址。

  4. 通过DNS解析DDC IP地址;【查找DDCFQDN:当虚拟机上Citrix Desktop Service服务启动后,VDA会查询注册表ListOfDDCs项(HKLM\SOFTWARE\Citrix\VirtualDesktopAgent\ListOfDDCs),以获取DDC的地址,其值类似于“DDC1.xxx.com  DDC2.xxx.com”,多个DDCFQDN值之间以空格隔开。】

  5. DNS返回DDC ip地址;

  6. 检验DDC合法性:VDA拿到ListOfDDCs键值后,会同时向AD检验DDCFQDN是否合法。

  7. 验证通过后,AD将合法的DDC对应的SID返回给VDA

  8. 发起注册请求:VDA根据AD的检验结果,得出最终可用于注册的DDC FQDN,若存在多个合法值,则随机选择其中一个DDC,调用其IRegistrar接口向其发起注册请求。

  9. 校验VDA合法性:DDC收到VDA的注册请求后,向AD检验VDAFQDN是否合法;

  10. 验证通过后,ADVDA对应的SID返回给DDCDDCVDA机器完成互信。

  11. 向数据库检查VDA是否归属DGDDC检查VDA是否归属于自身Farm的某个DGDesktop Group)下;

  12. 数据库返回信息。

  13. 下发配置:DDCVDA下发Policy配置,其中包括FarmDG等配置信息。更新:Farm下各DDC间更新虚拟机注册状态为“Ready”,至此,注册流程结束。


访问WI界面

   虚拟桌面桌面注册之后,状态显示已就绪,那么用户就可以访问虚拟桌面并进行使用了。在这一过程中,根据登录流程的关键步骤,将整个流程分为4个阶段:访问WI界面、获取VM列表、下载ICA文件、登录VM,下面详细介绍这4步。

XenDesktop5.x/XenApp6.x访问数据流_IP地址_04

用户插入智能卡后,瘦客户端通过浏览器(如https://xxx.com)发送登陆请求,通过负载均衡,选择一个WI,并将WI界面返回给瘦客户端的显示界面上。


获取VM列表

XenDesktop5.x/XenApp6.x访问数据流_Desktop_05

流程介绍:

  1. WI登陆:用户在显示器上看到WI登录界面后,点击“虚拟桌面”图标,瘦客会将用户×××书传递给Citrix Web Interface站点;

  2. WI将用户×××书信息传递给DDC

  3. DDC收到请求后,向AD验证域帐号是否合法;

  4. AD将信息发给LDAP验证;

  5. LDAP返回结果;

  6. AD将结果返回给DDC

  7. DDCDB中查询虚拟机列表;

  8. DB返回给DDC

  9. DDCWI返回信息;

  10. WIClient呈现虚拟机图标。


下载ICA文件

XenDesktop5.x/XenApp6.x访问数据流_Desktop_06

 详细流程:

1.      点击虚拟机:用户在客户端上点击其中一台虚拟机,登录请求发送到WI

2.      获取信息:WIDDC发起三次请求,获取组装ICA文件所需的三样东西:Address Ticket(在内网访问环境中,该项为虚拟机IP)、Logon TicketLaunch Ref

a.       Address Ticket

   a)  WIDDC发起第一次请求,以获取虚拟机IP地址。

   b)  DDC收到请求后,向DB查询虚拟机IP,这个IP是注册时填入DB的。

   c)   Prepare SessionDDC通过WCF调用虚拟机VDAISessionManager接口,让虚拟机PrepareSession以断开所有其它连接(在这一步,旧连接会断开,但也有例外,如果旧连接使用的帐号权限比新连接使用的帐号权限高,则无法断开旧连接)。

   d)  DDCIP信息返回给WI

   e)  WI根据自身的配置项比较,可判断出本次连接是外网连接还是内网连接,如果是内网连接,则获取虚拟机IP流程结束,如果是外网流程,则继续第6步。

   f)    WI继续访问DDCSTA服务,将虚拟机IP信息向STA寄存,换回一个Address Ticket

b.       Logon Ticket

WIDDC发起第二次请求,访问DDCSTA服务,将该次用户在WI传输的身份信息向STA寄存,换回一个Logon Ticket

c.        Launch Ref

WIDDC发起第三次请求,DDC直接向WI发回一个Launch Ref,该信息是标识本次连接的有效期。

3、组装ICA文件:WI拿到了AddressTicket(在内网访问环境中,该项为虚拟机IP)、Logon TicketLaunch Ref后,将其组装为一个ICA文件,并传递给客户端。


登录VM

XenDesktop5.x/XenApp6.x访问数据流_Desktop_07

详细流程:

1.      客户端上的receiver负责解析ICA文件,并根据ICA文件的内容发起连接请求。若是外网访问,则ICA文件中记录的是NetScalerAG FQDN信息,连接请求发至NetScalerAG,流程按顺序往下走;若是内网访问,则ICA文件中记录的是虚拟机的IP信息,客户端直连虚拟机。

2.      登录虚拟机:虚拟机收到连接请求后,需要执行三个步骤:Logon Ticket验证,License验证,登录。

  1)       Logon Ticket验证:

   a)       VDA获取到请求中包含的Logon Ticket信息后,调用接受其注册的DDCITicketing接口,并将Logon Ticket作为参数传递过去。

   b)       DDC接收到调用请求后,向STA服务校验Logon Ticket是否有效。由于金航的项目是智能卡传递,所以向STA服务校验是不成功的,校验无效,则向AD-LADAP进行再次的身份验证,将换回来的域帐号信息发回给DDC

  2)       License验证:

   a)       换取了登录信息后,DDCLicense发起请求,以验证当前是否有License空闲连接数可用。

   b)       License查询当前的License使用情况,返回是否有空闲连接数可用。

  3)       登录:

   a)       验证完了Logon TicketLicense后,将DDC发回来的域帐号信息、当前配置的DDC Policy发送给VDA

   b)       VDA收到域帐号信息后,XP下是通过Citrixpicagina.dll负责将域帐号信息贴在登录窗口,以完成登录,WIN7下是通过WindowsCredential Provider API完成的。

   c)       登录进入系统后,VDADDC发送过来的Policy(策略:包括windows组策略和citrixIMA策略)在本地应用。

3、最后,VDADDC更新其状态为“使用中,并更新数据库,至此,登录流程结束。


虚拟应用架构图

XenDesktop5.x/XenApp6.x访问数据流_IP地址_08

 

1、             用户的虚拟桌面里面右键Citrix联机插件或者在开始所有程序那里点开所需要访问的应用程序图标,Citrix联机插件接受到用户的指令后,通过HTTPS协议走SSL加密的通道和443端口将用户证书传递到Citrix Web Interface站点;【技术细节:虚拟桌面里会安装Client证书,Citrix Web Interface站点会安装一个Server证书,在用户发起请求的时候,Client证书Server证书会先确认对方是它相连接的,而不是第三方冒充的。相互确认之后,Client证书Server证书会交换session key用于连接后数据的传输加密和hash校验Client证书与Server证书加密(内容加密)之后,再走SSL加密(通道加密)

2、             CitrixWeb Interface将用户×××书通过XML Broker TCP 80443端口传输到XenApp服务器中IMA服务,IMA服务将用户×××书传递给本地的Lsass.exe进程;

3、             XenApp服务器中Lsass.exe将用户验证信息传递给域控制器进行身份验证;

4、             域控传给LDAP服务器;

5、             LDAP返回结果;

6、             AD将身份验证结果返回给XenApp服务器的Lsass.exe,然后传递给IMA服务;

7、             XenApp去数据库枚举应用列表;

8、             数据库返回应用列表;

9、             根据结果信息查看应用在那个FARM

10、         成员服务器返回结果;

11、         XenApp服务器中的IMA服务将身份验证结果及XenApp发布应用列表和策略通过XML Broker返回给Web interface站点服务器;

12、         WebInterface站点将身份验证结果及XenApp发布应用列表和策略返回给客户端(citrix Receiver或浏览器)指定客户端需要访问的XenApp服务器,并传输ICA文件到客户端;

13、         客户端通过Receiver或者online plug-in打开ICA文件,访问发布的应用程序(citrix Receiver-Web Interface-XenApp Farm);

14、         XenApp服务器访问XenApp服务器ZDC寻求验证信息;

15、         XenAppZDC发送请求到licensing服务器上看是否有空余的授权;

16、         Licensing服务器返回可用License查询结果给ZDC

17、         XenAppZDCRDS服务器产看是否有终端授权许可;

18、         RDS返回许可;

19、         ZDC返回信息给XenApp成员服务器;

20、         XenApp与客户端建立会话,并启动应用程序;