Электронная почта: взгляд изнутри

Каждый знает, что такое электронная почта, кто-то даже удачно получает и отправляет эти самые электронные сообщения, кто-то пошел дальше и заглянул в настройки своей почтовой программы. Но что же на самом деле происходит с письмом на этом коротком (считанные минуты или даже секунды) пути от клавиатуры отправителя до монитора получателя?

Для передачи и получения электронных сообщений используется три протокола:

- SMTP (Simple Mail Transfer Protocol) - работает при передаче почты между двумя сетевыми компьютерами,

- POP (Post Office Protocol) - этот протокол обеспечивает конкретному пользователю доступ к сообщениям, которые хранятся на почтовом сервере,

- DNS (Domain Name Service) - служит для идентификации почтовых серверов при передаче сообщений.

Протоколу SMTP посвящены три документа: RFC 821, 822 и 974. RFC 821 описывает структуру передаваемых сообщений, а RFC 822 - сам протокол, который используется для обмена сообщениями электронной почты между двумя компьютерами.

Отправлять и получать почту можно, используя только протокол SMTP, но два других протокола делают этот сервис проще и эффективнее. Протокол SMTP появился раньше, чем РОР, и до сих пор остается самым широко используемым.

Сам протокол относительно прост. Сообщение создается, адресуется и отправляется соответствующим приложением почтовому серверу и сохраняется там. Сервер периодически проверяет, нет ли у него сообщений для передачи далее по сети. Если таковые есть, то сервер пытается доставить их адресатам. Если получатель в данный момент времени не доступен, то передача откладывается на какое-то время. Такие попытки сервер повторяет в течение пяти дней (именно такой срок указан в настройках большинства "почтовиков"), и если они оказались безуспешными, то сообщение удаляется или возвращается отправителю.

Электронный адрес состоит из двух частей, левая определяет локального пользователя, а правая (доменная) - почтовый сервер. Например, адрес в заголовке SMTP сообщения может быть таким:

apple@tree.fruit.org

Это сообщение адресовано пользователю apple, который "проживает" в домене tree.fruit.org. При определении адреса почтового сервера получателя в DNS базах данных будет найдена подобная запись:

tree.fruit.org IN MX 10 mail_server.tree.fruit.org

Сообщение будет доставлено именно компьютеру mail_server.tree.fruit.org, который и является почтовым сервером для указанного домена. Запись MX в базе DNS указывает на почтовый сервер (Mail eXchanger) - компьютер, который занимается обработкой или маршрутизацией электронных почтовых сообщений для своего домена. Обработка почты означает или доставку конечному получателю или передачу другим транспортным службам, например UUCP или BITNET. Маршрутизация - это перенаправление сообщений другим почтовым серверам для доставки конечному получателю.

В базе DNS может быть несколько МХ записей, описывающих несколько почтовых серверов, обслуживающих один домен. В этом случае приоритет использования того или иного сервера указывается цифрой, и первым будет задействован тот компьютер, у которого ее значение меньше. Если для двух машин будет указан равный приоритет, то отправитель будет выбирать получателя случайным образом. После того как отправитель-клиент доставил сообщение МХ - серверу, его работа закончена. Теперь задача по доставке письма конечному получателю целиком ложится на плечи этого сервера. Если для какого-либо домена в системе DNS не существует МХ записей, то дальнейшее развитие событий зависит уже только от программы - почтового клиента. Некоторые из них пытаются доставить сообщение по цифровому IP адресу, если его удается определить.

В доставке электронного сообщения участвуют два компьютера: SMTP-отправитель и SMTP-получатель. Для передачи почты между ними SMTP-отправитель устанавливает соединение с SMTP-получателем. Электронная почта в сети Интернет позволяет передачу вложенных файлов, но без прямого использования протокола SMTP. Программа sendmail, работающая на большинстве SMTP серверов, может передавать только текст. Поэтому все почтовые приложения сами конвертируют присоединяемые к письму двоичные файлы в текстовый формат перед их отправкой. Самым распространенным типом преобразования в последнее время является MIME (Multipurpose Internet Mail Extensions). После получения письма пользовательская программа-клиент выполняет обратное преобразование полученного файла в оригинальный формат.

Протокол SMTP работает так. После того как Вы заполнили заголовки и создали само сообщение, машина-отправитель устанавливает TCP/IP соединение с машиной-получателем. Для этого протокол TCP использует 25-й порт. Получателем может быть компьютер, которому и предназначено сообщение, или промежуточная "почтовая станция". Команды передаются отправителем получателю. На каждую команду получатель должен ответить.

Сначала командой "HELO" отправитель идентифицирует себя, свое доменное имя. В ответ получатель посылает свое. (Эти джентльмены представились друг другу).

Затем получателю дается команда "MAIL" - запрос разрешения на передачу сообщения. Если получатель не возражает, то его ответ краток - "ОК".

И отправитель со следующей командой "RCPT" в качестве аргумента передает имя конечного получателя письма. Каждый адрес получателя письма (а их может быть много) передается отдельной командой, и каждый получатель-пользователь, зарегистрированный в домене сервера-получателя, приветствуется положительным ответом - "ОК". Что касается "чужих" пользователей из других доменов, то сервер-получатель сообщает, что он займется перенаправлением почты. В случае, если получателем является незарегистрированный пользователь "родного" домена, об этом сразу сообщается отправителю (no such user).

После того как все получатели сообщения будут опознаны либо не опознаны, отправитель отдает следующую команду - "DATA". Получатель включает зеленый свет - "ОК" и указывает, какой идентификатор конца сообщения должен использовать отправитель. Теперь уже отправитель передает свой "ОК" в знак получения идентификатора и само сообщение.

Если при сеансе связи не возникло никаких проблем, отправитель отключается командой "QUIT" и получатель закрывает канал. Минимальный набор команд, которые должен поддерживать получатель: HELO, MAIL, RCPT, DATA, RSET, NOOP и QUIT.

Вне зависимости от почтовой программы, которую Вы используете, основы взаимодействия между получателем и отправителем почты не изменились со времен написания RFC 821. Пользовательский интерфейс любой почтовой программы позволит Вам заполнить заголовки сообщения (адрес и тема) и написать само письмо. Когда Вы нажимаете кнопку "Отправить", и происходит весь процесс, описанный выше. Некоторые почтовые программы выводят на дисплей все почтовые команды и статистику состояния канала связи во время передачи сообщения. Можно заметить, что почта в основном доставляется мгновенно. Она может иногда задерживаться в очереди на промежуточных почтовых серверах или маршрутизаторах, но не надолго и это ужа зависит от "погоды" в сети.

В основном электронная почта сегодня передается с использованием SMTP протокола, и она будет находиться на почтовом сервере получателя до тех пор, пока Вы сами не заберете ее оттуда при помощи уже другого протокола - РОР.

Первый стандартизирующий документ, посвященный почтовым программам RFC 821 (он используется до сих пор), предусматривает отправку почтовых сообщений пользователю, который подключен к серверу через простой терминал, и сохранение этих сообщений в его почтовом ящике. Специальные команды позволяли определить сам факт подключения пользователя (с терминала или персонального компьютера), наличие сообщений в его почтовом ящике и осуществить их передачу. Сообщения передавались в семибитном ASCII формате (восьмой бит был равен нулю), что не позволяло передавать двоичные, присоединенные к сообщению файлы. Фактически, размер самого сообщения не превышал 1000 символов.

Терминалы и сегодня еще активно используются, но им на смену уже пришли персональные компьютеры, и именно персональный компьютер пользователя является конечным получателем электронной почты. Для получения почты персональный компьютер использует протокол POP (Post Office Protocol), а для отправки - протокол SMTP. Для того чтобы прочитать свою почту, пользователь должен подключиться к определенному компьютеру - серверу.

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

Когда Вы подключаетесь к сети Интернет через любого провайдера, Вы получаете адрес электронной почты вида: myname@provider.domain и используете его в настройках своей почтовой программы. Для отправки сообщений в настройках почтовой программы Вы указываете имя SMTP сервера, а для получения почты - имя РОР сервера, свое пользовательское имя и пароль.

РОР3 (последняя версия протокола РОР) используется только для получения сообщений, которые хранятся на почтовом сервере. Клиент (Ваш персональный компьютер с почтовой программой, например, Eudora или Outlook Express) устанавливает TCP/IP соединение с РОР3 сервером. Адрес этого сервера содержится в настройках почтовой программы. В качестве транспортного протокола опять используется ТСР и порт номер 110. Так же, как и в случае с SMTP, сервер сообщает о своей готовности примерно так: "POP3 server ready".

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

Как только сервер опознал Вас, он закрывает Ваш почтовый ящик (в реальной жизни это файл со всей Вашей почтой на его диске) для всех других приложений: пока электронная почта будет путешествовать между сервером и Вашим компьютером, НИКТО не в силах подвергнуть этот файл каким-либо изменениям. Даже если на крыльях прилетит новое письмо, оно просто подождет в почтовой очереди.

Теперь сервер переходит уже непосредственно в режим передачи данных, каждому письму присваивается номер. Это позволяет почтовой программе узнать количество писем в почтовом ящике. Можно загрузить с сервера одно письмо или всю почту. Можно настроить почтовую программу на удаление или сохранение сообщений на сервере. Но это уже дело личных вкусов и предпочтений - удобно, когда вся почта валяется в одном надежном месте, а неудобства наступают, когда этой самой почты становится так много, что управлять таким архивом уже невозможно.

Когда все сообщения переданы сервером и приняты Вашим компьютером, почтовая программа отдает команду "QUIT"и разрывает соединение. Далее сервер сам выполняет необходимые операции с почтовым ящиком, очищает его, если письма были помечены для удаления.

А пользователь уже может спокойно разобраться со своей почтой на своем компьютере. Он уже отключен от РОР3 сервера.

Игорь Грень


Компьютерная газета. Статья была опубликована в номере 28 за 1999 год в рубрике интернет :: разное

©1997-2024 Компьютерная газета