Spice協(xié)議初探

序 言

SPICE,即Simple Protocol for Independent Computing Environment(獨立計算環(huán)境簡單協(xié)議)是紅帽企業(yè)虛擬化桌面版的主要技術組件之一篙悯,具有自適應能力的遠程提交協(xié)議,能夠提供與物理桌面完全相同的最終用戶體驗稠茂。靈躍桌面云借助支持SPICE協(xié)議的客戶端(如remote-viewer)或者通過瀏覽器,用戶可以訪問自己的虛擬桌面眨攘,如下圖1所示


圖1.png

1.特點

Spice虛擬桌面?zhèn)鬏攨f(xié)議主慰,最初是由Qumranet開發(fā),后來被RedHat收購并開源鲫售。經(jīng)過幾年的社區(qū)開發(fā)共螺,Spice協(xié)議已經(jīng)能在實際應用中一展拳腳,和商業(yè)協(xié)議ICA 情竹、PCoIP等相抗衡藐不,與上述商業(yè)化的遠程桌面協(xié)議相比,Spice協(xié)議具有如下優(yōu)點:
(1)開源:易于擴展和功能定制秦效;
(2)跨平臺:Windows/Linux/Mac OS平臺全兼容雏蛮;
(3)支持外接設備:除常用USB設備外,打印機和掃描儀等設備也能在遠程使用阱州;
(4)豐富的媒體支持:包括視頻挑秉、音頻、圖像苔货;
(5)更小的帶寬占用:Spice里內(nèi)置圖像壓縮算法犀概,有效減少數(shù)據(jù)傳輸時的帶寬占用立哑;
(6)更安全的數(shù)據(jù)傳輸:Spice可以使用OpenSSL加密傳輸數(shù)據(jù)。

2.架構

Spice 包含四個部分:協(xié)議姻灶、客戶端側(cè)铛绰、服務端側(cè)和虛擬機側(cè)。其中产喉,
(1)協(xié)議:是客戶端側(cè)捂掰、服務端側(cè)和虛擬機側(cè)三個部分交互時所遵循的準則;
(2)客戶端:負責接收并轉(zhuǎn)換虛擬機數(shù)據(jù)曾沈,以及發(fā)送用戶輸入數(shù)據(jù)到虛擬機这嚣,從而使得用戶能夠與虛擬機進行交互;
(3)服務端:是集成在Hypervisor內(nèi)部的一個用戶層組件晦譬,使得Hypervisor(如QEMU)支持Spice協(xié)議疤苹;
(4)虛擬機側(cè):指所有部署在虛擬機內(nèi)部的必需組件互广,如QXL驅(qū)動敛腌、Spice Agent等。


圖2.png

(一)Spice 圖形命令流
 圖3展示了Spice的基本框架惫皱,以及圖形命令流如何從虛擬機內(nèi)部達到Spice終端(平臺環(huán)境為QEMU+libSpice)像樊。圖形命令開始于虛擬機內(nèi)部的圖形應用程序向OS請求繪制操作(如GDI命令)。之后旅敷,Spice會利用安裝在虛擬機內(nèi)部的QXL驅(qū)動生棍,捕獲應用程序的繪制操作,進而轉(zhuǎn)化為Spice QXL 命令媳谁,并傳遞到QEMU虛擬的QXL設備后端涂滴。接著,LibSpice會讀取上述QXL 命令晴音,進行重組和優(yōu)化柔纵,并封裝成Spice協(xié)議消息格式,發(fā)送到終端锤躁。最后搁料,終端依據(jù)Spice協(xié)議解析對應的圖形操作消息,進而完成畫面更新操作系羞。


圖3.png

(二)Agent 命令流
如圖4所示郭计,為Spice Agent對應的命令交互流程,Spice Agent位于虛擬機內(nèi)部椒振。Spice Server 和 client 借助Agent在虛擬機內(nèi)部執(zhí)行一系列動作昭伸,如設置虛擬機顯示配置等。Spice Agent通過位于虛擬機內(nèi)部的VDIPort設備驅(qū)動與VDIPort設備(由QEMU 虛擬的設備)進行交互澎迎,VDIPort虛擬設備與Spice Server通過QEMU 的VDI Interface 進行交互庐杨,從而最終實現(xiàn)Spice Agent與Spice Server以及Spice Client三者之間的交互宋下,其中消息格式均遵從Spice協(xié)議。


圖4.png

3.實現(xiàn)

3.1 Spice客戶端
如圖5所示辑莫,Spice客戶端通過建立不同的通道來處理不同的事件学歧。客戶端將每個Channel實現(xiàn)為一個單獨的線程各吨,具體通過定義一個以單獨線程運轉(zhuǎn)的RedChannel基類的方式來實現(xiàn)枝笨,之后從此基類中派生所需要的具體功能類。
客戶端Channel類包括:RedClient揭蜒、DisplayChannel横浑、CursorChannel、InputsChannel屉更、PlaybackChannel徙融、RecordChannel等。RedClient 負責建立主通道瑰谜,之后主通道通過channel_type創(chuàng)建下述通道:
(1)DisplayChannel:負責處理圖形命令欺冀、圖片以及視頻流顯示;
(2)InputsChannel:負責處理鍵盤和鼠標輸入萨脑;
(3)CursorChannel:負責處理指針設備位置隐轩、可見性以及形狀的顯示;
(4)PlaybackChannel:負責接收服務端的聲音數(shù)據(jù)渤早,并在客戶端播放职车;
(5)RecordChannel:負責客戶端聲音設備聲音捕獲,并將其傳遞到虛擬機內(nèi)鹊杖。

圖5.png

3.2 Spice Server
如圖6所示悴灵,Spice Server內(nèi)部對應于client,也存在若干個通道骂蓖。這些通道主要負責向虛擬機的虛擬設備(如鍵盤鼠標等)傳遞客戶端側(cè)用戶的輸入积瞒,以及接收并顯示虛擬機虛擬顯卡對應的畫面(QXL)。為了使得Spice Server能夠相對獨立涯竟,其借助QEMU提供的各種虛擬設備后端接口來與虛擬機所見的虛擬設備進行交互赡鲜,如Playback Interface等。


圖6.png

3.3 Spice 協(xié)議
如圖7所示庐船,Spice協(xié)議是構建起整個虛擬桌面的核心银酬。借助于Spice協(xié)議,虛擬桌面各個組件之間才能夠順利交互筐钟。


圖7.png

3.4 QXL Device
Spice Server 支持 QXL VDI interface揩瞪,負責為虛擬機提供虛擬顯卡,包括初始化顯卡的ROM與RAM等的地址映射篓冲、IO端口映射李破、顯存區(qū)域更新宠哄、光標位置通知、設備IRQ請求嗤攻、顯卡模式設置及重置等顯卡基本功能毛嫉。同時,QXL設備后端妇菱,負責與Spice Server交互承粤,從而實現(xiàn)在終端實時進行虛擬桌面的顯示。
3.5 QXL Guest Drivers
QXL虛擬設備對應的驅(qū)動闯团,使操作系統(tǒng)能夠正確識別相應的設備辛臊。
3.6 Spice Agent
虛擬機內(nèi)部的守護進程,接收來自客戶端或者服務器的相關操作請求房交,比如設置虛擬機的分辨率等彻舰。
3.7 VDIPort Device and Driver
VDIPort設備由Spice Server為虛擬機所虛擬的串口通信設備,提供給虛擬機內(nèi)部Agent通道以及usb重定向通道使用候味,其在QEMU側(cè)均對應于一種名稱為Spicevmc的字符設備后端刃唤。
本文轉(zhuǎn)載于 靈躍云 : 原文鏈接

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市负溪,隨后出現(xiàn)的幾起案子透揣,更是在濱河造成了極大的恐慌济炎,老刑警劉巖川抡,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異须尚,居然都是意外死亡崖堤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進店門耐床,熙熙樓的掌柜王于貴愁眉苦臉地迎上來密幔,“玉大人,你說我怎么就攤上這事撩轰】杷Γ” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵堪嫂,是天一觀的道長偎箫。 經(jīng)常有香客問我,道長皆串,這世上最難降的妖魔是什么淹办? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮恶复,結(jié)果婚禮上怜森,老公的妹妹穿的比我還像新娘速挑。我一直安慰自己,他們只是感情好副硅,可當我...
    茶點故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布姥宝。 她就那樣靜靜地躺著,像睡著了一般恐疲。 火紅的嫁衣襯著肌膚如雪伶授。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天流纹,我揣著相機與錄音糜烹,去河邊找鬼。 笑死漱凝,一個胖子當著我的面吹牛疮蹦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播茸炒,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼愕乎,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了壁公?” 一聲冷哼從身側(cè)響起感论,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎紊册,沒想到半個月后比肄,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡囊陡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年芳绩,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撞反。...
    茶點故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡妥色,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出遏片,到底是詐尸還是另有隱情嘹害,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布吮便,位于F島的核電站笔呀,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏线衫。R本人自食惡果不足惜凿可,卻給世界環(huán)境...
    茶點故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枯跑,春花似錦惨驶、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至纳击,卻和暖如春续扔,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背焕数。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工纱昧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人堡赔。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓识脆,卻偏偏與公主長得像,于是被迫代替她去往敵國和親善已。 傳聞我的和親對象是個殘疾皇子灼捂,可洞房花燭夜當晚...
    茶點故事閱讀 43,465評論 2 348