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 для гарантии, что соединения открыты только от авторизованных источников.

Перенос канала править

Поток операций править

Передача изображения править

Управление видеопотоком править

Примечания править

Ссылки править