桌面虚拟化即我们通常说的远程桌面共享。桌面共享的原理核心为更新,利用不断的更新,从而还原出共享端屏幕;VDI桌面虚拟化所使用的协议要比RDP或VNC高级,比如Citrix XENDesktop使用的为ICA协议,VMWare View使用的为PCoIP协议。常见协议列表如下:
目前主流的两种桌面共享的协议分别为RFB和RDP两种,其中RFB协议的实现主要为VNC系列,包含Real Vnc, Tight Vnc, UltraVnc, Chicken Vnc, FlashVNC。RDP的实现主要包含Netmeeting,WIndows 远程桌面连接,FreeRDP,rdesktop(其GUI项目有KRDC和Gnome-RDP)。
- RFB协议
RFB协议的设计是基于计算和显示分离的架构,即程序的运行可以在一台计算机,而显示又在另外一台计算机。实现过程是截取屏幕现实的图像,在共享端计算更新,利用网络发送更新给观看端,观看端只要求能够解码图片就可以显示。VNC的观看端只要求能够解码图像就可以还原出共享端的屏幕,所以观看端可以部署在和共享端完全不同的平台上,对硬件要求也非常的低,从而取得非常广泛的应用,成为目前桌面共享的主流协议。
其传输图像保证观看端的低要求,但是也导致其传输的数据量比较大,对网络要求比较苛刻,对条件不好的网络的适应性比较差。同时,如果传输图像以外的内容,需要单独扩展RFB协议,造成目前很多版本的VNC实现的文件传输等功能,都不具有通用性,而且对音视频等实时内容无法对待。RFB中使用不同压缩算法效率的测试比较:
- RDP协议
远程显示协议(Remote Display /Desktop Protocol )简称RDP。提供了客户和服务器之间的连接,同时支持音频的传输。微软提出的通讯协议,主要用于实现windows下多用户模式,用于远程访问运行在Windows终端服务器上的应用程序。其设计架构跟ICA一样是将应用的逻辑执行和用户界面分离开来,由此,只需将用户界面以及键盘鼠标动作和屏幕的更新信息通过标准的协议传递到服务器上.由于传递的是键盘鼠标动作和屏幕的更新信息是图片增量变化的那部分信息一般情况下,这种变化的信息只有几K到几十K而已.所以才能将应用程序信息交换速度提高到原来的几十倍。
RDP 协议对于不同信息的处理机制是不同的:
-
视频描述信息在终端和服务器的视频驱动器中进行转换
-
来自客户端的键盘鼠标信息则是通过驱动RDP协议本身的虚拟鼠标和键盘驱动器进行接收的。
RDP是应用于TCP/IP网络协议智商的一种网络协议,分五层:
影响远端显示的四个方面:编码原语、屏幕的更新策略、压缩算法、客户端缓存状况。RDP服务器是将多条画图命令缓存,然后融合,最后再将融合后的显示更新发送给客户端,这样如果更新速度无法跟上实时视频显示的速度从而导致在服务器端多条融合的视频帧被覆盖,使得这些帧不能发送给客户端显示。RDP使用RLE编码(RLE的基本思想可以简述为:设法将原图像区域分成多个子矩形区域,而每个子区域由一个基本象素点和该区域的大小所组成)。
因此可以从以下方面改进RDP协议:
- 屏幕更新方式
- 采用融合的机制,可以有效地降低传输的数据量,减轻网络带宽的压力。显示更新在服务器端排列,然后在发送给客户端前融合,如果更新是在同一块屏幕区域内发生变化,则只需发送最新的区域给客户端。
- 缓存机制
- 针对视频的压缩算法
参考文献:
http://en.wikipedia.org/wiki/Remote_Desktop_Protocol
http://en.wikipedia.org/wiki/Comparison_of_remote_desktop_software