Протоколы электронной почты (SMTP и POP)
СЕТИ ПЕРЕДАЧИ АУДИО- ВИДЕО ДАННЫХ
Методические указания по выполнению лабораторных работ
Содержание:
Лабораторная работа № 1
Протоколы прикладного уровня
Лабораторная работа № 2
Основы работы с анализатором сетевых протоколов Wireshark
Лабораторная работа № 3
Протокол транспортного уровня TCP
Лабораторная работа № 4
Ethereal Lab: протокол сетевого уровня IP
Лабораторная работа № 5
Ethereal Lab: протокол сетевого уровня ICMP
ЛАБОРАТОРНАЯ РАБОТА №1
Протоколы прикладного уровня
Цель работы – исследование протоколов прикладного уровня (http, pop, smtp) с помощью программы telnet.exe и изучения семантики общения между клиентом и сервером.
Протоколы прикладного уровня и принципы их работы
Приложения являются «разумным фундаментом» компьютерных сетей. Не имея приложений, выполняющих полезную работу, бессмысленно говорить о поддерживающих их протоколах.
Несмотря на разнообразие сетевых приложений и большое число их взаимодействующих компонентов, почти всегда программное обеспечение является «ядром» приложения. Программное обеспечение распределяется между двумя и более оконечными системами (хостами). Так, например, web-приложения обычно состоят из двух взаимодействующих частей: браузера, находящегося на стороне пользователя, и программного обеспечения сервера. Аналогично, приложение Telnet состоит из программы на локальном компьютере и программы на удаленном компьютере.
На языке операционных систем взаимодействие осуществляется не между программами, а между процессами. Процесс можно представить как программу, выполняющуюся на оконечной системе. Если процессы выполняются на одном хосте, тогда их взаимодействие поддерживается операционной системой хоста и не связано с сетью. Нас будет интересовать обмен данными между процессами, расположенными на разных оконечных системах. Такой обмен осуществляется с помощью сообщений, передаваемых через компьютерную сеть. Отправитель генерирует сообщение и посылает его в сеть, а адресат, получая это сообщение, выполняет определенные действия и, иногда, отсылает ответное сообщение. Сетевые приложения строятся на основе протоколов прикладного уровня, которые регламентируют формат и порядок обмена сообщениями, а также процедуры, выполняемые при приеме и отправке сообщений.
Протоколы прикладного уровня определяют способ обмена сообщениями между двумя процессами, выполняющимися на разных хостах. Обычно протокол определяет следующие элементы:
типы используемых сообщений, например запросы и ответы;
· синтаксис каждого из типов сообщений, описывающий поля сообщения и их разделители;
· семантику полей, то есть смысл информации, содержащийся в каждом из полей сообщения;
· правила, описывающие события, которые вызывают генерацию сообщений.
Для успешного обмена сообщениями между процессами, выполняющимися на двух различных хостах, необходимо, чтобы они могли идентифицировать друг друга. Идентификация требует наличия следующей информации о процессе:
· имя и адрес хоста, которому принадлежит процесс;
· идентификатор процесса внутри хоста.
Адрес хоста будет рассмотрен в последующих лабораторных работах, здесь же рассмотрим идентификацию процесса хоста, которая производится с помощью номера порта. Популярные Интернет - протоколы прикладного уровня имеют стандартизованные значения номеров портов. Так процессы, использующие протокол HTTP, получают порт номер 80, процессы, использующие протокол POP – порт номер 110, а процессы, использующие протокол SMTP - порт номер 25.
Протокол прикладного уровня HTTP
Протокол HTTP является протоколом прикладного уровня для распределенных мультимедийных информационных систем. Это объектно-ориентированный протокол, пригодный для решения многих задач, таких как создание серверов имен, распределенных объектно-ориентированных управляющих систем и др. Структура HTTP позволяет создавать системы, независящие от передаваемой информации.
Каждая web-страница или документ состоит из объектов. Объект представляет собой обычный файл в формате HTML, изображение в формате JPEG или GIF и т.п., то есть единицу, обладающую собственным указателем ресурса (URL). Как правило, web-страницы состоят из базового HTML-файла и объектов, на которые он ссылается.
Так, например, для URL www.somehost.ru/somename/image1.gif именем хоста является фрагмент www.somehost.ru, а путем к объекту – фрагмент /somename/image1.gif. Браузером называется агент пользователя web.
WEB-сервер содержит объекты, каждый из которых идентифицируется собственным URL.
Протокол HTTP определяет, каким образом клиенты запрашивают web-страницы, а серверы осуществляют передачу этих страниц. Когда пользователь запрашивает web-страницу, браузер посылает серверу HTTP-запрос объектов, составляющих страницу. Сервер получает запрос и высылает ответные сообщения, содержащие требуемые объекты.
Первые версии, такие как HTTP/0.9, представляли собой простые протоколы для передачи данных через Интернет. Версия HTTP/1.0, описанная в RFC-1945, улучшила протокол, разрешив использование сообщений в формате MIME, содержащих метаинформацию о передаваемых данных, и модификаторы для запросов/откликов. Дальнейшее развитие сетей WWW-серверов потребовало новых усовершенствований, которые вряд ли являются последними.
Реальные информационные системы требуют больших возможностей, чем простой поиск и доставка данных. Для описания характера, наименования и места расположения информационных ресурсов введены: универсальный идентификатор ресурса URI (Uniform Resource Identifier), универсальный указатель ресурса URL и универсальное имя ресурса URN. Формат сообщений сходен с используемыми в электронной почте, и описанный в стандарте MIME (Multipurpose Internet Mail Extensions).
Типичное сообщение-запрос выглядит следующим образом:
GET /somedir/page.html HTTP/1.1
Host www.somehost.ru
Connection: close
User-agent: Opera/9.0
Accept-language: ru
Оно состоит из 5 строк, каждая из которых оканчивается парой символов для перехода на новую строку (возврат каретки и перевод строки), а последняя строка – дополнительной парой указанных символов. В общем случае число строк может быть как больше, так и меньше 5. Первая строка называется строкой запроса, а следующие строки – строками заголовка.
Строка запроса содержит три поля:
· поле метода,
· поле URL,
· поле версии HTTP.
Поле метода может принимать различные значения, например GET, HEAD и другие. Метод GET – наиболее часто употребляемый, он применяется в тех случаях, когда требуемый объект характеризуется URL-адресом. Метод HEAD схож с методом GET. При получении запроса с методом HEAD сервер формирует ответ, однако не осуществляет пересылку объекта. С остальными методами можно ознакомиться в документах RFC 1945 и RFC 1945.
Теперь рассмотрим строки заголовка. Строка Host содержит адрес хоста, на котором находится объект. С помощью строки Connection Close браузер сообщает серверу о том, что не следует использовать постоянное соединение. В строке The User Agent указан агент пользователя, то есть тип браузера, сгенерировавшего запрос.
Теперь рассмотрим типичное сообщение-ответ, сгенерированное сервером на запрос клиента. Оно состоит из трёх частей: строки состояния, шести строк заголовка и тела сообщения. Тело сообщения содержит требуемый (передаваемый хосту) объект. Строка состояния образована из трёх полей:
· поле версии протокола,
· поле кода состояния,
· поле соответствующей коду информации, описывающей это состояние.
Строки заголовка содержат информацию о соединении, дату и время создания ответа, каким сервером было создано сообщение, дату и время создания или последнего изменения объекта, размер пересылаемого объекта в байтах, а также тип объекта. Типичное сообщение-ответ выглядит следующим образом:
HTTP/1.1 200 Ок //Сервер использует спецификацию HTTP/1.1, //требуемый объект найден и осуществляется //его пересылка
Connection: close //соединение будет закрыто после пересылки //объекта
Date: Thu, 11 Nov 2006 02:45:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 9 Oct 2006 02:45:15 GMT
Content-length: 6532
Content-type: text/html //определяет тип объекта. В данном случае это //текст в формате html.
Протоколы электронной почты (SMTP и POP)
Протокол прикладного уровня SMTP, описанный в документе RFC 2821, составляет основу службы электронной почты Интернета. Теперь рассмотрим подробнее, каким образом осуществляется передача сообщения между почтовыми серверами. Любопытно отметить, что протокол SMTP по своей сути напоминает непосредственное общение между двумя людьми.
Итак, сначала SMTP-клиент пытается установить TCP-соединение с портом 25 сервера; если сервер не отвечает, попытка повторяется позднее. После того как соединение установлено, клиент и сервер обмениваются рукопожатиями на прикладном уровне. В ходе процедуры рукопожатия клиент определяет адреса почтовых ящиков отправителя и получателя сообщения. По завершении рукопожатия начинается процесс передачи сообщения от клиента к серверу. Поскольку передача осуществляется с помощью протокола TCP, гарантируется надежная доставка данных. Если в очереди клиента имеются другие сообщения, предназначенные этому же серверу, все они пересылаются последовательно через одно ТСР-соединение. После передачи всех сообщений клиент закрывает соединение с сервером.
Рассмотрим пример обмена сообщениями между SMTP-клиентом (C) и SMTP-сервером (S). Хост клиента имеет имя my.ru, а хост сервера — gukit.edu. (Строки, помеченные голубым цветом, передаются клиентом в свой сокет в той же кодировке ASCII, в которой они приведены ниже; то же самое касается строк, помеченных желтым цветом и относящихся к серверу.)
Итак, после установления ТСР-соединения обмен может происходить следующим образом:
220 gukit.edu
НЕLO gukit.edu
250 Hello my.ru, pleased to meet you
MAIL FROM: <[email protected]>
250 [email protected]... Sender ok
RCPT TO: <[email protected]>
250 [email protected]. Recipient ok
DATA
354 Enter mail, end with "." on a line by itself
Hochesh' sosisku?
Prihodi v gosti!
.
250 Message accepted for delivery
QUITS: 221 gukit.edu closing connection
В приведенном примере клиент послал почтовому серверу gukit.edu сообщение «Hochesh' sosisku? Prihodi v gosti!» с почтового сервера my.ru. Клиент использовал пять различных команд: HELO, MAIL FROM, RCPT TO, DATAиQUIT. Смысл этих команд вполне понятен. Кроме того, клиент использовал символ точки, указывающий на конец сообщения. Сервер посылает ответ на все команды клиента. Ответ включает код и (необязательно) описание на английском языке. Протокол SMTP поддерживает постоянные соединения: Если клиенту необходимо отправить несколько сообщений подряд, все сообщения передаются через одно TCP-соединение. Передача каждого нового сообщения начинается с команды MAIL FROM: my.ru, а заканчивается одиночным символом точки. После того как все сообщения посланы, клиент генерирует команду QUIT.