RDP協議集、音頻輸出、音頻輸入重定向虛擬通道

 


一、RDP協議集及子協議之間如何交互



由於目前Windows Server的版本已經進入到了2016版,因此在本文中,終端服務一律稱爲其最新名稱:遠程桌面服務(RDS)。

以下組件對於瞭解遠程桌面服務協議至關重要:

  • RDP客戶端:支持遠程桌面服務協議的客戶端稱爲RDP客戶端,因爲客戶端安裝了支持遠程處理的軟件組件。使用此RDP客戶端,用戶連接到RD會話主機服務器以登錄到遠程桌面計算機或遠程應用程序。

  • 遠程桌面會話主機(RD會話主機):RDP客戶端與之通信的服務器稱爲遠程桌面會話主機(RD會話主機),她將RDP客戶端連接到遠程應用程序。

遠程桌面服務協議RDPRDP客戶端和RD會話主機服務器安全地連接起來,使得RDP客戶端和RD會話主機的組件之間引導通信以及用於管理服務器的功能。

RDP協議是一個多通道協議,使用TCPUDP傳輸。使用UDP傳輸時,除了主遠程桌面連接外,RDP協議還可以在RDP客戶端和RDP會話主機服務器之間創建多個傳輸連接。

下圖描述了RDP協議與遠程桌面服務以及相關聯的組件交互的架構圖。0?wx_fmt=png


圖:遠程桌面服務架構圖

RD會話主機支持使用外部系統,例如目錄服務(DS),許可服務,組策略服務,文件服務和認證服務和遠程桌面進行交互。這些服務使用的協議不是遠程桌面服務的一部分。

ConnectionBroker組件(在上圖中用虛線顯示)是RDP客戶端連接到RD會話主機中可選的組件。Connection Broker組件的作用是將RDP客戶端的用戶根據一定的負載均衡算法分配給RD會話主機之間上的用戶會話。

RDP客戶端和RD會話主機服務器之間還可以通過使用RD Gateway網關協議進行通信,RDGateway組件在這裏進行RDP會話的代理,使其RDP協議通信可以跨隧道或跨防火牆。

RDP客戶端的用戶運行遠程應用程序時,應用程序在RD會話主機服務器上執行,RD會話主機服務器向RDP客戶端發送圖形輸出或其他類型的數據。

該系統的總體功能可以分爲以下幾類:

  • 建立RDP客戶端和RD會話主機服務器之間的安全連接。

  • 重定向功能。

  • 終止RDP客戶端和RD會話主機服務器之間的連接。

1、在RDP客戶端和RD會話主機服務器之間建立安全連接。

RDP協議允許RDP客戶端安全連接到RD會話主機服務器; 在跨域邊界連接場景下,RDP客戶端使用虛擬專用網絡(×××)或網關協議先連接到RD網關服務器,再由RD網關服務器代理RDP會話到RD會話主機上。

2、重定向功能

RDP客戶端和RD會話主機服務器之間存在遠程桌面協議(RDP)連接時,會頻繁重定向數據和資源。此重定向允許RD會話主機服務器訪問RDP客戶端上的資源,以及允許RD會話主機服務器將數據從RD會話主機服務器上遠程應用重定向到RDP客戶端。重定向功能的一些示例包括:

  • 鍵盤,鼠標和觸摸輸入:將來自RDP客戶端的鍵盤,鼠標和觸摸板輸入的數據重定向到RD會話主機上的用戶會話中。

  • 打印機作業:將來自RD會話主機上的用戶會話的打印作業重定向到RDP客戶端的打印機。

  • 媒體播放器內容:在RD會話主機上運行的應用可以將媒體播放器內容重定向到RDP客戶端。

  • 文件系統數據:RD會話主機可以使用文件系統重定向訪問RDP客戶端上的本地驅動器。

  • 剪貼板:剪貼板重定向使用戶能夠將數據從運行在RD會話主機上的應用程序複製到位於RDP客戶端上的剪貼板上,同時也允許位於RDP客戶端上的剪貼板的數據複製到RD會話主機上。

  • 智能卡:RD會話主機可以連接到RDP客戶端上的智能卡並訪問其中的憑據數據。

  • 端口:RD會話主機可以連接到RDP客戶端上的串行端口,並行端口和USB端口並訪問其中的設備以及數據。

  • 憑據:RDP客戶端將本地憑據(用戶名和密碼)重定向連接到RD會話主機用於驗證用戶並登錄。

3、終止RDP客戶端和RD會話主機服務器之間的連接

有兩種類型的終止遠程桌面連接,即:

  • 註銷

  • 斷開連接

1、註銷

RDP客戶端的用戶從RD會話主機服務器註銷,導致RD會話主機服務器上的用戶會話關閉。

2、斷開連接

由於網絡問題或因爲RDP客戶端在用戶未點擊註銷之前就將所分配的會話關閉,RDP客戶端可能會與RD會話主機服務器斷開連接。發生這種情況時,根據RD會話主機服務器的配置,用戶會話保留在RD會話主機服務器上一定時間。並允許用戶重新連接到現有會話。

以上這些功能的呈現都需要RDP協議的完美運作和協同,在前文中我們曾經提到過RDP協議本質是一個協議集合體,本節中的表提供了遠程桌面服務的成員協議的完整列表。

遠程桌面服務成員協議列表:

協議名稱

說明

簡稱

遠程桌面協議:基本連接和圖形遠程處理

該協議通過將圖形顯示信息從遠程計算機傳送到用戶並將輸入從用戶傳送到遠程計算機來促進用戶與遠程計算機系統的交互,其中將輸入注入到用戶會話中。該協議還允許用戶計算機上的組件和在遠程計算機上運行的組件之間的通過專門的可擴展的機制進行通信。

MS-RDPBCGR

終端服務網關服務器協議

此協議提供了一個網關,其爲RDP客戶端和防火牆後面的RD會話主機服務器之間的通過隧道進行RDP通信的能力。

MS-TSGU

終端服務:終端服務器運行時接口

此協議用於遠程查詢和配置RD會話主機的數據。例如,此協議可用於查詢在RD會話主機上運行的活動會話的數量。

MS-TSTS

終端服務:工作區配置協議

此協議允許對無法訪問非託管計算機的管理員統一查看用戶工作資源。該協議用於傳輸信息,以便客戶端計算機可以在服務器或虛擬計算機上啓動遠程桌面和遠程應用程序。

MS-TSWP

 

用於優化圖形數據的成員協議,支持會話管理和許可:

協議名稱

說明

簡稱

遠程桌面協議:桌面組合虛擬通道擴展

此協議支持遠程桌面組合(桌面壁紙等內容)。

MS-RDPEDC

遠程桌面協議:圖形設備接口(GDI)加速擴展

此協議對生成圖像的繪圖操作進行編碼,從而減少遠程圖形處理相關的帶寬。

MS-RDPEGDI

遠程桌面協議:複合遠程V2

該協議用於顯示在通過網絡連接到第一個遠程機器上打開遠程桌面並在該桌面內再次遠程到一臺機器(服務器)上運行的RDP桌面的內容(嵌套RDP顯示)。

MS-RDPCR2

遠程桌面協議:NSCodec擴展

該協議指定了可以用於通過利用有效的壓縮來編碼屏幕圖像的圖像編×××。

MS-RDPNSC

遠程桌面協議:RemoteFX編×××擴展

該協議指定可以用於通過利用有效的壓縮來編碼屏幕圖像的有損圖像編×××。

MS-RDPRFX

遠程桌面協議:會話選擇擴展

該協議描述了RDP客戶端和服務器之間交換的消息,以便於精確定位應用程序共享上下文。

MS-RDPEPS

遠程桌面協議:許可擴展

此協議允許授權的RDP客戶端或用戶連接到RD會話主機。此擴展涉及RDP客戶端,RD會話主機和許可證服務器之間的通信。 RD會話主機可以配置爲基於每個設備或每個用戶的許可模式。客戶端訪問許可證(CAL)安裝在許可證服務器上,當RD會話主機代表客戶端請求許可證時,許可證服務器從其可用的許可證池中發出許可證。

MS-RDPELE

 

用於在RDP客戶端和RD會話主機服務器之間傳輸設備數據或資源數據的成員協議:

協議名稱

說明

簡稱

遠程桌面協議:剪貼板虛擬通道擴展

此協議提供對操作系統提供的剪貼板的基本編程訪問,並確保任何應用程序能夠將數據放置到剪貼板,從剪貼板提取數據,枚舉剪貼板上可用的數據格式,並註冊以接收、通知系統剪貼板已更新。

MS-RDPECLIP

遠程桌面協議:文件系統虛擬通道擴展

此協議通過重定向兩者之間的所有輸入/輸出請求和響應,提供RD會話主機服務器和RDP客戶端文件系統驅動程序之間的訪問。

MS-RDPEFS

遠程桌面協議:串行和並行端口虛擬通道擴展

此協議指定用於啓用RDP客戶端和RD會話主機服務器之間的端口重定向的通信。通過將端口從RDP客戶端重定向到RD會話主機服務器,在RD會話主機服務器上運行的應用程序可以訪問連接到這些端口的遠程設備。

MS-RDPESP

遠程桌面協議:打印虛擬通道擴展

此協議指定用於在RDP客戶端和RD會話主機服務器之間啓用打印機重定向的通信。通過將打印機從RDP客戶端重定向到RD會話主機服務器,在服務器上運行的應用程序可以訪問遠程打印機設備,就像它們是本地打印機一樣。

MS-RDPEPC

遠程桌面協議:智能卡虛擬通道擴展

此協議使RDP客戶端智能卡設備在單個RDP會話的上下文中可用於服務器端應用程序。

MS-RDPESC

遠程桌面協議:遠程程序虛擬通道擴展

此協議是一個遠程桌面協議(RDP)功能,它提供一個遠程應用程序作爲本地用戶應用程序在客戶端計算機上顯示。

MS-RDPERP

遠程桌面協議:多方虛擬通道擴展

此協議啓用遠程顯示桌面和應用程序內容。爲了有效地實現應用共享或協作解決方案,傳達附加信息以使參與者獲知除了正在共享哪些應用或窗口之外還涉及誰。

MS-RDPEMC

遠程桌面協議:音頻輸出虛擬通道擴展

此協議將音頻數據從RD會話主機服務器傳輸到RDP客戶端。例如,當RD會話主機服務器播放音頻文件時,RD會話主機服務器使用該協議將音頻數據傳送到RDP客戶端。然後,RDP客戶端就可以播放出該音頻。

MS-RDPEA

遠程桌面協議:動態虛擬通道擴展

該協議在虛擬通道協議之上實現通用的面向連接的通信信道。在現有的靜態虛擬通道上建立動態虛擬通道(DVC)。

MS-RDPEDYC

遠程桌面協議:即插即用設備虛擬通道擴展

此協議指定用於在RDP客戶端和RD會話主機服務器之間啓用即插即用設備重定向的通信。

MS-RDPEPNP

遠程桌面協議:XML紙張規格(XPS)打印虛擬通道擴展

此協議指定安裝在RD會話主機服務器上的虛擬打印機驅動程序和安裝在RDP客戶端上的打印機驅動程序之間的通信。此協議的主要目的是獲取打印功能並在RDP客戶端上顯示特定於打印機的用戶界面。

MS-RDPEXPS

遠程桌面協議:音頻輸入虛擬通道擴展

此協議支持將音頻數據從RDP客戶端傳輸到RD會話主機。例如,在RD會話主機上運行的應用程序可以記錄音頻數據。此數據將從RDP客戶端傳輸到RD會話主機,允許應用程序從安裝在RDP客戶端上的音頻設備進行記錄。

MS-RDPEAI

遠程桌面協議:USB設備虛擬通道擴展

此協議用於將通用串行總線(USB)設備從RDP客戶端重定向到RD會話主機服務器,這允許服務器訪問RDP客戶端本地物理連接的USB設備,就好像該設備在服務器本地。

MS-RDPEUSB

遠程桌面協議:視頻虛擬通道擴展

此協議支持將同步的音頻和視頻數據從RD會話主機傳輸到RDP客戶端。 RDP客戶端可以播放音頻和視頻數據,並使用由協議提供的定時信息來同步該數據。

MS-RDPEV

遠程桌面協議:UDP傳輸擴展

此協議擴展使用用戶數據報協議(UDP)傳輸。

MS-RDPEUDP

遠程桌面協議:圖形管道擴展

此協議由基本連接和基本圖形處理用於啓用圖形數據的智能處理。

MS-RDPEGFX

遠程桌面協議:多傳輸擴展

此協議支持打開多個傳輸作爲基本連接和基本圖形處理協議的擴展。

MS-RDPEMT

遠程桌面協議:虛擬通道回顯擴展

此協議用於確定RD會話主機和RDP客戶端之間的網絡特性(例如往返時間(RTT))。

MS-RDPEECO

遠程桌面協議:視頻優化遠程虛擬通道擴展

此協議設計爲在RDP客戶端和RD會話主機之間建立的遠程桌面協議(RDP)虛擬通道的上下文中運行。當RD會話主機服務器正在顯示其被分類爲視頻的內容並且需要將該視頻數據發送到RDP客戶端時,該協議擴展適用。

MS-RDPEVOR

遠程桌面協議:輸入虛擬通道擴展

此協議用於將多點觸摸輸入幀或寫字筆/板輸入從RDP客戶端傳輸到RD會話主機服務器。

MS-RDPEI

遠程桌面協議:顯示控制虛擬通道擴展

此協議用於請求遠程會話中的顯示配置更改

MS-RDPEDISP

遠程桌面協議:認證重定向虛擬通道

該協議用於在遠程會話中的虛擬通道上執行認證協議操作。這允許RDP服務器會話在無法訪問底層用戶憑證的情況下執行網絡身份驗證。

MS-RDPEAR

 

下圖描述了遠程桌面服務系統的協議之間的關係。0?wx_fmt=png


圖:遠程桌面協議之間的關係

這些成員協議之間,首先由一個最基本的協議:基本連接和基本圖形處理協議,該協議承擔將RDP客戶端和RD會話主機之間進行連接的操作和基本的圖形輸出處理。是RDP協議集中的最基礎的協議,也是由T120系列協議的改進而來的協議。之後,隨着各個功能的使用和擴展,纔會使用到與之相對應的擴展協議。這些協議集完美的集成、協作,共同完成了將RDP客戶端資源重定向到RD會話主機並將RD會話主機的數據和信息傳遞到RDP客戶端的能力。

除了這些協議集自己進行的相互交互之外,還針對有其他系統/組件的依賴:

  • 域控制器或Kerberos系統的認證和授權服務。身份驗證服務依賴於證書基礎結構來支持安全套接字層(SSL)協議。

  • [RFC1035]中規定的DNS用於地址解析。

  • 目錄服務或用於分配用戶會話或虛擬機的其他組件(如連接代理)。

  • 用於終端服務的文件服務發佈遠程桌面和遠程應用程序。

 

二、RDP協議音頻輸出虛擬通道



在本小節中,我們將說明遠程桌面協議:音頻輸出虛擬通道的一些技術實現。該協議的目的是將音頻數據從服務器(RD會話主機,在這裏爲了方便,我們稱呼爲服務器)傳輸到客戶端(RDP客戶端)。例如,當服務器播放音頻文件時,服務器使用該協議將音頻數據傳送到客戶端。然後客戶端就可以播放該音頻。

遠程桌面協議:音頻輸出虛擬通道擴展協議可以通過兩種不同的傳輸方法在客戶端和服務器之間交換:

  • 靜態虛擬通道;

  • 動態虛擬通道。

靜態或動態虛擬通道可用於在客戶端和服務器之間傳輸所有信息,並且必須用於某些序列。並且,對於某些序列,也可以使用UDP

在遠程桌面協議:音頻輸出虛擬通道擴展協議,某些序列指代爲三個不同的序列:

  • 初始化序列:建立連接並交換能力和設置。

  • 數據傳輸序列:音頻數據被傳輸。

  • 音頻設置傳輸序列:傳輸對音頻設置的更改。

1、初始化序列

初始化序列具有以下目標:

1.建立客戶端和服務器端的協議版本和功能。

2.建立客戶端和服務器共有的音頻格式列表。所有音頻數據以此列表中指定的格式傳輸。

3.確定是否可以使用UDP傳輸音頻數據。

最開始的時候,服務器發送服務器音頻格式和版本PDU,指定其協議版本和支持的音頻格式給客戶端。作爲響應,客戶端發送客戶端音頻格式和版本協議數據單元(PDU)給服務器端。通過這種交換,服務器和客戶端因而具有彼此的版本,彼此的能力以及支持的音頻格式的同步列表。

如果客戶端和服務器都至少是版本6,則客戶端必須在發送客戶端音頻格式和版本PDU之後立即發送質量模式PDU。之後RDP6.0之後才支持音頻的質量模式。音頻的質量模式顧名思義就是可以對音頻數據進行Qos以進行優先傳輸。

如果客戶端想要通過UDP接收數據,則客戶端通告要用於UDP流量的端口。給定客戶端的端口,服務器嘗試使用該UDP端口向客戶端發送TrainingPDU。客戶端如果收到,會嘗試使用其自己的TrainingConfirm PDU進行答覆。然後,服務器使用音頻虛擬通道向客戶端發送私鑰(使用Crypt Key PDU)。此密鑰將用於加密通過UDP發送的某些數據。如果所有前述步驟成功,則通過UDP發送數據傳輸序列。如果上述步驟任何失敗,則數據傳輸序列在虛擬通道(不通過UDP)上發送。其通信步驟如下圖所示:0?wx_fmt=png


圖:使用UDP進行數據傳輸的初始化序列

如果所有數據傳輸序列要通過虛擬通道發送,則服務器和客戶端通過虛擬通道交換Training PDUTrainingConfirm PDU。在這裏我們約定,使用靜態虛擬通道(TCP傳輸)的虛擬通道簡稱爲虛擬通道,使用UDP傳輸的的虛擬通道稱之爲動態虛擬通道。其步驟如下圖所示:0?wx_fmt=png


圖:使用虛擬通道進行數據傳輸的初始化序列

2、數據傳輸序列

數據傳輸序列的目的是將音頻數據從服務器傳輸到客戶端。對於數據傳輸序列存在兩種不同的協議:

  • 通過虛擬通道(TCP)傳輸;

  • 通過動態虛擬通道(UDP)傳輸。

通過虛擬通道的數據傳輸序列具有非常簡單的協議。如果客戶端版本或服務器版本小於8,服務器發送兩個連續的音頻數據包:WaveInfoPDUWave PDU 在收到音頻數據時,客戶端向服務器發送Wave Confirm PDU以通知服務器它已經收到了音頻數據。收到音頻數據之後,意味着它可以被客戶端處理、取消或丟棄。其步驟如下圖所示:0?wx_fmt=png


圖:使用WaveInfo PDUWave PDU通過虛擬通道的數據傳輸序列

如果客戶端和服務器版本都至少爲8,則服務器發送Wave2 PDU。在收到音頻數據時,客戶端向服務器發送Wave Confirm PDU以通知服務器它已經收到了音頻數據。其步驟如下圖所示:0?wx_fmt=png


圖:使用Wave2 PDU的虛擬通道上的數據傳輸序列

通過UDP的數據傳輸序列的協議多一點。類似於通過虛擬通道的協議,服務器向客戶端發送一組音頻數據。當客戶端完成接收音頻數據時,客戶端向服務器發回Wave Confirm PDU。與在虛擬通道上使用的協議的區別是服務器如何發送音頻數據。

如果客戶端或服務器版本小於5,服務器使用Wave EncryptPDU發送音頻數據。在接收到音頻數據時,客戶端向服務器發送Wave Confirm PDU。其步驟如下圖所示:0?wx_fmt=png


圖:UDP上的數據傳輸序列

如果客戶端和服務器版本都至少爲5,則可以使用另一種方法通過UDP發送音頻數據。 這種方法涉及服務器在連續的PDU中發送音頻數據。 所有PDU(除了最後一個)是UDP Wave PDUs。然後再發生最後一個PDU,其數據包爲UDP Wave Last PDU。給定這些PDU,客戶端就可以根據最後一個PDU和之前一個PDU重建音頻數據樣本。在接收音頻數據時,客戶端向服務器發送Wave ConfirmPDU以進行迴應。其步驟如下圖所示:0?wx_fmt=png


圖:當協議版本至少爲5時,通過UDP的數據傳輸序列

在初始化序列期間,服務器使用Crypt Key PDU通過虛擬通道向客戶端發送32字節的私鑰。一些音頻數據使用此密鑰加密。

在音頻數據傳輸結束時,服務器通過在虛擬通道上發送Close PDU通知客戶端。

3、音頻設置傳輸序列

音頻設置傳送序列具有將從服務器傳送到客戶端的音頻設置改變的功能。可以重定向兩個不同的設置:音量和音高。所有音頻設置傳輸序列通過虛擬通道發送。設置分別使用Volume PDUPitch PDU進行重定向。

遠程桌面協議:音頻輸出虛擬通道擴展協議默認嵌入在[基本連接和基本圖形處理協議]中指定的靜態虛擬通道傳輸中,或者嵌入在[動態虛擬通道]中指定的動態虛擬通道傳輸中。

遠程桌面協議:音頻輸出虛擬信道擴展協議僅在靜態虛擬信道傳輸或動態虛擬通道完全建立後纔會運行。如果靜態或動態虛擬通道傳輸終止,則不會通過遠程桌面協議:音頻輸出虛擬通道擴展協議發生其他通信。

遠程桌面協議:音頻輸出虛擬通道擴展協議旨在在客戶端和服務器之間建立的遠程桌面協議虛擬通道的上下文中運行。當客戶端需要播放在服務器上播放的音頻時,此協議纔會使用。

遠程桌面協議:音頻輸出虛擬通道擴展協議是基於功能的。客戶端和服務器在協議初始化序列期間交換功能。在已經接收和存儲功能之後,客戶端和服務器不發送不能由另一個處理的PDU或數據格式。

該協議的一些細節:

1)、協議版本

服務器音頻格式和版本PDU和客戶端音頻格式和版本PDUwVersion字段分別指示在服務器和客戶端上支持的協議版本。協議版本用於確定一些協議能力。例如,僅當客戶端協議版本和服務器協議版本都至少爲6時,才支持質量模式。

2)、音頻格式列表和當前音頻格式

客戶端在客戶端音頻格式和版本PDU中將音頻格式列表發送到服務器。該列表必須在協議的整個持續時間內保持。 Wave Info PDUWave EncryptPDUUDP Wave Last PDUwFormatNo字段是該列表的索引。位於該索引處的格式是當前音頻格式。當前音頻格式可能在協議操作期間更改。音頻格式列表的索引是從零開始的,其中值0指向列表中的第一格式。在此處,我們不像各位詳細描述各個PDU的字節細節,如果大家感興趣,可以去微軟的官網下載RDP協議的技術文檔進行查看。

3)、密鑰

Crypt密鑰是客戶端和服務器使用的密鑰,用於兩個目的:

  • Wave Encrypt PDU中加密和解密數據。

  • 爲音頻FragDataWave Encrypt PDU創建簽名字段。

這兩個目的的規範我們也不做詳細介紹。

4)、質量模式設置

如果客戶端和服務器的協議版本都至少是版本6,則客戶端必須通過向服務器發送QualityMode PDU來通知服務器其優選的音頻質量設置。此設置應存儲在服務器上,並指定服務器使用哪種模式來調整連接的音頻質量。

接下來我們來說一說播放音頻的時候,整個流程是什麼?

當在服務器上播放音頻時(例如,當服務器在Windows Media Player中打開MP3文件時),服務器必須開始重定向音頻數據。如果初始化序列沒有出現,服務器必須啓動初始化序列,然後繼續啓動數據傳輸序列。

其消息處理事件和排序規則如下圖所示:0?wx_fmt=png


圖:狀態轉換圖

狀態轉換圖總結了遠程桌面協議的消息排序規則:音頻輸出虛擬通道擴展。以下是每個箭頭的描述:

1.事件:從客戶端連接。

操作:服務器發送服務器音頻格式和版本PDU

2.事件:服務器接收客戶端音頻格式和版本PDU

操作:服務器輸入“協商的格式和版本”狀態。

3.事件:等待客戶音頻格式和版本PDU後超時。

操作:服務器終止協議。

4.事件:客戶端版本<6或服務器版本<6

操作:服務器進入“發送Training PDU”狀態。

5.事件:客戶端版本> = 6,服務器版本> = 6

操作:等待來自客戶端的質量模式PDU

6.事件:服務器接收質量模式PDU或超時。

操作:服務器進入“發送Training PDU”狀態。

7.事件:客戶端音頻格式和版本PDU中有一個有效的UDP端口,服務器正在嘗試使用UDP

操作:服務器進入“通過UDP發送TrainingPDU”狀態。

8.事件:客戶端音頻格式和版本PDU中沒有有效的UDP端口,或者服務器沒有嘗試使用UDP

操作:服務器進入“通過虛擬通道發送Training PDU”狀態。

9.事件:服務器通過UDP發送Training PDU

操作:服務器進入“等待Training Confirm PDU”狀態。

10.事件:服務器從客戶端接收Training Confirm PDU

操作:服務器發送Crypt Key PDU

11.事件:等待Training Confirm PDU確認PDU後超時。

操作:服務器進入“通過虛擬通道發送Training PDU”狀態。

12.事件:服務器發送Crypt Key PDU併成功。

操作:服務器進入“準備通過UDP發送數據”狀態。

13.事件:發送加密密鑰PDU時失敗。

操作:服務器進入“通過虛擬通道發送Training PDU”狀態。

14.事件:數據就緒。

操作:服務器發送Wave Encrypt PDU,或UDP WavePDUUDP Wave Last PDU

15.事件:服務器從客戶端接收Wave Confirm PDU

操作:服務器進入“準備通過UDP發送數據”狀態。

16.事件:發送數據時失敗。

操作:服務器發送關閉PDU並終止協議。

17.事件:服務器通過虛擬通道發送Training PDU

操作:服務器進入“等待Training Confirm PDU”狀態。

18.事件:服務器從客戶端接收Training Confirm PDU

操作:服務器進入“準備通過虛擬通道發送數據”狀態。

19.事件:等待Training PDU超時通過虛擬通道確認PDU

操作:服務器終止協議。

20.事件:數據就緒。

操作:服務器發送WaveInfo PDUWave PDUWave2 PDU

21.事件:服務器從客戶端接收Wave Confirm PDU

操作:服務器進入“準備通過虛擬通道發送數據”狀態。

22.事件:發送數據時失敗。

操作:服務器發送關閉PDU和服務器終止協議。

備註:除非另有規定,否則服務器和客戶端必須忽略格式錯誤、無法識別和錯序的數據包。

 

三、RDP協議音頻輸入重定向虛擬通道



在本小節中我們將說明遠程桌面協議:音頻輸入重定向虛擬通道擴展協議的一些技術實現。此協議的目的是將音頻數據從遠程桌面協議(RDP)客戶端傳輸到遠程桌面協議(RDP)服務器端,以下分別稱爲客戶端和服務器。例如,在服務器上運行的應用可以請求記錄音頻數據。此數據將從客戶端傳輸到服務器,以允許服務器應用程序從安裝在客戶端上的音頻設備進行記錄。

該協議和上文我們將的音頻輸出虛擬通道擴展協議一樣,分爲三個主要序列:

  • 初始化順序:服務器和客戶端交換版本和音頻格式,並開始記錄。

  • 數據傳輸順序:客戶端向服務器發送音頻數據。

  • 格式更改序列:服務器請求新的音頻格式,客戶端確認此請求。

1、初始化序列

初始化序列具有以下目標:

1)、建立客戶端和服務器協議版本和功能。

2)、建立客戶端和服務器都支持的音頻格式列表。

3)、開始錄製音頻數據。

最開始的時候,服務器在已經建立的動態虛擬通道內向客戶端發送版本PDU。客戶端將使用自己的版本PDU進行響應。接下來,服務器將發送聲音格式PDU,其中包含服務器支持的音頻格式的列表。客戶端向服務器發送自己的聲音格式PDU,建立音頻格式的公共列表。所有音頻數據將使用此列表中的某種格式進行編碼。

一旦交換了音頻格式,服務器將通過發送Open PDU來指示它已經請求開始記錄。客戶端將嘗試從附加的音頻捕獲設備開始記錄,並在Open Reply PDU中將結果返回給服務器。此時,客戶端將開始發送音頻數據。其步驟如下圖所示:0?wx_fmt=png


圖:初始化序列

2、數據傳輸序列

數據傳輸序列簡單地將音頻數據從客戶端傳輸到服務器。客戶端將使用在初始化序列或格式改變序列期間商定的當前音頻格式對捕獲的音頻數據進行編碼並將其發送到服務器。客戶端首先發送Incoming Data PDU,其通知服務器下一個分組將包含音頻數據。然後客戶端將在Data PDU中發送音頻數據。其步驟如下圖所示:0?wx_fmt=png


圖:數據傳輸序列

3、格式更改序列

格式改變序列提供用於服務器請求客戶端使用不同格式來編碼音頻數據的機制。服務器通過發送Format Change PDU來發起序列,從初始化序列期間商定的列表中識別服務器期望的格式。然後,客戶端通過發送指定相同格式的格式Format Change PDU來確認格式的改變。客戶端接收到服務器端的PDU之後,客戶端將使用新格式對音頻數據進行編碼。其步驟如下圖所示:0?wx_fmt=png


圖:格式更改序列

遠程桌面協議:音頻輸入重定向虛擬通道擴展協議嵌入在動態虛擬通道傳輸中。並且只有在動態虛擬通道傳輸完全建立後,該虛擬通道擴展才會運行。如果動態虛擬通道傳輸終止,則不會通過遠程桌面協議產生該通信:音頻輸入重定向虛擬通道擴展協議。

遠程桌面協議:音頻輸入重定向虛擬通道擴展通用是基於功能的。客戶端和服務器在協議初始化序列期間交換功能。

協議的一些詳細信息:

音頻格式列表:客戶端和服務器維護在整個協議期間在初始化序列期間商定的音頻格式的列表。Format Change PDUNewFormat字段和Open PDUInitialFormat字段是該列表中的索引。音頻格式列表的索引是從零開始的,其中值零是指列表中的第一個格式。

當前音頻格式:客戶端和服務器維護當前的音頻格式。這是當從客戶端發送到服務器時音頻數據必須被編碼的格式。Format Change PDUNewFormat字段或Open PDUInitialFormat字段指示當前音頻格式。

音頻捕獲設備狀態:音頻捕獲設備有兩種狀態:打開和未打開。最初狀態未打開。服務器發送Open PDU以要求客戶端打開音頻捕獲設備。客戶端發送Open Reply PDU以告訴服務器打開捕獲設備的結果。如果捕獲設備打開成功,音頻輸入設備狀態將打開。

音頻數據就緒:客戶端發送Incoming Data PDU,通知服務器它已準備好發送數據。服務器維持音頻數據就緒狀態以準備接收數據PDU

協議版本:客戶端和服務器存儲在初始化序列期間協商的協議版本。比如我們通過2003RDP客戶端去連接2012的遠程桌面,那麼其中很多功能是無法使用的,因爲協商的協議版本不一致,功能不一致,只能使用協商一致的公共功能部分。

錄製音頻

當服務器嘗試開始錄製音頻時,例如服務器運行錄音機,客戶端必須重定向音頻數據。如果初始化序列沒有發生,服務器必須開始初始化序列。

其消息處理事件和排序規則如下圖所示:

下圖中的狀態轉換圖總結了遠程桌面協議的消息排序規則:音頻輸入重定向虛擬通道擴展協議。0?wx_fmt=png


圖:狀態轉換圖

客戶端處理的流程詳細描述如下:

1、初始化序列

1.1處理版本PDU

版本PDU必須是客戶端接收的第一個PDU。客戶端必須存儲協議版本,並使用它來確定服務器支持哪些消息。

1.2發送版本PDU

客戶端必須通過向服務器發送其自己的版本PDU來確認服務器發送的版本PDU

1.3處理聲音格式PDU

客戶端使用服務器在選擇將使用哪些格式時發送的音頻格式。

1.4發送傳入數據PDU

在用聲音格式PDU響應服務器之前,客戶端必須發送傳入數據PDU

1.5發送聲音格式PDU

客戶端必須響應由服務器發送的聲音格式PDU,通過回覆自己的聲音格式PDU。客戶端發送回服務器的音頻格式列表必須是服務器發送的列表的子集。不在服務器列表中的格式不得包含在客戶端的音頻格式列表中。

客戶端發送的列表爲當前協議會話建立允許的音頻格式。這些格式必須由格式改變PDUNewFormat字段和Open PDUinitialFormat字段引用。 I的值指的是該列表的第I個格式,並且意味着音頻數據必須以列表中的第I個格式編碼。

1.6處理打開的PDU

服務器發送Open PDU以指示其準備好開始接收音頻數據。Open PDU指定兩種音頻格式。第一種格式由InitialFormat字段指定,並且是協商的音頻格式列表的索引。這種格式是客戶端必須用來編碼音頻數據併發送到服務器的音頻格式。該格式用於編碼以後可以由格式改變PDU改變的音頻數據。

第二種格式由wFormatTagnChannelsnSamplesPerSecnAvgBytesPerSecnBlockAlignnBitsPerSamplecbSizeExtraFormatData字段指定。這些字段指定應該用於從實際音頻輸入設備捕獲數據的格式。

1.7發送格式更改PDU

客戶端在從服務器接收到格式改變PDU之後發送格式改變PDU NewFormat字段必須設置爲與服務器格式更改PDU中的NewFormat字段相同的值。

客戶端在從服務器接收到Open PDU之後還發送格式改變PDU。客戶端在發送Open Reply PDU之前發送此格式改變PDU,並且NewFormat字段務必設置爲與服務器的OpenPDU中的initialFormat字段相同的值。

1.8發送打開答覆PDU

在處理Open PDU之後,客戶端必須嘗試從本地音頻輸入設備開始記錄。 客戶端必須通過在結果字段中發送適當的HRESULT代碼來通知服務器結果。 HRESULT代碼在其第一位設置爲1時爲錯誤代碼。不在此處介紹HRESULT的說明。

2、數據傳輸序列

2.1發送傳入數據PDU

一旦客戶端捕獲了要發送到服務器的音頻數據包,客戶端必須在發送每個數據PDU之前立即發送傳入數據PDU

2.2發送數據PDU

此消息必須在發送傳入數據PDU後立即發送。客戶端必須用數據字段填充使用當前音頻格式編碼的音頻包。

3、格式改變序列

3.1處理格式更改PDU

格式改變PDU指示服務器要求客戶端使用不同的音頻格式來編碼音頻數據。客戶端必須將當前音頻格式更改爲NewFormat字段中包含的值,NewFormat字段是協商的音頻格式列表的索引。客戶端還必須通過使用格式改變PDU進行答覆來確認格式改變。在發送格式改變PDU之後,必須使用新格式對所有音頻數據進行編碼,直到服務器請求另一格式改變。

3.2發送格式更改PDU

在處理格式改變PDU之後,客戶端必須通過用它自己的格式改變PDU進行答覆來確認格式改變。NewFormat字段必須設置爲當前音頻格式的新值。在發送格式改變PDU之後,必須使用新格式對所有音頻數據進行編碼,直到服務器請求另一格式。格式改變操作必須是成功的。

服務器端處理的詳細流程如下:

1、初始化序列

1.1發送版本PDU

版本PDU必須是服務器發送的第一個PDU

1.2處理版本PDU

服務器必須存儲客戶端發送的協議版本。

1.3發送聲音格式PDU

在處理客戶端的版本PDU之後,服務器必須發送聲音格式PDU。聲音格式PDU通知客戶端服務器支持的音頻格式。

1.4處理傳入數據PDU

客戶端發送傳入數據PDU以通知服務器它將以其聲音格式PDU進行響應。此PDU用於診斷目的。進入數據PDU也在數據PDU之前。

1.5處理聲音格式PDU

服務器必須存儲由客戶端發送的音頻格式的列表。此列表是在此協議會話期間可以使用的格式的最終列表。

1.6發送打開的PDU

在音頻格式交換完成後,服務器發送一個Open PDU

1.7處理格式更改PDU

在發送Open Reply PDU並開始傳輸音頻數據之前,客戶端發送格式改變PDU。該PDU確認由服務器選擇的初始格式,並通知服務器所有音頻數據必須最初以NewFormat字段指定的格式編碼。

 1.8處理Open Reply PDU

Open Reply PDU包含客戶端嘗試打開音頻捕獲設備的結果。如果結果字段是成功代碼,客戶端將開始發送音頻數據。如果結果字段是錯誤代碼,客戶端不得發送音頻數據。如果結果字段是錯誤代碼,則服務器可以發送附加的Open PDU

2、數據傳輸序列

2.1處理傳入數據PDU

傳入數據PDU指示客戶端將要發送音頻數據分組。服務器使用此信息進行診斷。進入數據PDU也在聲音格式PDU之前。

2.2處理數據PDU

在接收到數據PDU之後,服務器根據當前音頻格式對音頻數據進行解碼。 然後將解碼的音頻提供給正在記錄音頻的服務器側應用。

3、格式更改序列

3.1發送格式更改PDU

當服務器確定需要新格式時,它必須從初始化序列中協商的音頻格式列表中選擇一個格式。服務器必須將格式改變PDUNewFormat字段設置爲新的音頻格式的列表中的索引。

服務器必須繼續解碼使用舊音頻格式到達的任何音頻數據,直到它從客戶端接收到確認格式改變PDU

3.2處理格式更改PDU

客戶端發送格式更改PDU以確認格式更改。接收確認後,服務器必須將當前音頻格式設置爲NewFormat。在這之後,客戶端發送的所有音頻數據務必使用新的音頻格式進行編碼。服務器必須根據新的音頻格式解碼在該PDU之後到達的所有音頻分組。

THE END!

0?wx_fmt=jpeg


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章