瘦客户端那些事 - 远程传输协议

简介:

上篇说到了关于瘦客户端的一些现状和遐想,接下来我们开始探索这种技术实现的可能。要实现瘦客户端,最重要的是选择一种客户端和服务端都能理解的沟通方式,这种沟通方式就是通讯协议,或者远程传输协议。

本文不讨论Onlive之类的公司制定的私有未公开的传输协议,而是讨论一些现有的通用协议。其实大家对这些通用协议并不会陌生,他们分别是微软的RDP协议、Citrix的ICA协议、VNC的RFB协议、MIT的X11协议等等。

 

常见协议列表:


Software Protocol License
Citrix XenApp RDP, ICA Proprietary
FreeNX NX, RDP, RFB(VNC) GPL
LogMeIn Proprietary Proprietary
Neatx NX GPL
rdesktop RDP GPL
RealVNC RFB(VNC) GPL
UltraVNC RFB(VNC) GPL
Remote Desktop Services/Terminal Services RDP Proprietary
SSH with X forwarding X11 BSD
Symantec pcAnywhere Proprietary Proprietary
Citrix XenAppRDP ICA Proprietary

更详细的列表见: http://en.wikipedia.org/wiki/Comparison_of_remote_desktop_software


RDP协议



RDP全称是Remote Desktop Protocol,这就是我们平时在Windows里远程桌面使用的协议。使用mstsc.exe我们就可以远程连接到一台Windows机器的桌面进行操作了。在Windows2008里,有一个更吸引人的东西,那就是 Terminal Services RemoteApp。

Terminal Services RemoteApp支持远程的执行单个应用程序,就好像这个应用程序是在本机运行的一样。有了RemoteApp,我们就可以实现在一台没有安装Office或者Visual Studio的客户端机器运行起来一个Excel或VS2010,而Excel和VS2010程序实际是安装在远程安装有RemoteApp服务端的机器。

设置远程应用程序:




RemoeApp架构图:



客户端可以直接使用.rdp快捷方式运行远程App,也可以
在浏览器里里 通过TS Web Access运行一个远程App(远程App并不是运行在浏览器里的)。

比如,在一台Vista的机器里,通过TS Web Access运行远程的WordPad(非Vista风格)。



运行效果如下:



微软的这项技术很酷,是吧。不过,RemoteApp仅限于Windows平台。


ICA协议



ICA全称是Independent Computing Architecture,即独立计算架构,它把应用程序的计算/执行逻辑与显示逻辑分离开来,把程序的计算/执行100%地保留在服务器端,而把运行结果图形化/界面化并通过网络传输到客户端,对于客户端而言,也只有键盘敲击和鼠标点击等会通过网络传给服务器。

ICA由Citrix公司设计的,Citrix可以算是这一领域的老大哥了,就连微软这样技术雄厚的公司,都是购买的Citrix的技术才做出上面的Remote Desktop和TS RemoteApp。技术的原创者是Citrix,因此Citrix拥有更大的优势,运用更多的创新,做出更好的产品出来。这个产品就是Citrix XenApp。

XenApp是个商业工具,我没有用过,自然算不上深入了,有兴趣的同学可以访问Citrix官网了解更多。下面是我找到的一个XenApp设计图:




RFB协议



RFB全称是Remote Frame Buffer,它是我们常用的VNC所使用的协议。RFB是一个远程图形用户的简单协议,因为它工作在帧缓存级别上,所以它可以应用于所有的窗口系统,例如:X11,Windows和Mac系统。远程终端用户使用机器(比如显示器、键盘、鼠标)的叫做RFB客户端,提供帧缓存变化的被称做RFB服务端。


由于使用的是帧缓存技术,因此VNC的性能一直被人所诟病。同时,VNC只能远程控制整个桌面,还没办法做到只单独运行一个程序。


X11协议



X11(X Window System core protocol)是由MIT于1984年设计出来的开源传输协议,一直发展至今,最新版本是X11R7.5。它是X Window System的基本协议。而X Window System系统生来就是为瘦客户服务的,从设计之初,它就被设计成计算和显示分离的架构,即程序的运行可以在一台计算机,而显示又在另外一台计算机。随着X11的不断演变发展,出现了各种不同形式的改良版本,其中最著名的就是NoMachine公司开发的NX协议,NX协议在X11的基础上,加入了缓存机制、压缩传输等,使其性能得到飞跃的提升。这也是我下一篇要重点介绍的。

X11的设计原则是: create Mechanism, not Policy,所以X故意没有规范应用程式的使用者界面 ,例如按钮 、选单 和视窗的标题栏等等。这些都由视窗管理器 (window managers)、GUI 构件工具包 、桌面环境 (desktop environments)或者应用程序指定的GUI(䠋如 POS机 )等等诸如此类的用户软件来提供。这样我们就可以理解,为什么Linux系统中会有诸多如Gnome,KDE之类桌面系统,同样使用X协议,绘制的界面却不尽相同。



要了解X11,一个非常重要的概念一定要弄清楚。就是X Server和X Client。通常Server是指服务器端,Cilent是指用户的客户端,但是X11中要反过来理解。X11中,用于显示画面的是Server,用于计算处理的是Client。所以,如果通过X11远程连接,用户端必须起一个X Server,远程应用程序实际通过远程的X Cilent来执行。

X11本身并不复杂,Server和Client交互的请求一共四种:Requests, Replies, Events, Errors。
   1. Request: Client请求Server端返回信息或执行动作。
   2. Reply: Server针对Request的返回。不是所有Request都有返回。
   3. Event: Server发送的一些界面相关的事件给Client,例如:键盘、鼠标输入,窗口移动,Resize等等。
   4. Error: 当Request请求无效时,Server发送错误信息给Cilent。



如果你正使用X Window System,比如Linux,Debian,Ubuntu等,马上就可以试试了。运行下面的命令,就可以运行一个远程的gedit(文本编辑器):

ssh  - - C root @ 192.168 .x.x gedit

即使不是远程显示图像,本地执行的应用程序所使用的X11的架构也是一样的,都有一个Server和Client。我们可以通过修改Display环境变量,将画面显示到别处。

比如,Client端执行:

export DISPLAY = 192.168 .x.x: 0

远程Display的X Server要接受Client的连接,使用xhost加入允许列表,Server端执行:

xhost  +   192.168 .x.x

然后,在Client端运行一个应用程序,比如:gedit,画面将显示在远程的Server端。

好了,这篇就到这了。下篇将带大家了解NoMachine的NX的秘密。如果你对此有兴趣,请告诉我。

瘦客户端那些事 系列:

瘦客户端那些事 - 开篇

瘦客户端那些事 - 远程传输协议

瘦客户端那些事 - NoMachine的秘密

 

 

本文转自CoderZh博客园博客,原文链接:http://www.cnblogs.com/coderzh/archive/2010/09/24/thinclient-protocol.html如需转载请自行联系原作者

相关文章
|
7月前
|
消息中间件 运维 网络协议
客户端和服务器之间的通信
客户端和服务器之间的通信
113 0
|
网络协议 Windows
59【工控通信】ModbusTCP通讯之ModbusPoll客户端工具配置
【工控通信】ModbusTCP通讯之ModbusPoll客户端工具配置
304 0
|
4月前
|
存储 网络协议 物联网
网络中的“客户端”和“服务器
【8月更文挑战第24天】
153 0
|
7月前
|
网络协议 Python
在python中利用TCP协议编写简单网络通信程序,要求服务器端和客户端进行信息互传。 - 蓝易云
在这个示例中,服务器端创建一个socket并监听本地的12345端口。当客户端连接后,服务器发送一条欢迎消息,然后关闭连接。客户端创建一个socket,连接到服务器,接收消息,然后关闭连接。
100 0
|
7月前
|
网络协议 安全 Linux
Telnet协议:远程终端协议的基础知识
Telnet协议:远程终端协议的基础知识
965 2
|
7月前
|
缓存 负载均衡 网络协议
《网络是怎么样连接的》读书笔记 - 服务器端的局域网中(四)
《网络是怎么样连接的》读书笔记 - 服务器端的局域网中(四)
73 0
|
7月前
|
Web App开发 网络协议 安全
C# | 实现QUIC协议的客户端与服务端
QUIC(Quick UDP Internet Connections)是一种基于UDP协议的可靠、安全、高效的传输协议,由Google开发。它是HTTP/3协议的基础,并被视为未来互联网传输层协议的重要候选者之一。 与TCP不同,QUIC协议使用多路复用(Multiplexing)技术,可以在一个连接上同时传输多个数据流,这些数据流可以独立于彼此进行流量控制和拥塞控制,从而提高了传输效率。此外,QUIC协议还支持零RTT握手,即在第一次连接时就可以发送数据,进一步减少了延迟。
229 0
C# | 实现QUIC协议的客户端与服务端
|
网络协议 BI
直播系统源码协议探索篇(二):网络套接字协议WebSocket
直播系统源码网络套接字协议WebSocket搭建参考代码 connected_clients.add(websocket) try: async for message in websocket: await broadcast(message) finally: connected_clients.remove(websocket)
直播系统源码协议探索篇(二):网络套接字协议WebSocket
|
安全 开发者
直播平台开发协议分析篇(一):会话初始化协议SIP
直播平台开发的SIP协议今天的分析就到这里,大家不难看出,SIP协议关乎着直播平台的实时通信和多方互动能否正常提供服务,确保用户能够以高质量和稳定性进行音视频交流,从而创造更丰富的直播体验。
直播平台开发协议分析篇(一):会话初始化协议SIP
|
存储 网络协议 Linux
网络协议与攻击模拟-19-FTP协议
网络协议与攻击模拟-19-FTP协议
104 0