Введение в \/ |\| C
@Zineom_13Сегодня мы рассмотрим такой протокол, как vnc.
VNC (Virtual Network Computing) - система, созданная для удалённого управления графической оболочки компа.
Данная система использует протокол RFB (remote framebuffer).
RFB - это клиент-серверный сетевой протокол для удалённого доступа к графическому рабочему столу компьютера. Так как он работает на уровне кадрового буфера, то его можно применять для графических ОС.
Дефолтные порты для RFB - это диапазон TCP портов с 5900
до 5906
.
Каждый порт представляет собой соответствующий экран X-сервера (иксы, Xorg, сервер графической оболочки). Порты с 5900 по 5906 ассоциированы с экранами с :0 по :6. Вспомним виртуальные консоли в линуксе(ctrl+alt + [f1 - f6]).
Java-клиенты, доступные во многих реализациях, использующих встроенный веб-сервер для этой цели, например, в RealVNC, связаны с экранами таким же образом, но на диапазоне портов с 5800
до 5806
.
P.S Java - высокоуровневый ЯП.
Многие компьютеры под управлением ОС Шиндовз могут использовать лишь один порт из-за отсутствия многопользовательских свойств, присущих *NIX системам. Для Windows-систем экран по умолчанию :0, что соответствует порту 5900. Реже встречается :1 (5901).
Существует возможность обратного подключения от сервера к клиенту. В этом случае клиент переводится в listening mode - режим прослушивания - и соединение инициируется сервером на (по умолчанию) 5500
TCP порт клиента. Одно из преимуществ данного режима в том, что пользователю не обязательно настраивать файрвол на серваке, чтобы разрешить доступ к указанным портам.
RFB создавался как относительно простой протокол, но со временем он стал дополняться новыми функциями, такими как передача файлов, более сложные методы безопасности, сжатие, кэширование и т.д.
Клиент и сервер в момент подключения производят сравнение реализованных в них версий протокола и согласовывают совместимый взаимоподдерживаемый набор опций.
С точки зрения передачи данных буфера обмена, RFB способен передавать текст только в рамках кодировки Latin-1.
Протокол VNC основан на передаче растров (массивов пикселей). Несмотря на то, что это приводит к большой гибкости (то есть возможно отображение любого типа рабочего стола), такой метод часто менее эффективен, чем решения, более близкие к графическим системам типа X11 или RDP (Remote Desktop Protocol ещё вернёмся к нему). В таких протоколах возможна отправка более сложных графических примитивов и команд высокого уровня в более простой форме (например, создать окно), тогда как RFB просто отправляет необработанные пиксельные данные, хоть и сжатые.
Версии протокола
Опубликованные версии протокола RFB:
Разработчики могут добавлять дополнительное кодирование и типы безопасности, но они должны (на самом деле нет) согласовать уникальные идентификационные номера для своих добавлений с сопровождающими протокола, так чтобы номера не повторялись. Одинаковые номера могут вызвать путаницу, когда происходит соединение и сломать кросс-совместимость между реализациями. Список кодирования и типов безопасности ведется 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)