RDP /终端服务和VNC流技术之间的区别

时间:2009-02-12 05:35:58

标签: streaming remote-desktop remote-access vnc

作为客户端支持工具的一部分,我想提供一些功能,以便能够请求查看/远程控制桌面会话。有很多方法可以获取屏幕截图然后流式传输,但我想特别了解为什么RDP(远程桌面/终端服务与VNC体验如此不同。我使用的是RDP vs VNC只是因为他们似乎使用截然不同的方法将屏幕流式传输到客户端。

如果我不得不猜测,RDP似乎传输位图图形块(比如100x100px)以构建完整图片(可能非常慢)但似乎将正常绘制的形状/填充或字体绘制转移到客户非常快。 VNC似乎拍摄了屏幕的巨型快照,比较了之前的图像并将更改流式传输到客户端。

我觉得RDP是一种比其他任何东西都要高质量和平滑的协议,所以它用什么技术来实现这个目标呢?

编辑 - 只是为了澄清,我问这些图形技术特别是作为流协议编程方法 - 而不是用于解决此业务需求的现有产品/技术。

2 个答案:

答案 0 :(得分:10)

正如您所发现的那样,它们在流动方式上的变化非常不同。 来自MS的RDP协议是可以在线购买的ITU standard (T.128)的扩展名。

RDP实现了许多带宽节省技术,这些技术相互补充,并使其在低带宽上非常高效。

另一方面,VNC具有非常基本的压缩技术:它将发送已经改变的位图块,并将使用基本类型的压缩,从RLE到jpeg,以有效地传输这些块。
不幸的是,它在低带宽上仍然非常浪费。

VNC基本上不了解用于构建屏幕的底层图形基元。这使得它易于在任何机器上使用,因为它只是监视屏幕位图的变化 另一方面,RDP更深入地嵌入Windows API,并且能够根据在客户端上生成相同更新所需的最少信息量来优化其流。

如果要集成远程桌面功能,可以选择以下几种方法:

  • 对于RDP,您可以使用用于Web远程功能的ActiveX。您可能需要查看wrapper以将其集成到您自己的软件中 如果您想深入了解这一点,那么Linux rdesktop客户端的源代码可以通过RDP连接到Windows机器。

  • 对于VNC,有许多开源实现 FogCreek的Copilot实际上使用了一个,你可以在source上构建TightVNC

CodeProject on RDPVNC上还有许多项目。

答案 1 :(得分:4)

正如Renaud所说,VNC只是逐块发送位图更改,而不知道内容是什么。 RDP更聪明。

您可以从这两个规范中确切了解RDP的作用:

协议级别: http://msdn.microsoft.com/en-us/library/cc240445(PROT.10).aspx

图形级别: http://msdn.microsoft.com/en-us/library/cc241537(PROT.10).aspx

我认为RDP的最大收益来自:

  • 缓存:客户端可以存储大量以前看到的块,服务器可以告诉客户端如何使用它们。这些也是持久的,因此当客户端连接到服务器时,它已经去过它可以通告它在磁盘上有什么块。当窗户被移动时非常有用。窗户的许多部分,如标题栏都是相同的。

  • 线/块绘图。正如您猜测的那样,RDP具有线性,多边形和矩形绘图的操作。随着绘图窗口的使用,相当多。

  • 字体绘图。 RDP有一种方法可以通过gylphs发送字体并告诉客户端渲染它们。

  • 光标渲染。光标图标作为字形发送。 VNC只使用一个点

这些是我想到的重要因素。有关完整的绘图功能列表,请查看2.2.7协议规范的功能集。