看《致命连线》电影,学习RDP协议压缩思路

看《致命连线》电影,学习 RDP 协议压缩思路
 
美国电影《致命连线》 (Antitrust)( 又名:反垄断 ) ,描述了世界巨头的软件公司 ( 模拟微软 ) 聘用天才青年,花几百亿美元,开发比 Windows 还“厉害”的“神经线”软件,该软件可以让用户在全球各地实时地进行视频传输,“所见即共享”。由于视频受到带宽的限制,尤其是通过卫星的微波传输,带宽可谓是“金贵”,所以良好的压缩算法是该软件的核心。主人公的一个大学的好友在一家小公司里开发出了类似的软件,并且从“另类的”思维角度提出了一种新型的“数据结构”,完美地解决了动态视频压缩的问题。影片的情节不复杂,主要是描述大公司垄断给技术进步带来的“恶果”,但我很感兴趣的是影片中提到的“另类”压缩算法与“完美的”数据结构,因为这在现实生活中也一个技术的追逐点,在很多年前,是否真的有雏形吗?所谓“另类”是影片里编剧有意在顾弄玄虚吗?
记得 Juniper 公司曾经采用一种类似 DNA 的压缩算法,是学习人类的 DNA 编码思路,人类自身只有四个碱基对,却可以表征人类“数不清”的形象特征,依靠的就是人类的 DNA 编码图谱,人类才遗传了各种特征,人人有不同的面孔。对二进制的数据流也采用 DNA 编码,提取数据的特征,编码会大大压缩数据的流量。从压缩思路上来说,这也许是一个“另类”吧。
最近在研究对加密协议的审计问题时,分析了 RDP 协议,在应用上与电影中说的有些类似,就其压缩的思路上来说,与电影中说的有异曲同工之妙,看来美国人的天才幻想也不是空穴来风。也许电影的编剧真的与 RDP 的开发者有过沟通吧。
 
一、 了解 RDP
RDP 有两个英文解释,但其使用的目的基本是一样的。第一个解释是可靠数据协议 (Reliable Data Protocol) ,是一种面向连接的传输协议,其主要设计来为主机监控应用程序如下载 / 上传以及远程调试进行有效的大批数据传输,标准是 RFC 1115
第二个解释是远程桌面协议 (Remote Desktop Protocol) ,是微软根据 ITU T.120 协议族制订的一套未公开发表的数据传输协议,我们所说的是这个解释。 RDP 是终端服务器 (Terminal Server) 和客户端之间的通信协议,它使得远程用户可以使用键盘和鼠标通过网络在应用程序之间进行通信。通过 RDP 协议客户端的计算机可以与远程服务器上正在运行的服务程序进行交互以获得相应的服务。这也是我们用到的远程终端服务功能。微软的 RDP Citrix 公司的 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 在这方面能力很强的是,能比较快地“发现”这些“可爱”的元素,立即生成“代号”,第二次使用这个元素变化时,直接传送代号的动作就可以了,而且这个元素库是不断自我“学习”的。元素编码因该说是成熟的技术,但关键的是如何尽早地选择出“最常用”的元素,并且也不是所有的组件都编码为元素就是经济的,因为只使用一两次的元素对其编码识别的时间要大于直接发送的时间,所以有效的“元素动态更新”算法是非常关键的,而且这个算法对具体压缩的信息类型是密切相关的。
3 RDP MPEQ 不同的地方是, MPEQ 是针对图像的压缩,是有损的,不需要百分百的还原,但 RDP 需要的是完全的还原,必须是无损的。
 
电影《致命连线》中提到的数据结构估计就是动态元素库的结构与更新算法,因为这个结构要包含文字、图形、图像等多种元素,采用统一编码,同时对不同的元素的属性描述,也就是元素可能的动作,以及对屏幕的影响 数据结构要是设计得很大,流量压不下来,就失去了压缩的意义,要设计的小巧精干,又方便各种元素的提取,难怪电影里在“大师”的眼中也堪称完美。很可惜的是, RDP 是微软未公开的协议,我们只是分析其设计效果的精巧,目前还无法“真正”看到这个“数据结构”。
 
科学的进步往往充满了神奇的幻想,所以不要对一些“不切实际的”、“不着边际的”的看法与观点嗤之以鼻,也许这就是人类文明的新组成部分 ……
 

你可能感兴趣的:(压缩,远程桌面,休闲,rdp,致命连线)