Протокол RFB

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску

RFB (аббр. от англ. remote framebuffer) — клиент-серверный сетевой протокол для удалённого доступа к графическому рабочему столу компьютера. Используется в системах удаленного доступа VNC[1]. Так как он работает на уровне кадрового буфера, то его можно применять для графических оконных систем, например 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 был разработан в Olivetti Research Laboratory (ORL), как технология удаленного отображения для использования с тонким клиентом Videotile, с подключением по ATM соединению. Разработка своего протокола позволила упростить клиент.

Реализация VNC была выпущена как программное обеспечение с открытым исходным кодом, а спецификацию RFB опубликовали в сети. С тех пор RFB стал более популярным протоколом.

После закрытия ORL в 2002, некоторые ключевые люди из 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)

Ограничения[править | править код]

С точки зрения передачи данных буфера обмена, RFB способен передавать текст только в рамках кодировки Latin-1.[2]

Протокол VNC основан на передаче растров (массивов пикселей). Несмотря на то, что это приводит к большой гибкости (то есть возможно отображение любого типа рабочего стола), такой метод часто менее эффективен, чем решения, более близкие к графическим системам типа X11 или RDP. В таких протоколах возможна отправка более сложных графических примитивов и команд высокого уровня в более простой форме (например, создать окно), тогда как RFB просто отправляет необработанные пиксельные данные, хоть и сжатые.

Примечания[править | править код]

  1. Камерон Лейрд. Искусство VNC. Как научиться работе с великолепным инструментом виртуализации. IBM DW (12.12.2007). Дата обращения 25 октября 2018.
  2. Richardson, Tristan. Sections 6.4.6, 6.5.4 // The RFB Protocol - Version 3.8. — 2010.

Ссылки[править | править код]