Управление ресурсами в ОС UNIX




Методические указания к лабораторной работе


Существует две модели взаимодействия между процессами в сети: модель соединений с протоколом TCP (Transmission Control Protocol), и модель дейтаграмм с протоколом UDP (User Datagram Protocol). В данной лабораторной работе используется первая из названных моделей.

Ниже приводятся основные шаги и необходимые системные вызовы для выполнения основных этапов при работе с сокетами в режиме TCP-соединения.

1. Адресация и создание сокета

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

  • обобщенный сокет (generic socket), определяется в файле <sys/socket.h>:
  • struct sockaddr {

    u_char sa_family; /* Семейство адресов (домен) */

    char sa_data[]; }; /* Адрес сокета */

  • Сокеты для связи через сеть, определяется в файле <netinet/in.h>:
  • struct sockaddr_in {

    u_char sin_len; /* Длина поля sockaddr_in (для FreeBSD) */

    u_char sin_family; /* Семейство адресов (домен) */

    u_short sin_port; /* Номер порта */

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

    char sin_zero[8]; }; /* Поле выравнивания */

    где struct in_addr {

    n_int32_t s_addr}.

    Создается сокет при помощи системного вызова socket().

    #include <sys/socket.h>

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

  • Параметр domain - домен связи, в котором будет использоваться сокет (значение AF_INET - для домена Internet (соединение через сеть), AF_UNIX - домен, если процессы находятся на одном и том же компьютере);
  • Параметр type определяет тип создаваемого сокета (значение SOCK_STREAM - для режима соединений, SOCK_DGRAM - для режима дейтаграмм);
  • Параметр protocol определяет используемый протокол (в случае protocol = 0 по умолчанию для сокета типа SOCK_STREAM будет использовать протокол TCP, а сокета типа SOCK_DGRAM - протокол UDP).
  • При программировании TCP-соединения должны быть созданы сокеты (системный вызов socket()) и в программе сервера и в программе клиента, при этом в обеих программах сокеты связываются с адресом машины, на которую будет установлена программа сервера. Но, если в программе сервера для определения IP-адреса в структуре сокета может быть использована переменная INADDR_ANY, то в программе клиента для занесения в структуру сокета IP-адреса машины сервера необходимо использовать системный вызов inet_addr().




    Содержание  Назад  Вперед