Основные сведения о сетях и их построении, страница 7

В простейшем случае взаимодействия двух компьютеров может быть реализовано с помощью тех же средств, что и взаимодействие компьютера с ПУ. Но отличительной особенностью в данном случае будет двустороннее взаимодействие программ на обоих компьютерах. Программа одного компьютера не может получить непосредственный доступ к ресурсам другого компьютера – его дискам, файлам, принтеру. Она может только "попросить" об этом программу другого компьютера. Эта "просьба" выражается в форме сообщений, передаваемых по каналам связи между компьютерами. Сообщения могут содержать как команды на выполнение некоторых действий, так и сами данные, например данные файла. Предположим, что два компьютера связаны по кабелю через COM–порты, которые реализуют интерфейс RS-232C (нуль-модемный интерфейс) и работают под управлением MS-DOS. Драйвер и контроллер COM–порта работают примерно так же, как и в случае с ПУ, но при этом роль устройства управления ПУ выполняют драйвер и контроллер COM–порта другого компьютера. Совместно они обеспечивают передачу одного байта данных. В сетях подобные функции обеспечивают сетевые адаптеры и их драйверы. Пусть пользователю, работающему с текстовым редактором на компьютере А, нужно прочитать часть некоторого файла с диска компьютера В. Поскольку требуется прочитать определенную последовательность байт файла, то данная задача не по силам одним только драйверам COM–портов. Эту задачу должны решать соответствующие приложения компьютеров А и В. Приложение А должно сформировать сообщение-запрос для приложения В, в котором должно указать имя файла, тип операции обмена (в нашем случае - чтение), смещение и размер области файла с требуемыми данными. Для передачи сообщения приложение А обращается к драйверу своего COM–порта, сообщая ему адрес оперативной памяти, по которому драйвер находит сообщение и затем передает его байт за байтом приложению В. Приложение В, приняв запрос, выполняет его, считывая требуемую часть файла с диска с помощью средств своей ОС и контроллера диска в буферную область своей оперативной памяти, а далее с помощью драйвера COM–порта передает считанные данные по каналу связи в порт компьютера А, откуда они с помощью драйвера COM–порта попадают к приложению А. Описанную процедуру приложения А могла бы выполнять сама программа текстового редактора. Однако включать типовые функции в состав каждого приложения, работающего с файлами, – неудачная идея. Предпочтительней создать специальный модуль, выполняющий функции формирования сообщений-запросов и приема результатов для всех приложений компьютера. Такой служебный модуль называется клиентом. Но при этом на стороне компьютера В должен работать другой модуль – сервер, постоянно ожидающий прихода запросов на удаленный доступ к файлам, расположенным на диске этого компьютера. Приняв запрос из сети, сервер обращается к файлу, и выполняет с ним заданные действия. Программные клиент и сервер выполняют системные функции по обслуживанию запросов приложений компьютера А на удаленный доступ к файлам компьютера В, используя при этом возможности своих операционных систем. Чтобы приложения компьютера В также могли пользоваться файлами компьютера А, описанную схему нужно симметрично дополнить клиентом для компьютера В и сервером для компьютера А. Весьма полезной функцией клиента является способность отличать запрос к удаленному файлу от запроса к своему локальному файлу. Эта функция реализуется в специальном модуле распознавания запроса. Если клиент включает в себя этот модуль, то он называется редиректором, так же как и отдельный модуль распознавания запроса. В случае включения модуля распознавания клиент представлен собственно редиректором, направляющим запросы либо к локальным ресурсам, используя возможности локальной ОС, либо к клиентской части, которая и взаимодействует с сервером. В отличие от клиента сервер через локальную операционную систему (ОС) имеет доступ только к своим локальным ресурсам и обслуживает только приходящие запросы. В силу этого постоянно выполняемым приложением является только его серверная часть, отвечающая за прием запросов и их выполнение.