Сетевое ПО Лекция 8 (1061294), страница 3
Текст из файла (страница 3)
Сервер может выполнятьоперации приема и передачи данных с помощью функций recv и send.Клиенты, ориентированные на логические соединения, подключаютсяк серверу вызовом Winsock-функции connect с указанием адреса удаленногокомпьютера.После того как соединение установлено, клиент может посылать ипринимать сообщения через свой сокет.Рис. 16 иллюстрирует коммуникационную связь между клиентом исервером Winsock, ориентированными на логические соединения.Послепривязкикадресу сервер,нетребующийлогическихсоединений, ничем не отличается от аналогичного клиента; он посылает иполучает сообщения через сокет, просто указывая удаленный адрес длякаждого сообщения.При использовании сообщений, не требующих логических соединений(т.
е. дейтаграмм), отправитель получает код ошибки в ходе следующейоперации приема, если предыдущее сообщение не было доставлено.2.4 Remote Procedure Call (RPC)RPC, опираясь на другие сетевые API (именованные каналы илиWinsock), предоставляет альтернативную модель программирования, вкакой-томерескрывающуюразработчика приложений.Функционирование RPCдеталисетевогопрограммированияот13Сетевое ПО. Лекция 8(2014 г.)Механизм RPC позволяет создавать приложения, состоящие изпроизвольного числа процедур, часть которых выполняется локально, а часть— на удаленных компьютерах (через сеть).RPC предоставляет модель работы с сетью, ориентированную напроцедуры, а не на транспорты, что упрощает разработку распределенныхприложений.Сетевое программное обеспечение традиционно базируется на моделиобработки ввода-вывода.В Windows сетевая операция начинается с того, что приложение выдаетзапрос на удаленный ввод-вывод.
Операционная система обрабатываетзапрос, передавая его редиректору, который действует в качестве удаленнойфайловой системы, обеспечивая прозрачное взаимодействие клиента судаленной файловой системой.Редиректор передает запрос удаленной файловой системе, а после тогокак удаленная система выполнит запрос и вернет результаты, локальнаясетевая плата генерирует прерывание. Ядро обрабатывает это прерывание, иисходнаяоперацияввода-выводазавершается,возвращаярезультатывызывающей программе.RPC использует совершенно другой подход.
Приложения RPC похожина другие структурированные приложения: у них есть основная программа,которая для выполнения специфических задач вызывает процедуры илибиблиотеки процедур.Отличие приложений RPC от обычных программ в том, что некоторыебиблиотеки процедур в приложениях RPC выполняются на удаленныхкомпьютерах, а некоторые — на локальном.Для приложения RPC все процедуры кажутся локальными. Иначеговоря, вместо того чтобы заставлять программиста писать код для передачизапросов на вычисления или ввод-вывод по сети, работы с сетевымипротоколами, обработки сетевых ошибок, ожидания результатов и т.
д.,программное обеспечение RPC выполняет все эти задачи автоматически.14Сетевое ПО. Лекция 8(2014 г.)Кроме того, механизм RPC в Windows работает с любымитранспортами, которые имеются в системе.Создавая приложение RPC, программист решает, какие процедурыбудут выполняться локально, а какие — удаленно. Допустим, обычнаярабочая станция подключена по сети к суперкомпьютеру Cray или кспециализированной машине, предназначенной для быстрого выполнениявекторных вычислений. Если программист пишет программу, работающую сбольшими матрицами, то с точки зрения производительности имело бысмысл переложить математические вычисления на удаленный компьютер,написав программу в виде приложения RPCФункционирует приложение RPC следующим образом.В процессе своей работы оно вызывает как локальные процедуры, так ипроцедуры, отсутствующие на локальной машине.Для обработки последнего случая приложение связывается с локальнойDLL, которая содержит интерфейсные процедуры (stub procedures) для всехудаленных процедур.Впростойпрограммеинтерфейсныепроцедурыстатическисвязываются с приложением, но в компоненте большего размера онивключаются в отдельные DLL.
В DCOM обычно применяется последнийметод. Интерфейсная процедура имеет то же имя и тот же интерфейс, что иудаленная процедура, но вместо выполнения соответствующей операции онапросто преобразует переданные ей параметры для передачи по сети — такойпроцесс называется маршалингом (marshaling).Маршалинг заключается в упорядочении параметров и их упаковке вопределенном формате.Далее интерфейсная процедура вызывает процедуры библиотеки RPCпериода выполнения, и они находят компьютер, на котором расположеныудаленные процедуры, определяют используемые этим компьютероммеханизмы транспорта и посылают запрос при помощи локальногопрограммного обеспечения сетевого транспорта.15Сетевое ПО.
Лекция 8(2014 г.)Когда удаленный сервер получает запрос RPC, он выполняет обратноепреобразование параметров (unmarshaling), реконструирует исходный вызовпроцедуры и вызывает ее.Закончив обработку, сервер выполняет обратную последовательностьдействий для возврата результатов вызывающей программе.Кроме интерфейса, основанного на описанном здесь синхронномвызове процедур, RPC в Windows также поддерживает асинхронный RPC(asynchronous RPC).Он позволяет приложению RPC вызывать функцию и, не дожидаясь еевыполнения, продолжать свою работу.
На это время приложение можетперейти к выполнению другого кода. Когда от сервера придет ответ,библиотекаRPCпериодавыполненияосвободитобъект-событие,сопоставленный клиентом с асинхронным вызовом. Чтобы узнать озавершении функции, клиент использует стандартные Win32-функции типаWaitForSingleObject.Помимо библиотеки периода выполнения в Microsoft RPC входиткомпилятор MIDL (Microsoft Interface Definition Language).
Этот компиляторупрощает создание приложений RPC. Программист пишет набор обычныхпрототипов функций (предполагается, что он использует язык С или C++),описывающих удаленные процедуры, а затем помещает их в какой-либофайл. Далее он добавляет к этим прототипам нужную дополнительнуюинформацию, например уникальный для сети идентификатор пакетапроцедур, номер версии и атрибуты, указывающие, являются ли параметрывходными, выходными или и теми, и другими одновременно. В конечномсчете программист получает файл на языке IDL (Interface DefinitionLanguage).ПодготовленныйIDL-файлтранслируетсякомпиляторомMIDL,который создает интерфейсные процедуры для клиентской и сервернойсторон, а также заголовочные файлы, включаемые в приложение.
Когдаклиентское приложение связывается с файлом интерфейсных процедур,16Сетевое ПО. Лекция 8(2014 г.)компоновщик разрешает все ссылки на удаленные процедуры. Аналогичнымобразом удаленные процедуры устанавливаются на серверной машине.Программист, который намерен вызывать существующее приложение RPC,должен написать только клиентскую часть программы и скомпоновать ее слокальной библиотекой RPC периода выполнения.Библиотека RPC периода выполнения использует для взаимодействия странспортнымпротоколомуниверсальныйинтерфейспровайдеровтранспорта RPC (RPC transport provider interface).Этот интерфейс служит тонкой прослойкой между механизмом RPC итранспортом,котораяувязываетоперацииRPCсфункциями,предоставляемыми транспортом.RPC в Windows реализует DLL-модули провайдеров транспорта дляименованных каналов, NetBIOS и TPC/IPПоддержкудругихтранспортовможноввести,написавдополнительные DLL.
Аналогичным образом RPC поддерживает работу сразличными средствами сетевой защиты.Большинство сетевых служб Windows является приложениямиRPC, a это значит, что они могут вызываться как локальными процессами,так и процессами на удаленных машинах.Таким образом, удаленный клиентский компьютер может обращаться кслужбам сервера для просмотра списка общих ресурсов, открытия файлов,записи данных в очереди печати или добавления пользователей на этомсервере, либо он может вызывать Messenger Service (Службу сообщений) дляпосылки сообщений (конечно, при наличии соответствующих прав доступа).Сервер может регистрировать свое имя по адресу, который будетдоступен клиенту при поиске.
Эта возможность, называемая публикациейимени сервера, реализована в RPC и интегрирована с Active Directory. ЕслиActive Directory не установлена, служба локатора имен возвращается кшироковещательной рассылке с использованием NetBIOS..