• 沒有找到結果。

RDP Protocol Stack and Pack Format

在文檔中 終端服務的桌面影像壓縮 (頁 26-29)

第三章 RDP 通訊協定介紹

3.1 RDP Protocol Stack and Pack Format

3.1.1 RDP Protocol Stack

RDP Protocol 是基於 ITU-T T.120 協議系列的擴充[9],做為多點通訊協議,可在 不同虛擬通道中傳輸數據,並利用加密機制確保通訊安全,本身的協議層次結構如下 圖 8.所示。

圖 8. RDP Protocol Stack

在一個網路上傳輸的封包建立在 TCP/IP 之上,因此最底層是 TCP/IP 層,TCP 層 上面是一個與 RDP 協議無關的標準統一層 ISO 層,ISO 的標準就是 RFC 2126(Open System Interconnection over TCP),RDP 通訊協定的特性即多點傳輸與多通道傳輸,因 此 ISO 層上面是 MCS(Multipoint Communication Service)層,MCS 層上面是 Secure 層,這層完成加密套件(cipher suite)的協商、密碼的生成、MAC 的生成、數據加/

解密以及 MAC 值得計算和驗證,最上面是 RDP 層,這層是以 T.128(ASP,Multipoint Application Sharing Protocol)為建立的基礎,因此一個完整的 RDP 封包其結構應該是 如下頁圖.9。在 3.1.2 我們將針對 RDP 封包格式深入說明。

圖 9. RDP 結構

3.1.2 RDP 封包格式

一個完整的 RDP 封包包含了 IP header、TCP header、ISO header、MCS header、

SEC header、RDP header 和資料。由於 TCP 層與 RDP 協議無關,因此本節針對其他 四層的封包格式進行說明。

z ISO 資料格式:RFC2126 定義了 TPKT 封包 header,第一個 byte 定義了 ISO 版本,接下來一個 byte 為保留,然後封包總長度佔了 2 個 bytes,接下來為 1 byte 的 ISO header 長度,然後是 ISO_PDU_CODE 佔了 1 個 bytes 代表 TPDU 的類型,然後是 padding,接下來是資料。

z MCS 資料格式:T.125 針對 MCS 層的封包 header 定義,MCSPDU header 共 8 個 bytes,第一個 byte 是 MCSPDU type,接下來兩個 bytes 是 mcs_usrid,

這個值是在建立連線時,由 RDP Server 分配,並在 MCSPDU 中作為資料回 傳給 RDP Client,做為此後通訊時 RDP Client 的身分辨識。第 4、5 個 bytes 是 channel id,這個數值有兩種方式取得,一種是 RDP Client 向 RDP Server 發出請求,RDP Server 處理這個請求並分配一個 channel id,攜帶在 MCSPDU 的資料中傳給 RDP Client;另一種方式是由 RDP Client 自行指定,將感興趣 頻道的 channel id 填寫於第 4、5 個 bytes 的欄位後,發出 MCSPDU。第 6 個 byte 是 flag,一般設定為 0x70 換成 01110000。第 7、8 個 bytes 是長度,這 個長度不包括自己 MCSPDU header 長度,簡單說就是第 8 個 byte 之後到 MCSPDU 最後一位元的長度,整個 MCS 數據格式如下圖 10.

圖 10. MCS Data Format

z Security 資料格式:SEC 層是 RSA 加密算法而不是網路協議,因此沒有資料 格式,但是 RDP 對資料加密時,也需要傳遞資料加/解密的訊息,例如:public

key,這個和網路分層包裝標頭(header)性質一樣,因此我們可以用資料格 式來敘述。由於 RSA 的加解密流程已經在 2.3.2 RDP Session 小節說明過了,

這裡就不多做說明。如果未獲得通訊協定許可那麼將傳送 4 個 bytes 的 sec_flags;如果是進行加密時,則傳送 4 個 bytes 的 sec_flags 和 8 個 bytes 的 public key;如果已經通過認證,那麼就不傳送這個欄位的資料。

z RDP 封包格式:

RDP PDU header 格式可分為四個領域:

1. 長度:定義包括 RDP PDU header 在內的整個封包的大小

2. 固定領域:1 byte 的版本(version)、1 byte 的 RDP PDU TYPE、2 bytes 的 userid。

3. 可變長度:根據 RDP PDU TYPE 的數值有兩種變化,當 RDP PDU TYPE 定義為資料型態(DATA)時,這個欄位的長度為 12 bytes(包含:4 bytes shareid、2 bytes streamid、2 bytes 的剩餘長度、1 byte 的 TYPE、1 byte 的 壓縮標記、2 bytes 的壓縮長度);當 RDP PDU TYPE 是其他三種型態

(Demand Active(要求認證)、Confirm Active(認證許可)、Deactive(解除 認證))時,這個可變長度欄位的長度為 0。

4. 資料領域:攜帶的資料是複雜的多媒體訊息,由 TYPE 欄位定義。

RDP 封包格式分為以下兩類,一類是資料傳送封包,格式如圖 11.(a)、

一類是驗證(請求、同意、解除)封包,格式如圖 11.(b)。

(a) RDP PDU TYPE 是 RDP PDU DATA 型態

(b) RDP PDU TYPE 是其他三種狀態 圖 11. 兩種不同 RDP PDU 的封包資料型態

在 RDP 資料傳輸時,資料由 RDP、SEC、MCS、ISO 往下到 TCP、IP 層包裝,

便形成一個完整的 RDP 資料封包在網路上傳遞,其中值得注意的是在一個 RDP 連線 中,連線前畫面更新封包都是以 RDP PDU DATA 的類型傳送,至於傳送的內容依據封 包內 TYPE 欄位所決定。

在文檔中 終端服務的桌面影像壓縮 (頁 26-29)