
Berkeley Sockets
-
Универсальный интерфейс обмена сообщениями
-
Независимость от нижележащих сетевых протоколов и технологий (коммуникационный домен)
-
Использование абстрактной конечной точки соединения, получившей название сокет
-
Для каждого коммуникационного домена могут существовать сокеты различных типов (дейтаграммные, потоковые)
Коммуникационный домен :
Способ именования сетевых узлов и ресурсов
Характеристики сетевых соединений
Способы синхронизации процессов
Примитивы механизма сокетов
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
- разные машины : разные адресные пространства и различные архитектуры (порядок байтов) : нельзя использовать указатели == использование сериализации (маршалинг)
- обязательное использование сети == использование транспортного протокола, НО: скрыто от разработчика
- вызванные процедуры становятся «осиротевшими» ,а при аварийном завершении удаленных процедур становятся «обездоленными родителями» вызывающие процедуры