Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник проектирование и внедрение компьютерных....doc
Скачиваний:
78
Добавлен:
19.07.2019
Размер:
5.37 Mб
Скачать

6.2. Простой протокол передачи почты (Simple Mail Transfer Protocol)

Электронная почта (e-mail), несомненно, одно из самых популярных приложений. Исследования показывают, что примерно половина всех TCP соединений занята передачей почтовых сообщений с исполььзованием простого протокола передачи почты (SMTP - Simple Mail Transfer Protocol). (С точки зрения количества переданных байт, по FTP соединениям передается значительно больше данных.) Подсчитано, что среднее почтовое сообщение содержит примерно 1500 байт данных, однако некоторые сообщения содержат мегабайты данных, потому что электронная почта иногда используется для посылки файлов.

На рисунке 6.6 показан обмен почтой с использованием TCP/IP.

Рисунок 6.6. Доставка электронной почты в Internet.

Пользователи общаются с пользовательскими агентами (user agent). В настоящее время существует очень много реализаций пользовательских агентов. Популярные пользовательские агенты для Unix это MH, Berkeley Mail, Elm и Mush.

Обмен почтой с использованием TCP осуществляется посредством агентов передачи сообщений (MTA - message transfer agent). Наиболее распространенные MTA для Unix систем это Sendmail. Пользователи обычно не общаются с MTA. В задачу системного администратора входит установка локального MTA.

RFC 821 [Postel 1982] описывает протокол SMTP. А именно то, как два MTA общаются друг с другом по TCP соединению. RFC 822 [Crocker 1982] приводит формат сообщения электронной почты, которое передается между двумя MTA в соответствии с RFC 821.

6.2.1. Описание протокола

При общении между двумя MTA используется NVT ASCII. Команды посылаются клиентом серверу, а сервер отвечает с помощью цифровых кодов и опциональных текстовых строк (для чтения человеком). Это несколько напоминает сценарий, который мы видели для FTP в предыдущей главе.

Клиент может послать серверу небольшое количество команд: меньше дюжины. Для более подробного ознакомления с протоколом давайте рассмотрим пример.

6.2.2. Пример передачи почтового сообщения

Пошлем простое сообщение размером в одну строку и посмотрим, как осуществляется SMTP соединение. Для этого воспользуемся нашим пользовательским агентом с флагом -v, который передается транспортному агенту почты (Sendmail в данном случае). Когда указан этот флаг, MTA отображает все, что посылается и принимается по SMTP соединению. Строки, начинающиеся с >>>, это команды, посылаемые SMTP клиентом, а строки, начинающиеся с 3-циферного кода отклика, приходят от SMTP сервера. Ниже приводится интерактивная сессия:

sun % mail -v rstevens@noao.edu

To: rstevens@noao.edu

Subject: testing

1, 2, 3.

Sending letter ... rstevens@noao.edu...

Connecting to mailhost via ether...

Trying 140.252.1.54... connected.

220 noao.edu Sendmail 4.1/SAG-noao.G89 ready at Mon, 19 Jul 93 12:47:34 MST

>>> HELO sun.tuc.noao.edu.

250 noao.edu Hello sun.tuc.noao.edu., pleased to meet you

>>> MAIL From:<rstevens@sun.tuc.noao.edu>

250 <rstevens@sun.tuc.noao.edu>... Sender ok

>>> RCPT To:<rstevens@noao.edu>

250 <rstevens@noao.edu>... Recipient ok

>>> DATA

354 Enter mail, end with "." on a line by itself

>>> .

250 Mail accepted

>>> QUIT

221 noao.edu delivering mail

rstevens@noao.edu... Sent

sent.

Для отправки почты было использовано всего пять SMTP команд: HELO, MAIL, RCPT, DATA и QUIT.

Команда mail запускает пользовательского агента. Затем необходимо ввести тему сообщения, после чего можно печатать тело сообщения. Ввод точки в начале строки завершает сообщение, и пользовательский агент передает почту в MTA для доставки.

Клиент осуществляет активное открытие на TCP порт 25, после чего ожидает приветственного сообщения (отклик с кодом 220) от сервера. Ответ сервера должен начинаться с полного имени домена хоста сервера: noao.edu в данном примере. (Обычно вместе с цифровым кодом отклика возвращается необязательный текст. Здесь требуется имя домена.)

Затем клиент идентифицирует себя с использованием команды HELO. В качестве аргумента указывается полное имя домена хоста клиента: sun.tuc.noao.edu.

Команда MAIL идентифицирует автора сообщения (или отправителя). Следующая команда, RCPT, идентифицирует получателя. Если сообщение предназначено нескольким получателям, может быть исполнено несколько команд RCPT.

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

На рисунке 6.7 приведена временная диаграмма SMTP соединения между отправителем SMTP (клиент) и получателем SMTP (сервер).

В этом примере пользовательский агент отправляет сообщение длиной в одну строку ("1, 2, 3."), однако в сегменте 12 передается 393 байта данных. Следующие 12 строк включают в себя 393 байта, которые были посланы клиентом:

Received: by sun.tuc.noao.edu. (4.1/SMI-4.1)

          id AA00502; Mon, 19 Jul 93 12:47:32 MST

Message-Id: <9307191947.AA00502@sun.tuc.noao.edu.>

From: rstevens@sun.tuc.noao.edu (Richard Stevens)

Date: Mon, 19 Jul 1993 12:47:31 –0700

Reply-To: rstevens@noao.edu

X-Phone: +1 602 676 1676

X-Mailer: Mail User's Shell (7.2.5 10/14/92)

To: rstevens@noao.edu

Subject: testing

1, 2, 3.

Рисунок 6.7. Принцип доставки почты SMTP.

MTA добавляет первые три строки, а также Received: и Message-Id:, а следующие девять строк генерируются пользовательским агентом.