Введение в \/ |\| C

Введение в \/ |\| 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)



Report Page