2 Схема работы почтовых протоколов стека TCP/IP
2.1 Протокол SMTP
В качестве средств передачи
сообщения почтовая служба использует стандартный, разработанный специально для
почтовых систем протокол SMTP (Simple Mail Transfer Protocol — простой протокол
передачи почты). Как и большинство других протоколов прикладного уровня, SMTP
реализуется несимметричными взаимодействующими частями: SMTP- клиентом и SMTP-сервером.
Важно отметить, что этот протокол ориентирован на передачу данных по
направлению от клиента к серверу, следовательно, SMTP-клиент работает на
стороне отправителя, а SMTP-сервер — на стороне получателя. SMTP-сервер должен
постоянно быть в режиме подключения, ожидая запросов со стороны SMTP-клиента.
Логика работы протокола SMTP действительно является достаточно простой (как это
и следует из его названия). После того как, применяя графический интерфейс
своего почтового клиента, пользователь щелкает на значке, инициирующем отправку
сообщения, SMTP-клиент посылает запрос на установление TCP-соединения на порт
25 (это назначенный порт SMTP-сервера). Если сервер готов, то он посылает свои
идентифицирующие данные, в частности свое DNS-имя. Затем клиент передает
серверу адреса (имена) отправителя и получателя. Если имя получателя
соответствует ожидаемому, то после получения адресов сервер дает согласие на
установление TCP-соединения, и в рамках этого надежного логического канала
происходит передача сообщения. Используя одно TCP-соединение, клиент может
передать несколько сообщений, предваряя каждое из них указанием адресов
отправителя и получателя. После завершения передачи TCP- и SMTP-соединения
разрываются. Если в начале сеанса связи SMTP-сервер оказался не готов, то он
посылает соответствующее сообщение клиенту, в ответ тот снова посылает запрос,
пытаясь заново установить соединение. Если сервер не может доставить сообщение,
то он передает отчет об ошибке отправителю сообщения и разрывает соединение.
После того как передача сообщения благополучно заканчивается, переданное
сообщение сохраняется в буфере на сервере.
Рисунок 1 – Схема
непосредственного взаимодействия клиента и сервера
Простейший пример
SMTP-сессии С: - клиент, S: - сервер
S: (ожидает соединения)
C: (Подключается к порту 25
сервера)
S:220 mail.company.tld ESMTP CommuniGate Pro 5.1.4i is glad to see you!
C:HELO
S:250 domain name should be qualified
C:MAIL FROM:
S:250 someusername@somecompany.ru sender accepted
C:RCPT TO:
S:250 user1@company.tld ok
C:RCPT TO:
S:550 user2@company.tld unknown user account
C:DATA
S:354 Enter mail, end with "." on a line by itself
C:Hi!
C:.
S:250 769947 message accepted for delivery
C:QUIT
S:221 mail.company.tld CommuniGate Pro SMTP closing connection
S: (закрывает соединение)
В результате такой сессии
письмо будет доставлено адресату user1@company.tld, но не будет доставлено адресату
user2@company.tld, потому что такого адреса не существует.
Таблица
1. Некоторые команды SMTP
HELO {SP} {string}{CRLF}
|
Идентифицирует SMTP-сервер отправителя, открывает
сеанс {SP} пробел
|
QUIT{CRLF}
|
Завершает SMTP-сеанс.
|
MAIL {SP}
FROM:{reverse-path} {CRLF}
|
Задает адрес отправителя.
|
RCPT {SP} TO:{forward-path}
{CRLF}
|
Задает адрес получателя.
|
DATA {CRLF}
|
Указывает на начало сообщения. Для окончания
сообщения указывается {CRLF}.
|
VRFY {SP} {string}{CRLF}
|
проверяет существование получателя.
|
EXPN {SP} {string}{CRLF}
|
показывает список адресов для списка рассылки.
|
NOOP{CRLF}
|
пустая операция
|
TURN{CRLF}
|
сервер и клиент меняются ролями после ответа сервера
200 OK
|
RSET{CRLF}
|
сброс сессии в исходное состояние
|
HELP{CRLF}
|
информация о поддерживаемых командах
|
Из-за проблем со спамом,
почти все современные сервера игнорируют команды VRFY и EXPN, как раскрывающие
информацию о пользователе.
Для решения некоторых проблем.
Был разработан расширенный протокол SMTP, ESMTP. Клиенты, желающие использовать
его, должны начинать сессию связи с посылки приветствия EHLO вместо HELO. Если
команда не принимается сервером, значить, сервер поддерживает только обычный протокол
SMTP и клиенту следует работать в обычном режиме. Если же EHLO принято,
значить, установлена сессия ESMTP и возможна работа с новыми параметрами и
командами.