Лабораторная работа №1 icon

Лабораторная работа №1


Смотрите также:
Изучение макрокоманд программы ms excel с выполнением контр...
Лабораторная работа №1...
Лабораторная работа №1. «Диоды в источниках питания»...
Лабораторная работа №1...
Лабораторная работа 9...
Лабораторная работа №4...
Лабораторная работа № топографические карты...
Лабораторная работа №1...
Контрольная работа Лабораторная работа №1 «Дольменная культура» Лабораторная работа №2 «Генуэзцы...
Лабораторная работа №1. Освоение приемов работы с электронными таблицами. 5...
Методические указания к лабораторным работам Лабораторная работа №1...
Методические указания к выполнению лабораторно-практических работ для студентов специальности 17...



Загрузка...
страницы: 1   2   3
вернуться в начало
скачать

Лабораторная работа № 3
^ Взаимодействие прикладных программ с помощью транспортных протоколов сети Интернет

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

^ Для выполнения лабораторной работы требуется написать программу, которая выполняется под управлением ОС типа Windows или UNIX и использует для взаимодействия с другими программами заданный протокол сети Интернет. Для разработки программы рекомендуется использовать среду Delphi версии 3.0 или старше под управлением ОС типа Windows 95/98 или Windows NT/2000.

Краткие теоретические сведения

Транспортный протокол TCP сети Internet

TCP (Transmission Control Protocol) - это один из самых широко распространенных протоколов транспортного уровня. Главная функция TCP заключается в доставке сообщений без потерь, чего не может гарантировать протокол более низкого уровня IP (Internet Protocol). Для доставки сообщений предварительно устанавливается соединение между процессом-отправителем и процессом-получателем. Данное соединение осуществляет надежную доставку дейтаграмм. Протокол TCP производит повторную передачу искаженного или утерянного пакета.

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

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

Процесс обмена данными начинается с передачи запроса на установление соединения от машины-отправителя к машине-получателю. В запросе содержится специальное целое число, называемое номером сокета (socket). В ответ получатель посылает номер своего сокета. Номера сокетов отправителя и получателя однозначно определяют соединение (конечно, соединение также не возможно без указания IP-адресов отправителя и получателя, но эта задача решается протоколами более низкого уровня - IP).

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

TCP на машине-получателе собирает целое сообщение из сегментов, руководствуясь порядковыми номерами сегментов, которые записаны в их заголовке. Если какой-то сегмент сообщения потерян или поврежден (что проверяется по контрольной сумме в заголовке сегмента), то отправителю посылается сообщение, содержащее номер ошибочного сегмента. В этом случае отправитель повторно передает сегмент. Если сегмент успешно принят, то получатель посылает отправителю подтверждение-квитанцию (ACK - acknowledgement).

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

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

Номера портов и сокеты

Приложение (процесс), использующее TCP однозначно определяется числом - номером порта (сокета). В принципе, номера портов можно назначать процессам произвольно, но для облегчения взаимодействия между различными программами прикладного уровня приняты соглашения о номерах портов, закрепленных за определенными службами Internet. Номера портов наиболее известных служб сети приведены в табл. 4.

Таблица 4Номера портов наиболее употребительных служб сети Internet

Номер порта

Служба сети

Описание

0




Зарезервирован

7

echo

Эхо-ответ на входящие сообщения

9

discard

Сброс (поглощение) всех входящих сообщений

11

users

Активные пользователи

13

daytime

Отклик, содержащий время дня

19

chargen

Генератор символов

20

ftp data

Передача данных по протоколу FTP

21

ftp

Передача управляющих команд по протоколу FTP

23

telnet

Порт подключения по протоколу TELNET

25

smtp

Протокол передачи почтовых сообщений SMTP

37

time

Отклик, содержащий время

42

name

Сервер имен

43

whois

Кто это

53

domain

Сервер имен доменов

67

boots

Протокол удаленной загрузки сервера

68

bootc

Протокол удаленной загрузки клиента

69

tftp

Упрощенный протокол передачи файлов TFTP

79

finger

Протокол получения информации о пользователях FINGER

80

http

Протокол передачи гипертекста HTTP

109

pop2

Протокол почтового ящика POP2

110

pop3

Протокол почтового ящика POP3

111

rpc

Протокол удаленного вызова процедур RPC

156

sqlserv

Служба SQL

161

snmp

Управляющий протокол SNMP

В формате сообщения протокола TCP под номер порта отводится 16 бит, поэтому максимально возможным номером порта является число 65535. Номера портов от 0 до 255 строго зарезервированы под системные нужды, их не допускается использовать в прикладных программах. В интервале от 256 до 1023 многие порты также используются сетевыми службами, поэтому и их не рекомендуется применять для прикладных нужд. Как правило, большинство прикладных приложений, построенных на основе TCP/IP используют номера портов в диапазоне от 1024 до 5000. Рекомендуется использовать номера от 3000 до 5000, номера выше 5000 используются чаще всего для краткосрочного применения.

Любой канал связи в TCP определяется двумя числами - эта комбинация называется сокетом. Таким образом, сокет определяется IP-адресом ЭВМ и номером порта, используемым программным обеспечением TCP. При соединении любая машина однозначно определена IP-адресом, а каждый процесс - портом, поэтому соединение между двумя процессами однозначно определяется сокетом. Схема установления соединения по протоколу TCP между тремя ЭВМ в сети отражена на рис. 6.

Взаимодействующие ЭВМ ведут таблицы всех активных портов отправителей и получателей. Если между двумя машинами происходит обмен данными, то порт, который в одной из них является отправителем, в другой будет получателем и наоборот. Если машина отправитель запрашивает несколько соединений, то у каждого из них свой порт-отправитель, а порт получателя может быть общим. Несколько машин могут одновременно использовать один и тот же порт получатель, это называется мультиплексированием. На рис. 6 мультиплексирование двух соединений выполняется на ЭВМ 3 по порту номер 23.

Когда устанавливается несколько соединений, то может случиться, что несколько машин пошлют запросы на соединение, в которых указаны одинаковые порты источники и получатели, Однако путаницы с соединениями не возникает, потому что IP-адреса у всех машин разные, следовательно, каждое соединение будет однозначно определено своим сокетом.

Протокол передачи сообщений UDP

Протокол UDP (User Datagram Protocol) является более простым транспортным протоколом, чем протокол TCP. Он предоставляет прикладным процессам услуги транспортного уровня, которые мало чем отличаются от услуг более низкого уровня, предоставляемых протоколом IP. Протокол UDP обеспечивает доставку дейтаграмм, но не требует подтверждения их получения. Поэтому он не требует установления соединения между передающим и принимающим процессами.

Протокол UDP используется в тех случаях, когда требуется передать данные без установления соединения. Такая связь в принципе не надежна, так как отправителю не сообщается, правильно ли принято его сообщение и получено ли оно вообще. Для проверки возникновения ошибок может использоваться контрольная сумма пакета, но ошибки никак не обрабатываются - они либо игнорируются, либо их обработка выполняется уже на более высоком, прикладном уровне.

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

Протокол UDP используется тогда, когда требуется простейший механизм передачи данных. Тогда контроль ошибок либо не выполняется (например, в прикладном протоколе TFTP - Trivial File Transfer Protocol - простейший протокол передачи файлов), либо выполняется на прикладном уровне (например, в управляющем протоколе SNMP - Simple Network Management Protocol или в файловой системе NFS - Network File System).

Программирование обмена данными на основе транспортных протоколов

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

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

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

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

Программный интерфейс сокетов был разработан для ОС UNIX. Библиотека функций, поддерживающих этот интерфейс, входит в ядро всех ОС типа UNIX и Linux. Однако принципы работы с этим программным интерфейсом применимы к большинству ОС, поддерживающих TCP/IP (например, в семействе ОС и оболочек типа Windows программный интерфейс сокетов реализован в динамической библиотеке Winsock.dll).

Для протокола TCP пассивное (на стороне сервера) соединение с сокетом приводит к выполнению следующих функций:

  • создание сокета и установление его типа (в ОС типа UNIX функция socket);

  • настройка сокета на конкретное соединение (указывает адрес и номер порта - в ОС типа UNIX - функция bind);

  • создание очередь клиентов (в ОС типа UNIX - функция listen);

  • ожидание приходящего запроса на соединение с сокетом (в ОС типа UNIX - функция accept);

  • прием и передача данных от клиента (в ОС типа UNIX - функции read, write, send, recv и их модификации);

  • закрытие соединения с клиентом (в ОС типа UNIX - функция close).

Получив входящий запрос на соединение, сервер должен решать как бы две задачи одновременно: обслуживать уже установленное с клиентом соединение в соответствии с прикладным протоколом (принимать и отдавать данные клиенту) и ожидать поступления новых запросов на соединение от других клиентов. Обычно в развитых ОС (а сюда подпадают все современные ОС за исключением, разве что, MS DOS) эта проблема решается за счет возможностей параллельного выполнения нескольких процессов. Сервер может породить новый процесс (или новую цепочку выполнения - thread), который и должен будет заняться обслуживанием уже установленного соединения, а сам основной процесс сервера может закрыть текущее соединение и вновь вернуться к ожиданию запросов на соединение от других клиентов. В ОС типа UNIX создание нового процесса решается с помощью функции fork, при этом за вновь созданным процессом сохраняются все соединения, сделанные в основном процессе.

Для протокола TCP активное (на стороне клиента) соединение с сокетом приводит к выполнению следующих функций:

  • создание сокета и установление его типа (в ОС типа UNIX функция socket);

  • установление соединения с сервером (указывает адрес и номер порта - в ОС типа UNIX - функция connect);

  • прием и передача данных (в ОС типа UNIX - функции read, write, send, recv и их модификации);

  • закрытие соединения с сервером (в ОС типа UNIX - функция close).

Клиент, как правило, не требует для своей работы параллельного выполнения нескольких процессов.

В среде программирования Borland Delphi существуют специальные классы, которые позволяют выполнять все те же действия, что и библиотека сокетов в ОС UNIX. Они взаимодействуют с библиотекой Winsock.dll на основе специальных технологий ОС (ActiveX технологии и COM-объекты). В среде Borland Delphi версии 3.0 для целей клиентского и серверного соединений служит класс объектов TTCP; а в среде Borland Delphi версии 5.0 для клиентского соединения существует класс объектов TClientSocket, а для серверного - TServerSocket. Естественно, пользователь может на основе базовых классов разрабатывать свои собственные классы, которые будут поддерживать соединения по определенным им самим прикладным протоколам.

Для того, чтобы создать сокет, достаточно создать экземпляр объекта выбранного класса (TTCP - в среде Borland Delphi версии 3.0 на страничке компонент "Internet", TClientSocket или TServerSocket - в среде Borland Delphi версии 5.0 также на страничке компонент " Internet"). Это можно выполнить при проектировании приложения в среде разработки или же средствами языка программирования при выполнении приложения. Чтобы специфицировать (настроить) сокет необходимо созданному экземпляру объекта присвоить нужные значения в указанные свойства (properties) - как правило, это свойства с именами вида "Port" и "Host" (имена и состав свойств зависят от версии среды разработки). Это тоже можно сделать как в режиме проектирования приложения, так и командами присвоения свойств объекта в тексте программы. После этого сокет инициализирован и с ним можно работать.

Для работы сокета клиента необходимо открыть сокет (процедура ^ Open), затем использовать процедуры установления соединения, передачи и приема данных, а в конце работы закрыть сокет (процедура Close). При удалении экземпляра объекта автоматически прекратит существование и связанный с ним сокет.

Для работы сокета сервера после его создания надо вызвать процедуру ожидания соединения. При этом по установлению соединения наступит событие, которое программист должен соответствующим образом обработать. В среде Borland Delphi версии 3.0 программист сам должен создавать потоки выполнения для обслуживания соединения (для выполнения потоков служат экземпляры класса объектов TThread), а в среде Borland Delphi версии 5.0 это можно сделать в автоматическом или полуавтоматическом режиме. После окончательного завершения работы сокет сервера следует закрыть. При удалении экземпляра объекта автоматически прекратит существование и связанный с ним сокет.

Более подробную информацию о функциях программного интерфейса с сокетами можно получить в специальной литературе.

Порядок выполнения работы

    1. Получить вариант задания у преподавателя.

    2. Разработать прикладную программу в соответствии с заданием.

    3. Подготовить и защитить отчет.

    4. Написать и отладить программу на ЭВМ.

    5. Сдать работающую программу преподавателю.

Требования к оформлению отчета

Отчет должен содержать следующие разделы:

  • Задание по лабораторной работе.

  • Описание алгоритма взаимодействия прикладной программы с внешним миром на основе заданного протокола.

  • Перечень используемых классов, их свойств и функций ОС или среды разработки для организации протокола взаимодействия.

  • Текст программы (оформляется после выполнения программы на ЭВМ).

  • Выводы по проделанной работе.

Основные контрольные вопросы

  1. Какую роль выполняет транспортный протокол TCP в сети Internet ? Расскажите о назначении протоколов транспортного уровня.

  2. Расскажите, как происходит передача сообщения в сети Internet по протоколу TCP.

  3. Что такое скользящее окно ? Расскажите о принципах работы протокола TCP со скользящим окном сегментов сообщения.

  4. Что такое сокет ? Какие параметры протокола TCP позволяют однозначно идентифицировать каждое соединение ?

  5. На основе каких принципов выбираются номера портов для прикладных программ в сети Internet ? Перечислите номера портов наиболее употребительных прикладных служб сети.

  6. Объясните, как соответствуют друг другу номера портов отправителя и получателя при соединении между двумя ЭВМ по протоколу TCP. Что такое мультиплексирование портов ?

  7. Расскажите о принципах работы протокола передачи сообщений UDP. В чем его отличие от протокола TCP ?

  8. Для каких целей служат утилиты ping и traceroute ? Расскажите о принципах их работы.

  9. Что такое активное и пассивное соединение. В чем их отличие ?

  10. Расскажите, какую типовую последовательность действий надо выполнить для установления пассивного соединения.

  11. Расскажите, какую типовую последовательность действий надо выполнить для установления активного соединения.

  12. Как реализованы функции работы с сокетами в библиотеке под ОС типа UNIX ?

  13. Как реализованы функции работы с сокетами в среде разработки Borland Delphi ?

ТИПОВЫЕ варианты заданий

  1. Написать программу, которая будет доступать на произвольный сервер, устанавливать соединение по указанному преподавателем номеру порта, считывать требуемое количество символов и выводить их на экран локальной машины.

  2. Написать программу, которая будет доступать на произвольный сервер, устанавливать соединение по указанному преподавателем номеру порта, передавать на сервер произвольную строку, ждать отклик сервера и выводить его на экран локальной машины.

  3. Написать серверную программу, которая будет ожидать соединения по указанному преподавателем порту, а после установления соединения передавать клиенту строку, содержащую время дня и текущую дату.

  4. Написать серверную программу, которая будет ожидать соединения по указанному преподавателем порту, а после установления соединения передавать клиенту строку, прочитанную из произвольного файла.

  5. Написать серверную программу, которая будет ожидать соединения по указанному преподавателем порту, после установления соединения ожидать от клиента определенную строку символов, и после ее получения разрывать соединение.

  6. Написать серверную программу, которая будет ожидать соединения по указанному преподавателем порту, после установления соединения ожидать от клиента произвольную строку символов, и, получив строку, возвращать ее клиенту.










Скачать 475.27 Kb.
оставить комментарий
страница3/3
Дата29.09.2011
Размер475.27 Kb.
ТипЛабораторная работа, Образовательные материалы
Добавить документ в свой блог или на сайт

страницы: 1   2   3
отлично
  1
Ваша оценка:
Разместите кнопку на своём сайте или блоге:
rudocs.exdat.com

Загрузка...
База данных защищена авторским правом ©exdat 2000-2017
При копировании материала укажите ссылку
обратиться к администрации
Анализ
Справочники
Сценарии
Рефераты
Курсовые работы
Авторефераты
Программы
Методички
Документы
Понятия

опубликовать
Загрузка...
Документы

Рейтинг@Mail.ru
наверх