VNC 是一套实现远程网络操控的软件,通常用于界面操作。
简介
Virtual Network Computing, VNC 是一种图形化的桌面共享系统,使用远程帧缓冲协议 (Remote Framebuffer, RFB) 来远程控制另一台计算机,将键盘和鼠标事件从一台计算机传输到另一台计算机,通过网络向另一个方向转发图形屏幕更新。
其有如下的特点:
- 平台无关,有多种客户端和服务器的实现,几乎涵盖了所有的主流平台,包括浏览器的 NoVNC 实现。
- 开源,最初在英国剑桥的 Olivetti & Oracle 研究实验室开发的,很多衍生品都在 GUN 协议下开源。
- 简单通用, 在 FrameBuffer 级别工作,因为基于像素,适用于所有窗口系统和应用程序。
所以,在很多场景下都能看到 VNC 协议,例如树莓派,不过其安全性相对要差一些。
在 RFC 6143 中有相关协议的介绍,其中 Client 负责显示,与 XWindow
中略有区别。
+-------------------+ +-------------------+
| | Screen Changes | |
| |-------------------------->| |
| RFB Server | | RFB Client |
| (Windowing System | RFB Protocol | |
| &Application) | | (Display) |
| |<--------------------------| |
| | Keyboard/Mouse Input | |
+-------------------+ +-------------------+
如下是服务器、客户端的交互协议。
Client Server
|<------------ Server Protocol Version ---------------|
|------------- Client Protocol Version -------------->|
| |
|<------------ Security Types Supported --------------|
|------ Authentication Type Selected By Client ------>|
|<------ Authentication Challenge From Server --------|
|-------- Authentication Response From client ------->|
|<------------- Authentication Result ----------------|
| |
|---------------- Share Desktop Flag ---------------->|
|<---- Server Init(FrameBuffer PixelFormat Name) -----|
其它
真彩色
真彩色是指每个像素值都通过 RGB 基色表示,计算机中通过二进制表示,常见的有 16bits、24bits、32bits,从 24bits 开始被称为真彩色,而 32bits 则是在 24bits 的基础上增加了 8btis 的颜色灰度值,也就是透明度,这样就可以实现半透明窗口、菜单渐隐、阴影等效果。
参考
- The Remote Framebuffer Protocol 标准的 RFC6143 协议,还可以参考 The RFB Protocol 包含了很多扩展定义。
- 常见的 VNC 实现可以参考 TurboVNC、UltraVNC 等。