Компьютерные сети

Многоуровневая архитектура Интернета

SMTP

Статья добавлена 29 июля, 2008 года

211.png

Теперь рассмотрим подробнее, каким образом осуществляется передача сообщения между почтовыми серверами. Любопытно отметить, что протокол SMTP по своей сути напоминает непосредственное общение между двумя людьми. Итак, сначала SMTP-клиент пытается установить ТСР-соединение с портом 25 сервера; если сервер не отвечает, попытка повторяется позднее. После того как соединение установлено, клиент и сервер обмениваются рукопожатиями на прикладном уровне по аналогии с людьми, которые представляются друг другу перед тем, как начать общение. В ходе процедуры рукопожатия клиент определяет адреса почтовых ящиков отправителя и получателя сообщения. По завершении рукопожатия начинается процесс передачи сообщения от клиента к серверу. Поскольку передача осуществляется с помощью протокола TCP, гарантируется надежная доставка данных. Если в очереди клиента имеются другие сообщения, предназначенные этому же серверу, все они пересылаются последовательно через одно ТСР-соединение. После передачи всех сообщений клиент закрывает соединение с сервером.

Рассмотрим пример обмена сообщениями между SMTP-клиентом (С) и SMTP-сервером (S). Хост клиента имеет имя _crepes.fr, а хост сервера — имя _hamburger.edu. Строки, помеченные литерой С, передаются клиентом в свой сокет в той же кодировке ASCII, в которой они приведены ниже; то же самое касается строк, помеченных литерой S и относящихся к серверу. Итак, после установления ТСР-соедине-ния обмен происходит следующим образом:

S: 220 hamburger.edu
С: НЕLLO _crepes.fr
S: 250 Hello _crepes.fr. pleased to meet you
С: MAIL FROM:
S: 250 _alice@crepes.fr … Sender ok
C: RCPT TO:
S: 250 bob@hamburger.edu … Recipient ok
C: DATA
S: 354 Enter mail, end with “.” on a line by itself
C: Do you like ketchup?
C: How about pickles?
C: .
S: 250 Message accepted for delivery
C: QUIT
S: 221 _hamburger.edu closing connection

В приведенном примере клиент послал почтовому серверу hamburger.edu сообщение «Do you like ketchup? How about pickles?» с почтового сервера crepes.fr. Клиент использовал пять различных команд: НЕЮ, MAIL FROM, RCPT ТО, DATA и QUIT. Смысл этих команд вполне понятен. Кроме того, клиент использовал символ точки, указывающий на конец сообщения. Если пару символов перехода на следующую строку (возврат каретки и перевод строки) обозначить как CR и LF соответственно, то каждое сообщение оканчивается сочетанием CRLF.CRLF. Сервер посылает ответы на все команды клиента; ответ включает код и (необязательно) описание на английском языке. Обратите внимание на то, что протокол SMTP поддерживает постоянные соединения: если клиенту необходимо отправить несколько сообщений подряд, все сообщения передаются через одно ТСР-соединение. Передача каждого нового сообщения начинается с команды MAIL FROM: crepes.fr, а заканчивается одиночным символом точки. После того как все сообщения посланы, клиент генерирует команду QUIT.

Рекомендуем вам самостоятельно «пообщаться» с SMTP-сервером, используя программу Telnet. Для этого введите следующую строку:

telnet serverName 25

Здесь serverName — имя удаленного почтового сервера. При этом будет установлено ТСР-соединение вашего хоста с почтовым сервером. Вероятнее всего, сервер сразу же ответит сообщением с кодом 220. После этого введите команды HELO, MAIL FROM, RCPT ТО, DATA, CRLF.CRLF и QUIT в нужном порядке. Подобным образом вы можете, не прибегая к агенту пользователя, посылать сообщения электронной почты своим знакомым.

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

Оставить комментарий