Лекция № 1. Связь на основе передачи сообщений УЧЕБНЫЕ ВОПРСЫ 1. Способы организации взаимодействия в распределенных системах. 2. Сокеты Беркли. Вопрос №1 Существует ряд способов организации взаимодействия в РС: 1. сохранная связь (persistent communication) 2. нерезидентная связь (transient communication) И та и другая может быть синхронной и асинхронной Вопрос №1 При сохранной связи сообщение, предназначенное для отсылки, хранится в коммуникационной системе до тех пор, пока его не удастся передать получателю. При нерезидентной связи сообщение хранится в системе только в течение времени работы приложений, которые отправляют и принимают это сообщение, т.е. коммуникационный сервер, не имея возможности передать сообщение следующему серверу или получателю, просто уничтожает его. Вопрос №1 Характерной чертой асинхронной связи (asynchronous communication) является немедленное после отправки письма продолжение работы отправителя. В случае синхронной связи (synchronous communication) отправитель блокируется до того момента, пока его сообщение не будет сохранено в локальном буфере принимающего хоста или доставлено реальному получателю. Вопрос №1 Рис. 4. Сохранная асинхронная связь (а), сохранная синхронная связь (б), Вопрос №1 Рис. 4. нерезидентная асинхронная связь (в), нерезидентная синхронная связь с синхронизацией по приему (г) Вопрос №1 Рис. 4. нерезидентная синхронная связь с синхронизацией по доставке (д) и нерезидентная синхронная связь с синхронизацией по ответу (е) Вопрос №2 Примером нерезидентной связи на основе сообщений – является интерфейс сокетов, введенный в UNIX, разработанной в университете Беркли (Berkeley UNIX). Концептуально сокет (socket) — это конечная точка коммуникации. В эту точку приложение может записывать данные, которые следует переслать по базовой сети, и из этой точки оно может читать приходящие данные. Сокеты образуют абстракцию, лежащую поверх реальной конечной точки сети, которая работает с локальной операционной системой по некоторому транспортному протоколу. Вопрос №2 Примитивы сокетов для TCP/IP Socket - Создать новую конечную точку коммуникации Bind - Назначить сокету локальный адрес Listen - Обозначить готовность к установке соединения Accept - Заблокировать вызывающую сторону до прибытия запроса о соединении Connect - Совершить попытку установить соединение Send - Послать через соединение некоторые данные Receive - Принять из соединения некоторые данные Close - Разорвать соединение Вопрос №2 Организация работы сервера При вызове примитива socket вызывающий процесс создает новую конечную точку для некоторого транспортного протокола. Изнутри создание конечной точки коммуникации означает, что локальная операционная система резервирует ресурсы для размещения приходящих и отправляемых по некоторому протоколу сообщений. Вопрос №2 Организация работы сервера Примитив bind выполняет привязку локального адреса к только что созданному сокету. Привязка сообщает операционной системе, что сервер намерен получать сообщения только на указанные адрес и порт. Вопрос №2 Организация работы сервера Примитив listen применяется только для коммуникаций, ориентированных на соединение. Это неблокирующий вызов, требующий от локальной операционной системы зарезервировать буфер для определенного максимального количества соединений, которое вызывающий процесс намерен поддерживать. Вопрос №2 Организация работы сервера Вызов примитива accept блокирует вызывающий процесс до прихода запроса на соединение. Когда этот запрос придет, локальная операционная система создаст новый сокет с теми же свойствами, что и у базового, и возвратит его вызывающему процессу. Такой подход позволяет серверу, например, разветвить процесс, который впоследствии будет поддерживать связь через новое соединение. Сервер в это время может вернуться в состояние ожидания следующего запроса на соединение с базовым сокетом. Вопрос №2 Организация работы клиента Начинается с создания сокета при помощи примитива socket, однако в явной привязке сокета к локальному адресу нет необходимости, поскольку операционная система может динамически выделить порт при установлении соединения. Вопрос №2 Организация работы клиента Примитив connect требует, чтобы вызывающий процесс указал адрес транспортного уровня, на который будет отправлен запрос на соединение. Клиент блокируется до тех пор, пока соединение не будет установлено. Вопрос №2 После установления соединения стороны начинают обмениваться информацией при помощи примитивов write и read, предназначенных для посылки и приема данных соответственно. Наконец, закрытие соединения при использовании сокетов симметрично и может быть осуществлено как клиентом, так и сервером путем вызова примитива close. Вопрос №2 Рис. 1. Общая схема ориентированного на соединение взаимодействия с использованием сокетов