Методические указания по выполнению лабораторного практикума дисциплина Сети эвм и телекоммуникации
Скачать 389.91 Kb.
|
3.8 Справочные данные Основные свойства компонента ServerSocket: Active – инициализирует соединение (открывает для прослушивания socket) ; Name – имя экземпляра класса для использования в программе; Port – номер порта, на котором ведется прослушивание входящих соедине- ний. Основные события компонента ServerSocket: OnAccept – зафиксировано входящее соединение; OnClientConnect – установлено соединение с клиентом; OnClientDisconnect – разорвано соединение с клиентом; OnClientError – ошибка при работе с клиентом; OnClientRead – чтение данных, получаемых от клиента, только в этом со- бытии разрешается принимать данные от клиента; OnClientWrite – запись данных, передаваемых клиенту, только в этом со- бытии разрешается передавать данные клиенту; OnListen – сервер успешно проинициализирован для прослушивания socket. 38 Основные свойства компонента ClientSocket: Active – инициализирует соединение; Host – IP-адрес сервера, с которым устанавливается соединение; Name – имя экземпляра класса для использования в программе; Port – номер порта, на котором производится соединение с сервером. Основные события компонента ClientSocket: OnConnect – установлено соединение с сервером; OnDisconnect – разорвано соединение с сервером; OnError – ошибка при работе с сервером; OnRead – чтение данных, получаемых от сервера, только в этом собы- тии разрешается принимать данные от сервера; OnWrite – запись данных, передаваемых серверу, только в этом собы- тии разрешается передавать данные серверу. Основные методы класса CustomWinSocket: ReceiveText – принимает данные в виде строки символов; SendText – отправляет данные в виде строки символов. 3.9 Контрольные вопросы 1. Назначение протокола TCP и принцип его работы. 2. Назначение протокола UDP и принцип его работы. 3. Назовите отличия протоколов TCP и UDP. 4. С какой целью используются порты? 5. В чем заключается сущность мультиплексирования и демультиплекси- рования? 6. Поясните сущность понятия «логическое соединение». Каким образом оно определяется в сети? 7. Поясните сущность активного режима работы сетевого приложения. 8. Поясните сущность пассивного режима работы сетевого приложения. 39 4 Взаимодействие прикладных программ с помощью протокола электронной почты SMTP Цель работы: изучение принципов организации взаимодействия приклад- ных программ с помощью протокола электронной почты SMTP и приобретение практических навыков создания клиентских почтовых приложений, исполь- зующих протокол SMTP. Необходимое оборудование: IBM PC-совместимый компьютер, подклю- ченный к глобальной сети Internet, с установленным программным обеспечени- ем Borland Delphi версии 5.0 и выше. 4.1 Модель протокола, команды и коды ответов SMTP Для передачи сообщений по TCP-соединению большинство почтовых агентов пользуются протоколом SMTP (Simple Mail Transfer Protocol – простой протокол электронной почты). SMTP принят в качестве стандартного метода передачи электронной почты в сети Internet. В качестве транспортного протокола SMTP использует TCP, со- единение устанавливается через порт с номером 25. Для обслуживания этого соединения используется специальная программа, которая именуется почтовым сервером. Для формирования сообщения и установления соединения использу- ется почтовая программа (утилита) пользователя. Главной целью протокола SMTP является надежная и эффективная достав- ка электронных почтовых сообщений. Для реализации протокола требуется только надежный канал связи. Средой для SMTP может служить отдельная ло- кальная сеть, система сетей или же вся всемирная сеть Internet. Если между от- правителем и получателем письма имеется непосредственная связь, адрес поль- зователя имеет вид имя_пользователя@адрес_ЭВМ. Когда получатель нахо- дится на ЭВМ, которая не поддерживает соединение по протоколу SMTP, и передача происходит через промежуточный сервер, то адрес получателя письма может иметь иной вид, например: имя_пользователя%имя_сервера@адрес_ЭВМ. 40 Адреса ЭВМ в сети Internet представляют собой имя домена и преобразу- ются в IP-адреса согласно протоколу DNS. Протокол SMTP базируется на следующей модели коммуникаций: в ответ на запрос пользователя почтовая программа-отправитель сообщения устанав- ливает двустороннюю связь с программой-приемником (почтовым сервером). Получателем может быть оконечный или промежуточный адресат. Если необ- ходимо, почтовый сервер может установить соединение с другим сервером и передать сообщение дальше. SMTP-команды генерируются отправителем и по- сылаются получателю. На каждую команду должен быть получен отклик. Перечень команд протокола SMTP, определенный спецификацией RFC 821, приведен в таблице 4.1. Это внутренние команды протокола. Если пользователь использует для работы с электронной почтой некоторую утилиту, то эти команды ему недоступны. Они представляют интерес только при про- граммировании взаимодействия программ на основе этого протокола. В соответствии со спецификацией, помеченные крестиком команды обя- заны присутствовать в любой реализации SMTP. Остальные команды SMTP могут быть реализованы дополнительно. Каждая SMTP-команда должна закан- чиваться либо пробелом (если у нее есть аргумент), либо комбинацией CRLF (Carriage-Return, Line-Feed – возврат каретки, перевод строки; коды ASCII – 13 и 10 соответственно). В описании команд употребляется слово <данные>, а не <сообщение>. Этим подчеркивается, что, кроме текста, SMTP позволяет пере- давать и двоичную информацию, например, графические или звуковые файлы. Команды состоят из ключевых слов, за которыми следует один или более параметров. Ключевое слово состоит из 4-х символов и отделено от аргумента одним или несколькими пробелами. Каждая командная строка заканчивается символами CRLF. Синтаксис команд протокола SMTP приведен в пункте 4.6 «Справочные данные». В спецификации SMTP требуется, чтобы сервер отвечал на каждую коман- ду SMTP-клиента. Сервер отвечает трехзначной комбинацией цифр, называе- 41 мой кодом ответа. Вместе с кодом ответа, как правило, передается одна или не- сколько строк текстовой информации. Примечание: Несколько строк текста, как правило, сопровождают только команды EXPN и HELP. В спецификации SMTP, однако, ответ на любую ко- манду может состоять из нескольких строк текста. Каждая цифра в коде ответа имеет определенный смысл. Первая цифра оз- начает, было ли выполнение команды успешным (2), неуспешным (5) или еще не закончилось (3). Как указано в приложении Е документа RFC 821, простой SMTP-клиент может анализировать только первую цифру в ответе сервера и на основании ее продолжать свои действия. Вторая и третья цифры кода ответа разъясняют значение первой. В лабораторной работе допускается не анализи- ровать коды ответов. Можно использовать готовые коды, определенные RFC 821 и приведенные в пункте 4.6 «Справочные данные». Через систему электронной почты передаются сообщения, которые долж- ны иметь строго определенный формат. Любое почтовое сообщение можно разделить на три части: «конверт», заголовки и собственно текст. «Конверт» используется почтовым сервером, он содержит две команды – MAIL и RCPT. Заголовок используется почтовой программой пользователя. Он может содер- жать несколько специальных полей: From, To, Date, Subject и др. Каждое из этих полей содержит имя, за которым после двоеточия идет его значения. При желании, пользователь может ознакомиться с содержимым всех полей заголов- ка письма. 4.2 Кодировка сообщений Текст сообщения должен передаваться в виде 7-разрядных символов ASCII. Конец сообщения представляет собой строку, содержащую только сим- волы точки «.» и перевода строки. Если по каким-то причинам такая строка не- посредственно встречается внутри текста сообщения, то передающая сторона автоматически дублирует точку, чтобы принимающая сторона не приняла ее за конец сообщения (на принимающей стороне дублированный символ точки в начале строки заменяется одной точкой). 42 С 7-битной кодировкой сообщений связана проблема пересылки писем, написанных на национальных языках, в т.ч. и на русском, поскольку для рус- ского алфавита требуется 8-битная кодировка. Большинство современных поч- товых серверов поддерживают не только 7-битные, но и 8-битные кодировки, однако для совместимости со старыми почтовыми системами может использо- ваться специальная схема преобразования 8-битных кодов в 7-битные (естест- венно, при этом увеличивается объем сообщения, поскольку один 8-битный символ заменяется на специальную последовательность 7-битных). Более сложная проблема заключается в том, что нет единого стандарта на кодировку русского алфавита, и поэтому на сторонах отправителя и получателя могут использоваться различные кодировки. Для того чтобы сообщение, по- сланное отправителем в одной кодировке, было понятно адресату, который применяет другую кодировку, почтовый сервер использует специальные табли- цы смены кодировок. С помощью них текст сообщения, посланного в одной кодировке, преобразуется в другую кодировку. Чтобы сервер знал, какую коди- ровку использовать, информация об исходной кодировке включается почтовой системой отправителя в текст или в заголовок сообщения (в зависимости от ис- пользуемой системы). Одно сообщение в процессе своего прохождения через почтовые сервера может претерпевать несколько перекодировок. В случае, ко- гда у сервера нет информации об используемой кодировке или тип кодировки указан неверно (непонятен серверу), текст сообщения может исказиться. 4.3 Процесс передачи сообщений Передача сообщения по протоколу SMTP происходит следующим образом: после установления соединения стороны обмениваются кодами аутентифика- ции (с помощью команд HELO), затем одна из них посылает команду MAIL, в которой указан адрес отправителя и сведения о письме. Если получатель готов к приему сообщения, он посылает положительный отклик. Далее отправитель посылает одну или несколько команд RCPT, в которых идентифицирует адре- сатов сообщения. Если получатель может принять сообщение для указанного адресата, то он снова выдает положительный отклик на каждую команду. После 43 этого передается команда DATA, за которой следует само письмо (сколько бы не было адресатов, само письмо передается только один раз). В конце сеанса отправитель дает команду QUIT. Конечно, маловероятно, что при приеме почтовым сервером сообщения, адресованному некоторому пользователю ЭВМ, этот пользователь установит с сервером непосредственную связь по протоколу SMTP. Обычно сервер разме- щает сообщение в почтовом ящике пользователя. Почтовый ящик – это некото- рое промежуточное хранилище электронных сообщений, позволяющее почто- вому серверу осуществить их передачу адресату не сразу, а в тот момент, когда он установит связь с сервером. Обычно сообщения хранятся в почтовом ящике не вечно – по истечении некоторого времени почтовый сервер удаляет их отту- да. Политика обслуживания почтовых ящиков регламентируется администра- тором системы. Для того чтобы получить сообщение из своего почтового ящика, почтовая программа пользователя соединяется с сервером уже не по протоколу SMTP, а по специальному почтовому протоколу получения сообщений. Такой протокол позволяет работать с почтовым ящиком: забирать сообщения, удалять сообще- ния, сортировать их и выполнять другие операции. Самым популярным в на- стоящее время протоколом такого рода является протокол POP3 (Post Office Protocol v.3). Он предусматривает соединение с почтовым сервером на основе транспортного протокола TCP через порт 110. Другой, более сложный, извест- ный протокол – IMAP4. Во многих версиях ОС UNIX протокол SMTP, а также другие почтовые протоколы, реализованы в простейших утилитах типа sendmail или mmdf. Пер- вая из них может служить как почтовым клиентом, так и почтовым сервером. Обычно она работает в фоновом режиме и ждет поступления сообщений от пользователя или извне. В ОС типа Windows NT ту же роль играет утилита, именуемая mdaemon (mail daemon). Для непосредственного взаимодействия с пользователем существует про- стейшая программа, именуемая mail или mailx. Однако в современных ОС она 44 используется редко, поскольку существует большое количество прикладных программ с развитым интерфейсом, которые предоставляют пользователю воз- можности работы с электронной почтой. Примерами таких программ могут служить широко известные пакеты Outlook Express (производство фирмы Microsoft) и Netscape Communicator (производство фирмы Netscape). Внешний интерфейс этих программных продуктов чрезвычайно прост, так что использо- вать их может даже неквалифицированный пользователь. Все эти программы формируют сообщения в требуемом формате и передают их утилитам ОС, ра- ботающим в фоновом режиме, для отправки. К ним же они обращаются и для приема сообщений. 4.4 Пример последовательности команд почтовой транзакции Каждой строке присвоен номер и обозначено, кому они принадлежат – пе- редатчику (C) или приемнику (S). Текст справа от двоеточия содержит действи- тельно передаваемые данные. Трехзначные цифровые комбинации в начале пе- редаваемых строк обозначают коды ответа. Ответ SMTP похож на сообщения- подтверждения о доставке, поскольку появляется лишь в том случае, когда при- емник получил данные. 1. S: 220 mail.ru ESMTP Wed, 07 Sep 2005 09:21:58 +0400 2. C: Helo XName 3. S: 250 mx1.mail.ru Hello XName [62.76.36.11] 4. C: mail from: klimov@mail.ru 5. S: 250 OK 6. C: rcpt to: ivanov@yandex.ru 7. S: 250 Accepted 8. C: rcpt to: petrov@mail.ru 9. S: 250 Accepted 10. C: data 11. S: 354 Enter message, ending with "." on a line by itself 12. C: From: klimov@mail.ru 13. C: To: ivanov@yandex.ru 14. C: Subject: Тема 15. C: Текст сообщения 16. C: простой 17. C: . 18. S: 250 OK id=1ECsNi-000ATp-00 19. C: quit 45 20. S: 221 mx1.mail.ru closing connection Как видно из строки 1, когда SMTP-клиент устанавливает TCP- соединение с портом протокола 25, SMTP-сервер отвечает кодом 220. Это озна- чает, что соединение успешно установлено. После того как почтовые агенты компьютеров установили соединение и обменялись приветствиями, первой командой, согласно спецификации, должна быть команда HELO. Как указано в строке 2, SMTP-клиент передает HELO, указывая имя своего компьютера в качестве аргумента (имя может быть вы- мышленным). В ответ на HELO приемник выдает код 250, сообщая передатчику о том, что команда принята и обработана. После установления TCP-соединения и идентификации (при помощи HELO) SMTP-клиент приступает к почтовой транзакции. Для начала он выпол- няет одну из следующих команд: MAIL, SEND, SOML или SAML. В нашем примере использована команда MAIL. После того как сервер выдал код ответа 250 (строка 5), согласившись об- работать сообщение от klimov@mail.ru, необходимо указать получателя сооб- щения. Это делается при помощи команды RCPT. Команда RCPT имеет аргу- мент – имя получателя. На одну команду приходится только одно имя, поэтому, если получателей несколько, команда RCPT выдается несколько раз. В нашем примере команды RCPT выполняются в строках 6 и 8. Выдав команду RCPT, клиент ожидает получить ответ с кодом 250. После того как посланы все команды RCPT, клиент начинает передачу данных при помощи команды DATA. В строке 10 показано, как клиент (пере- датчик) высылает команду DATA, в строке 11 – как сервер отвечает кодом 354. Этот код означает, что передача данных разрешена и должна заканчиваться комбинацией CRLF-точка-CRLF (новой строкой, содержащей только точку). После того как получен код 354, клиент может начать передачу данных. Сервер, в свою очередь, помещает принятые данные в очереди входящих сооб- 46 щений. Сервер не высылает никаких ответов до тех пор, пока не получит ком- бинацию CRLF-точка-CRLF от клиента, означающую конец передачи данных. Как показано в строках 17 и 18, в ответ на полученную комбинацию CRLF- точка-CRLF сервер выдает код 250, который означает успешное окончание операции. Для того чтобы закончить почтовую транзакцию, клиент, по правилам SMTP, обязан послать команду QUIT. Сервер, в свою очередь, отвечает кодом 221. Этот код подтверждает клиенту, что соединение будет закрыто, после чего соединение действительно закрывается. В любой момент во время транзакции клиент может использовать коман- ды NOOP, HELP, EXPN и VRFY. В ответ на каждую команду сервер высылает клиенту определенную информацию. В зависимости от ответа, клиент может предпринять определенные действия, однако в спецификации SMTP это не ого- варивается. 4.5 Задание на лабораторную работу 1. Ознакомиться с теоретическим и справочным материалом. 2. Получить у преподавателя доменное имя или IP-адрес SMTP-сервера, через который возможна отправка сообщений из учебных аудиторий. 3. Разработать приложение почтового клиента, позволяющее выполнять отправку текстовых сообщений по протоколу SMTP указанным адресатам. Приложение использует для обмена с сервером транспортный протокол TCP/IP. Сообщение должно включать поля From, To, Subject. Пользователь должен иметь возможность заполнить необходимые поля и дать команду на от- правку сообщения. Процесс обмена командами и ответами должен происходить в автоматическом режиме и отображаться на экране в формате, приведенном в примере. В случае возвращения сервером кода ответа, отличающегося от требуемо- го, необходимо вывести сообщение об этом и разорвать соединение. 47 4.6 Справочные данные Таблица 4.1 – Команды протокола SMTP Команда Обязательна Описание HELO X Идентифицирует модуль-передатчик для модуля- приемника (hello). X Начинает почтовую транзакцию, которая заверша- ется передачей данных в один или несколько поч- товых ящиков (mail). RCPT X Идентифицирует получателя почтового сообще- ния (recipient). DATA Строки, следующие за этой командой, рассматри- ваются получателем как данные почтового сооб- щения. В случае SMTP, почтовое сообщение за- канчивается комбинацией символов: CRLF-точка- CRLF. RSET Прерывает текущую почтовую транзакцию (reset). NOOP Требует от получателя не предпринимать никаких действий, а только выдать ответ ОК. Используется для тестирования. (No operation). QUIT Требует выдать ответ ОК и закрыть текущее со- единение. VRFY Требует от приемника подтвердить, что ее аргу- мент является действительным именем пользова- теля. SEND Начинает почтовую транзакцию, доставляющую данные на один или несколько терминалов (а не в почтовый ящик). SOML Начинает транзакцию MAIL или SEND, достав- ляющую данные на один или несколько термина- лов или в почтовые ящики. SAML Начинает транзакцию MAIL и SEND, доставляю- щие данные на один или несколько терминалов и в почтовые ящики. EXPN Команда SMTP-приемнику подтвердить, действи- тельно ли аргумент является адресом почтовой рассылки, и если да, вернуть адрес получателя со- общения (expand). HELP Команда SMTP-приемнику вернуть сообщение- справку о его командах. 48 Таблица 4.2 – Коды ответа протокола SMTP Код Описание 211 Ответ о состоянии системы или помощь. 214 Сообщение-подсказка (помощь). 220 <имя_домена> Служба готова к работе. 221 <имя_домена> Служба закрывает канал связи. 250 Запрошенное действие почтовой транзакции успешно за- вершилось. 251 Данный адресат не является местным; сообщение будет передано по маршруту 354 Начинай передачу сообщения. Сообщение заканчивается комбинацией CRLF-точка-CRLF. 421 <имя_домена> Служба недоступна; соединение закрывается. 450 Запрошенная команда почтовой транзакции не выполне- на, так как почтовый ящик недоступен. 451 Запрошенная команда не выполнена; произошла локаль- ная ошибка при обработке сообщения. 452 Запрошенная команда не выполнена; системе не хватило ресурсов. 500 Синтаксическая ошибка в тексте команды; команда не опознана. 501 Синтаксическая ошибка в аргументах или параметрах команды. 502 Данная команда не реализована. 503 Неверная последовательность команд. 504 У данной команды не может быть аргументов. 550 Запрошенная команда не выполнена, так как почтовый ящик недоступен. 551 Данный адресат не является местным; попробуйте пере- дать сообщение по маршруту 552 Запрошенная команда почтовой транзакции прервана; дисковое пространство, доступное системе, переполни- лось. 553 Запрошенная команда не выполнена; указано недопусти- мое имя почтового ящика. 554 Транзакция не выполнена. |