Мы позволим себе отступить от канонического порядка изложения "от общего к частному", "от концепции к решению" и описать независимую вычислительную архитектуру (Independent Computing Architecture, ICA) компании Citrix Systems. Эта архитектура на сегодняшний день является индустриальным стандартом организации многопользовательского графического доступа к серверам Microsoft Windows. Имеются реализации ICA (клиентских и серверных компонентов) для ОС Unix. По данным компании Citrix на 1999 год, установлено около 15 миллионов экземпляров ее клиентского ПО. В разное время технологию ICA лицензировали такие компании, как Tektronix (реализовавшая семейство продуктов WinDD), Insignia (NTrigue), NCD (WinCenter PRO), Wyse Technology (Winterm). Первые три предоставляют доступ к приложениям Microsoft Windows для Unix-платформ и X-терминалов.
Любопытна история развития взаимоотношений компаний Citrix и Microsoft. Сначала Citrix лицензировала Windows NT Server версии 3.51 и реализовала продукт WinFrame, предоставляющий графический многопользовательский доступ. Увидев, что дела Citrix идут весьма успешно, корпорация Microsoft, в свою очередь, лицензировала у Citrix технологию многопользовательского доступа и встроила ее в Windows NT Server 4.0 Terminal Server Edition (TSE), правда, реализовав собственный протокол взаимодействия клиентов и сервера - Remote Desktop (Display) Protocol (RDP). Мы рассматриваем ICA, а не RDP, потому что продукты компании Citrix являются универсальными, многоплатформными.
Идейным стержнем архитектуры, продвигаемой Citrix, является протокол ICA. По своей роли (не по реализации) он близок к X Window, отделяя прикладную логику от интерфейсной и позволяя приложениям под Windows взаимодействовать с удаленными пользователями даже по низкоскоростным линиям. Протокол ICA позволяет передавать:
- представление текстовых экранов;
- представление графических экранов Windows-приложений;
- аудио/видео потоки;
- ввод с клавиатуры и мыши.
Кроме того, с помощью ICA можно управлять сеансами, проводить сжатие и шифрование данных, перенаправлять вывод на печать и т.п.
С современных позиций протокол ICA представляется старомодным, избыточным (например, он может взять на себя управление потоками, обеспечение надежной передачи с восстановлением после ошибок), рассчитанным на самостоятельную поддержку разной среды передачи, разных протоколов канального и транспортного уровней. Общий вид ICA-пакета представлен на Рис. 1. С другой стороны, реализация ICA выполнена весьма грамотно, по модульному принципу, так что лишние компоненты могут быть удалены и избыточных действий производиться не будет.

Рисунок 1. Формат пакета в протоколе ICA.
Среди команд, поддерживаемых протоколом ICA, мы кратко опишем управление виртуальными каналами. Разумеется, передается не весь текстовый экран, а только его изменения. Кроме того, может выполняться управление режимами, атрибутами символов, скроллирование, управление курсором.
Виртуальные каналы позволяют передавать данные различных типов (например, графику, аудио и т.п.). Виртуальный канал поддерживает сеанс взаимодействия приложения и пользователя. ICA не пытается разбираться в структуре потока, передаваемого по такому каналу, так что его можно использовать для расширения функциональности клиента без изменения протокола ICA (например, речь может идти о поддержке потокового видео). Если оперировать терминами эталонной модели взаимодействия открытых систем, то можно сказать, что ICA действует на уровне сеансов, а протокол, обслуживающий определенный виртуальный канал, - на уровне представления.
Одним из протоколов виртуального канала является Thinware, обслуживающий передачу графики от Windows-приложений клиентам (см. Рис.2). На сервере обработка графики доходит до уровня интерфейса с графическими устройствами (GDI), после чего в дело вступает Thinware, являющийся с точки зрения приложения частью графической подсистемы Windows. Thinware генерирует оптимизированные графические примитивы, а затем соответствующие данные "подхватываются" протоколом ICA, переносятся на пользовательское рабочее место и отображаются на дисплее с помощью клиентской части ICA и Thinware.

Рисунок 2. Потоки данных между Windows-приложением и ICA-клиентом.
Thinware - это протокол, который обеспечивает кэширование на клиентской стороне графических объектов Windows, таких как битовые карты, курсоры, кисти и т.п. В результате, по утверждению компании Citrix, для удобной работы пользователя достаточно канала с пропускной способностью порядка 20 Кбит/с (Рис.3).

Рисунок 3. Возможность поддержки ICA различными средами передачи.
Компания Citrix постоянно развивает свои продукты, стараясь идти в ногу со временем. Технология прикладных порталов NFuse (детальное рассмотрение которой, к сожалению, выходит за рамки настоящей статьи) позволяет встраивать интерактивные приложения в HTML-страницы и затем работать с ними в окне Web-навигатора (при этом компоненты программного обеспечения Citrix должны присутствовать на сервере приложений, Web-сервере и клиенте). В сочетании с выходом основного продукта Citrix - MetaFrame - для операционной платформы Solaris, наличие NFuse позволяет говорить об универсальности архитектуры ICA и o совместимости продуктов Citrix с современными открытыми стандартами.