SPICE (протокол)

SPICE (сокр. от англ. «Simple Protocol for Independent Computing Environments», то есть «Простой протокол для независимой вычислительной среды») — протокол, используемый в рамках проекта с аналогичным названием (но пишется строчными буквами: Spice). Проект представляет собой систему отображения (рендеринга) удаленного дисплея, построенную для виртуальной среды, которая позволяет вам просматривать виртуальный «рабочий стол» вычислительной среды не только на машине, на которой он запущен, но и откуда угодно через Интернет, причем для просмотра можно использовать широкий спектр машинных архитектур.

Первоначально протокол был разработан компанией Qumranet, которую затем купила Red Hat, Inc.

9 декабря 2009 Red Hat, Inc объявила о решении открыть исходный код протокола [1][2].

Протокол SPICE определяет набор протокольных сообщений для подключения, управления и получения входящей информации от удаленных компьютерных устройств (например, клавиатура, видеокарта, мышь) по сети, а также отправка им сообщений. Контролируемое устройство может располагаться на любой стороне: как на стороне сервера, так и/или на стороне клиента. Кроме того, протокол определяет набор вызовов для поддержки миграции удаленного сервера с одного сетевого адреса на другой.

Шифрование передаваемых данных, за одним исключением, оставляет для протокола возможность максимальной гибкости в выборе методов шифрования. SPICE использует простейший обмен сообщениями и не зависит от любых стандартов вызовов удаленных процедур (RPC) или специфики транспортного уровня.

Сессия взаимодействия в SPICE делится на множество коммуникационных каналов (то есть каждый канал — это удаленное устройство) чтобы иметь возможность контролировать обмен информацией и обработку сообщений в зависимости от типа канала (то есть шифрование QoS), а также добавлять и отключать коммуникационные каналы во время работы (что поддерживается стандартом протокола).

В черновом варианте стандарта протокола (который является пока что актуальным на данный момент) определены следующие коммуникационные каналы:

  • Основной (главный) канал выступает в роли основного соединения сессии;
  • видеоканал для приема обновления изображения удаленного монитора;
  • канал входных данных для отправки уведомлений о событиях, связанных с мышью и клавиатурой;
  • курсорный канал для приема формы и позиции указателя;
  • канал воспроизведения для приема аудиопотока;
  • канал записи для отправки аудиозахвата.

Новые типы каналов будут добавляться по мере развития протокола. Стандарт SPICE также содержит набор протокольных определений для синхронизации работы каналов на удаленном узле.

Структура пакета

[править | править код]

Структура заголовка

[править | править код]

Заголовок содержит следующие типы полей:

  • UINT8 — 8-битное беззнаковое целое
  • INT16 — 16-битное знаковое целое
  • UINT16 — 16-битное беззнаковое целое
  • UINT32 — 32-битное беззнаковое целое
  • INT32 — 32-битное знаковое целое
  • UINT64 — 64-битное беззнаковое целое
  • ADDRESS — 64-битное беззнаковое целое, величина смещения адресуемых данных от начала тела сообщения протокола SPICE (то есть данные, следующие за RedDataHeader или RedSubMessage).
  • FIXED28_4 — 32-битное число с фиксированной запятой. 28 старших битов являются знаковым целым. Младшие 4 бита являются беззнаковым целым числителем дроби со знаменателем 16.
  • POINT — INT32 x, INT32 y
  • POINT16 — INT16 x, INT16 y
  • RECT — INT32 верх, INT32 лево, INT32 низ, INT32 право
  • POINTFIX — FIXED28_4 x, FIXED28_4 y

Версия протокола

[править | править код]

Версия протокола определяется двумя значениями типа UINT32, которые определяют основную версию протокола и дополнительную, соответственно.

Совместимость

[править | править код]

Чтобы обеспечить некоторую степень гибкости в реализации клиента и сервера и улучшить совместимость, протокол SPICE поддерживает двунаправленный обмен настройками каналов.

Процесс установки соединения

[править | править код]

Процесс подключения к каналу инициируется клиентом, который посылает серверу сообщение RedLinkMess. В качестве ответа сервер отсылает RedLinkReply.

Обилечивание

[править | править код]

Обилечивание — механизм, реализованный в SPICE для гарантии, что соединения открыты только от авторизованных источников.

Примечания

[править | править код]