RFB (англ. remote framebuffer) — клиент-серверный сетевой протокол для удалённого доступа к графическому рабочему столу компьютера. Так как он работает на уровне кадрового буфера, то его можно применять для графических оконных систем, например X Window System, Windows, Quartz Compositor.
По умолчанию RFB использует диапазон TCP-портов с 5900 до 5906. Каждый порт представляет собой соответствующий экран X-сервера (порты с 5900 по 5906 ассоциированы с экранами с :0 по :6). Java-клиенты, доступные во многих реализациях, использующих встроенный веб-сервер для этой цели, например, в RealVNC, связаны с экранами таким же образом, но на диапазоне портов с 5800 до 5806. Многие компьютеры под управлением ОС Windows могут использовать лишь один порт из-за отсутствия многопользовательских свойств, присущих UNIX-системам. Для Windows-систем экран по умолчанию — :0, что соответствует порту 5900.
Существует возможность обратного подключения от сервера к клиенту. В этом случае клиент переводится в слушающий (англ. listening) режим и соединение инициируется сервером на 5500 TCP-порт клиента. Одно из преимуществ данного режима в том, что пользователю не обязательно настраивать Брандмауэр/NAT, чтобы разрешить доступ к указанным портам.
Несмотря на то, что RFB запускался как относительно простой протокол, со временем он стал дополнятся новыми функциями, такими как передачи файлов, более сложные методы безопасности и сжатие.
RFB был разработан в Videotile. Чтобы сохранить устройство максимально простым, RFB разрабатывался для любой из существующих технологий удаленного показа дисплея.
После того как VNC был выпущен как программное обеспечение с открытым исходным кодом и спецификацию RFB опубликовали в сети. RFB стал бесплатным протоколом.
После закрытия в 2002 ORL, некоторые ключевые люди из VNC и RFB сформировали RealVNC, Ltd., чтобы продолжать разработку VNC и поддержать протокол RFB. Текущий протокол RFB опубликован на веб-сайте RealVNC.
Опубликованные версии протокола RFB:
Версия |
Издатель |
Дата |
Спецификация |
RFB 3.3 |
ORL |
Январь 1998 |
The Remote Framebuffer Protocol 3.3 |
RFB 3.7 |
RealVNC Ltd |
Август 2003 |
The Remote Framebuffer Protocol 3.7 |
RFB 3.8 (текущая) |
RealVNC Ltd |
Июнь 2007 |
The Remote Framebuffer Protocol 3.8 |
Разработчики могут добавлять дополнительное кодирование и типы безопасности, но они должны согласовать уникальные идентификационные номера для своих добавлений с сопровождающими протокола, так чтобы номера не повторялись. Одинаковые номера могут вызвать путаницу, когда происходит соединение и сломать кросс-совместимость между реализациями. Список кодирования и типов безопасности ведется RealVNC Ltd отдельно от спецификации протокола, чтобы новые типы могли быть добавлены, не требуя, переиздания спецификации.
· 0x00000000 — Сырой (Raw) · 0x00000001 — Копирование прямоугольников (CopyRect) · 0x00000002 — Увеличение прямоугольника (Rising Rectangle) · 0x00000004 — CoRRE (Compact Rising Rectangle) · 0x00000005 — Hextile · 0x00000006 — Сжатие Zlib · 0x00000007 — Версия клиента Tight · 0x00000008 — ZlibHex · 0x00000009 — Версия клиента Ultra · 0x00000010 — Сжатие ZRLE · 0x00000011 — Сжатие ZYWRLE (ZLib YUV Wavelet Run Length Encoding) · 0xFFFF0001 — Флаг кэширования (CacheEnable) |
· 0xFFFF0006 — Флаг побитового XOR (XOREnable) · 0xFFFF8000 — ServerState (UltraVNC) · 0xFFFF8001 — EnableKeepAlive (UltraVNC) · 0xFFFF8002 — Передача файлов (FTProtocolVersion — UltraVNC) · 0xFFFFFF00 — 0xFFFFFF09 — CompressLevel (Tight) · 0xFFFFFF10 — XCursor · 0xFFFFFF11 — RichCursor · 0xFFFFFF18 — PointerPos · 0xFFFFFF20 — LastRect · 0xFFFFFF21 — NewFBSize · 0xFFFFFFE0 — 0xFFFFFFE9 — QualityLevel (Tight) |
С точки зрения передачи данных буфера обмена, «нет в настоящее время никакого способа передать текст вне латинского 1 набора символов».
Протокол VNC — базируемый на пикселе. Несмотря на то, что это приводит к большой гибкости (то есть любой тип рабочего стола может быть выведен на экран), это часто менее эффективно, чем решения, у которых есть лучшее понимание базового графического расположения как X11 или рабочий стол, такой как RDP. Эти протоколы отправляют графические примитивы или команды высокого уровня в более простой форме (например, открытое окно), тогда как RFB просто отправляет необработанные пиксельные данные, хоть и сжатые.
Протокол RFB.