搜尋此網誌

2009年9月17日 星期四

VNC (Virtual Network Computing)

參考文件:
http://www.cl.cam.ac.uk/research/dtg/attarchive/pub/docs/att/tr.98.1.pdf

Thin Clients
VNC追求以「Thin Client」的架構,將用戶端的各項處理程序減至「極小」,Client端可任易對server做connect或disconnect的動作,而不影響server的效能。VNC的Client可於任意地點連上Server,即使是在地球的另一面端,只需使用行動裝置就能夠搖控Server。當然,除了VNC以外,另外如使用Citrix ICA Protocol的各式Thin Cline Application(例如Winframe and Insignia Solutions’ Ntrigue)也能達到這些需求,但這些應用的共同缺點是使用了特有的Protocol,以致產生了跨平臺的問題,VNC則否。

VNC Protocol
VNC底層的技術以非常簡單的Protocol實行GUI遠端存取,以Framebuffer的層級動作,卻可以應用於所有的作業系統、視窗作業系統及應用軟體等,確保任何形式的通訊連結。這項協定可透過如TCP/IP這一類可靠的通訊協定運作,終端使用者中,UI操作者我們可稱之為「VNC Client」或是「viewer」;終端機不斷傳送改變中的Framebuffer則叫做「VNC Server」。VNC確實可稱作是「Thin-Client」的系統架構,其中讓Client端以極少量的需求讓多種裝置得以運作遠端搖控。

初始圖像
在協定中,終端顯示基於最初始的單一圖像:

  產生一個虛擬四邊型物件,並給定一個(x,y)座標

一開始總認為這不是一個很有效率的呈現方式,但以網路頻寬、Client繪圖速度、Server處理速度來說,這方式在參數傳送時卻可能提供較大的彈性。像素資料以簡單的「Left to Right」的序列方式掃摸傳送,所有的VNC用方端必需支援這樣的編碼方式,然後這編碼的使用必需依存Client及Server之間的通訊狀況。
舉例來說,server在「copy-rectangle encoding」時非常簡單而有效率,若Client的Framebuffer已存有相同的的序列時,更可以直接使用已存的內容值。這些編碼只是算單的(x,y)序列。這篇編碼通常產生於使用者改變視窗內容後。
Client必需支援「Copy-rectangle encoding」,Client-Server即可簡單被實現,更加節省頻寬,比傳送原送資料還有更加迅速。  其中有一種狀況,即Client端無法讀取(讀回)已使用過的Framebuffer,此時Client無法傳送先前的編碼。
典型的工作站桌面已固的大量資料如現在的顏色、文字等。最有效的編碼方法是將主要的顏色(背景色)與他不同的產色分開傳送。這裡有多種不同的編碼方式。也許使用JPEG做固有圖像的顯示,或是使用MPEG以影像方式呈現。暫存相同的文字資料,使得圖像在第一次產生改變時,圖像資料可以有效的編碼以快速應付多次的改變。

更新
每次傳送的圖像資料會對Framebuffer內容更新,並對有一個有效的Framebuffer狀況做出變動,換句話說,這個動作相似於影像影格的變換,但與影格不同的地方在於「更新的區域」僅僅為Framebuffer中的一小塊,每個方塊可能使用不同的編碼。Server因此可為為螢幕選擇最適合的傳送方式及適用的頻寬做傳輸。這樣的協定對Client是必要的,Client向Server提出更新的求要,Server因而發送更新後的Framebuffer,所有的視窗的資料在Client最近一次求要之後,會匯整成單一的一筆更新資料,使得協定得到最適資料:速度較慢的Client,更新速度愈慢。在一個網路速度快的環境中,使用者視窗的變化在Client端會有流暢的顯示效果;反之,若使用播接網路,Client要求更新的頻率將會減少,意思是說「慢速度Client,移動視窗的最終結果可能直接呈現出來」。

輸入
VNC協定的輸入端建立於標準的工作站模組之下,鍵盤、多按鈕裝置為主。無論何時,當Client發出按鍵訊息、移動點座標裝置,都會對Server發出訊息。輸入訊息亦可被非標準I/O裝置發送。

連結的建立與結束
建立連結前,Server會對Client使用「challenge-response」的方式請求認證;而Client端的使用者通常需要輸入密碼。接著Server與Client開始交換訊息,洽談視窗大小、像素、編碼方式等等,最後Client會要求Server視窗狀況的更新。由於Client端不需回報「狀態」,任何一方可以直接終斷連結而不會產生異常。

VNC Viewers
此處說的「Viewer」指的即是「Client」,VNC中要產生一個Client是非常容易的事情,原因在於VNC要求「Thin-Client」架構。Client只要求能夠確實做到通訊(TCP/IP),並且擁有直接「顯示畫面」的小功能即可(直接繪出Framebufeer或是透過windowin system繪製)。

VNC Servers
由於VNC架構中,為了讓Client功能愈精簡愈好,因此建立VNC Server會比建立一個VNC Client稍難一些(例如Server必需額外提供Client所需求的Pixel Data 格式)。

沒有留言:

張貼留言