看《致命連線》電影,學習RDP協議壓縮思路 - Jack zhai - 51CTO技術部落格-領先的IT技術部落格

chief1985發表於2008-10-09
導讀:


一、瞭解RDP

RDP有兩個英文解釋,但其使用的目的基本是一樣的。第一個解釋是可靠資料協議(Reliable Data Protocol),是一種面向連線的傳輸協議,其主要設計來為主機監控應用程式如下載/上傳以及遠端除錯進行有效的大批資料傳輸,標準是RFC 1115

第二個解釋是遠端桌面協議(Remote Desktop Protocol),是微軟根據ITUT.120協議族制訂的一套未公開發表的資料傳輸協議,我們所說的是這個解釋。RDP是終端伺服器 (Terminal Server) 和客戶端之間的通訊協議,它使得遠端使用者可以使用鍵盤和滑鼠通過網路在應用程式之間進行通訊。通過RDP協議客戶端的計算機可以與遠端伺服器上正在執行的服務程式進行互動以獲得相應的服務。這也是我們用到的遠端終端服務功能。微軟的RDPCitrix公司的MetaFrame產品和ICA協議,兩者有很多的相似點,而Citrix更側重在瘦客戶機上的技術發展。

200712031196650118890.jpg

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

終端服務不同於我們常見的Client/Server模式,是一種軟體的遠端執行模式,終端的作用是重現軟體執行的介面,為使用者提供使用的平臺。終端服務起源於大型機的字元終端,主要的思路是軟體在伺服器上執行,把執行的結果傳給終端,再把終端的命令傳給伺服器。後來這種技術被廣泛用於管理維護工作中,如工程師常用的工具Telnet,可以遠端登入到伺服器上,象在本地一樣操作伺服器。一般的遠端控制主要是命令列方式的延續,所以伺服器與客戶端之間傳送的是字元命令,回送的結果也是字元資訊,資料量很小,但是微軟的RDP支援的是圖形控制介面,就是我們常見的Windows介面,伺服器執行的結果是一個畫面,終端發出的命令也不再是一個命令字串,而可能只是在圖形上的一個滑鼠點選,也許是選擇的選單,也許是執行一個程式的確認“回車”,也就是說兩者之間的傳輸不再是簡單的字元,而是動態的“圖形視訊”。有了RDP,可以遠端執行的應用大大增多,尤其是目前Windows應用佔據主流業務

有利就有弊,遠端控制也是黑客入侵常用的工具,遠端控制你的計算機,若流量大很容易被察覺,所以命令列方式的Telnet一直是黑客所喜歡的,但“行動”畢竟受限制,若把遠端執行的流量降下來,很多軟體都可以“隱蔽地”遠端執行,黑客會更加“喜歡”你的計算機了,尤其是你擁有高效能的運算能力,而本身的控制力又不很高明的時候。

 


二、學習RDP

作為視訊影象的壓縮一般是採用MPEQ的“分割”技術,先把影象分成小塊的區域,傳送時先傳第一個整幅的影象,然後再對有變化的區域才傳輸,沒有變化的區域則可以不用再傳了,按照每秒20-30幀的速度傳送,畫面應該是連續的。對於傳送的小區域部分,由於都是“點陣”的影象,所以也需要採用壓縮技術,隨著影象的增大,色彩的增多,傳送需要的頻寬也會增大,一般一路高清晰電視需要<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />6M的頻寬。

如果按照影象的方式傳遞遠端控制的介面,就是我們工作的計算機螢幕視窗,顯然資料量是很大的,但好在我們計算機的很多軟體操作是圖形,不是影象,比如選單、控制板等都是“畫”出來的,而文字也是通過編碼,提取字模再“畫”上去的,能把螢幕的“生成方式”傳遞到終端,再“畫”出來,顯然只用傳輸文字的編碼與格式,資料量就小多了,這就是RDP協議設計得速度快、頻寬小的原因吧。

RDP協議中,採用了一些有針對性的技術,這裡簡單地描述一下:

1、遠端桌面是提取伺服器端軟體執行的結果螢幕傳送到終端,並重現出來。提取可以從不同的提取點,第一種方式是可以對軟體執行時生成的螢幕直接“複製”成兩份。這種方式不用再從螢幕上“識別”,重現速度快;但是它與具體的軟體結合太緊,服務程式開發難度大,同時需要終端方有一個與伺服器端一樣的“元素庫”,否則只有編號沒有字模也不行。因為這個元素庫中包含很多應用軟體自己的元素,不全是OS的,每執行一個應用軟體前,都要先下載這個元素庫,很不划算。第二種方式是從伺服器端的螢幕緩衝區中提取生成的影象,但此時已經是影象方式,需要進行有效的識別,還原成構成元素。

RDP中採用了第二種方式,直接對螢幕記憶體區域動作,提取的速度當然是快捷的;同時在識別技術上也很高明,他可以還原很多OS常用的圖形元件,甚至文字。我認為可能是結合了第一種方式,把應用軟體呼叫OS提供的通用動態庫的地方直接擷取(這是微軟的優勢所在),直接獲得了文字字模資訊,對字模的識別要比從影象中提取再識別要容易、快捷很多;其他的還有螢幕控制元件、常用的螢幕函式等都可能採用類似的方式。要知道識別“元素”往往是壓縮演算法速度的最難提高的地方了,識別後剩下的純需要影象傳送的地方就大大減少了。

2、動態元素庫的生成。在一個軟體中經常重複的元素很多,比如某些文字、圖片、圖示等,RDP在這方面能力很強的是,能比較快地“發現”這些“可愛”的元素,立即生成“代號”,第二次使用這個元素變化時,直接傳送代號的動作就可以了,而且這個元素庫是不斷自我“學習”的。元素編碼因該說是成熟的技術,但關鍵的是如何儘早地選擇出“最常用”的元素,並且也不是所有的元件都編碼為元素就是經濟的,因為只使用一兩次的元素對其編碼識別的時間要大於直接傳送的時間,所以有效的“元素動態更新”演算法是非常關鍵的,而且這個演算法對具體壓縮的資訊型別是密切相關的。

3RDPMPEQ不同的地方是,MPEQ是針對影象的壓縮,是有損的,不需要百分百的還原,但RDP需要的是完全的還原,必須是無損的。

 


電影《致命連線》中提到的資料結構估計就是動態元素庫的結構與更新演算法,因為這個結構要包含文字、圖形、影象等多種元素,採用統一編碼,同時對不同的元素的屬性描述,也就是元素可能的動作,以及對螢幕的影響資料結構要是設計得很大,流量壓不下來,就失去了壓縮的意義,要設計的小巧精幹,又方便各種元素的提取,難怪電影裡在“大師”的眼中也堪稱完美。很可惜的是,RDP是微軟未公開的協議,我們只是分析其設計效果的精巧,目前還無法“真正”看到這個“資料結構”。
本文轉自
http://zhaisj.blog.51cto.com/219066/53266

相關文章