Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Сетевые средства операционных систем. Учебное пособие
.pdf
Ларина Т.Б. Сетевые средства операционных систем
71
ID
сообщен
ия
Тип
сообщен
ия
ID
клиента
Идентификатор удаленной
процедуры
Аргументы
№
программы
№
версии
№
процедуры
ID сообщения
Тип
сообщения
Статус
ответа
Результат или
причина ошибки
Формат сообщения – вызова, где ID – идентификатор
сообщения:
Формат сообщения – ответа:
Тип сообщения позволяет отличить сообщения-вызовы от
сообщений-ответов.
Идентификатор удаленной процедуры в сообщении-вызове
позволяет серверу понять, вызов какой процедуры запрашивает
клиент. Процедуры идентифицируются номерами. При
автоматической генерации стабов номера процедурам присваивает
IDL-компилятор, при ручной генерации сам программист.
Поле аргументов имеет переменную длину, которая зависит от
количества и типа аргументов вызываемой процедуры.
Идентификатор сообщения (ID) - это порядковый номер
сообщения. Он полезен для обнаружения фактов потерь сообщений
или прихода дубликатов сообщений. Кроме того, этот номер позволяет
клиенту правильно сопоставить полученный ответ со своим вызовом,
когда ответы приходят не в том порядке, в котором посылались
вызовы.
Идентификатор клиента нужен серверу, чтобы знать, какому
клиенту отправлять результат работы процедуры. Это поле может
также использоваться в процедурах аутентификации клиента, если эти
процедуры предусмотрены протоколом RPC.

Ларина Т.Б. Сетевые средства операционных систем
72
Поле статуса и результата в сообщениях-ответах позволяют
серверу сообщить клиенту об успешном выполнении удаленной
процедуры или о том, что при попытке ее выполнения была
зафиксирована ошибка определенного типа. Эти ситуации должны
корректно обрабатываться стабом клиента и соответствующие коды
ошибок должны передаваться в вызывающую процедуру.
Для устойчивой работы серверов и клиентов RPC необходимо
каким-то образом обрабатывать ситуации, связанные с потерями
сообщений.
Протокол RPC использует в таких случаях механизм тайм-аутов
с повторной передачей сообщений. Чтобы сервер мог повторно
переслать клиенту потерянный результат (без повторного вызова от
клиента), в протокол RPC иногда добавляется специальное сообщение
— подтверждение клиента, которое тот посылает при получении
ответа от сервера.
Связывание клиента с сервером
Как клиент узнает место расположения сервера RPC, которому
необходимо послать сообщение-вызов? Операция, предназначенная
для этого, носит название «связывание» (binding).
Существует несколько возможных методов связывания,
применяемые в различных реализациях RPC.
Статическое связывание
В простом случае адрес сервера RPC задается в явной форме,
как параметр клиентского стаба. То есть, задается IP-адрес
компьютера, на котором работает RPC-сервер, и номер порта, через
который он принимает сообщения-вызовы.
Недостаток такого подхода — отсутствие гибкости и
прозрачности. При перемещении сервера или при существовании
нескольких серверов процедур клиент не может автоматически
выбрать сервер. Тем не менее, статический способ из-за своей
простоты часто используется на практике.

Ларина Т.Б. Сетевые средства операционных систем
73
При статическом связывании номер порта сервера RPCинтерфейса определяется клиентом через специальный модуль RPC
Runtime. Такой модуль работает на каждом сетевом узле,
поддерживающем механизм RPC, и доступен по известному порту
TCP/UDP. В UNIX он называется модулем отображения портов
(portmapper), а в Windows — локатором RPC (RPC Locator).
Каждый сервер, обслуживающий определенный набор
удаленных процедур (кратко называют «RPC –интерфейс»), при старте
обращается к модулю RPC Runtime с запросом о выделении ему
номера порта. RPC Runtime выделяет серверу свободный номер порта
и запоминает его в своей таблице.
Клиент RPC, выяснив сетевой адрес сервера нужного RPCинтерфейса, предварительно соединяется с модулем RPC Runtime по
его известному порту и запрашивает номер порта сервера. Получив
ответ, клиент использует данный номер порта для отправки
сообщений-вызовов удаленных процедур.
Динамические методы связывания
Они не требуют от клиента точного задания адреса RPCсервера.
Динамическое связывание требует изменить способ
именования сервера. В этом случае имя RPC-интерфейса состоит из
двух частей: тип интерфейса и экземпляр интерфейса (адрес сервера).
Тип интерфейса содержит все характеристики RPCинтерфейса, кроме его месторасположения. Это те же характеристики,
которые даются в описании для IDL-компилятора.
Экземпляр интерфейса точно задает сетевой адрес сервера,
который поддерживает данный интерфейс. Если клиенту безразлично,
какой именно сервер будет его обслуживать, то вторую часть имени
RPC- интерфейса он опускает.
Если для клиента не важно, какой именно сервер предоставляет
RPC-интерфейс, процесс обнаружения сервера в сети может быть
построен двумя способами:

Ларина Т.Б. Сетевые средства операционных систем
74
1. С использованием широковещательной рассылки;
2. С использованием централизованного «агента
связывания».
В первом случае все серверы RPC выполняют
широковещательную рассылку по сети имени своего интерфейса,
включая и свой адрес («адрес экземпляра»).
Этот способ позволяет автоматически балансировать нагрузку
на несколько серверов, поддерживающий один и тот же интерфейс.
Клиент просто выбирает первое из подходящих ему объявлений.
Схема с централизованным агентом связывания предполагает
наличие в сети специального сервера имен, который связывает тип
интерфейса с адресом сервера, поддерживающего такой интерфейс.
На сервере имен работает программа – «агент связывания»,
которая ведет таблицу серверов и поддерживаемых ими RPCинтерфейсов.
Каждый сервер RPC должен предварительно зарегистрировать
тип своего интерфейса и сетевой адрес у агента связывания. Если
сервер по ряду причин не может поддерживать определенный RPCинтерфейс, он должен обратиться к агенту и отменить свою
регистрацию.
Сетевой адрес агента связывания известен и серверам RPC и
клиентам.
Клиент для определения адреса сервера RPC с нужным
интерфейсом обращается к агенту связывания. Если в таблице агента
связывания имеются сведения о сервере, поддерживающем такой тип
интерфейса, то он возвращает клиенту его сетевой адрес.
Реализации механизмов RPC
Существуют две широко распространенные реализации
(стандарта) системы удаленного вызова процедур:

Ларина Т.Б. Сетевые средства операционных систем
75
Sun RPC – реализация компании Sun Microsystem.
Предназначается для сетевых операционных систем этой компании —
SunOS, Solaris и других;
OSF DCE RPC - стандарт консорциума Open Software
Foundation для распределенной вычислительной среды DCE
(Distributed Computing Environment). Реализации DCE RPC есть для
всех программных платформ сетевых ОС. На основе стандарта DCE
RPC разработана система Microsoft Windows RPC.
Реализации Sun RPC и DCE RPC несовместимы друг с другом.
Вопросы для самоконтроля
1. Что такое «программный интерфейс сокетов»?
2. Что такое «порт» применительно к механизму сокетов ?
3. Каковы диапазоны номеров портов?
4. Чем отличаются типы сокетов?
5. Какие параметры требуются для создания сокета?
6. Опишите логику клиента при взаимодействии по
дейтаграммному сокету
7. Опишите логику клиента при взаимодействии по
потоковому сокету
8. Опишите логику сервера при взаимодействии по
дейтаграммному сокету
9. Опишите логику сервера при взаимодействии по
потоковому сокету
10. Что такое «порожденный» сокет?
11. Каков механизм установления соединения по протоколу
ТСР?
12. Характеристика системных вызовов для создания и
настройки сокета

Ларина Т.Б. Сетевые средства операционных систем
76
13. Характеристика системных вызовов для приема и передачи
данных через сокеты
14. Особенности системных вызовов для взаимодействия с
установлением соединения
15. Системные вызовы закрытия сокетов
16. Что такое «сетевой порядок» байтов? Для каких значений он
используется?
17. Назовите функции преобразования для сетевого порядка
байтов
18. Назовите функции преобразования IP-адресов
19. Чем отличается удаленный вызов процедур от вызова
локальных процедур?
20. Опишите взаимодействие клиента и сервера удаленных
процедур
21. Дайте характеристику понятиям «клиентский стаб» и
«серверный стаб»
22. Как можно создать стабы?
23. Какие есть способы связывания клиента с сервером RPC-
процедур? В чем их суть?
24. Каково основное назначение механизма RPC?
25. Почему в RPC-процедурах не используют глобальные
переменные?
26. Почему при вызовах RPC-процедуры параметры передаются
только в виде значений, а не ссылок (адресов) на их размещение?

Ларина Т.Б. Сетевые средства операционных систем
77
Упражнение. Сетевое взаимодействие через потоковые
сокеты.
Ниже приведен пример программы TCP-клиента. Клиент
отправляет на сервер текст, вводимый в командной строке запуска
программы с клавиатуры.
В тексте программы есть пропуски, которые надо заполнить.
Пропуски отмечены вопросом.
#include <stdio.h>
#include <string.h>
#include <resolv.h>
#define DEFAULT_PORT 9999 // номер порта
#define SIZE 1024 // размер буфера сообщения
// параметром при запуске программы вводится .строка для отправки
на сервер
int main (int argc, char* argv[])
{
int sd; //дескриптор сокета
int port = DEFAULT_PORT;
char *host ="127.0.0.1";
struct sockaddr_in addr;
int addr_len = sizeof (addr);
char buffer[SIZE];
if (argc == 3){
port = atoi (argv[2]);
host = argv[1];

Ларина Т.Б. Сетевые средства операционных систем
78
} else
printf ("Запуск: %s <ip сервера> <порт сервера>
\n...используем порт по умолчанию (%d)\n", argv[0], port);
// Создание сокета
? = socket (АF_INET, ? , 0);
// Обнуления структуры "адреса"
bzero (&addr, sizeof(addr));
// Заполнение структуры
addr.sin_family = ? ; //TCP-сеть
addr.sin_port = htons (port);
inet_aton (host, &addr.sin_addr);
// Подключаемся к серверу
if ( ? (sd, &addr, sizeof (addr)) == -1){
perror ("connect");
abort ();
}
scanf ("\n%s", &buffer);
// Пока не введена строка "exit" работаем
while (strcmp (buffer,"exit") != 0){
// Отправляем на сервер строку
if ( ? (sd, buffer,strlen( ? ) + 1, 0, &addr, sizeof(addr)) < 0){
perror ("sendto"); abort ();
}
// Обнуляем буфер
bzero (buffer, sizeof (buffer));

Ларина Т.Б. Сетевые средства операционных систем
79
// Получаем от сервера строку
recvfrom ( ? , buffer, sizeof (buffer), ? , &addr, &addr_len);
printf ("%s\n", buffer);
scanf ("\n%s", &buffer);
}
// Закрываем сокет
? ( ? );
}

Ларина Т.Б. Сетевые средства операционных систем
80
3. СЕТЕВЫЕ СЛУЖБЫ
Сетевые компоненты операционных систем реализуются на
низком уровне и представляют собой компоненты ядра ОС.
Сетевые службы являются высокоуровневыми сервисами
сетевых операционных систем. Как правило, сетевые службы
реализуются на верхнем (прикладном) уровне стека протоколов
модели OSI. Сетевые службы многочисленны и разнообразны.
Главными службами сетевой инфраструктуры являются
централизованные службы каталогов, служба автоматического
конфигурирования TCP/IP, службы разрешения символических и
доменных имен узлов сети [4].
3.1 Централизованные службы каталогов
Служба каталогов (Directory Service) — это средство
иерархического представления ресурсов сети: технических,
информационных, человеческих.
Службы каталогов в сетевых операционных системах помогают
организовать сетевое взаимодействие разных типов объектов, включая
пользователей.
На основе службы каталогов можно организовывать не только
сетевую инфраструктуру, но и создавать политики доступа,
безопасности и разделения данных.
Microsoft Active Directory
Active Directory – это реализация службы каталогов
Майкрософт для операционных систем Microsoft Windows Server,
начиная с версии 2000 и старше. Она предназначена для
централизованного хранения информации обо всех объектах сети на
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
