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與客戶端創建會話,並啓動應用程序;