Cервис с соединением и сервис без соединения

Уровни могут предоставлять вышележащим два вида сервисов: сервис с соединением и сервис без соединения.

Сервис с соединением предполагает, что между получателем и отправителем сначала устанавливается соединение, и только потом доставляется сервис. Пример - телефонная сеть.

Сервис без соединениядействует подобнопочтовой службе. Каждое сообщение имеет адрес получателя. В надлежащих точках оно маршрутизируется по нужному маршруту. Независимо от других сообщений. При таком сервисе вполне возможно, что сообщение позже посланное придет раньше. В сервисе с соединением - это невозможно.

Любой сервис характеризуется качеством. Например, надежный сервис, гарантирующий доставку данных без потерь, предполагает подтверждение получения каждого сообщения. Несомненно, это требует определенных накладных расходов. Это - плата за качество. Пример надежного сервиса с соединением - передача файлов. Ясно, что вряд ли кто-то рискнет передавать файл, пусть даже быстрее, при возможности потерять часть битов или нарушить их порядок.

Надежный сервис с соединением имеет две разновидности: последовательность сообщений и поток байтов. В первом случае четко различаются границы каждого сообщения. Если было послано два сообщения по 1МВ, то получено будет два сообщения по 1МВ. Ни при каких условиях у получателя не окажется одно сообщение в 2МВ.

В случае потока байтов, получатель получит 2МВ. У него нет способа распознать, то ли это 2 сообщения по 1МВ, 1 в 2МВ и 2048 по 1 байту.

Если мы захотим передать книгу на фотонаборное устройство, то нам надо проследить, чтобы каждая страница имела четкие границы. В то же время, для поддержки соединения между терминалом и сервером в режиме командной строки - потока байтов вполне достаточно. Для некоторых приложений задержки из-за уведомления получения данных неприемлемы. Примерами таких приложений являются - цифровая, телефонная связь, цифровые видео конференции. При телефонном разговоре, люди готовы смириться с шумом на линии, искажениями слов, но паузы из-за уведомлений будут просто не приемлемы. Аналогично, при видео конференции или передаче видео фильма. Небольшие дефекты картинки допустимы, но подергивание экрана из-за уведомлений будет раздражать зрителя.

Пример приложения, не требующего соединения, - электронная почта. Вряд ли отправитель второстепенного сообщения захочет ждать установки и разрыва соединения, чтобы передать второстепенное сообщение. Ему вряд ли требуется стопроцентная гарантия доставки, особенно, если это связано с увеличением стоимости. Все, что ему нужно - простой способ передать сообщение, которое с большой вероятностью будет принято, но без всяких гарантий. Ненадежный сервис (т.е. без уведомления) часто называют дейтаграммным (datagramm), по аналогии с телеграммным без уведомления. Однако, для тех приложений, где необходима гарантия доставки даже небольшого сообщения, используется datаgramm сервис с подтверждением, подобно телеграмме с уведомлением о получении.

Другой разновидностью дейтаграммного сервиса является запрос-ответ сервис. Он типичен для взаимодействия между клиентами и сервером.

Рис. 1-13.

Примитивы сервиса

 

Сервис формально определяет набор примитивных операций (или примитивов), с помощью которых пользователь или какая-либо активность получает доступ к сервису.

Эти примитивы сообщают сервису о необходимости выполнить некоторое действие или сообщить о действии, выполненном равнозначной активностью. Один из способов классифицировать примитивы сервиса - разделить их на четыре класса.

Рис. 1-14.

Для иллюстрации работы примитивов рассмотрим, как соединение устанавливается и разрывается. Сначала активность выполняет CONNECT.request, в результате чего в сеть выпускается пакет. Получатель получает CONNECT.indication, указывающий на то, что с ним хотят установить соединение. В ответ получатель через примитив CONNECT.response сообщает, готов ли он установить соединение или отказывает в установлении соединения. В результате, активность - инициатор установления соединения получает ответ, чего следует ожидать через примитив CONNECT.confirm.

Большинство примитивов имеет параметры. Параметры примитива CONNECT.request определяют машину соединения, желаемый тип обслуживания и максимальный размер сообщения, допустимый для данного соединения. Параметры примитива CONNECT.indication указывают, кто обратился, желаемый уровень обслуживания, предлагаемый размер сообщений. Если активность, к которой обратились, не согласна, например, с предлагаемым размером сообщений, то она предлагает свой размер через response, который становится известным активности, добивающейся соединения, через примитив confirm. Подробности этих переговоров- существо протокола. Например, в случае конфликта при установлении максимального размера сообщения, протокол может установить, что выбирается наименьший из предложенных. Услуга может быть либо с подтверждением, либо без подтверждения. При услуге с подтверждением, действуют все четыре примитива request, indication, response, confirm. При услуге без подтверждения, используются только два примитива request и indication.

Услуга CONNECT обязательно должна быть с подтверждением. Услуга DATA_TRANSFER может быть как с подтверждением, так и без, в зависимости от того, нужно отправителю уведомление или нет. Оба вида услуг используется в сетях.

Продемонстрируем концепцию услуг на следующем примере простых услуг с соединением со следующими 8-ю примитивами:

 

1. CONNECT.request - запрос на установление соединения.

2. CONNECT.indication - сигнал для удаленной активности.

3. CONNECT.response - используется удаленной активностью для

` согласия/несогласия на соединение.

4. CONNECT.confirm - cообщает активности, инициирующей

соединение, принято оно или нет.

5. DATA.request - запрос на передачу данных.

6. DATA.indication - сигнал поступления данных.

7. DISCONNECT.request - запрос на разрыв соединения.

8. DISCONNECT.indication - сигнал равнозначной активности о запросе.

 

В этом примере CONNECT - услуга без подтверждения. Продемонстрируем этот пример следующей аналогией.

 

1. CONNECT.request - Вы набираете номер друга.

2. CONNECT.indication - Он слышит звонок.

3. CONNECT.response - Он берет трубку.

4. CONNECT.confirm - Вы слышите, что гудки прекратились.

5. DATA.request - Вы предлагаете ему встретиться.

6. DATA.indication - Он слышит Ваше приглашение.

7. DATArequest - Он говорит, что согласен.

8. DATA.indication - Вы слышите его ответ.

9. DISCONNECT.request - Он кладет трубку.

10. DISCONNECT.indication - Вы слышите, что он положил трубку и кладете

трубку.

На рис. 1-15 показана эта последовательность действий. На этом рисунке Вы и Ваш друг - уровень n+1 - пользователи услуг, а уровень n - телефонная компания - поставщик услуг.