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

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

9 декабря 2009 Red Hat, Inc объявила о решении открыть исходный код протокола Red Hat Makes Move That Will Allow Open Collaboration With Partners to Drive Virtualization Innovation Официальный сайт проекта .

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

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

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

Для защиты передаваемых данных протокол SPICE поддерживает работу как по открытым каналам, так и с использованием сквозного шифрования на базе протокола TLS (Transport Layer Security) для обеспечения конфиденциальности. Аутентификация пользователей может выполняться как с помощью встроенных билетов (тикетов), так и через обобщённый слой аутентификации SASL (Simple Authentication and Security Layer), что позволяет интегрировать протокол с Kerberos и внешними службами каталогов.Spice remote computing protocol definition v1.0 — Спецификация механизмов безопасности и авторизации протокола SPICE.

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

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

Реализация и применение Протокол SPICE состоит из нескольких основных программных компонентов: spice-protocol — набор заголовочных файлов, определяющих формат пакетов и интерфейсы протокола; spice-server — базовая библиотека реализации серверной части, которая активно используется гипервизором QEMU / KVM для вывода графики паравиртуализированных видеокарт (QXL); spice-gtk — кроссплатформенная библиотека для написания клиентских приложений (используется в утилитах управления виртуальными машинами, таких как virt-viewer и Virt-manager); spice-html5 — экспериментальный клиент на JavaScript для доступа к удаленному рабочему столу прямо через веб-браузер с использованием WebSocket-прокси. Структура пакета

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

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.

Обилечивание Основной канал (Main) — выступает в роли главного управляющего соединения сессии; Видеоканал (Display) — отвечает за прием обновлений графического изображения удаленного монитора; Канал входных данных (Inputs) — предназначен для отправки уведомлений о событиях мыши и клавиатуры; Курсорный канал (Cursor) — используется для передачи формы, видимости и позиции указателя мыши; Канал воспроизведения (Playback) — отвечает за передачу аудиопотока от сервера к клиенту; Канал записи (Record) — используется для передачи аудиозахвата (микрофона) от клиента к серверу; Канал смарт-карт (Smartcard) — используется для безопасной передачи данных физических или виртуальных смарт-карт в гостевую систему; Канал перенаправления USB (USbredir) — отвечает за полноценный проброс USB-устройств с клиентской машины внутрь виртуальной среды.Spice Protocol Definition — Официальное описание структуры и каналов протокола на сайте проекта Spice-space.org.

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

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

Механизм авторизации (Ticketing) Механизм авторизации (использование тикетов) реализован в SPICE для гарантии того, что соединения открываются только от авторизованных источников. Для защиты пароля при подключении используется асимметричное шифрование на базе алгоритма RSA.Spice remote computing protocol definition v1.0 — Спецификация механизмов безопасности и авторизации протокола SPICE. Примечания

Ссылки

Spice remote computing protocol definition v1.0 Draft 1

Категория:Протоколы прикладного уровня Категория:Тонкий клиент