谈XenDesktop VS View协议优劣

现在Citrix与VMWare在桌面虚拟化市场上的竞争已经到了“白热化”,可以说是进入了“肉搏战”。

我一直这样认为,VMWare由于workstation的广泛的用户群,从而带来了VMWare公司的知名度,最终也成就了VMWare的铺天盖地淹死人的广告以及推广活动。勿喷!

VMWare的朋友一般都这样告诉大家:

  1. PCoIP协议要优于ICA协议,因为他们认为PCoIP是使用的UDP协议,相比ICA的TCP协议要高效。
  2. ICA协议不是XenApp的ICA而是PortICA,强调XenDesktop使用的不是XenApp中那么强大的ICA协议。

两种观点基本都集中在协议的比较上,所以我们就来看看这些都是什么,有啥区别,结果真的是这样么?

首先我们来看第一个,关于UDP与TCP的效率问题。

View使用PCoIP协议在客户端与虚拟桌面之间通信,PC0IP是基于UDP协议实现的;而XenDesktop使用ICA协议在客户端与虚拟桌面之间通信,ICA是基于TCP协议来实现的。了解产品的协议与协议的基本实现方式以后,我们来看看TCP与UDP协议的区别。

先撇开PCoIP与ICA不谈,我们来看看TCP与UDP。一般大家都认为,TCP是面向连接的,建立连接需要三次握手,数据通信需要再服务器与客户端之间发送ACK做数据校验,导致通信效率的地下,但能保证数据的完整性,即TCP连接是可信赖的。而UDP是面向无连接的,不需要确认数据包的完整性,允许数据包的部分丢失,从而能提高带宽的利用率和通信效率,也既是UDP通信为不可信赖。

明白了这点以后,我们再来看看PCoIP协议和ICA协议。

在View4.5以后,VMWare针对PCoIP协议做了一些调整,主要增加了对广域网的优化,VMWare的主要做法是增加了对广域网环境中带宽和延迟的预估,从而为每个桌面保留200kbps到250kbps的带宽用来做基本的通信,保留基本的使用带宽需要。另外对网络利用率也有一定的要求,不能高于70%,延迟不能超过250ms。从这里就可以看出,VMWare对带宽和延迟有很高的效果,而在低于200kbps的带宽情况下,用户体验就更容易受到虚拟桌面内部应用类型的不同而差距非常大。

VMWare还申明PCoIP协议不适用于10kbps到50kbps的窄带连接环境!

看到上面的技术要求以后,我们再来看看虚拟桌面环境下使用TCP与UDP的效率问题:

  1. PCoIP必须要保留带宽来支撑数据通道的运行,比如:外设的映射,客户度与虚拟桌面之间的文件数据通信等,难道PCoIP使用的UDP在传输的时候也不需要校验?不保证完整性的在客户端与虚拟桌面之间传输?所以PCoIP内部实现了TCP的校验功能,数据包的丢失仍然得向TCP协议一样来重传错误数据包。内部的校验大家看不到,也就变成了PCoIP是使用UDP协议的,不需校验,通信效率很高。
  2. 再来看看公网的接入方式,用户需要从公网访问的时候,为了安全,一般可能会使用VPN设备来对连接进行加密,所以PCoIP的数据为了通信,走VPN以后,就会被VPN对所传输的数据库进行重新的wrap,而主流的VPN设备都是基于TCP连接的,所以,PCoIP的UDP数据,被封装成TCP数据传输,这样的UDP何来高效?有些人可能会说,目前已经有了基于UDP的VPN设备,那也得等VMWare和人家合作,不知道多久以后才能搞出能保证第一条中数据完整的的适合PCoIP的设备,也许是我太低估了他们的能力。
  3. 还有些人会说,VMWare基于UDP的PCoIP协议,播放视频语言的时候更高效,殊不知,这只是在低延迟高带宽的情况下,而通过实际测试,我们发现也并没有想象中的那么“高效”,另外在非特定格式下,PCoIP协议的效果相比于Citrix的HDX技术的差距是非常明显的。参考另外一篇文章视频:https://xenme.com/archives/346
  4. 题外:关于TCP与UDP协议的效率,可以看看各种应用方面的对比,相信大家有所发现。而不是某人说,为啥视频和VoIP等都是使用UDP协议,所以我们就推论出全世界都应该使用UDP协议这么草率的结论。

再者,来看看关于XenDesktop使用的是PortICA协议,而不是ICA协议这个问题。

从这里可以看出,VMWare对XenApp的ICA协议的高效是认同的。而PortICA协议基于虚拟桌面之间通信与普通的远程桌面通信是有区别,所以Citrix针对ICA协议做了一些修改,从而形成了PortICA协议来实现虚拟桌面的通信。做出这种改变的原因是由于虚拟桌面的连接是基于console的,而XenApp的ICA协议是基于会话的,所以两者不能完全相同,我们可以参考Brian Madden的讲解,因为大家对PortICA的了解大多引用该牛人的说法:

Certainly there are some elements of PortICA that Citrix was able to pull directly from the ICA implementation on Presentation Server. Other elements wouldn’t work. (For example, on a Presentation Server, the ICA stack interacts with the session manager. On a workstation, there is no session manager!) And finally, there are some elements of ICA on Presentation Server that Citrix could have implemented in the same way, but that they chose not to for reasons we’ll discuss later. In a sense, Citrix took the time with PortICA to do it right. The designed what they felt was the best way to provide remote ICA-based access to a single-user machine.

而ICA协议的本质主要在于传输屏幕差异量,来减少带宽的消耗,所以PortICA肯定会区别于ICA协议。