Citrix的XenDesktop5.x和XenApp6.5的打开桌面或者应用也就分钟级的时间,可是在这其中总体系统的数据流是比较复杂的,了解这些数据流程有助于咱们排错。这是我2013年在一个项目上,根据网上文档整理的。这个项目基于XenDesktop5.6和XenApp6.5嵌套部署,底层采用XenServer。数据库
虚拟桌面访问数据流windows
虚拟桌面和虚拟应用嵌套数据流浏览器
其中在虚拟桌面的访问中,有多个流程。下面我将详细描述着这些流程。sass
虚拟桌面注册数据流程服务器
详细流程:session
XenServer给VDA(虚拟桌面)启动电源,虚拟桌面开机启动;架构
VDA开机以后就会在一个vlan内发广播,请求DHCP服务分配ip地址;负载均衡
DHCP收到这个请求的广播包以后,会在本身的地址池里面随机拿一个ip地址,封装在返回的数据包里面。VDA接受数据包得到ip地址。ide
经过DNS解析DDC IP地址;【查找DDC的FQDN:当虚拟机上Citrix Desktop Service服务启动后,VDA会查询注册表ListOfDDCs项(HKLM\SOFTWARE\Citrix\VirtualDesktopAgent\ListOfDDCs),以获取DDC的地址,其值相似于“DDC1.xxx.com DDC2.xxx.com”,多个DDC的FQDN值之间以空格隔开。】 加密
DNS返回DDC ip地址;
检验DDC合法性:VDA拿到ListOfDDCs键值后,会同时向AD检验DDC的FQDN是否合法。
验证经过后,AD将合法的DDC对应的SID返回给VDA。
发起注册请求:VDA根据AD的检验结果,得出最终可用于注册的DDC FQDN,若存在多个合法值,则随机选择其中一个DDC,调用其IRegistrar接口向其发起注册请求。
校验VDA合法性:DDC收到VDA的注册请求后,向AD检验VDA的FQDN是否合法;
验证经过后,AD将VDA对应的SID返回给DDC,DDC与VDA机器完成互信。
向数据库检查VDA是否归属DG:DDC检查VDA是否归属于自身Farm的某个DG(Desktop Group)下;
数据库返回信息。
下发配置:DDC向VDA下发Policy配置,其中包括Farm、DG等配置信息。更新:Farm下各DDC间更新虚拟机注册状态为“Ready”,至此,注册流程结束。
访问WI界面
虚拟桌面桌面注册以后,状态显示已就绪,那么用户就能够访问虚拟桌面并进行使用了。在这一过程当中,根据登陆流程的关键步骤,将整个流程分为4个阶段:访问WI界面、获取VM列表、下载ICA文件、登陆VM,下面详细介绍这4步。
用户插入智能卡后,瘦客户端经过浏览器(如https://xxx.com)发送登录请求,经过负载均衡,选择一个WI,并将WI界面返回给瘦客户端的显示界面上。
获取VM列表
流程介绍:
WI登录:用户在显示器上看到WI登陆界面后,点击“虚拟桌面”图标,瘦客会将用户×××书传递给Citrix Web Interface站点;
WI将用户×××书信息传递给DDC;
DDC收到请求后,向AD验证域账号是否合法;
AD将信息发给LDAP验证;
LDAP返回结果;
AD将结果返回给DDC。
DDC在DB中查询虚拟机列表;
DB返回给DDC;
DDC向WI返回信息;
WI向Client呈现虚拟机图标。
下载ICA文件
详细流程:
1. 点击虚拟机:用户在客户端上点击其中一台虚拟机,登陆请求发送到WI。
2. 获取信息:WI向DDC发起三次请求,获取组装ICA文件所需的三样东西:Address Ticket(在内网访问环境中,该项为虚拟机IP)、Logon Ticket、Launch Ref。
a. Address Ticket:
a) WI向DDC发起第一次请求,以获取虚拟机IP地址。
b) DDC收到请求后,向DB查询虚拟机IP,这个IP是注册时填入DB的。
c) Prepare Session:DDC经过WCF调用虚拟机VDA的ISessionManager接口,让虚拟机PrepareSession以断开全部其它链接(在这一步,旧链接会断开,但也有例外,若是旧链接使用的账号权限比新链接使用的账号权限高,则没法断开旧链接)。
d) DDC将IP信息返回给WI。
e) WI根据自身的配置项比较,可判断出本次链接是外网链接仍是内网链接,若是是内网链接,则获取虚拟机IP流程结束,若是是外网流程,则继续第6步。
f) WI继续访问DDC的STA服务,将虚拟机IP信息向STA寄存,换回一个Address Ticket。
b. Logon Ticket:
WI向DDC发起第二次请求,访问DDC的STA服务,将该次用户在WI传输的身份信息向STA寄存,换回一个Logon Ticket。
c. Launch Ref:
WI向DDC发起第三次请求,DDC直接向WI发回一个Launch Ref,该信息是标识本次链接的有效期。
3、组装ICA文件:WI拿到了AddressTicket(在内网访问环境中,该项为虚拟机IP)、Logon Ticket、Launch Ref后,将其组装为一个ICA文件,并传递给客户端。
登陆VM
详细流程:
1. 客户端上的receiver负责解析ICA文件,并根据ICA文件的内容发起链接请求。如果外网访问,则ICA文件中记录的是NetScaler的AG FQDN信息,链接请求发至NetScaler的AG,流程按顺序往下走;如果内网访问,则ICA文件中记录的是虚拟机的IP信息,客户端直连虚拟机。
2. 登陆虚拟机:虚拟机收到链接请求后,须要执行三个步骤:Logon Ticket验证,License验证,登陆。
1) Logon Ticket验证:
a) VDA获取到请求中包含的Logon Ticket信息后,调用接受其注册的DDC的ITicketing接口,并将Logon Ticket做为参数传递过去。
b) DDC接收到调用请求后,向STA服务校验Logon Ticket是否有效。因为金航的项目是智能卡传递,因此向STA服务校验是不成功的,校验无效,则向AD-LADAP进行再次的身份验证,将换回来的域账号信息发回给DDC。
2) License验证:
a) 换取了登陆信息后,DDC向License发起请求,以验证当前是否有License空闲链接数可用。
b) License查询当前的License使用状况,返回是否有空闲链接数可用。
3) 登陆:
a) 验证完了Logon Ticket,License后,将DDC发回来的域账号信息、当前配置的DDC Policy发送给VDA
b) VDA收到域账号信息后,XP下是经过Citrix的picagina.dll负责将域账号信息贴在登陆窗口,以完成登陆,WIN7下是经过Windows的Credential Provider API完成的。
c) 登陆进入系统后,VDA将DDC发送过来的Policy(策略:包括windows组策略和citrix的IMA策略)在本地应用。
3、最后,VDA向DDC更新其状态为“使用中”,并更新数据库,至此,登陆流程结束。
一、 用户的虚拟桌面里面右键Citrix联机插件或者在开始全部程序那里点开所须要访问的应用程序图标,Citrix联机插件接受到用户的指令后,经过HTTPS协议走SSL加密的通道和443端口将用户证书传递到Citrix Web Interface站点;【技术细节:虚拟桌面里会安装Client证书,Citrix Web Interface站点会安装一个Server证书,在用户发起请求的时候,Client证书与Server证书会先确认对方是它相链接的,而不是第三方冒充的。相互确认以后,Client证书与Server证书会交换session key,用于链接后数据的传输加密和hash校验。Client证书与Server证书加密(内容加密)以后,再走SSL加密(通道加密)】
二、 CitrixWeb Interface将用户×××书经过XML Broker TCP 80和443端口传输到XenApp服务器中IMA服务,IMA服务将用户×××书传递给本地的Lsass.exe进程;
三、 XenApp服务器中Lsass.exe将用户验证信息传递给域控制器进行身份验证;
四、 域控传给LDAP服务器;
五、 LDAP返回结果;
六、 AD将身份验证结果返回给XenApp服务器的Lsass.exe,而后传递给IMA服务;
七、 XenApp去数据库枚举应用列表;
八、 数据库返回应用列表;
九、 根据结果信息查看应用在那个FARM;
十、 成员服务器返回结果;
十一、 XenApp服务器中的IMA服务将身份验证结果及XenApp发布应用列表和策略经过XML Broker返回给Web interface站点服务器;
十二、 WebInterface站点将身份验证结果及XenApp发布应用列表和策略返回给客户端(citrix Receiver或浏览器)指定客户端须要访问的XenApp服务器,并传输ICA文件到客户端;
1三、 客户端经过Receiver或者online plug-in打开ICA文件,访问发布的应用程序(citrix Receiver-Web Interface-XenApp Farm);
1四、 XenApp服务器访问XenApp服务器ZDC寻求验证信息;
1五、 XenAppZDC发送请求到licensing服务器上看是否有空余的受权;
1六、 Licensing服务器返回可用License查询结果给ZDC;
1七、 XenAppZDC去RDS服务器产看是否有终端受权许可;
1八、 RDS返回许可;
1九、 ZDC返回信息给XenApp成员服务器;
20、 XenApp与客户端创建会话,并启动应用程序;