Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Адресация хостов и принципы их взаимодействия.doc
Скачиваний:
19
Добавлен:
17.06.2016
Размер:
83.97 Кб
Скачать

Разработка сетевых приложений

Для разработки сетевых программ, осуществляющих удаленную обработку операндов и обмен сообщениями по технологии “клиент-сервер0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000”, используется прикладной программный интерфейс сокетов (Sockets API). Данный интерфейс предоставляет программисту набор функций, которые обеспечивают идентификацию конечных точек соединения (сокетов), установку соединения, отправку сообщений, ожидание входящих сообщений, разрыв соединения и обработку ошибок. Выбор конкретного программного интерфейса сокетов (Sockets API) зависит от используемого языка программирования и операционной системы.

К функциям интерфейса сокетов можно обращаться из программ, написанных на языках C, C++, Pascal, VBasic. Наиболее распространенными являются два интерфейса: сокеты Беркли (OSUNIX) и интерфейсWINSockAPI(OSWindows).

Сокеты – это конечные точки связи. Пара сокетов представляет соединение между двумя взаимодействующими вычислительными системами. Соединение задается парой IP-адресов и парой номеров портов. Порт идентифицирует (отождествляет) адресуемый процесс в хосте. Например, сокет 192.168.1.20:80 обозначает TCP-порт 80 веб сервера на хосте 192.168.1.20. Порт 80 служит для идентификации пользовательского процесса, соответствующего протоколуHTTP. Пара сокетов с помощью пары IP-адресов и пары номеров портов идентифицирует отправителя и получателя.

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

Клиентские приложения ”пытаются” установить соединение с сервером, а после удачной попытки начинается обмен по заданному протоколу, например , TCP. По завершении сеанса связи клиент разрывает соединение.

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

Сервер Клиент

socket()socket()

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

bind()bind()

Привязка сокета к адресу Привязка сокета к адресу

Далее по инициативе клиента устанавливается между

listen() взаимодействующими процессамиTCP-соединение. Для

Переключение сокета в режим этого с помощью функции connect() выполняется трех-

прослушивания (приема) порта этапное согласование порядка обмена последовательнос-

тями данных. Блок данных для TCPназывают сегментом.

На этапе1 клиент посылает серверу сегмент с установлен-

ным флагом SYN. Заголовок сегмента содержит началь-

ный номер последовательности клиента, т. е. номер перво-

го байта данных. На этапе 2 сервер подтверждает получе-

ние сегмента с флагом SYN. Для этого сервер отправляет

клиенту сегмент с установленными флагом SYNи флагом

подтверждения ACK. Т. е. отправляет номер последователь-

ности сервера и увеличенный на 1 полученный номер пос-

ледовательности клиента. На этапе 3 клиент, получив сег-

мент с флагом ACK, тоже посылает серверу сегмент с фла-

гом ACK.

accept()connect()

Ожидание соединения Установление соединения

send()/recv() <<<< >>>> send()/recv()

Отправка/принятие пакета Отправка/принятие пакета

closesocket() closesocket()

Закрытие сокета Закрытие сокета

Этапы установления TCP-соединения можно описать еще следующим образом:

сторона инициатор посылает запрос к протоколу TCP на открытие порта для передачи (active open);

после открытия порта протокол TCP на стороне процесса инициатора посылает запрос к процессу, с которым требуется установить соединение;

протокол TCPна приемной сторонеоткрывает портдля приемаданных (passiveopen) ивозвращаетквитанцию, подтверждающую прием запроса;

протоколTCPна приемной стороне такжеоткрывает порт для передачиданных (activeport) ипередает запроск противоположной стороне для организации передачи данных в обе стороны;

сторона инициатор открывает порт для приема и возвращает квитанцию, подтверждающую прием запроса.

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