The RFB Protocol(RFB協議)簡介

2021-04-25 18:45:41 字數 2453 閱讀 3797

一、簡介

rfb(遠端幀緩衝)是乙個用於遠端訪問圖形使用者介面的簡單協議。由於它工作在幀緩衝層,所以適用於所有的桌面系統和應用,包括x11,windows和macintosh等。

我們把使用者所在的一端(包括顯示器、鍵盤和滑鼠)被稱為rfb客戶端。而幀緩衝發生變化的一端(桌面系統和應用)稱為rfb伺服器。

rfb協議是乙個瘦客戶協議。協議設計的重點是減小對客戶端的要求。這樣,客戶端可以執行在多種範圍的硬體上,實現的任務是使客戶端盡可能地簡單。

rfb協議也使得客戶端是「無狀態」的。如果乙個客戶端和伺服器斷開了連線,稍後再一次連線到這台伺服器上,使用者的會話不會被關閉,狀態會一直保持著。不同的客戶端可以連線到同乙個伺服器上,在新的客戶端上使用者看到的是和原來的客戶端上相同的圖形使用者介面。這樣,使用者的桌面變的完全可移動了。只要有合適的網路連線,使用者就可以訪問他個人的桌面應用,不論他走到**都可以連線到自己的會話上,而這些應用的狀態可以一直保持著。

二、顯示協議

rfb協議的顯示部分基於乙個簡單的畫圖原理:「將乙個矩形塊的象素點放在給定位置(x,y)上」。這樣做初看起來也許非常低效,因為要將使用者所有的圖形元件都畫出來。但是由於可以為象素數據進行多種不同的編碼,可以根據不同的引數比如網路頻寬、客戶端計算速度和伺服器處理的速度等選擇靈活的編碼方式。

一系列的矩形塊組成了乙個幀緩衝更新。乙個更新描述了幀緩衝從乙個狀態到另乙個狀態的變化情況,所以,某些方面,這和音訊的幀很類似。每乙個更新中的矩形塊經常脫節(??不懂),但是這不必要。

更新協議是客戶端「命令-驅動」型的。即伺服器只有在收到客戶端的請求才向其傳送更新。這使得顯示協議的質量可以調整。客戶端和網路速度越慢,更新率就會越低。對於典型的應用,幀緩衝上相同區域的更新往往非常頻繁。如果客戶端或者網路非常慢,由於非常低的網路傳輸和客戶端更新,幀緩衝上瞬時的狀態都可以被忽略掉。

三、輸入協議

輸入協議是基於鍵盤和多鍵滑鼠裝置的標準工作站模型。當使用者敲了一下鍵盤或者滑鼠,或者移動了一下滑鼠,客戶端把這些輸入事件簡單地傳送給伺服器。輸入事件可以由其它非標準i/o裝置產生,如筆形手寫板引擎也可以生成鍵盤事件。

四、象素數據的表示

rfb客戶端和伺服器最初的互動包括協商將要傳輸的象素數據的格式和編碼型別。協商被設計成使客戶端的工作盡可能的簡單。底線是伺服器必須可以一直提供客戶端想要的象素數據的格式。但是如果客戶端可以處理多種編碼型別,它會選擇對伺服器來說最容易生成的編碼。

象素格式是指象素值顏色表示法 最常用的象素格式是24位或16位真彩色,

編碼是指怎樣通過網路把矩形象素點的資料傳送出去。每乙個矩形象素點的資料被加了乙個字首包括它在螢幕上的位置,矩形象素點的寬度和高度,以及乙個「編碼型別」來描述該象素的編碼方式。然後是經過編碼的資料本身。

五、協議擴充套件

可以新增新的編碼方式來擴充套件rfb協議。現在的編碼方式有raw,copyrect,rre,corre,hextile和zrle。實際上,常用的只有zrle,hextile以及copyrect編碼,因為它們為典型的桌面提供了最好的壓縮方法。

除了真實的編碼,客戶端可以使用「偽編碼」來向伺服器宣告它支援乙個特定的協議擴充套件。不支援擴充套件協議的伺服器可以簡單的忽略「偽編碼」。注意,這意味著客戶端必須事先假定伺服器不支援協議的擴充套件,直到從伺服器收到可以支援擴充套件的宣告。

做到不同的編碼和偽編碼型別不相衝突很重要。一定要避免類似問題。rfb協議版本和編碼型別由realvnc公司維護。

六、訊息協議

rfb協議可以在位元組流或基於訊息的可靠的傳輸上操作。rfb協議分兩個階段:初始握手階段和協議互動階段。

最初的握手階段包括協議版本、安全型別、客戶端初始化訊息、伺服器初始化訊息等。注意客戶端和伺服器都傳送乙個協議版本訊息。

在伺服器初始化訊息之後rfb協議執行正常的互動階段。在這個階段,客戶端可以傳送請求,然後從伺服器接收到結果。所有的訊息都開始於乙個訊息型別位元組,後面跟著詳細的訊息資料。

下面關於協議訊息的描述使用了u8、u16、u32、s8、s16和s32基本型別。分別表示8位、16位、32位無符號整型和8位、16位、32位有符號整型資料。多位的整型遵循big endian順序。

pixel型別用來指乙個象素值

6.1 初始的握手訊息

6.1.1 協議版本

握手從伺服器向客戶端傳送乙個協議版本的訊息開始。客戶端獲得伺服器支援的rfb協議的最高版本號。然後客戶端通過乙個簡單的訊息來告訴伺服器實際使用的協議版本號(可能和伺服器傳送的不一樣。)客戶端不能使用比伺服器所能提供的還高的rfb協議版本。這種機制說明客戶端和伺服器都支援多個等級的向下相容。

目前已經發布的協議版本有rfb3.3、3.7、3.8(rfb3.5有時會被客戶端錯誤的報告,這樣會被伺服器解釋成rfb3.3)。新編碼或者偽編碼型別一般對協議的版本沒有要求,因為伺服器能簡單的忽略他不認識的編碼。

6.1.2安全

協議版本確定之後,伺服器和客戶端必須協商此次連線的安全型別.

6.6偽編碼

6.6.1 指標的偽編碼

客戶端要求偽編碼是為了在客戶端本地畫滑鼠指標,這樣可以在網路連線慢 的情況下提高顯示效能.

6.6.2 桌面的偽編碼

HTTP 協議簡析

http是乙個屬於應用層的面向兌現的協議,由於其簡捷 快速的方式,適用於分布式超 資訊系統。它與1990年提出。目前使用的版本是http 1.1版本。http協議 協議是指兩台計算機之間進行通訊必須共同遵守的規定或者規則。超文字傳輸協議是一種通訊協議,它允許將超文字標記語言文件從web伺服器傳送到客...

Tcp協議簡讀

tcp提供一種面向連線的,可靠的位元組流服務。面向連線意味著兩個使用tcp的應用 通常是乙個客戶和乙個伺服器 在彼此交換資料之前必須先建立乙個tcp連線。這個過程跟打 相似,先撥號振鈴,等待對方摘機應答,然後才說是誰。在乙個tcp連線中,僅有兩方進行彼此通訊。1.應用資料被分割成tcp認為最適合傳送...

HTTP協議解析(簡)

總結http協議 規定了瀏覽器和伺服器端的資料互動的格式 特點是 基於請求和響應模型。必須要先有請求,後有響應。請求和響應必須成對出現。簡單快捷。因為傳送請求的時候只需要傳送請求方式和請求路徑即可 請求行1.請求方式 請求方式有很多種,常用就兩種get 和post get和post的區別?get 請...