
Программирование_распределенных_систем / PRS_Lec2
.pdfBerkeley Sockets
1.Универсальный интерфейс обмена сообщениями
2.Независимость от нижележащих сетевых протоколов и технологий (коммуникационный домен)
3.Использование абстрактной конечной точки соединения, получившей название сокет
4.Для каждого коммуникационного домена могут существовать сокеты различных типов (дейтаграммные, потоковые)
Коммуникационный домен :
Способ именования сетевых узлов и ресурсов Характеристики сетевых соединений Способы синхронизации процессов
Примитивы механизма сокетов
1. s = socket(domain, type, protocol) — создание сокета
Коммуникационный домен: AF_INET, AF_NETBIOS, AF_INET6, AF_IRDA, AF_BTH
2.bind(s, Addr, Addrlen) - связывает созданный сокет с его высокоуровневым именем либо с низкоуровневым адресом
3.connect(s, server_addr, server_addrlen) - запрос на
установление соединения с удаленным сокетом
-только в том случае, если предполагается передавать сообщения в потоковом режиме -после установления соединения сообщения по нему могут передаваться в дуплексном режиме
4.listen (s. Backlog) - ожидание запроса на установление соединения
5.snew = accept(s, client_addr, client_addrlen) - принятие запроса на установление соединения
-s используется сервером для приема запросов на установление соединения от клиентов -snew — для обмена сообщениями с клиентами по индивидуальным соединениям.
Примитивы механизма сокетов(2)
1.write(s, message, msglen) - отправка сообщения по установленному соединению
2.Mbytes =read(snew, buffer, amount) - прием сообщения по установленному соединению
3.sendto(s. message, receiver_address), amount = recvfrom(s, message, sender_address) — прием и передача без установления соединения
Пример обмена короткими сообщениями без надежной доставки
Отправитель:
s = socket(AF_INET. SOCK_DGRAM.0); bind(s, sender_addr, sender_addrlen); sendto(s, message, receiver_addr); close(s);
Получатель:
s =socket(AF_INET, SOCK_DGRAM,0); bind(s. receiver_addr, receiver_addrlen); amount = recvfrom(s, message, sender_addr); close(s);
Вызов удаленных процедур
(Remote Procedure Call, RPC)
Расширение хорошо известного и понятного механизма передачи управления и данных внутри программы
Наибольшая эффективность RPC достигается в тех приложениях, в которых существует интерактивная связь между удаленными компонентами с небольшим временем ответов и относительно малым количеством передаваемых данных. Такие приложения называются RPC-ориентированными.
Характерные черты:
- асимметричность — одна из взаимодействующих сторон является инициатором взаимодействия;
-синхронность — выполнение вызывающей процедуры блокируется
смомента выдачи запроса и возобновляется только после возврата из вызываемой процедуры
Проблемы и задачи RPC
-разные машины : разные адресные пространства и различные архитектуры (порядок байтов) : нельзя использовать указатели == использование сериализации (маршалинг)
-обязательное использование сети == использование транспортного протокола, НО: скрыто от разработчика
-вызванные процедуры становятся «осиротевшими» ,а при аварийном завершении удаленных процедур становятся «обездоленными родителями» вызывающие процедуры
Подсистемы RPC
Транспортная подсистема
—управление исходящими и входящими соединениями.
—поддержка понятия «граница сообщения» для транспортных протоколов, не поддерживающих его непосредственно (TCP).
—поддержка гарантированной доставки для транспортных
протоколов, не поддерживающих ее непосредственно (UDP).
Пул потоков (только для вызываемой стороны). Предоставляет контекст выполнения для вызванного по сети кода.
Маршалинг . Упаковка параметров вызовов в поток байт стандартным образом, не зависящим от архитектуры (в частности, от порядка байт в слове). В частности, ему могут подвергаться массивы, строки и структуры, на которые указывают параметры-указатели.
Шифрование пакетов и наложение на них цифровой подписи.
Аутентификация и авторизация. Передача по сети информации, идентифицирующей субъект, осуществляющий вызов.

Пример работы локалной функции
m= my_write( fd, buf, length )

Пример работы удаленной процедуры
- вызов удаленной процедуры должен выглядеть так же , как и локальной
Генерация стабов
-вручную
-автоматически
Используем язык определения интерфейса (Interface Definition Language, IDL)
-список имен процедур
-список типов аргументов и результатов этих процедур
-роли аргументов (входной, выходной...)
-общие для клиента и сервера константы
IDL-компилятор - вырабатывает исходные модули клиентских и серверных стабов для указанных в описании процедур