А. Робачевский - Операционная система UNIX (1114671), страница 52
Текст из файла (страница 52)
Если дляSystem V используютсяключи, то имена сокетов представлены адресами.Программный интерфейс сокетовИтак,являются коммуникационным интерфейсом взаимодействую!щих процессов. Конкретный характер взаимодействия зависит от типа ис!пользуемых сокетов, а коммуникационный домен, в рамках которого создансокет, определяет базовые свойства этого взаимодействия. В табл.
3.6 приве!дены типы сокетов и их названия.Таблица 3.6. Типы сокетов в системе BSD UNIXНазваниеТипSOCK_SEQPACKETСокет датаграммСокет потокаСокет пакетовСокет низкого уровняwww.books-shop.com266Глава 3.процессамиДля создания сокета процесс должен указать типи коммуникаци!онный домен, в рамках которого будет использоваться сокет. Посколькукоммуникационный домен может поддерживать использование несколькихпротоколов, процесс может также указать конкретный коммуникационныйпротокол для взаимодействия.
Если таковой не указан, система выберетнаиболее подходящий из списка протоколов, доступных для данного ком!муникационного домена. Если же в рамках указанного домена созданиесокета данного типа невозможно, т. е. отсутствует соответствующий ком!муникационный протокол, запрос процесса завершится неудачно.Для создания сокета используется системный вызовследующий вид:intимеющийdomain, int type,Здесь аргумент domain определяет коммуникационный домен, type — типсокета, a protocol — используемый протокол (может быть не указан, т. е.приравнен 0).
В случае успеха системный вызов возвращает положитель!ное целое число, аналогичное файловому дескриптору, которое служит дляадресации данного сокета в последующих вызовах.По существу коммуникационный домен определяет семейство протоколов(protocol family), допустимых в рамках данного домена. Возможные значе!ния аргумента domain включают:Домен локального межпроцессного взаимодействия в пределахединой операционной системы UNIX. Внутренние протоколы.Домен взаимодействия процессов удаленных систем. ПротоколыInternet (TCP/IP).Домен взаимодействия процессов удаленных систем. ПротоколыXerox NS.Поскольку домен и семейство протоколов определяют адресное простран!ство взаимодействия (допустимые адреса и их формат), то в названиях до!менов присутствует префикс AF (от address family — семейство адресов).Допустимыми также являются названия с префиксом PF (protocol family)PF UNIX, PFИ Т. Д.Посколькуявляютсячастью BSDв системах этой ветвифункции, связанные с этими объектами, в частности socket(2) и рассмотренные ниже,представляют собой системные вызовы.
В UNIX ветви System V интерфейс сокетов сохра!нен для совместимости, но имеет совершенно отличную от принятой в BSD архитектуру(основанную на подсистеме STREAMS). Поэтому все его функции являются библиотеч!ными и описываются, соответственно в разделе 3 электронного справочника. Однако, ос!тавляя пальму первенства в этом вопросе за BSD UNIX, в этом разделе будем считать этифункции системными вызовами и связывать с ними раздел 2 справочникаwww.books-shop.comВзаимодействие между процессами267Заметим, что домен может не поддерживать определенные типыДля сравнения в табл.
3.7 приведены два основных коммуникационныхдомена — внутренний домен UNIX, предназначенный для взаимодействияпроцессов одной операционной системы, и домен TCP/IP, используемыйв сетевых распределенных приложениях.Таблица 3.7. Поддержка различных типов сокетов в доменахДомен:AF UNIXТип сокетаSOCK STREAMДаДаSOCKДаSOCK SEQPACKETДаНетSOCK RAWНетДаНетТакже допустимы не все комбинации типа сокета и используемого комму!никационного протокола (если таковой явно указан в запросе).
Так длядомена AF_INET возможны следующие комбинации:СокетSOCK_STREAMПротокол(TCP)(UDP)(IP)Указанные протоколы принадлежат семейству сетевых протоколов TCP/IPи будут подробно рассмотрены в главе 6.Создание сокета не означает создания коммуникационного узла. Для одно!значной идентификации сокета его необходимо позиционировать в про!странстве имен данного коммуникационного домена.
В общем случае каж!дый коммуникационный канал определяется двумя узлами — источником иполучателем данных, и может быть охарактеризован пятью параметрами:1. Коммуникационным протоколом2. Локальным адресом3. Локальным процессом4. Удаленным адресом5. Удаленным процессомКак правило, адрес определяет операционную систему (или хост сети), апроцесс — конкретное приложение, получающее или передающее данные.Однако конкретные значения и формат этих параметров определяютсякоммуникационным доменом.www.books-shop.com268Глава 3.управления процессамиПоскольку при создании сокета указывается только один параметр —коммуникационный протокол, прежде чем передача данных между взаи!модействующими процессами станет возможной необходимо указать четы!ре дополнительных параметра для коммуникационного канала.
Очевидно,что взаимодействующие стороны должны делать это согласованно, исполь!зуя либо заранее определенные адреса, либо договариваясь о них в про!цессе установления связи. Процедура установки этих параметров сущест!венным образом зависит и от типа создаваемого канала, определяемоготипом используемого сокета и коммуникационного протокола.Иллюстрация взаимодействия между процессами при виртуальном комму!никационном канале с предварительным установлением связи приведенана рис. 3.21, а взаимодействие, основанное на датаграммах без установле!ния связи показано на рис. 3.22.Рис. 3.21.
Взаимодействие между процессами при создании виртуального канала (спредварительным установлением соединения)www.books-shop.comмежду процессами269Рис. 3.22. Взаимодействие между процессами, основанное на датаграммах (безпредварительного установления соединения)Как видно из рисунков, фактической передаче данных предшествует началь!ная фаза связывания (binding) сокета, когда устанавливается дополнительнаяинформация, необходимая для определения коммуникационного узла. Связы!вание может быть осуществлено с помощью системного вызоваint bind(int sockfd, struct sockaddr *localaddr, intЗдесь s o c k f d является дескриптором сокета, полученным при его созда!нии; аргументопределяет локальный адрес, с которым необхо!димо связать сокет; параметр addrlen определяет размер адреса.
Заметим,что речь идет о связывании с локальным адресом, в общем случае опреде!ляющим два параметра коммуникационного канала (коммуникационныйузел): локальный адрес и локальный процесс.Как уже обсуждалось, адрес сокета зависит от коммуникационного доме!на, в рамках которого он определен. В общем случае адрес определяетсяследующим образом (в файле <sys/socket.h>):Ⱦɚɧɧɚɹɜɟɪɫɢɹɤɧɢɝɢɜɵɩɭɳɟɧɚɷɥɟɤɬɪɨɧɧɵɦɢɡɞɚɬɟɥɶɫɬɜɨɦ%RRNVVKRSɊɚɫɩɪɨɫɬɪɚɧɟɧɢɟɩɪɨɞɚɠɚɩɟɪɟɡɚɩɢɫɶɞɚɧɧɨɣɤɧɢɝɢɢɥɢɟɟɱɚɫɬɟɣɁȺɉɊȿɓȿɇɕɈɜɫɟɯɧɚɪɭɲɟɧɢɹɯɩɪɨɫɶɛɚɫɨɨɛɳɚɬɶɩɨɚɞɪɟɫɭpiracy@books-shop.com270Глава 3.structуправления процессами{charПоле sa_family определяет коммуникационный домен (семейство прото!колов), a.— содержит собственно адрес, формат которого опреде!лен для каждого домена.Например, для внутреннего домена UNIX адрес выглядит следующим об!разом (определен вstruct sockaddr_un {shortchar/**/Поскольку в данном домене взаимодействующие процессы выполняютсяпод управлением одной операционной системы на одном и том же хосте,коммуникационный узел может быть однозначно определен одним пара!метром — локальным процессом.
В качестве адреса в домене UNIX ис!пользуются имена файлов.В отличие от локального межпроцессного взаимодействия, для сетевогообмена данными необходимо указание как локального процесса, так ихоста, на котором выполняется данный процесс. Для домена Internet (се!мейство протоколов TCP/IP) используется следующий формат адреса(определен в файле <netinet/in.h>):structshort{/* ==AF_INET */struct in_addrcharАдреса этого домена (IP!адреса) будут рассмотрены подробнее в главе 6.Пока лишь заметим, что адрес хоста представляет собой 32!разрядное це!лое число sin_addr, а процесс (приложение) адресуется 16!разряднымномером порта sin_port.На рис. 3.23 показаны рассмотренные форматы адресов сокетов.Итак, связывание необходимо для присвоения сокету локального адреса и,таким образом, для определения коммуникационного узла.
Можно выде!лить три случая использования для этого функции1. Сервер регистрирует свой адрес. Этот адрес должен быть заранее из!вестен клиентам, желающим "общаться" с сервером. Связывание необ!ходимо, прежде чем сервер будет готов к приему запросов от клиентов.2. При взаимодействии без предварительного установления связи и соз!дания виртуального канала клиент также должен предварительно за!www.books-shop.comрегистрировать свой адрес. Этот адрес должен быть уникальным врамках коммуникационного домена.
В случае домена UNIX об этомдолжно позаботиться само приложение. Этот адрес не должен быть за!ранее известен серверу, поскольку запрос всегда инициирует клиент,автоматически передавая вместе с ним свой адрес. Полученный адресудаленного узла затем используется сервером для мультиплексирова!ния сообщений, отправляемым различным клиентам.3.