Протокол 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 | CompressLevel (Tight) |
| 0xFFFFFF09 | CompressLevel (Tight) |
| 0xFFFFFF10 | XCursor |
| 0xFFFFFF11 | RichCursor |
| 0xFFFFFF18 | PointerPos |
| 0xFFFFFF20 | LastRect |
| 0xFFFFFF21 | NewFBSize |
| 0xFFFFFFE0 | Сжатие ZRLE |
| 0xFFFFFFE0 — 0xFFFFFFE9 | QualityLevel (Tight) |
Ограничения
[править | править код]С точки зрения передачи данных буфера обмена, RFB способен передавать текст только в рамках кодировки Latin-1.[2]
Протокол VNC основан на передаче растров (массивов пикселей). Несмотря на то, что это приводит к большой гибкости (то есть возможно отображение любого типа рабочего стола), такой метод часто менее эффективен, чем решения, более близкие к графическим системам типа X11 или RDP. В таких протоколах возможна отправка более сложных графических примитивов и команд высокого уровня в более простой форме (например, создать окно), тогда как RFB просто отправляет необработанные пиксельные данные, хоть и сжатые.
Примечания
[править | править код]- ↑ Камерон Лейрд. Искусство VNC. Как научиться работе с великолепным инструментом виртуализации. IBM DW (12 декабря 2007). Дата обращения: 25 октября 2018. Архивировано 26 октября 2018 года.
- ↑ Richardson, Tristan. Sections 6.4.6, 6.5.4 // The RFB Protocol - Version 3.8. — 2010.