RFB 通讯协议详解

2021-07-16 linux

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 的颜色灰度值,也就是透明度,这样就可以实现半透明窗口、菜单渐隐、阴影等效果。

参考