- •7.5.2. Трехфазное подтверждение
- •7.6. Восстановление
- •7.6.1. Основные понятия
- •7.6.2. Создание контрольных точек
- •7.6.3. Протоколирование сообщений
- •7.7. Итоги
- •Глава 8
- •8.1. Общие вопросы защиты
- •8.1.1. Угрозы, правила и механизмы
- •8.1.2. Вопросы разработки
- •8.1.3. Криптография
- •8.2. Защищенные каналы
- •8.2.1. Аутентификация
- •8.2.2. Целостность и конфиденциальность сообщений
- •8.2.3. Защищенное групповое взаимодействие
- •8.3. Контроль доступа
- •8.3.1. Общие вопросы контроля доступа
- •8.3.2. Брандмауэры
- •8.3.3. Защита мобильного кода
- •8.4. Управление защитой
- •8.4.1. Управление ключами
- •8.4.2. Управление защищенными группами
- •8.4.3. Управление авторизацией
- •8.5. Пример — Kerberos
- •8.6. Пример — sesame
- •8.6.1. Компоненты системы sesame
- •8.6.2. Сертификаты атрибутов привилегий
- •8.7. Пример — электронные платежные системы
- •8.7.1. Электронные платежные системы
- •8.7.2. Защита в электронных платежных системах
- •8.7.3. Примеры протоколов
- •8.8. Итоги
- •Глава 9
- •9.1. Corba
- •9.1.1. Обзор
- •9.1.2. Связь
- •9.1.3. Процессы
- •9.1.4. Именование
- •9.1.5. Синхронизация
- •9.1.6. Кэширование и репликация
- •9.1.7. Отказоустойчивость
- •9.1.8. Защита
- •9.2. Dcom
- •9.2.1. Обзор
- •9.2.2. Связь
- •9.2.3. Процессы
- •9.2.4. Именование
- •Синхронизация
- •Репликация
- •Отказоустойчивость
- •9.2.8. Защита
- •9.3. Globe
- •9.3.1. Обзор
- •9.3.2. Связь
- •9.3.3. Процессы
- •9.3.4. Именование
- •9.3.5. Синхронизация
- •9.3.6. Репликация
- •Отказоустойчивость
- •9.4. Сравнение систем corba, dcom и Globe
- •9.4.1. Философия
- •Процессы
- •9.4.4. Именование
- •Синхронизация
- •Кэширование и репликация
- •Отказоустойчивость
9.2. Dcom
Вторая распределенная система объектов, которую мы рассмотрим, — это распределенная модель COM (Distributed COM, DCOM) корпорации Microsoft. Как можно понять из ее названия, модель DCOM выросла из модели компонентных объектов (Component Object Model, COM). COM — это технология, лежащая в основе различных версий операционных систем Windows от Microsoft, начиная с Windows 95. В противоположность CORBA, DCOM не является результатом деятельности комитета. Это, в частности, видно из того факта, что существует всего лишь 300-страничное черновое описание СОМ, датированное октябрем 1995 года [292]. К сожалению, то, что модель DCOM избежала обсуждения в комитете, повлекло за собой отсутствие хорошо спроектированной архитектуры с минимальным набором базовых элементов, из которых строятся компоненты и службы. Наоборот, в настоящее время DCOM — крайне запутанная система, в которой множество сходных действий выполняются множеством разных способов, и подобное сосуществование различных решений временами кажется невозможным.
Критиковать модель DCOM нетрудно. Однако сравнивая ее с CORBA, можно обоснованно утверждать, что DCOM — это технология, которая в значительной степени доказала свое право на существование. Десятки миллионов человек каждый день используют Windows в сетевой среде, а значит, DCOM — широко распространенная система. В этом смысле CORBA или любым другим распределенным системам до нее еще идти и идти.
Далее мы рассмотрим наиболее важные части DCOM, следуя тому же порядку изложения материала, которого мы придерживались при изучении CORBA. Чтобы понять, что такое DCOM, лучше всего обратиться к одной из книг для программистов, такой как [357] или [386]. Хорошее введение в различные технические аспекты DCOM имеется в [132]. Обзор DCOM с точки зрения распределенной модели Windows 2000 можно найти в [92].
9.2.1. Обзор
Как уже упоминалось, модель DCOM базируется на модели СОМ. Целью создания СОМ была поддержка разработки компонентов, которые могли бы динамически активизироваться и взаимодействовать друг с другом. Компонент в СОМ — это исполняемый код, содержащийся в динамически компонуемой библиотеке (DLL) или исполняемой программе.
Сама по себе модель СОМ существует в виде библиотек, компонуемых с процессом. Изначально она разрабатывалась для поддержки так называемых составных документов (compound documents). Как мы говорили в главе 3, составные документы — это документы, построенные из разнородных частей, таких как текст (форматированный), изображения, электронные таблицы и т. п. Каждая из этих частей может быть отредактирована при помощи ассоциированного с ней приложения.
Для поддержки бесчисленного множества составных документов Microsoft нужен был обобщенный метод для разделения отдельных частей и объединения
их в единую сущность. Вначале это привело к технологии связывания и внедрения объектов (Object Linking and Embedding, OLE). Первая версия OLE использовала для передачи информации между частями документа примитивный и негибкий способ обмена сообщениями. Вскоре она была заменена следующей версией, также называвшейся OLE, но построенной на базе более гибкого механизма СОМ, что привело к появлению структуры, представленной на рис. 9.17.
На рисунке также показан элемент ActiveX — этим термином в настоящее время называют все, что относится к OLE, плюс некоторые новшества, к которым относят гибкую (как правило) способность компонентов выполняться в разных процессах, поддержку сценариев и более или менее стандартную группировку объектов в так называемые элементы управления ActiveX. Среди экспертов по DCOM (даже внутри Microsoft) не существует согласия по вопросу о точном определении ActiveX, поэтому мы даже не будем пытаться дать подобное определение.
Модель DCOM добавила к этой структуре весьма существенную вещь — способность процесса работать с компонентами, размещенными на другой машине. Однако базовый механизм обмена информацией между компонентами, принятый в DCOM, очень часто совпадает с соответствующими механизмами СОМ. Другими словами, для программиста разница между СОМ и DCOM часто скрыта за различными интерфейсами. Как мы увидим, DCOM в первую очередь предоставляет прозрачность доступа. Другие виды прозрачности менее очевидны.
Объектная модель
Как фактически и все остальные распределенные системы объектов, DCOM соответствует модели удаленных объектов. Фактически объекты в DCOM могут размещаться как в одном процессе с клиентом, так и на одной машине с ним, а также в процессе, выполняемом на удаленной машине. Позже мы рассмотрим все эти варианты.
Как и в CORBA, объектная модель в DCOM построена на реализации интерфейсов. Грубо говоря, объект DCOM — это просто реализация интерфейса. Один объект может реализовывать одновременно несколько интерфейсов. Однако в отличие от CORBA в DCOM имеются только бинарные интерфейсы (binary interfaces). Такой интерфейс, в сущности, представляет собой таблицу с указателями на реализации методов, которые являются частью интерфейса. Разумеется, для определения интерфейса по-прежнему удобно использовать специальный язык определения интерфейса (IDL). В DCOM также имеется такой язык под названием MIDL (Microsoft IDL — язык IDL от Microsoft), при помощи которого генерируются бинарные интерфейсы стандартного формата.
Достоинство бинарных интерфейсов состоит в том, что они не зависят от языка программирования. В случае CORBA каждый раз для поддержки нового языка программирования необходимо отображать описания IDL на конструкции этого языка. Подобная стандартизация в случае бинарных интерфейсов не нужна. Разницу между этими двумя подходами иллюстрирует рис. 9.18.
Каждый интерфейс в DCOM имеет уникальный 128-битный идентификатор, который называется идентификатором интерфейса (Interface Identifier, IID). Каждый IID абсолютно уникален, не существует двух интерфейсов с одинаковым идентификатором I ID. Этот идентификатор создается путем комбинирования большого случайного числа, локального времени и адреса сетевого интерфейса текущего хоста. Вероятность того, что два сгенерированных индикатора совпадут, практически равна нулю.
Объект DCOM создается как экземпляр класса. Чтобы создать такой объект, необходимо иметь доступ к соответствующему классу. Для этой цели DCOM содержит объекты класса (class objects). Формально таким объектом может быть все, что поддерживает интерфейс IClassFactory. Этот интерфейс содержит метод Createlnstance, который похож на оператор new в языках С++ и Java. Вызов метода Createlnstance для объекта класса приводит к созданию объекта DCOM, содержащего реализацию интерфейсов объекта класса.
Таким образом, объект класса представляет собой коллекцию объектов одного типа, то есть реализующих один и тот же набор интерфейсов. Объекты, принадлежащие к одному классу, обычно различаются только в части текущего состояния. Путем создания экземпляров объекта класса становится возможным обращение к методам этих интерфейсов. В DCOM на любой объект класса можно сослаться по его глобальному уникальному идентификатору класса (Class Identifier, CLSID).
Все объекты реализуют стандартный объектный интерфейс IUnknown. Когда путем вызова Createlnstance создается новый объект, объект класса возвращает указатель на этот интерфейс. Самый важный метод, содержащийся в IUnknown, — метод Querylnterface, который на основании IID возвращает указатель на другой интерфейс, реализованный в объекте.
Важное отличие от объектной модели CORBA состоит в том, что все объекты в DCOM нерезидентные. Другими словами, как только у объекта не остается ссылающихся на него клиентов, этот объект удаляется. Подсчет ссылок производится путем вызова методов AddRef и Release, входящих в интерфейс IUnknown. Наличие исключительно нерезидентных объектов делает невозможным хранение каждым из объектов своего глобально уникального идентификатора. По этой причине объекты в DCOM могут вызываться только по указателям на интерфейсы. Соответственно, как мы увидим позднее, для передачи ссылки на объект другому процессу необходимо предпринять специальные меры.
DCOM также требует динамического обращения к объектам. Объекты, запросы к которым могут создаваться динамически, во время выполнения, должны иметь реализацию интерфейса IDispatch. Этот интерфейс подобен интерфейсу динамического обращения (DII) в системе CORBA.
Библиотека типов и системный реестр
Эквивалент хранилища интерфейсов CORBA в DCOM называется библиотекой типов (type library). Библиотека типов обычно ассоциируется с приложением или другим крупным компонентом, содержащим различные объекты классов. Сама по себе библиотека может храниться в отдельном файле или быть частью приложения. В любом случае библиотека типов в первую очередь требуется для точного описания сигнатуры динамически вызываемых методов. Кроме того, библиотеки типов могут использоваться в системах программирования, например, для отображения структуры разрабатываемых интерфейсов на экране.
Для того чтобы действительно активизировать объект, то есть гарантировать, что он создан и помещен в процесс, из которого будет в состоянии принимать обращения к методам, DCOM использует реестр Windows в комбинации со специальным процессом — менеджером управления службами (Service Control Manager, SCM). Кроме всего прочего, реестр используется для записи отображения идентификаторов классов (CLSID) на локальные имена файлов, содержащих реализации классов. Чтобы создать объект, процесс сначала должен убедиться, что соответствующий объект класса загружен.
Если объект выполняется на удаленном хосте, дело происходит иначе. В этом случае клиент контактирует с менеджером управления службами этого хоста, который представляет собой процесс, ответственный за активизацию объектов, подобно хранилищу реализаций в CORBA. SCM этого удаленного хоста просматривает свой локальный реестр в поисках файла, ассоциированного с CLSID, после чего запускает процесс, содержащий этот объект. Сервер выполняет маршалинг указателя на интерфейс и возвращает его клиенту, который выполняет демаршалинг указателя и передает его заместителю.
Общая архитектура DCOM, включая объекты классов, реальные объекты и заместители, представлена на рис. 9.19 [105]. Процесс клиента получает доступ к SCM и реестру, что помогает ему найти удаленный объект и выполнить привязку к нему. Клиенту предлагается заместитель, реализующий интерфейсы этого объекта.
Сервер объектов содержит заглушку для маршалинга и демаршалинга обращений, которые он будет передавать реальному объекту. Связь между клиентом и сервером обычно реализуется путем вызовов RPC, но, как мы увидим чуть ниже, в определенных случаях могут быть использованы и другие способы связи.
Службы DCOM
Модель DCOM можно рассматривать как расширенную за счет добавления средств сообщения с удаленными объектами модель СОМ. Однако СОМ и сама по себе стала иной, и новая ее версия называется СОМ+. Модель СОМ+ тоже можно рассматривать как расширенный вариант модели СОМ, содержащий различные службы, которые ранее были полезными дополнениями к СОМ. Так, в частности, СОМ+ включает расширения, которые позволяют серверу успешно поддерживать одновременно несколько объектов. Кроме того, добавлены службы, реализуемые на внешних серверах, например системы очередей сообщений.
Провести черту между COM, DCOM, СОМ+ и внешними службами часто бывает затруднительно, и подобные попытки лишь способствуют путанице. Далее мы будем просто ссылаться на DCOM как на расширение, включающее и СОМ, и СОМ+, и ActiveX. Там, где это возможно и имеет смысл, мы будем разделять службы, просто помогающие DCOM, и компоненты, фактически являющиеся частями DCOM. Чтобы понять, какие службы непосредственно входят в DCOM, рассмотрим табл. 9.4, в которой перечислены службы CORBA и соответствующие им службы DCOM. Также в этой таблице приводятся службы Windows 2000, обычно доступные клиентам модели DCOM, но не являющиеся ее частями.
Ниже мы рассмотрим большую часть этих служб. Следует отметить, что сама по себе модель DCOM, в отличие от CORBA, не является законченной распределенной системой, поскольку требует наличия внешних служб. Так, например, очевидно, что служба именования является неотъемлемой частью распределенной системы. Именование в Windows 2000 поддерживается при помощи службы Active Directory. Эта служба, в сущности, состоит из набора серверов каталогов
LDAP, которые именуются и просматриваются при помощи системы DNS. Мы говорили о DNS и LDAP в главе 4. Однако Active Directory не является частью DCOM. Соответственно, при запуске приложений DCOM в среде UNIX эти приложения не в состоянии использовать ту же самую службу именования, что и в среде Windows 2000. У переносимости всегда есть некоторые границы.
Очевидно, что подобный подход препятствует межоперационной совместимости. С другой стороны, учитывая, что фактически все приложения DCOM рассчитаны на работу в среде Windows, непонятно, насколько этот недостаток совместимости действительно можно считать проблемой.
