FTP-сеанс представляет собой обмен файлами
FTP-сеанс представляет собой обмен файлами, находящимися на двух хостах — локальном и удаленном. Для получения доступа к удаленному хосту пользователю необходимо ввести свои имя и пароль. После получения доступа пользователь может осуществлять передачу файлов как с удаленного хоста на локальный, так и наоборот. Как показано на рис. 2.8, пользователь взаимодействует с FTP при помощи пользовательского агента FTP. Сначала пользователь указывает имя удаленного хоста FTP-клиенту для того, чтобы последний установил ТСР-соединение с сервером, а затем вводит свои имя и пароль, пересылаемые серверу при помощи FTP-команд. После распознавания пользователя сервером начинается процесс передачи файлов в нужном направлении.
HTTP и FTP являются протоколами передачи файлов и имеют много общего; например, в качестве протокола транспортного уровня они оба используют TCP. Тем не менее между HTTP и FTP существуют и принципиальные различия. Протокол FTP использует два параллельных TCP-соединения: управляющее соединение и соединение данных. Управляющее соединение служит для пересылки управляющей информации между двумя хостами: имени пользователя и пароля, команд смены текущего удаленного каталога, передачи и запроса файлов. Соединение данных предназначено для передачи самих файлов. Поскольку управляющее соединение отделено от соединения данных, говорят, что передача управляющей информации осуществляется вне полосы (out-of-band). В главе 6 мы познакомимся с протоколом RTSP, предназначенным для контроля передачи данных потокового мультимедиа и также использующим механизм передачи управляющей информации вне полосы. В отличие от FTP, протокол HTTP через единственное ТСР-соединение осуществляет передачу и файлов, и команд (строк заголовков для запросов и ответов). Поэтому говорят, что HTTP передает свою управляющую информацию внутри полосы (in-band). Другим примером протокола с передачей управляющей информации внутри полосы является SMTP, характерный для приложений электронной почты. Мы рассмотрим протокол SMTP в следующем разделе. На рис. 2.9 приведена иллюстрация двух соединений протокола FTP.
FTP-сеанс начинается с установления управляющего TCP-соединения между клиентом и удаленным хостом (сервером) через порт с номером 21. По этому соединению осуществляется передача имени пользователя и пароля, а также команд смены текущего каталога и обмена файлами. Когда сервер получает команду передачи или приема файла, он устанавливает с клиентом ТСР-соединение данных, затем осуществляет файловый обмен и закрывает соединение. Каждое соединение позволяет передать только один файл; таким образом, множественный обмен вызывает необходимость многократной установки соединения данных. При этом управляющее соединение остается открытым в течение всего сеанса. Учитывая введенную терминологию, соединение данных можно отнести к непостоянным соединениям.
Во время 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 ОК. password required
125 Data connection already open; transfer starting
425 Can’t open data connection
452 Error writing file
Читателям, заинтересовавшимся набором команд и ответов, использующихся в FTP, рекомендуем обратиться к документу RFC 959.