《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 通信与网络 > 设计应用 > 虚拟网络计算中的数据传输保证机制研究
虚拟网络计算中的数据传输保证机制研究
来源:微型机与应用2011年第7期
王培东,赵一峰
(哈尔滨理工大学 计算机科学与技术学院,黑龙江 哈尔滨 150080)
摘要: VNC是一个强大的远程桌面共享工具,能够让多个客户端通过互联网查看服务器端的实时桌面状况并可以进行远程操作,但是VNC系统的星形结构使其在实际场景中的可用性大大降低。对VNC系统进行了改进,并在此基础上提出了一种数据传输的保证机制。应用验证表明,其机制在改进后的系统中保证了数据能够实时、可靠地传输。
Abstract:
Key words :

摘  要: VNC是一個(gè)強(qiáng)大的遠(yuǎn)程桌面共享工具,能夠讓多個(gè)客戶端通過(guò)互聯(lián)網(wǎng)查看服務(wù)器端的實(shí)時(shí)桌面狀況并可以進(jìn)行遠(yuǎn)程操作,但是VNC系統(tǒng)的星形結(jié)構(gòu)使其在實(shí)際場(chǎng)景中的可用性大大降低。對(duì)VNC系統(tǒng)進(jìn)行了改進(jìn),并在此基礎(chǔ)上提出了一種數(shù)據(jù)傳輸?shù)谋WC機(jī)制。應(yīng)用驗(yàn)證表明,其機(jī)制在改進(jìn)后的系統(tǒng)中保證了數(shù)據(jù)能夠?qū)崟r(shí)、可靠地傳輸。
關(guān)鍵詞: 數(shù)據(jù)會(huì)議;虛擬網(wǎng)絡(luò)計(jì)算;數(shù)據(jù)傳輸保證機(jī)制

1 VNC系統(tǒng)簡(jiǎn)介
    VNC[1](Virtual Network Computing)由著名的AT&T歐洲研究實(shí)驗(yàn)室研發(fā),由于其平臺(tái)的獨(dú)立性,在數(shù)據(jù)共享中有著廣泛的應(yīng)用。
 VNC軟件主要由VNC服務(wù)器(VNCServer)和VNC查看器(VNCViewer)兩部分組成。在VNC服務(wù)器上運(yùn)行欲共享的應(yīng)用,客戶端通過(guò)使用遠(yuǎn)端幀緩沖器RFB(Remote Frame Buffer)協(xié)議[2]中的輸入?yún)f(xié)議將客戶端的輸入發(fā)送到服務(wù)器端,通過(guò)顯示協(xié)議實(shí)現(xiàn)遠(yuǎn)程桌面的查看和控制,通過(guò)像素?cái)?shù)據(jù)的重現(xiàn)實(shí)現(xiàn)客戶端和服務(wù)器之間傳輸像素?cái)?shù)據(jù)格式和編碼方式的協(xié)調(diào)。像素?cái)?shù)據(jù)如何通過(guò)網(wǎng)絡(luò)傳輸也是通過(guò)編碼解決的,數(shù)據(jù)本身遵循特定的編碼。
2 基于VNC的數(shù)據(jù)會(huì)議系統(tǒng)
 傳統(tǒng)的VNC體系結(jié)構(gòu)[3]默認(rèn)采用星形直連方式,由一臺(tái)電腦作為服務(wù)器(VNCServer),多臺(tái)電腦作為客戶端(VNCClient)與服務(wù)器相連,由服務(wù)器直接向各個(gè)客戶端發(fā)送共享數(shù)據(jù)。
多客戶單服務(wù)器構(gòu)架難以應(yīng)付大規(guī)模并發(fā)客戶,資源集中于服務(wù)器易形成瓶頸,客戶端資源利用率低。VNC是一個(gè)開(kāi)放源代碼的項(xiàng)目,可以根據(jù)需要對(duì)VNC加以改進(jìn)。
2.1 對(duì)基于VNC的數(shù)據(jù)會(huì)議系統(tǒng)的改進(jìn)
 由于VNC服務(wù)器端的機(jī)器性能和帶寬等多方面原因,在傳輸過(guò)程中會(huì)造成性能瓶頸,使得以星形直連方式傳輸數(shù)據(jù)的VNC體系在實(shí)際的數(shù)據(jù)會(huì)議中應(yīng)用困難。為保證在數(shù)據(jù)會(huì)議中數(shù)據(jù)傳輸?shù)膶?shí)時(shí)、穩(wěn)定,可在VNC服務(wù)器和VNC客戶端之間設(shè)置一個(gè)共享轉(zhuǎn)發(fā)控制服務(wù)器。
    通過(guò)設(shè)置中間服務(wù)器,并由中間服務(wù)器擔(dān)負(fù)著內(nèi)容轉(zhuǎn)發(fā)服務(wù)器和網(wǎng)絡(luò)管理服務(wù)器的兩大功能,可以轉(zhuǎn)移源服務(wù)器性能和帶寬的壓力,同時(shí)也可實(shí)現(xiàn)統(tǒng)一管理。
2.2 系統(tǒng)數(shù)據(jù)更新機(jī)制的選擇
 顯示更新機(jī)制[4]包括更新時(shí)機(jī)及刷新模式。更新時(shí)機(jī)有客戶端拉動(dòng)和服務(wù)器端推動(dòng)兩種。每種技術(shù)又可采用兩種刷新模式,即懶惰更新和急切更新。
更新機(jī)制的選擇一般依據(jù)以下準(zhǔn)則:
 (1)帶寬較高時(shí)優(yōu)先選擇服務(wù)器驅(qū)動(dòng)的急切更新模式,以便獲得較好的共享效果。
 (2)在較低帶寬下為減少響應(yīng)時(shí)間,節(jié)省網(wǎng)絡(luò)帶寬,采用懶惰更新機(jī)制,通過(guò)放棄或者融合顯示更新來(lái)減少數(shù)據(jù)量的傳輸。
 顯示更新機(jī)制是數(shù)據(jù)會(huì)議質(zhì)量的重要決定因素。要在低帶寬的網(wǎng)絡(luò)條件下保證數(shù)據(jù)會(huì)議的質(zhì)量,應(yīng)該選擇客戶端拉動(dòng)的懶惰更新模式,以保證共享電腦桌面的變化信息能夠?qū)崟r(shí)、準(zhǔn)確地在客戶端顯示。
3 數(shù)據(jù)傳輸保證機(jī)制
3.1 數(shù)據(jù)傳輸過(guò)程中出現(xiàn)的問(wèn)題

 VNC傳輸?shù)臄?shù)據(jù)本身遵循特定的編碼。編碼指一個(gè)矩形的像素?cái)?shù)據(jù)如何通過(guò)網(wǎng)線傳輸。每個(gè)像素?cái)?shù)據(jù)的矩形都加上一個(gè)頭,給定矩形在屏幕上的X、Y坐標(biāo)、矩形的寬和高以及指定的編碼類型。數(shù)據(jù)本身就是采用這種特定的編碼方式。
 改進(jìn)后的系統(tǒng)共享數(shù)據(jù)由VNCServer傳送到共享轉(zhuǎn)發(fā)控制服務(wù)器,再由共享轉(zhuǎn)發(fā)控制服務(wù)器轉(zhuǎn)發(fā)至每一個(gè)VNCClient,并在VNCClient端顯示。數(shù)據(jù)傳輸方式如圖1所示。

 

 

 由于數(shù)據(jù)更新模式選擇了客戶端拉動(dòng)的懶惰更新模式,因此系統(tǒng)中消息的傳輸方式采用基于流的協(xié)議。對(duì)于共享轉(zhuǎn)發(fā)控制服務(wù)器來(lái)說(shuō),系統(tǒng)允許將原始消息積累在一起,形成一個(gè)較大的數(shù)據(jù)包。對(duì)于VNCClient端,數(shù)據(jù)到達(dá)網(wǎng)絡(luò)堆棧就開(kāi)始讀取并進(jìn)行解碼顯示。
 編碼方法[5]作為VNC協(xié)議中核心技術(shù),對(duì)遠(yuǎn)程圖形顯示具有重要意義,它直接決定了在網(wǎng)絡(luò)環(huán)境下圖像的更新和程序的響應(yīng)速度。通常情況下,壓縮率越高數(shù)據(jù)的網(wǎng)絡(luò)傳輸速率越快,解碼需要的時(shí)間越長(zhǎng)。
目前的PC機(jī)足以滿足編解碼的硬件需求,可以在極短的時(shí)間內(nèi)完成編解碼工作。而限制共享效率的主要因素在于網(wǎng)絡(luò)帶寬,所以采用Tight編碼方法,它主要采用Jpeg壓縮算法,壓縮率很高。Jpeg壓縮算法雖然壓縮率高、網(wǎng)絡(luò)傳輸速率快,并可以節(jié)約帶寬,但Jpeg編碼器在進(jìn)行解碼的過(guò)程中必須要保證數(shù)據(jù)的完整性,即必須從每一個(gè)數(shù)據(jù)包頭開(kāi)始解析,否則無(wú)法進(jìn)行解碼工作。
 由于采用被動(dòng)更新機(jī)制,客戶端接收到的共享更新數(shù)據(jù)更新不完成就不會(huì)再一次向服務(wù)器發(fā)送更新請(qǐng)求。無(wú)法識(shí)別接收到的數(shù)據(jù),就無(wú)法完成更新任務(wù),服務(wù)器接收不到更新請(qǐng)求,不會(huì)繼續(xù)向該客戶端發(fā)送數(shù)據(jù),這樣就會(huì)造成客戶端數(shù)據(jù)共享畫(huà)面陷入停止的情況,造成數(shù)據(jù)共享的失敗。
 為了避免上述情況的發(fā)生,可以在每一個(gè)數(shù)據(jù)包的包頭加入一個(gè)特征碼,然后在數(shù)據(jù)接收端進(jìn)行特征碼解析。通過(guò)解析判斷,如果不是包頭,則將數(shù)據(jù)丟棄直至接收到一個(gè)完整的數(shù)據(jù)包為止。
3.2 數(shù)據(jù)傳輸保證機(jī)制的實(shí)現(xiàn)
 在VNCServer端發(fā)送的每一幀數(shù)據(jù)前加一個(gè)特征碼用以標(biāo)識(shí)這段數(shù)據(jù),特征碼的選取采用一個(gè)大的質(zhì)數(shù)。由于在數(shù)據(jù)流的傳輸過(guò)程中,很可能出現(xiàn)與特征碼相同的數(shù)據(jù),為了確保標(biāo)識(shí)的正確性,在選定特征碼的基礎(chǔ)上再加入一個(gè)隨機(jī)數(shù),將這個(gè)隨機(jī)數(shù)和特征碼的AND運(yùn)算作為校驗(yàn)和。
在發(fā)送端(VNCServer)和接收端(VNCClient)均定義一個(gè)名為CharacterCode的結(jié)構(gòu)體。此結(jié)構(gòu)體用于設(shè)定并存儲(chǔ) 特征碼的相關(guān)信息,其結(jié)構(gòu)如下:
Typedef struct CharacterCode
{    char character; //用于存放32 bit特征碼
        char rand_character; //用于存放產(chǎn)生的32 bit隨機(jī)數(shù)
        char result_and;//用于存放32 bit校驗(yàn)和
} Char_Code;
 發(fā)送端工作流程如圖2所示。


 發(fā)送端工作具體步驟如下:
 (1)定義特征碼:0x9e37fffffffc0001UL。
 (2)將特征碼存入Char_Code.character中。
 (3)由rand( )函數(shù)產(chǎn)生兩個(gè)隨機(jī)數(shù):unsigned int crc_value1和unsigned int crc_value2,分別存入Char_Code.rand_character和Char_Code.rand_character+4中。
 (4)將Char_Code.character與Char_Code.rand_character逐位做AND運(yùn)算,將運(yùn)算結(jié)果存入Char_Code.result_and中。
 (5)發(fā)送更新數(shù)據(jù)。
 接收端工作流程如圖3所示。


 接收端工作步驟如下:
 (1)接收更新數(shù)據(jù)。
 (2)對(duì)接收到的數(shù)據(jù)調(diào)用KMP算法進(jìn)行匹配。
 (3)如果KMP算法匹配失敗,說(shuō)明這是一段無(wú)效數(shù)據(jù)。將接收到的數(shù)據(jù)段丟棄后接收下一幀數(shù)據(jù)。如果KMP算法匹配成功,進(jìn)行下一步檢驗(yàn)。
 (4)定義一個(gè)8 B的數(shù)組char tmpbuf[8]:tmpbuf[i]=Char_Code.character[i]& Char_Code.rand_character[i]
 (5)將tmpbuf中的值與Char_Code.result_and比較。如果相等則特征碼驗(yàn)證成功,進(jìn)行解析;否則丟棄該段數(shù)據(jù),重新接收下一幀數(shù)據(jù)。
4 數(shù)據(jù)傳輸保證機(jī)制的驗(yàn)證及分析
 該數(shù)據(jù)傳輸機(jī)制已應(yīng)用于大連浩視數(shù)字技術(shù)有限公司的網(wǎng)絡(luò)視頻會(huì)議系統(tǒng)。經(jīng)測(cè)試使用可知其性能穩(wěn)定,滿足數(shù)據(jù)會(huì)議的數(shù)據(jù)共享需要。
 實(shí)驗(yàn)平臺(tái)為Windows XP操作系統(tǒng),實(shí)驗(yàn)工具為WIRESHARK、VC6.0。
實(shí)驗(yàn)方法為:通過(guò)WIRESHARK捕獲網(wǎng)絡(luò)數(shù)據(jù),用VC6.0編寫(xiě)驗(yàn)證程序。將隨機(jī)產(chǎn)生的特征碼與捕獲到的數(shù)據(jù)進(jìn)行比對(duì),通過(guò)對(duì)比結(jié)果統(tǒng)計(jì)捕獲到的數(shù)據(jù)中出現(xiàn)與特征碼相同的數(shù)據(jù)概率。
如果在捕獲到的數(shù)據(jù)中與特征碼相同的數(shù)據(jù)沒(méi)有出現(xiàn)或者出現(xiàn)的概率極低,說(shuō)明通過(guò)該方案可以正確標(biāo)識(shí)一個(gè)完整的數(shù)據(jù)包,這樣在接收端解析數(shù)據(jù)時(shí)不會(huì)受到偽特征碼的干擾,方案具有可行性。實(shí)驗(yàn)結(jié)果統(tǒng)計(jì)如圖4所示。

 對(duì)圖4的實(shí)驗(yàn)結(jié)果進(jìn)行分析,并且綜合考慮共享轉(zhuǎn)發(fā)控制服務(wù)器的性能,可將每次發(fā)送的更新數(shù)據(jù)量大小設(shè)置為1M,這樣可以大大減少偽特征碼在數(shù)據(jù)更新過(guò)程中的出現(xiàn)幾率。
通過(guò)采用基于虛擬網(wǎng)絡(luò)計(jì)算的數(shù)據(jù)傳輸保證機(jī)制,實(shí)現(xiàn)了數(shù)據(jù)的唯一標(biāo)識(shí),保證了特征碼的唯一性和可靠性,避免了偽特征碼對(duì)數(shù)據(jù)解析的干擾。接收端可以正確識(shí)別出可解析數(shù)據(jù),并對(duì)不可解析數(shù)據(jù)進(jìn)行及時(shí)處理,滿足了數(shù)據(jù)共享的實(shí)時(shí)性與可靠性。
 本文通過(guò)對(duì)VNC傳統(tǒng)體系結(jié)構(gòu)的分析,說(shuō)明了以VNC傳統(tǒng)體系結(jié)構(gòu)作為數(shù)據(jù)會(huì)議中數(shù)據(jù)共享方式的缺陷,并在此基礎(chǔ)上提出了采用共享轉(zhuǎn)發(fā)控制服務(wù)器的新方案。針對(duì)在采用共享轉(zhuǎn)發(fā)控制服務(wù)器的方案中選擇以客戶端拉動(dòng)數(shù)據(jù)更新的懶惰更新模式所出現(xiàn)的問(wèn)題提供了一種數(shù)據(jù)傳輸保證機(jī)制。通過(guò)該保證機(jī)制,可以使改進(jìn)后的系統(tǒng)保證在接收端對(duì)更新數(shù)據(jù)的讀取和解析,從而實(shí)現(xiàn)資源共享的穩(wěn)定和流暢。
參考文獻(xiàn)
[1] RICHARDSON T, STAFFORD-FRASER Q, WOOD K R, et al. Virtual network computing[J]. IEEE Internet Computing: 1998,2(1):33-38.
[2] 盧小林.基于虛擬網(wǎng)絡(luò)的網(wǎng)管系統(tǒng)集成的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2007,33(3):82-84.
[3] 孫一波,劉菁.大規(guī)模視頻會(huì)議中的多人桌面共享系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2005,21(8):139-141.
[4] 梁飛碟,李錦濤.瘦客戶計(jì)算應(yīng)用協(xié)議中遠(yuǎn)程顯示機(jī)制的比較[J].計(jì)算機(jī)工程與應(yīng)用,2004,40(21):135-137.
[5] 梁飛碟,李錦濤,史紅周.虛擬網(wǎng)絡(luò)計(jì)算(VNC)協(xié)議中的編碼方法[J].計(jì)算機(jī)應(yīng)用,2004,24(6):93-95.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。