Протокол FTP был разработан для следующих целей:
Хотя FTP может использоваться пользователем непосредственно на терминале, этот протокол был создан с мыслью о использовании его программами.
Целью протокола является удовлетворение потребностей пользователей больших и малых хостов, персональных рабочих станций с возможностью легкой реализации.
FTP имеет долгую историю создания. Первое раз механизм передачи файлов был разработан в 1971 году и реализован для хоста на M.I.T. (см. RFC114 с коментариями в RFC141).
В RFC172 был описан ориентированный на пользователя протокол передачи файлов между хостами (велючая терминал IMPs). В RFC265 и RFC281 были пересмотрены некоторые аспекты. Использование "Set Data Type" было предложено в RFC294 в январе 1972 года.
RFC354 заменил RFC264 и RFC265. File Transfer Protocol был теперь определен как протокол для передачи между HOST-ами для сети ARPANET. Основной функцией протокола была названа передача файлов эффективно и точно между хостами. Эта функция должна была помочь в использовании удаленных серверов файлов. Позднее появилось довольно большое количество документов RFC, посвященных этому вопросу. Приведу лишь некоторые из них: RFC385, RFC414, RFC430. Первая "официальная" версия протокола была опубликована в RFC454.
В июле 1983 года были исправлены некоторые неточности спецификации, но структура осталась прежней. Все эти изменения были отражены в RFC542 - новой "официальной" версии протокола.
В 1974 году были продолжены дискусси на тему FTP. В результате появились следующие документы: RFC607, RFC614, RFC624, в 1975 - RFC686, RFC691.
В связи с переводом протокола нижнего уровня с NCP в TCP, появился новый документ, описывающий стандарт: RFC765.
Последняя (какую смог найти автор этого документа) версия протокола появилась в октябре 1985 года под номером RFC959. В ней были исправлены некоторые неточности из RFC765 и введены некоторые необязательные для реализации команды.
Рисунок, поданый ниже представляет структуру FTP сервиса:
Замечания: 1. Data Connection может использоваться в обу направлениях
2. Существование Data Connection не обязательно.
В модели, представленной на рисунке, User-PI инициализирует control connection, которое реализуется как в Telnet-протоколе. Команды, сформированные пользователем, транслируются в User-PI и передаются процессу сервера через control connection. Стандартные ответы пересылаются от Server-PI к UserPI через control connection как реакция на команды.
Команды FTP определяют параметры для DATA-соединения (порт данных, вид передачи, тип представления данных и структуру) и сущность операции (сохранение, поиск, добавление, удаление и т.д.). User-DTP должен "слушать" определенный порт данных, и сервер определит data connection и data-передатчик (data-transfier) в соответствии с определенными параметрами. Следует отметить, что порт данных (data port) не обязательно должен находиться на том самом хосте, что передает комманды через управляющее соединение (control connection), однако пользователь или процесс FTP-пользователя должен обеспечивать "слушание" на определенным порте данных. Необходимо также отметить, что data соединение (data connection) может использоваться для одновременной передачи и приема.
Может возникнуть ситуация, когда пользователь хочет переместить файлы между двумя хостами, ни один из которых не является локальным.В этом случае пользователь устанавливает управляющее соединение с двумя серверами и потом организовывает data-соединение между ними. Таким образом, управляющая информация проходит через User-PI, а данные передаются между процессами передачи данных серверов. Ниже представлена диаграма подобного взаимодействия:
|
Протокол требует, чтобы управляющее соединение было открыто пока идет передача данных. Пользователь сам должен запрашивать о закрытии управляющего соединения, в то время как закрытием соединения будет заниматься сервер. Сервер может закрыть передачу данных, если управляющие соединения были закрыты без команды.
FTP использует Telnet протокол в управляющем соединении (control connection). Это может быть достигнуто двумя способами:
Простая реализация, разделенный код и модульное программирование указывают на второй способ. Еффективность и независимость указывают на первый метод. В практике, FTP использует небольшую часть Telnet протокола, таким образом реализация первого способа не должна быть трудна.
Дело в том, что реализация этого протокола не входит в ядро Linux'а. Ну и потом, в заголовке ясно написано, что это только обзор. Описание протокола занимает 69 страниц, приводить его все, да еще с примерами исходного кода - это уже не будет обзор ;-)