欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

RDPBCGR协议详解——上

程序员文章站 2024-03-15 19:51:12
...

一、引言

这篇文章主要参考英文版RDPBCGR协议,可以认为是一篇翻译文章,但我这里并不会简单地翻译那篇文章,最主要的是提取里面重要的部分,加以整理,分析和讲解。并在必要的地方添加FreeRDP的代码,结合代码和文档一起分析。需要声明的是,代码均取自开源FreeRDP,不会使用公司内部代码及任何商业机密。

二、基本名词及简写约定

Remote Desktop Protocol(RDP) ——>  远程桌面连接协议

Basic Connectivity and Graphics Remoting(BCGR) ——>  基本链接和图形远程访问

Generic Conference Control(GCC)   ——> 通用会议控制

Transport Layer Security(TLS)——>  传输层加密

Multipoint Communication Service(MCS)    ——>  多点通信服务

Basic Encoding Rules (BER) ——> 基本编码规则

binary large object (BLOB) ——> 二进制大对象

certification authority (CA) ——>  证书授权

input method editor (IME) ——> 输入方法编辑器

Message Authentication Code (MAC) ——>  消息授权码

Network Level Authentication (NLA) ——>  网络级授权

Packed Encoding Rules (PER) ——>  封装式编码规则

protocol data unit (PDU) ——>  协议数据单元

Transmission Control Protocol (TCP) ——>  传输控制协议

三、消息流

RDPBCGR协议详解——上

上图是RDP传输基本流程,可以归为以下几个过程:

1. Connection Inotiation

2. Basic Settings Exchange

3.Channel Connection

4.RDP Security Commencement

5.Secure Settings Exchange

6.Optional Connect-Time Auto-Detection

7.Licensing

8.Optional Multitransport Bootstrapping

9.Capabilities Exchange

10. Connection Finalization

逐个分析上面流程

1. 连接初始化,客户端发送一个初始化请求给服务端,同时服务端回复一个初始化应答。这个连接请求格式遵循X224协议,如下:

RDPBCGR协议详解——上

这一过程涉及到两个方面的pdu。一个是客户端连接请求pdu,另一个是客户端和服务器端的协商pdu。首先,客户端发送一个连接请求给服务端,表示有客户端需要发起会话,这个时候服务端需要确认新接收的会话请求是否有效,如果有效那么才会作出连接响应,如果服务端已经存在会话,则还需要向之前会话推送授权pdu,只有在之前会话同意授权的情况下才会作出连接响应。其中具体的PDU格式需要查看有关协议文档,这个待以后的文章中详细讨论,这里不展开。

2. 基本设置交换,使用MCS连接初始化及应答PDU,客户端发送MSC初始化请求给服务端,即MCS连接初始化PDU,这里面包含有GCC会议新增请求。服务端收到这个请求后发送MSC应答PDU给客户端,这一过程完成。

RDPBCGR协议详解——上

MCS连接请求报文

RDPBCGR协议详解——上

MCS应答报文

基本设置交换pdu包含客户端所需的最为基本的设置信息,比方客户端的核心数据(client core data)、客户端的安全数据(client security data)、客户端的网络数据(client network data)以及各种其它的通道相关的数据信息。通常这些数据需要呈报给服务端,服务端根据这些数据作出相应的配置选择。

请求pdu格式如下:

RDPBCGR协议详解——上

应答pdu格式如下:

RDPBCGR协议详解——上

具体的一些数据本身也是有格式的,这里就不展开讲了。

3. 通道连接,首先客户端向服务端发送一个MCS创建域请求PDU,同时发送一个MCS附着用户请求。通道连接分成5个步骤。分别是建立域请求、用户访问请求、用户访问确认、通道加入请求和通道加入确认。这几个步骤中请求pdu是由客户端发给服务端,确认pdu是服务端发给客户端。它们的pdu格式相同,只是相应的数据有所区别。

RDPBCGR协议详解——上

比方建立域请求对应的是mcsEDrq而用户访问mcsAUrq。

通道连接,顾名思义就是为rdp建立各种会话所需的协议通道。这是相当重要的,因为一些基本的功能是一定需要通道来支持的,比方智能卡(smartcard)就需要智能卡扩展通道,如果在起初就没有建立相应的通道,那么这种设备是不能使用的。

相关标签: rdp RDPBCGR