ГлавнаяarrowСистемное программированиеarrow14. Взаимодействие через сокеты

14. Взаимодействие через сокеты

В настоящее время пользователями и разработчиками часто используются сетевые среды, предоставляющие возможности технологии клиент/сервер. Такой подход позволяет совместно использовать данные, диско­вое пространство, периферийные устройства, процессорное время и другие ресур­сы. Работа в сетевой среде по технологии клиент/сервер предполагает взаимодей­ствие процессов, находящихся на клиентских и серверных системах, разделенных средой передачи данных.
Работа будет посвящена краткому ознакомлению с основными понятиями и средствами работы с сокетами.
Если процессам нужно передать данные по сети, они могут выбрать для этого один из двух способов связи. Процесс, которому нужно посылать неформатирован­ный, непрерывный поток символов одному и тому же абоненту может использовать модель соединения или виртуальное соединение. В других же случаях процесс может использовать модель дейтаграмм. При этом процесс может посылать сообщения (дейтаграммы) по произвольным адресам через один и тот же сокет без предварительного уста­новления связи с этими адресами. Термин дейтаграмма (datagram) обозначает пакет пользовательского сообщения, посылаемый через сеть.
Модель соединений будет более подходящей при необходимости получения тесного взаимодействия между системами, когда обмен сообщениями и подтверждениями происходит в определенном порядке. Модель без соединений является более эффективной и лучше подходит в таких случаях, как рассылка широковещательных сообщений большому числу компьютеров.
Для модели соединений используется протокол управления передачей (Transmission Control Protocol, сокращенно TCP), а для модели дейтаграмм - про­токол пользовательских дейтаграмм (User Datagram Protocol, сокращенно UDP).
Чтобы процессы могли связаться по сети, должен существовать механизм опре­деления сетевого адреса (network address) компьютера, на котором находится дру­гой процесс. Адрес определяет физическое положение компьюте­ра в сети. Обычно адреса состоят из нескольких частей, соответствующих различным уровням сети. Сейчас почти во всех глобальных сетях применима адресация IP (сокращение от Internet Protocol - межсетевой протокол, протокол сети Internet). Адрес IP состоит из четырех десятичных чисел, разделенных точками (например, 197.124.10.1). Эти четыре числа содержат достаточную информацию для определения сети назначения, а также компьютера в этой сети.
Сетевые вызовы UNIX не могут работать с IP адресами в таком формате. На программном уровне IP адреса хранятся в структуре типа in_addr_t. Обычно программистам не нужно знать внутреннее представление этого типа, так как для преобразования IP адреса в структуру типа in_addr_t предназначена процедура inet_addr.
Процедура inet_addr принимает IP адрес в форме строки вида х.х.х.х и воз­вращает адрес в виде структуры соответствующего типа. Если вызов процедуры завершается неудачей, то возвращаемое значе­ние будет равно -1.
Кроме адреса компьютера, клиентская программа должна иметь возможность подключения к нужному серверному процессу. Серверный процесс ждет подключе­ния к заданному номеру порта (port number). Поэтому клиентский процесс должен выполнить запрос на подключение к определенному порту на заданном компьюте­ре.
Некоторые номера портов по соглашению считаются отведенными для стан­дартных сервисов, таких как ftp или rlogin. В общем случае порты с номерами, меньшими 1024, считаются зарезервированными для системных процессов UNIX. Все остальные порты дос­тупны для пользовательских процессов.
В дей­ствительности применяются различные типы сокетов в зависимости от того, ис­пользуются ли они в качестве средства межпроцессного взаимодействия на од­ном и том же компьютере или для связи процессов через сеть. При любых моделях связи клиент и сервер должны создать абонентские точ­ки (transport end points), или сокеты, которые являются дескрипторами, исполь­зуемыми для установки связи между процессами в сети. Они создаются при по­мощи системного вызова socket.
Системный вызов socket обычно возвращает неотрицательное целое число, которое является дескриптором файла сокета, что позволяет считать механизм сокетов разновидностью обобщенного файлового ввода/вывода UNIX.

Стек протоколов TCP/IP



TCP/IP (Transmission Control Protocol/Internet Protocol) представляет собой семейство протоколов, основным назначением которых является обеспечение возможности полезного сосуществования компьютерных сетей, основанных на разных технологиях. В 1969 году Агентство перспективных исследовательских проектов министерства обороны США (DARPA - Department of Defense Advanced Research Project Agency) поддержало и финансировало проект, посвященный поиску общей основы связи сетей с разной технологией. В результате выполнения этого проекта была образована единая виртуальная сеть, получившая название Internet. В Internet для связи независимых сетей, или доменов используется набор шлюзов. Каждый индивидуальный узел сети (Host) идентифицируется уникальным адресом, называемым адресом в Internet.
Для разрешения проблемы различий в форматах кадров, используемых в разных сетях, был определен универсальный формат пакета данных, называемого IP-датаграммой (Internet Protocol Datagram), состоящего из заголовка и порции данных и поэтому похожего на обычный сетевой кадр. Однако порция данных IP-датаграммы сама содержится внутри сетевого кадра, т.е. IP-датаграмма погружается в сетевой кадр конкретного формата и поэтому может передаваться в разных сетях, входящих в Internet. Все узлы, шлюзы и сети Internet должны быть в состоянии понимать IP-датаграммы.
Узлы, взаимодействующие в Internet, не устанавливают между собой физические соединения для целей индивидуального взаимодействия. Поэтому датаграммы не обрабатываются в каком-либо конкретном порядке. Напротив, каждая датаграмма обрабатывается независимо от других, что позволяет эффективно разделять ресурсы для всего множества (логически) связанных узлов. Но это, к сожалению, означает, что сервис, предоставляемый Internet, не является надежным, поскольку не гарантирует доставку пакетов в нужном порядке, отсутствие потерь датаграмм или отсутствие их дублирования.
 

Hosted by uCoz