О. С. Попова Хіхловська І. В. Системне та прикладне програмне забезпечення у телекомунікаціях Конспект

Вид материалаКонспект
Типы соединения
Interface сокетов
Создание сокета
Подобный материал:
1   ...   6   7   8   9   10   11   12   13   14

Сокеты


Подход к межпроцессорным взаимодействием, как к технологии клиент/сервер. Позволяет использовать дисковое пространство, периферийные устройства, процессорное время и другие ресурсы по сети. Сетевые средства UNIX позволяют использовать интерфейс транспортного уровня TLI-Transport Level Interface сокетов, что значительно проще. Они обеспечивают связь между процессами на одном компьютере и на разных по сети. Целью сокетов является обеспечение средства межпроцессного взаимодействия для двунаправленного обмена сообщениями между двумя процессами независимо от того, находятся ли они на одном компьютере или на разных.

Типы соединения


При передаче данных по сети процессы могут выбрать один из двух способов связи. Процесс, которому нужно неформатированный, непрерывный поток символов одному и тому же абоненту, например, процессу удаленного входа в систему, может использовать модель соединения (connection oriented model) или виртуальное соединение. Для этого используется протокол ТСР. В других случаях, если процессу нужно разослать сообщения клиентам, не проверяя ее доставку, может использоваться модель датограмм по произвольным адресам через один и тот же сокет без предварительной установки связи с этими адресами. Для этого варианта используется протокол пользовательских дейтограмм ИДР.

Адресация


Для возможности связывания процессов по сети существует механизм определения сетевого адреса компьютера. На котором находится другой процесс. Этот адрес определяет физическое положение компьютера в сети. Адреса имеют иерархическую структуру, части которой соответствуют различным уровням сети.


Адресация Internet

Во всех глобальных сетях применима адресация IP, который состоит из 4-х десятичных чисел, разделенных точками:

292.108.11.15

Сетевые вызовы UNIX не могут работать с IP-адресами в таком формате. На программном уровне IP-адреса хранятся в структуре in_addar.t предназначена процедура inet_addr:

#include

in_addr_t inet_addr(const char *ip_address);

Процедура inet_addr принимает IP адрес в форме строки вида 1.2.3.4. и возвращает адрес в виде структуры соответствующего типа. Если неверное задание формата IP адреса, то возвращаемое значение будет равно (in_addr_t)-1, например, in_addr_t server;

Server = inet_addr(“192.168.11.15”);

Для того, чтобы процесс мог ссылаться на адрес своего компьютера, в заголовочном файле :# includeопределена постоянная INADDR_ANY, содержащая локальный адрес своего компьютера в формате in_addr_t.

Порты


Кроме адреса компьютера, клиентская программа должна иметь возможность подключения к нужному процессу. Серверный процесс ждет подключения к заданному номеру порта. Поэтому клиентский процесс должен выполнить запрос на подключение к определенному порту на заданном компьютере, т.е. дополнительно к номеру дома компьютера сообщить номер квартиры.

Для стандартных сервисов отводят известные номера портов по согласованию; dtr или rlogin.

Эти номера портов записаны в файле /exe/ services. Номера портов меньше 1024,считаются зарезервированными для системных процессов UNIX. Остальные доступны.

Interface сокетов

Для хранения информации об адресе и порте адресата существуют стандартная структуры. Обобщенная структура адреса сокета определяется в заголовочном файле ;struct sockaddr{

Sa_family_t safamily; /семейство адресов/

Char sa_data[ ]; /адрес сокета/

};

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

Сокеты для связи через сеть имеют следующую форму.

#include

struct sochadar_in{

sa_family_t sin_family; /семейство адресов/

in_port_t sin_port; /номер порта/

struct in_addr sin_addr; / IP адрес/

unsigned char sin_hero[8]; /поле выравнивания/

}


Создание сокета

При любых моделях связи клиент и сервер должны создать абонентские точки (transport end points), или сокеты, которые являются дескрипторами, использующими для установки связи между процессами в сети. Они создаются с помощью системного вызова socket.

#include

int socket(int domain, int type, int protocol);

Параметр domain определяет коммуникационный домен, в котором будет использоваться сокет. Домен AF_INET определяет , что будет использоваться домен INTERNET. Домен AF_UNIX используется при взаимодействии на одном ПК.

Параметр type определяет тип создаваемого сокета. Значение sock_sreah указывает на создание сокета для работы в режиме виртуальных соединений, а sock_dgram- для работы в режиме пересылок дейтограмм.

Параметр protocol определяет протокол, обычно он задается равным 0. По умолчанию sock_SIKEAM использует TCP, а socket dgram протокол и др.системный вызов sock возвращает неотрицательное целое число, которое является дескриптором файла сокета, т.е. является разновидностью обобщенного файла ввода/вывода UNIX.

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

Основные типы сокетов:
  1. Сокет дейтограмм, через который осуществляется теоретически ненадежная, несвязная передача пакетов;
  2. Сокет потока(stream socket),который осуществляет надежную передачу потока байтов без сохранения границ сообщений; обеспечивает передачу экстренных данных;
  3. Сокет пакетов, через который осуществляется надежная последовательная передача данных без дублирования с предварительным установлением связи; границы сообщений сохраняются;
  4. Сокет нужного уровня, через который осуществляется непосрелственный доступ к коммуникационному протоколу.

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