Читаем без скачивания TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) - Сидни Фейт
Шрифт:
Интервал:
Закладка:
Модель команда/ответ, которую мы видели в протоколе File Transfer Protocol (FTP), применяется и в данном случае; при этом выполняется сходное декодирование сообщения ответа. Следовательно, все сообщения от удаленного сервера электронной почты начинаются с номера ответа. Отметим, что почтовые идентификаторы выведены в угловых скобках (например, <[email protected]>). Имена хостов не чувствительны к регистру и могут выводиться как в верхнем, так и в нижнем регистре. Однако в именах пользователей различаются регистры символов, хотя это и зависит от принятых соглашений для конкретной почтовой системы.
220 tigger.jvnc.net 5.65с/IDA-1.4.4 Идентификатор получателя и время
его объявления.
Sendmail is ready at Sun. 27 Aug 1995
08:02:55 -0400
HELO MATH-GW.CS.YALE.EDU Идентификатор отправителя.
250 Hello MATH-GW.CS.YALE.EDU, pleased
to meet you
MAIL FROM: <[email protected]> Источник полученного почтового
сообщения.
250 <[email protected]>.. Sender ok
RCPT TO; <[email protected]> Получатель идентифицирован.
Может присутствовать несколько операторов RCPT ТО.
250 <[email protected]>.. Receiver ok
DATA Начало сообщения.
354 Enter mail, end with "." on a line
by itself
Received: by PASCAL.MATH.YALE.EDU; Первым появляется заголовок.
Sun, 27 Aug 1995 08:01:44 -0400
Date: Sun, 27 Aug 1995 08:01:44 -0400
From: Sidnie Feit <[email protected]>
Message-Id: <[email protected]>
To: [email protected]er.jvnc.net
Subject: It's OK to talk to yourself!
Date: 08/26/95 1:29:59 PM
За заголовком следует пустая строка.
Hi there. Это тело сообщения.
See you soon.
. Сообщение заканчивается .<CR><LF>
250 Ok
Quit До выхода из программы можно
отправить другие сообщения.
220 tigger.jvnc.net closing connection
Connection closed by foreign host.
Обратите внимание, что конец сообщения отмечается строкой, содержащей только символ точки.
Предположим, что пользователю нужно послать такую строку внутри сообщения. Дополнительный символ точки будет вставлен отправителем SMTP и удален получателем SMTP.
16.7 Временная метка и идентификатор сообщения
При получении почты интересно узнать время ее отправления и получения. SMTP добавляет эту информацию к пересылаемому сообщению. Кроме того, этот протокол отслеживает все хосты, которые передавали почтовое сообщение, и время получения сообщения каждым из них.
Когда сообщение приходит к агенту пересылки SMTP, он вставляет в начало сообщения временную метку (timestamp). При каждой последующей пересылке вставляется дополнительная временная метка, содержащая:
■ Идентификатор хоста, пославшего сообщение
■ Идентификатор хоста, получившего сообщение
■ Дату и время получения сообщения
Временные метки из заголовка сообщения обеспечивают неоценимую информацию для отладки, особенно когда возникают проблемы с пересылкой почты. Например, можно будет узнать, что сообщение оставалось на одном из промежуточных хостов в течение одного-двух дней.
Формат временной метки может различаться на различных системах, и разработчики могут включать в него дополнительные сведения. Новые реализации используют в метке значение местного времени, сопровождаемое смещением от универсального времени (Universal Time), которое ранее называлось временем по Гринвичу (Greenwich Mean Time).
Часы компьютера иногда установлены неточно, поэтому последовательности временных меток сообщения не всегда согласуются со здравым смыслом. Например, иногда кажется, что сообщение было получено раньше, чем было отправлено. Так как администраторы сети — единственные сотрудники, имеющие дело с установкой компьютерных часов, ошибки могут возникнуть из-за невнимательности.
Когда почта достигает точки назначения, пользовательский агент может самостоятельно добавить строку, указывающую на исходного отправителя.
Приведенный ниже пример поясняет причину добавления таких строк к сообщению. Верхняя строка была вставлена пользовательским агентом получателя. Она содержит сведения об источнике сообщения и о времени его поступления в почтовый ящик.
Идентификатор сообщения (Message-Id) в нижней части примера был добавлен первым почтовым агентом пересылки, который начал обрабатывать это сообщение.
Временные метки нужно анализировать снизу вверх, что позволит понять путь следования сообщения от diall31.mbnet.mb.ca к access.mbnet.mb.ca, далее к bulldog.cs.yale.edu и наконец к pascal.math.yale.edu.
From [email protected] Thu Aug 17 14:36:19 1995
Received: from BULLDOG.CS.YALE.EDU by PASCAL.MATH.YALE.EDU via SMTP;
Thu, 17 Aug 1995 14:36:19 -0400
Received: from access.mbnet.mb.ca by bulldog.CS.YALE.EDU via SMTP;
Thu, 17 Aug 1995 14:31:47 -0400
Received: from ftl6 (dial131.mbnet.mb.ca) by access.mbnet.mb.ca with SMTP id
AA02060
(5.67b/IDA-1.4.4); Thu, 17 Aug 1995 14:31:33 -0500
Date: Thu, 17 Aug 1995 14:31:33 -0500
Message-Id: <[email protected]>
16.8 Отброшенная почта
Иногда бывает невозможно переслать почту в точку назначения. Чаще всего это происходит из-за неправильного ввода идентификатора получателя. Почта, которая не может быть доставлена, отсылается назад отправителю и называется отброшенной (bounced mail).
16.9 Команды SMTP
Сценарий из раздела 16.6.1 содержал наиболее часто используемые команды SMTP. Полный набор команд SMTP представлен в таблице 16.1.
Таблица 16.1 Команды SMTP
Команда Описание HELO Идентифицирует отправителя для получателя. MAIL FROM Начало почтовой транзакции и указание на источник сообщения. RCPT ТО Идентифицирует отдельного получателя. Последовательность таких команд позволяет указать несколько получателей. Получатель по возможности проверяет правильность указанного имени и выводит результат проверки в ответном сообщении. Такая проверка не имеет смысла на промежуточных хостах. Если позже окажется, что некоторый получатель указан некорректно, обратно отправляется краткое сообщение об ошибке. DATA Отправитель готов передать строки текста. Каждая строка завершается <CR> <LF>. Максимальная длина строки, включая <CR><LF>, составляет 1000 символов. Реализации SMTP должны обеспечивать отправку и получение сообщений длиной до 64 К/байт. Желателен максимальный размер, поскольку почта часто используется для копирования файлов. RSET Прерывает текущую почтовую транзакцию, удаляя всю информацию о ней у отправителя и получателя. NOOP Запрашивает у партнера положительный ответ. QUIT Запрашивает у партнера положительный ответ и закрытие соединения. VRFY Запрашивает у партнера подтверждение правильности указанного имени получателя. EXPN Запрашивает у партнера подтверждение соответствия имени получателя списку почтовой рассылки (mailing list). Если указанное имя находится в списке, нужно возвратить сведения о членстве в группе данного почтового списка. HELP Запрашивает у партнера информацию об используемой реализации, например о списке поддерживаемых команд. Описанные в стандарте, но редко реализуемые или используемые команды TURN Запрос смены ролей получателя и отправителя. Партнер может отказаться выполнить эту команду. SEND Если получатель зарегистрирован в системе назначения — направить сообщение прямо на терминал получателя. SOML Send or Mail — послать или отправить. Если получатель зарегистрирован в системе назначения — направить сообщение прямо на терминал получателя, иначе отправить сообщение как почту локальной системы. SAML Send and Mail — послать и отправить. Доставить в почтовый ящик получателя. Если пользователь зарегистрирован, то доставить и на его терминал.Команды пересылаются как 4-символьные мнемонические названия. Многие команды сопровождаются параметрами.