Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
23
Добавлен:
13.02.2015
Размер:
255.61 Кб
Скачать

Berkeley Sockets

  1. Универсальный интерфейс обмена сообщениями

  1. Независимость от нижележащих сетевых протоколов и технологий (коммуникационный домен)

  1. Использование абстрактной конечной точки соединения, получившей название сокет

  1. Для каждого коммуникационного домена могут существовать сокеты различных типов (дейтаграммные, потоковые)

Коммуникационный домен :

        Способ именования сетевых узлов и ресурсов

        Характеристики сетевых соединений

        Способы синхронизации процессов

Примитивы механизма сокетов

    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

      - разные машины : разные адресные пространства и различные архитектуры (порядок байтов) : нельзя использовать указатели == использование сериализации (маршалинг)

      - обязательное использование сети == использование транспортного протокола, НО: скрыто от разработчика

      - вызванные процедуры становятся «осиротевшими» ,а при аварийном завершении удаленных процедур становятся «обездоленными родителями» вызывающие процедуры

Соседние файлы в папке Программирование_распределенных_систем