Скачиваний:
60
Добавлен:
22.01.2014
Размер:
258.56 Кб
Скачать

7.5 Взаимодействие smtp с транспортным протоколом tcp

SMTP —это протокол прикладного уровня. Он использует протоколTCPкак транспортный протокол, который обеспечивает достоверность и надеж­ность канала соединения. Как правило, SMTP-каналиспользует TCP-соединениемежду отправителемSMTP —машиной пользователя, на кото­рой порт SMTP-соединенияможет быть выбран произвольно, и SMTP-сервером,который, по умолчанию, использует порт 25.

TCP-соединениеподдерживает передачу 8-битных символов. ЕслиSMTPиспользует для передачи 7-битные ASCII-символы,каждый из них переда­ется по TCP-каналукак 8бит со старшим битом равным 0.8-битные SMTP-данныепередаются без изменений.

SMTP-командыи данные инкапсулируются в поле данныхTCPв соответст­вии с обычными механизмами инкапсуляции стека протоколовTCP/IP.

Более подробную информацию о протоколе SMTPи форматах почтовых сообщенийMIMEможно найти в:RFC-1341,RFC-1342,RFC-1426,RFC-1521,RFC-1806,RFC-1830,RFC-2045,RFC-2046,RFC-2047,RFC-2048,RFC-2049,RFC-2076,RFC-788,RFC-821,RFC-822.

РОР3

Для небольших организаций невыгодно держать у себя систему для переда­чи сообщений (messagetransportsystem). Это связано с тем, что в неболь­ших, не специализирующихся на компьютерных технологиях организациях, как правило, рабочие станции клиентов сети не имеют достаточно ресурсов (производительности или дискового пространства) для обеспечения работы полного SMTP-сервера.Кроме того, таким пользователям электронной поч­ты может быть просто невыгодно держать персональный компьютер посто­янно подключенным кInternet.

Для решения этой проблемы был разработан почтовый протокол для работы в офисе —POP(PostOfficeProtocol). Его наиболее распространен­ный вариант —РОРЗ (Протокол почтового отделения версия 3).Этот про­токол позволяет рабочим станциям динамически получать доступ к своим почтовым ящикам, расположенным на сервере, предназначенном для об­служивания электронной почты в данной организации.

РОРЗ —это простейший протокол для работы пользователя с содержимым своего почтового ящика. Он позволяет только забрать почту из почтового ящика сервера на рабочую станцию клиента и удалить ее из почтового ящи­ка на сервере. Всю дальнейшую обработку почтовое сообщение проходит на компьютере клиента.

РОРЗ-сервер не отвечает за отправку почты, он работает только как универ­сальный почтовый ящик для группы пользователей. Когда пользователю необходимо отправить сообщение, он должен установить соединение с ка­ким-либо SMTP-сервероми отправить туда свое сообщение поSMTP. ЭтотSMTP-серверможет быть тем же хостом, где работает РОРЗ-сервер, а может располагаться совсем в другом месте (в другом домене или, вообще говоря, где угодно вInitemet).

Как правило, при работе с электронной почтой небольшие организации ис­пользуют для получения своей корреспонденции РОРЗ-сервер, установлен­ный на каком-либо компьютере в офисе, а отправляют почту по SMTPна один из хорошо доступных общеизвестных SMTP-серверовгорода (найти такие совсем несложно).

7.6 Принципы работы

РОРЗ-сервис, как правило, устанавливается на 110-й TCP-портсервера, ко­торый будет находится в режиме ожидания входящего соединения. Когда клиент хочет воспользоваться РОРЗ-сервисом, он просто устанавливаетTCP-соединениес портом 110этого хоста. После установления соединения сервис РОРЗ отправляет подсоединившемуся клиенту приветственное сооб­щение. После этого клиент и сервер начинают обмен командами и данны­ми. По окончании обмена РОРЗ-канал закрывается.

Команды РОРЗ состоят из ключевых слов, состоящих из ASCII-символов,и одним или несколькими параметрами, отделяемыми друг от друга символом "пробела" —<SP>. Все команды заканчиваются символами "возврата карет­ки" и "перевода строки" —<CRLF>. Длина ключевых слов не превышает четырех символов, а каждого из аргументов может быть до 40символов.

Ответы РОРЗ-сервера на команды состоят из строки статус-индикатора, ключевого слова, строки дополнительной информации и символов заверше­ния строки — <CRLF>.Длина строки ответа может достигать 512символов. Строка статус-индикатора принимает два значения: положительное ("+ОК") и отрицательное ("-ERR"). Любой сервер РОРЗ обязан отправлять строки ста­тус-индикатора в верхнем регистре, тогда как другие команды и данные могут приниматься или отправляться как в нижнем, так и в верхнем регистрах.

Ответы РОРЗ-сервера на отдельные команды могут составлять несколько строк. В этом случае строки разделены символами <CRLF>.Последнюю строку информационной группы завершает строка, состоящая из символа "." (код — 046)и <CRLF>,т. е. последовательность "CRLF.CRLF".

РОРЗ-сессия состоит из нескольких частей. Как только открывается TCP-соединениеи РОРЗ-сервер отправляет приветствие, сессия должна быть за­регистрирована —состояние аутентификации (AUTHORIZATIONstate). Клиент должен зарегистрироваться в РОРЗ-сервере, т. е. ввести свой иден­тификатор и пароль.

После этого сервер предоставляет клиенту его почтовый яшик и открывает для данного клиента транзакцию —состояние начала транзакции обмена (TRANSACTIONstate). На этой стадии клиент может считать и удалить почту своего почтового ящика,i

После того как клиент заканчивает работу (передает команду QUIT), сессия переходит в состояниеUPDATE —завершение транзакции. В этом состоя­нии РОРЗ-сервер закрывает транзакцию данного клиента (на языке баз дан­ных —операцияCOMMIT) и закрывает TCP-соединение.

В случае получения неизвестной, неиспользуемой или неправильной коман­ды, РОРЗ-сервер должен ответить отрицательным состоянием индикатора.

РОРЗ-сервер может использовать в своей работе таймер контроля времени соединения. Этот таймер отсчитывает время "бездействия" ("idle") клиента в сессии от последней переданной команды. Если время сессии истекло, сер­вер закрывает TCP-соединение,не переходя в состояниеUPDATE(иными словами, откатывает транзакцию или на языке баз данных —выполняетROLLBACK).

Примечание

Не забывайте, что РОРЗ-сервер может обслуживать группу клиентов, которые, возможно, присоединяются по коммутируемой линии, и, следовательно, необхо­димо иметь средство автоматического регулирования времени соединения. По спецификации РОРЗ-таймер контроля состояния "idle" должен быть установлен на промежуток времени не менее 10минут.

Протокол работы, основные команды

При открытии TCP-соединенияРОРЗ-клиентом, РОРЗ-сервер отправляет сообщение приветствия (далее во всех примерах РОРЗ-протокола использу­ются следующие обозначения: С —клиент,S —сервер РОРЗ):

S: +ОК РОРЗ server ready

Теперь РОРЗ-сессия находится в состоянии аутентификации (AUTHORIZATION), и клиент должен зарегистрировать себя на 'РОРЗ-сервере. Это может быть выполнено либо с помощью командUSERиPASS —ввод открытых пользовательского идентификатора и пароля (именно этот способ используется чаще), либо командой АРОР —аутентификация цифровой подписью, на базе секретного ключа. Любой РОРЗ-сервер должен поддерживать хотя бы один из механизмов аутентификации.

Команда USERимеет следующий формат:

USER name

Аргументом —"name" является строка, идентифицирующая почтовый ящик системы. Этот идентификатор должен быть уникальным в данной почтовой системе РОРЗ-сервера. Если ответом на эту команду является строка инди­катора "+ОК",клиент может отправлять командуPASS —ввод пароля илиQUIT —завершить сессию. Если ответом является строка "-ERR", клиент может либо повторить командуUSER, либо закрыть сессию. Примеры ис­пользования команды:

С: USER f rated

S: -ERR sorry, no mailbox for f rated here

ИЛИ

С: USER mrose

S: +ОК mrose is a real hoopy frood

Примечание

Сервер может вернуть отрицательный ответ, если почтовый ящик существует, но по каким-либо причинам не доступен.

Команда PASSиспользуется только после положительного ответа на коман­дуUSER:

PASS string

Аргументом команды является строка пароля данного почтового ящика. По­сле получения команды PASS, РОРЗ-сервер, на основании аргументов командUSERиPASS, определяет возможность доступа к заданному почтовому ящи­ку. Если РОРЗ-сервер ответил "+ОК",это означает, что аутентификация клиента прошла успешно и он может работать со своим почтовым ящиком, т. е. сессия переходит в состояниеTRANSACTION. Если РОРЗ-сервер ответил "-ERR", то либо был введен неверный пароль, либо не найден указанный почтовый ящик:

С: USER mrose

S: +ОК mrose is a real hoopy frood

C: PASS secret

S: -ERR maildrop already locked

ИЛИ

С: USER mrose

S: +ОК mrose is a real hoopy frood

C: PASS secret

S: +ОК mrose's maildrop has 2 messages (320 octets)

Команда аутентификации пользователя АРОР не входит в список обязатель­но реализуемых команд РОРЗ-сервера. Эта команда предоставляет значи­тельно больший (по сравнению с командами USERилиPASS) уровень за­щиты аутентификации пользователя при открытии сессииAUTHORIZATIONи используется только тогда, когда к обеспечению кон­фиденциальности доступа к информации почтовых ящиков предъявляются повышенные требования. Эта команда может быть передана клиентом РОРЗ-сервера после получения приветственного сообщения или после ошибки обработки командUSER/PASS.

АРОР name digest

Аргументами команды являются: name —имя пользователя (то же, что и в командеUSER),digest —шифрованная (по алгоритмуMD5) строка пароля. Применяемый здесь алгоритм необратимого шифрования для построения секретного ключа использует открытый ключ и временную метку. Времен­ные метки передаются хосту клиента вместе с сообщением приветствия. На­пример, для UNIX-машинвременная метка может иметь вид: <process-ID.clock@hostname>, гдеprocess-ID —это идентификатор процесса,clock — состояние таймера на момент установления соединения,hostname —имя компьютера РОРЗ-сервера. Этот механизм позволяет достичь очень высокой степени защищенности. Далее показан пример работы команды АРОР.

S: +ОК РОРЗ server ready <1896.697170952gdbc.mtview.ca.us>

С: АРОР mrose c4c9334bac560ecc979e58001b3e22fb

S: +ОК maildrop has I message (369 octets)

Алгоритм на основании открытого ключа "tanslaaf" и временной метки< 1896.697170952@dbc.mtview.ca.us> построил шифрованную строку "c4c9334bac560ecc979e58001b3e22fb".

К командам состояния AUTHORIZATIONможет относиться команда за­крытия РОРЗ-сессии —QUIT, тесли она была отправлена в режимеAUTHORIZATION(например, при вводе неправильного пароля или иден­тификатора пользователя): .

Эта команда отправляется без аргументов и всегда имеет единственный от­вет "+ОК", например:

С: QUIT

S: +ОК dewey РОРЗ server signing off

После того как клиент успешно прошел процедуру аутентификации в РОРЗ-сервере, и РОРЗ-сервер "закрыл" определенный почтовый ящик только для использования данным клиентом (для тех, кто работал с базами данных, это называется EXCLUSIVEACCESSLOCK), РОРЗ-сессия переходит в режимTRANSACTION, и клиент может начать работу со своей почтой.

Команда STAT(без аргументов) используется для просмотра состояния те­кущего почтового ящика.

В ответ РОРЗ-сервер возвращает строку, содержащую количество и общий размер в байтах сообщений, которые клиент может получить с РОРЗ-сервера. Сообщения, помеченные на удаление, не учитываются. Формат отве­та.' "+ОКnnmm", гдеnn—количество сообщений,mm —их общий объем:

С: STAT

S: +ОК 2320

В этом примере РОРЗ-сервер сообщает, что в данном почтовом ящике нахо­дятся два сообщения общим объемом 320байт.

После того как РОРЗ-сервер открыл почтовый ящик, он присваивает каж­дому сообщению номер и устанавливает его размер в байтах. Первому со­общению присваивается число 1,второму — 2и т. д. Далее во всех коман­дах, относящихся к сообщениям, РОРЗ-сервер ссылается на сообщения по их номерам и указывает их размер только в десятичном виде.

Команда LISTможет передаваться как с аргументомmsg —номером сооб­щения, так и без аргумента:

LIST (msg]

Если команда содержит аргумент, и сообщение с указанным номером суще­ствует, ответом на нее будет "информационная строка", которая содержит номер сообщения и размер сообщения в байтах. Если аргумент не указан — ответом будет список информационных строк обо всех сообщениях в дан­ном почтовом ящике. Сообщения, помеченные на удаление не фигурируют в этом списке:

С: LIST

S: +ОК 2 messages (320 octets)

S: 1 120

S: 2 200

S: .

ИЛИ

С: LIST 2

S: +ОК 2 200

ИЛИ

С: LIST 3

S: -ERR no such message, only 2 messages in maildrop

Следующая команда —командаRETR —используется для передачи клиен­ту запрашиваемого сообщения:

RETR msg

Аргумент команды —номер сообщения. Если запрашиваемого сообщения нет, возвращается отрицательный индикатор "-ERR".

С: RETR 1

S: +ОК 120 octets

S: <text message>

S: .

После получения, сообщение, как правило, помечается на удаление из поч­тового ящика, при этом используется команда DELE:

DELE msg

Аргумент команды— номер сообщения. Сообщения, помеченные на удаление, реально удаляются только после закрытия транзакции, на стадии UPDATE.

С: DELE 1

S: +ОК message I deleted

ИЛИ

С: DELE 2

S: -ERR message 2 already deleted

Для проверки состояния соединения с РОРЗ-сервером используется коман­да NOOP. При активном соединении ответом на нее будет положительный индикатор "+ОК":

С: noop

S: +ОК

Для отката транзакции внутри сессии используется команда RSET(без ар­гументов). Если пользователь случайно пометил на удаление какие-либо со­общения, он может убрать эти пометки, отправив эту команду:

С: RSET

S: +ОК maildrop has 2 messages (320 octets)

После того как пользователь проделал в режиме TRANSACTIONвсе необ­ходимые действия, он должен перейти в режимUPDATE. Для этого клиент РОРЗ отправляет командуQUIT. По этой команде все сообщения, помечен­ные на удаление, реально уничтожаются в почтовом ящике. Если сессияTRANSACTIONзавершается каким-либо другим способом (сбой сервера, се­ти или др.) никаких изменений в состоянии почтового ящика не происходит.

РОРЗ-сервер может поддерживать еще несколько команд, которые предос­тавляют пользователю большую свободу в манипулировании сообщениями, но которые не входят в список обязательных для реализации команд, т. е. ваш РОРЗ-сервер может их и не поддерживать. Одной из таких команд яв­ляется команда ТОР:

TOP msg n

По этой команде пользователь может получить "п" первых строк сообщения с номером "msg".РОРЗ-сервер по запросу клиента отправляет заголовок со­общения, затем пустую строку, затем требуемое количество строк сообще­ния (если количество строк в сообщении меньше указанного в параметре "п", пользователю передается все сообщение).

С: тор 1 10 s: +OK

S: <header>

S: <blank>

S: <message body>

S: .

Различные расширения РОРЗ-протокола могут включать в себя другие ко­манды или поддерживать расширения описанных команд. Эту или другую дополнительную информацию вы можете найти в соответствующих RFC, но большинство РОРЗ-систем работают только с набором описанных вы­ше команд.

Пример сценария

Ниже приведена стандартная сессия работы с РОРЗ-протоколом.

S: <wait for connection on TCP port 110>

C: <open connection>

S: +OK РОРЗ server ready

С: USER mrose

S: +OK mrose 15 a real hoopy frood

С: PASS secret

S: +OK inrose's maildrop has 2 messages (320 octets)

С: STAT

S: +OK 2 320

С: LIST

S: +OK 2 messages (320 octets)

S: 1 120

S: 2 200

S: .

С: RETR I

S: +OK 120 octets

S: <the РОРЗ server sends message 1>

S: .

C: DELE I

S: +OK message I deleted

C: RETR 2

S: +OK 200 octets

S: <the РОРЗ server sends message 2>

S:

C: DELE 2

S: +OK message 2 deleted

C: QUIT

S: +OK dewey РОРЗ server signing off (maildrop empty)

C: <close connection>

S: <wait for next connection>

Простота протокола POP, которая послужила росту его популярности вначале, обернулась затем отсутствием гибкости и невозможности выполнять другие операции управления почтовыми ящиками. На смену РОРЗ пришло новое поколение протоколов работы с электронной почтой —протоколыIМАР.

Более подробную информацию о протоколе РОРЗ можно найти в: RFC-1081, RFC-1082,RFC-1225,RFC-1725,RFC-1939.