看《致命连线》电影,学习RDP协议压缩思路 - Jack zhai - 51CTO技术博客-领先的IT技术博客

来源:互联网 发布:淘宝卖家移动软件 编辑:程序博客网 时间:2024/04/29 00:39
导读:


一、了解RDP

RDP有两个英文解释,但其使用的目的基本是一样的。第一个解释是可靠数据协议(Reliable Data Protocol),是一种面向连接的传输协议,其主要设计来为主机监控应用程序如下载/上传以及远程调试进行有效的大批数据传输,标准是RFC 1115

第二个解释是远程桌面协议(Remote Desktop Protocol),是微软根据ITUT.120协议族制订的一套未公开发表的数据传输协议,我们所说的是这个解释。RDP是终端服务器 (Terminal Server) 和客户端之间的通信协议,它使得远程用户可以使用键盘和鼠标通过网络在应用程序之间进行通信。通过RDP协议客户端的计算机可以与远程服务器上正在运行的服务程序进行交互以获得相应的服务。这也是我们用到的远程终端服务功能。微软的RDPCitrix公司的MetaFrame产品和ICA协议,两者有很多的相似点,而Citrix更侧重在瘦客户机上的技术发展。



终端服务不同于我们常见的Client/Server模式,是一种软件的远程执行模式,终端的作用是重现软件运行的界面,为用户提供使用的平台。终端服务起源于大型机的字符终端,主要的思路是软件在服务器上运行,把运行的结果传给终端,再把终端的命令传给服务器。后来这种技术被广泛用于管理维护工作中,如工程师常用的工具Telnet,可以远程登录到服务器上,象在本地一样操作服务器。一般的远程控制主要是命令行方式的延续,所以服务器与客户端之间传送的是字符命令,回送的结果也是字符信息,数据量很小,但是微软的RDP支持的是图形控制界面,就是我们常见的Windows界面,服务器执行的结果是一个画面,终端发出的命令也不再是一个命令字串,而可能只是在图形上的一个鼠标点击,也许是选择的菜单,也许是执行一个程序的确认“回车”,也就是说两者之间的传输不再是简单的字符,而是动态的“图形视频”。有了RDP,可以远程执行的应用大大增多,尤其是目前Windows应用占据主流业务

有利就有弊,远程控制也是黑客入侵常用的工具,远程控制你的计算机,若流量大很容易被察觉,所以命令行方式的Telnet一直是黑客所喜欢的,但“行动”毕竟受限制,若把远程运行的流量降下来,很多软件都可以“隐蔽地”远程运行,黑客会更加“喜欢”你的计算机了,尤其是你拥有高性能的运算能力,而本身的控制力又不很高明的时候。

 

二、学习RDP

作为视频图像的压缩一般是采用MPEQ的“分割”技术,先把图像分成小块的区域,传送时先传第一个整幅的图像,然后再对有变化的区域才传输,没有变化的区域则可以不用再传了,按照每秒20-30帧的速度传送,画面应该是连续的。对于传送的小区域部分,由于都是“点阵”的图像,所以也需要采用压缩技术,随着图像的增大,色彩的增多,传送需要的带宽也会增大,一般一路高清晰电视需要6M的带宽。

如果按照图像的方式传递远程控制的界面,就是我们工作的计算机屏幕窗口,显然数据量是很大的,但好在我们计算机的很多软件操作是图形,不是图像,比如菜单、控制板等都是“画”出来的,而文字也是通过编码,提取字模再“画”上去的,能把屏幕的“生成方式”传递到终端,再“画”出来,显然只用传输文字的编码与格式,数据量就小多了,这就是RDP协议设计得速度快、带宽小的原因吧。

RDP协议中,采用了一些有针对性的技术,这里简单地描述一下:

1、远程桌面是提取服务器端软件执行的结果屏幕传送到终端,并重现出来。提取可以从不同的提取点,第一种方式是可以对软件执行时生成的屏幕直接“复制”成两份。这种方式不用再从屏幕上“识别”,重现速度快;但是它与具体的软件结合太紧,服务程序开发难度大,同时需要终端方有一个与服务器端一样的“元素库”,否则只有编号没有字模也不行。因为这个元素库中包含很多应用软件自己的元素,不全是OS的,每执行一个应用软件前,都要先下载这个元素库,很不划算。第二种方式是从服务器端的屏幕缓冲区中提取生成的图像,但此时已经是图像方式,需要进行有效的识别,还原成构成元素。

RDP中采用了第二种方式,直接对屏幕内存区域动作,提取的速度当然是快捷的;同时在识别技术上也很高明,他可以还原很多OS常用的图形组件,甚至文字。我认为可能是结合了第一种方式,把应用软件调用OS提供的通用动态库的地方直接截取(这是微软的优势所在),直接获得了文字字模信息,对字模的识别要比从图像中提取再识别要容易、快捷很多;其他的还有屏幕控件、常用的屏幕函数等都可能采用类似的方式。要知道识别“元素”往往是压缩算法速度的最难提高的地方了,识别后剩下的纯需要图像传送的地方就大大减少了。

2、动态元素库的生成。在一个软件中经常重复的元素很多,比如某些文字、图片、图标等,RDP在这方面能力很强的是,能比较快地“发现”这些“可爱”的元素,立即生成“代号”,第二次使用这个元素变化时,直接传送代号的动作就可以了,而且这个元素库是不断自我“学习”的。元素编码因该说是成熟的技术,但关键的是如何尽早地选择出“最常用”的元素,并且也不是所有的组件都编码为元素就是经济的,因为只使用一两次的元素对其编码识别的时间要大于直接发送的时间,所以有效的“元素动态更新”算法是非常关键的,而且这个算法对具体压缩的信息类型是密切相关的。

3RDPMPEQ不同的地方是,MPEQ是针对图像的压缩,是有损的,不需要百分百的还原,但RDP需要的是完全的还原,必须是无损的。

 

电影《致命连线》中提到的数据结构估计就是动态元素库的结构与更新算法,因为这个结构要包含文字、图形、图像等多种元素,采用统一编码,同时对不同的元素的属性描述,也就是元素可能的动作,以及对屏幕的影响数据结构要是设计得很大,流量压不下来,就失去了压缩的意义,要设计的小巧精干,又方便各种元素的提取,难怪电影里在“大师”的眼中也堪称完美。很可惜的是,RDP是微软未公开的协议,我们只是分析其设计效果的精巧,目前还无法“真正”看到这个“数据结构”。
本文转自
http://zhaisj.blog.51cto.com/219066/53266
原创粉丝点击