Протокол FTP

FTP (RFC-959) обеспечивает файловый обмен между удаленными пользователями. Протокол FTP формировался многие годы. Первые реализации в МТИ относятся к 1971. (RFC 114 и 141). RFC 172 рассматривает протокол, ориентированный на пользователя, и предназначенный для передачи файлов между ЭВМ. Позднее в документах RFC 265 и RFC 281 протокол был усовершенствован. Заметной переделке протокол подвергся в 1973, и окончательный вид он обрел в 1985 году. Таким образом, данный протокол является одним из старейших.

Работа FTP на пользовательском уровне содержит несколько этапов:

1. Идентификация (ввод имени-идентификатора и пароля).

2. Выбор каталога.

3. Определение режима обмена (поблочный, поточный, ascii или двоичный).

4. Выполнение команд обмена (get, mget, dir, mdel, mput или put).

5. Завершение процедуры (quit или close).

Команды FTP приведены в таблице 1.

Таблица 1.

Команда Описание
ABOR прервать предыдущую команду FTP и любую передачу данных
LIST список файлов список файлов или директорий
PASS пароль пароль на сервере
PORT n1,n2,n3,n4,n5,n6 IP адрес клиента (n1.n2.n3.n4) и порт (n5 x 256 + n6)
QUIT закрыть бюджет на сервере
RETR имя файла получить (get) файл
STOR имя файла положить (put) файл
SYST сервер возвращает тип системы
TYPE тип указать тип файла: A для ASCII, I для двоичного
USER имя пользователя имя пользователя на сервере

 

Команды и отклики передаются по управляющему соединению между клиентом и сервером в формате NVT ASCII. В конце каждой строки команды или отклика присутствует пара CR, LF. Команды состоят из 3 или 4 байт, а именно из заглавных ASCII символов, некоторые с необязательными аргументами. Клиент может отправить серверу более чем 30 различных FTP команд.

FTP отклики

Отклики состоят из 3-циферных значений в формате ASCII, и необязательных сообщений, которые следуют за числами. Подобное представление откликов объясняется тем, что программному обеспечению необходимо посмотреть только цифровые значения, чтобы понять, что ответил процесс, а дополнительную строку может прочитать человек. Поэтому пользователю достаточно просто прочитать сообщение (причем нет необходимости запоминать все цифровые коды откликов). Группы откликов представлены в таблице 2.

Таблица 2.

Отклик Описание
1yz Положительный предварительный отклик. Действие началось, однако необходимо дождаться еще одного отклика перед отправкой следующей команды.
2yz Положительный отклик о завершении. Может быть отправлена новая команда.
3yz Положительный промежуточный отклик. Команда принята, однако необходимо отправить еще одну команду.
4yz Временный отрицательный отклик о завершении. Требуемое действие не произошло, однако ошибка временная, поэтому команду необходимо повторить позже.
5yz Постоянный отрицательный отклик о завершении. Команда не была воспринята и повторять ее не стоит.
x0z Синтаксическая ошибка.
x1z Информация.
x2z Соединения. Отклики имеют отношение либо к управляющему, либо к соединению данных.
x3z Аутентификация и бюджет. Отклик имеет отношение к логированию или командам, связанным с бюджетом.
x4z Не определено.
x5z Состояние файловой системы.

 

Третья цифра дает дополнительное объяснение сообщению об ошибке. Ниже приведены некоторые типичные отклики с возможными объясняющими строками.

  • 125 Соединение данных уже открыто; начало передачи.
  • 200 Команда исполнена.
  • 214 Сообщение о помощи (для пользователя).
  • 331 Имя пользователя принято, требуется пароль.
  • 425 Невозможно открыть соединение данных.
  • 452 Ошибка записи файла.
  • 500 Синтаксическая ошибка (неизвестная команда).
  • 501 Синтаксическая ошибка (неверные аргументы).
  • 502 Нереализованный тип MODE.

 

Управление соединением

Использовать соединение данных можно тремя способами.

1. Отправка файлов от клиента к серверу.

2. Отправка файлов от сервера к клиенту.

3. Отправка списка файлов или директорий от сервера к клиенту.

 

Задания к лабораторной работе № 4:

Все программы ко всем заданиям выполняются на любом языке программирования, допускается использование компонент ClientSocket, ServerSocket, TcpClient, TcpServer в C++Builder/Delphi и аналогичных классов в C++/C#.

Вариант 1:

Написать программу, реализующую функции HTTP-сервера версии 1.0. В обязательном порядке должны поддерживаться следующие виды запросов: GET, POST, HEAD, а так же наиболее распространенные коды ответов. Сервер конфигурируется на определенный каталог, где расположены html-файлы и другие подкаталоги. В главном окне сервера расположено поле типа memo, в котором отображается весь протокол общения HTTP клиента с HTTP сервером, например:

GET /index.html HTTP/1.ОConnection: Keep-AliveUser-Agent: Mozilla/4.05 (WinNT; 1)Host: www.ora.comAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*HTTP/1.0 200 Document followsDate: Fri, 20 Jan 1998 08:17:58 GMTServer: Apache/1.2.6Last-modified: Mon, 20 Jun 1997 21:53:08 GMTContent-type: text/htmlContent-length: 2482<html><body>.....

Тестирование и подача программы-сервера производится при помощи Web-броузера.

Вариант 2:

Написать программу, реализующую функции HTTP-клиента версии 1.0. В обязательном порядке должны поддерживаться следующие виды запросов: GET, POST, HEAD, а так же наиболее распространенные коды ответов. Отображение полученных данных в форматированном виде не обязательно (можно в виде plain text). В окне клиента должно быть расположено поле типа memo в котором отображается весь протокол общения HTTP клиента с HTTP сервером (см. задание 1). Тестирование и подача HTTP клиента производится при помощи запроса к реальному web-серверу, расположенному в Internet или установленному в локальной сети, или при помощи запроса к web-серверу, написанному в предыдущем задании.

Вариант 3:

Написать программу, реализующую функции POP3-сервера. В главном окне сервера расположено поле типа memo, в котором отображается весь протокол общения клиента с сервером, например:

STAT +OK 2 320 LIST +OK 2 messages (320 octets)

Тестирование и подача программы-сервера производится при помощи любого стандартного почтового клиента.

Вариант 4:

Написать программу, реализующую функции POP3-клиента. В главном окне клиента расположено поле типа memo, в котором отображается весь протокол общения клиента с сервером (см. задание 3).

Тестирование и подача программы-клиента производится при помощи любого стандартного почтового сервера, расположенного в сети Internet или локальной сети. В качестве сервера может использоваться программа, написанная к заданию 3.

Вариант 5:

Написать программу, реализующую функции SMTP-сервера. В главном окне сервера расположено поле типа memo, в котором отображается весь протокол общения клиента с сервером, например:

MAIL From <Alex@mail.ru>250 Sender okRCPT To:<ysemenov@mail.ch>250 <ysemenov@mail.ch> Recepient ok DATA

Тестирование и подача программы-сервера производится при помощи любого стандартного почтового клиента.

Вариант 6:

Написать программу, реализующую функции SMTP-клиента. В главном окне клиента расположено поле типа memo, в котором отображается весь протокол общения клиента с сервером (см. задание 5).

Тестирование и подача программы-клиента производится при помощи любого стандартного почтового сервера, расположенного в сети Internet или локальной сети. В качестве сервера может использоваться программа, написанная к заданию 5.

Вариант 7:

Написать программу, реализующую функции FTP-сервера. В главном окне сервера расположено поле типа memo, в котором отображается весь протокол общения клиента с сервером, например:

USER vasilisa331 Password required for vasilisa.PASS abcd230 User vasilisa logged in.
PORT 140,252,13,34,4,150200 PORT command successful.

Тестирование и подача программы-сервера производится при помощи любого стандартного FTP клиента.

Вариант 8:

Написать программу, реализующую функции FTP-клиента. В главном окне клиента расположено поле типа memo, в котором отображается весь протокол общения клиента с сервером (см. задание 7).

Тестирование и подача программы-клиента производится при помощи любого стандартного FTP сервера, расположенного в сети Internet или локальной сети. В качестве сервера может использоваться программа, написанная к заданию 7.

 


Литература: