
Рис. 4.2 Управляющее соединение и соединение данных
Во время FTP-сеанса серверу необходимо иметь информацию о пользователе. Как правило, управляющее соединение связано со специальной учетной записью пользователя. Кроме того, сервер должен следить за текущим каталогом, в котором работает пользователь. Необходимость затрат ресурсов на хранение информации приводит к значительному снижению числа FTP-сеансов, одновременно поддерживаемых сервером. В этом заключается недостаток протокола FTP по сравнению с HTTP: как вы помните, HTTP не запоминает состояние соединения.
Мы закончим текущий раздел кратким описанием наиболее часто используемых команд протокола FTP. Команды, посылаемые клиентом серверу, и ответы сервера передаются через управляющее соединение в кодировке ASCII для 7-разрядных символов. Таким образом, команды FTP, как и HTTP, могут быть легко прочитаны человеком. Для разделения команд используются пары символов перехода на новую строку (возврат каретки и перевод строки). Имя команды представляет собой четыре символа в верхнем регистре, за которым могут следовать параметры. Ниже перечислены несколько FTP-команд.
USER username:
Передача серверу имени пользователя. PASS password:
Передача серверу пароля. LIST:
Запрос к серверу на передачу имен всех файлов, находящихся в текущем каталоге. Передача списка файлов происходит с использованием непостоянного соединения данных.
RETR filename:
Запрос к серверу на передачу файла с указанным именем. Сервер в ответ должен установить соединение данных и начать передачу файла пользователю.
STOR filename:
Передача файла от пользователя в текущий каталог удаленного хоста.
Как правило, одна команда, вводимая пользователем, вызывает генерацию и передачу одной FTP-команды. Ответ сервера представляет собой трехзначное число, иногда сопровождаемое небольшим текстовым пояснением. Такой формат очень напоминает строку состояния в ответе для протокола HTTP; более того, разработчики HTTP намеренно заимствовали этот формат из FTP. Ниже приведено несколько типичных ответов протокола FTP.
331 UsernameОК. passwordrequired
125 Data connection already open; transfer starting
425 Can’t open data connection
452 Error writing file
2. Электронная почта
Как и обычная почта, электронная почта является асинхронным средством связи: люди посылают друг другу сообщения в любое удобное для них время без предварительной договоренности с адресатами. Преимуществами электронной почты перед обычной являются высокая скорость доставки, простота использования и низкая стоимость обслуживания. С помощью списка рассылки с адресами отправитель может разослать одно и то же письмо сотням получателей одновременно. Кроме того, современная электронная почта позволяет вместе с письмами пересылать гиперссылки, текст в формате HTML, изображения, аудио - и видеофайлы, Java-апплеты и т. д. В этом разделе мы рассмотрим протоколы прикладного уровня, составляющие основу электронной почты. Однако перед тем как углубляться в детали, взглянем на структуру почтовой службы и ее ключевые компоненты.
На рис. 4.3 представлена структура системы электронной почты. В этой структуре можно выделить три ключевых компонента: агенты пользователя, почтовые серверы и протокол SMTP.
Мы рассмотрим каждый из компонентов на примере двух пользователей, Алии и Вовы, общающихся по электронной почте. Агенты пользователя позволяют читать, отвечать, пересылать, создавать и сохранять электронные письма; их часто называют программами для чтения почты, хотя мы постараемся избегать этого термина в нашей книге. Когда Алия создает новое письмо Вове, ее агент отсылает письмо почтовому серверу, где письмо попадает в очередь исходящих сообщений сервера. Когда Боб захочет прочитать письмо, его агент соединится с почтовым сервером и доставит письмо на персональный компьютер Вовы. Во второй половине 1990-х большое распространение получили агенты с графическим интерфейсом пользователя (Graphical User Interface, GUI), позволяющие читать и создавать мультимедийные сообщения. В настоящее время наиболее популярными агентами с интерфейсом GUI являются Eudora, Microsoft Outlook и Netscape’s Messenger. Кроме того, существует множество агентов с текстовыми интерфейсами; к ним следует отнести mail, pine и elm.

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

Рис. 4.4 Алия посылает сообщение Вове
Рассмотрим пример обмена сообщениями между 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 *****@***fr … Sender ok
C: RCPT TO:
S: 250 *****@***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сообщение «Doyoulikeketchup? Howaboutpickles?» спочтовогосервераcrepes. fr. Клиентиспользовалпятьразличныхкоманд: НЕLLO, MAILFROM, 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 в нужном порядке. Подобным образом вы можете, не прибегая к агенту пользователя, посылать сообщения электронной почты своим знакомым.
2.1 Форматы сообщений электронной почты
Когда Алия пишет обычное электронное письмо Вове, она может снабдить его различной дополнительной информацией: почтовым адресом Вовы, своим почтовым адресом, датой создания письма. Подобная информация содержится в заголовке письма, предшествующем его телу. Заголовок представляет собой совокупность строк, которые описаны в документе RFC 822. Заголовок сообщения отделяется от тела пустой строкой (CRLF). RFC 822 определяет формат всех строк заголовка сообщения, а также их семантическую интерпретацию. Как и в протоколе HTTP, каждая строка заголовка содержит текст в виде символов ASCII, включающий ключевое слово и значение, разделенные знаком двоеточия. Некоторые ключевые слова являются обязательными, другие — не обязательными. Примерами обязательных ключевых слов являются From: и То:, а не обязательных — Subject:. Обратите внимание на то, что строки заголовка отличаются от SMTP-команд, рассмотренных ранее в этом разделе. Команды представляют собой часть процедуры рукопожатия, а строки заголовка — часть передаваемого сообщения.
Типичный заголовок сообщения выглядит следующим образом:
From: *****@***ru
То: *****@***com
Subject: Searching for the meaning of life.
После заголовка следует пустая строка, а за ней начинается тело сообщения в кодировке ASCII. Настоятельно рекомендуем вам самостоятельно послать почтовому серверу сообщение, содержащее несколько строк заголовка, включая строку Subject:. Для этого с помощью программы Telnet следует установить ТСР-соеди-нение с нужным сервером, введя следующую строку:
telnet serverName 25
2.2 Многоцелевых расширений почты Интернета MIME
Если приведенные выше заголовки подходят для сообщений, содержащих текст в кодировке ASCII, то их содержимого недостаточно для сообщений с аудио-, видео - и прочей информацией, формат которой не соответствует ASCII. Это требует включения в сообщение специальных заголовков, а следовательно, расширения стандарта RFC 822. Такое расширение описано в документах RFC 2045 и 2046 и носит название многоцелевых расширений почты Интернета (Multipurpose Internet Mail Extensions, MIME).
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |


