Протоколы Internet

         

Протокол пересылки файлов FTP


4.5.4 Протокол пересылки файлов FTP

Семенов Ю.А. (ГНЦ ИТЭФ)

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

Для реализации обмена между двумя персональными ЭВМ в пределах сети (программные пакеты PCTCP, и т.д.) можно резидентно загрузить FTPSRV или другую эквивалентную программу. Также как и в случае TELNET необходима идентификация, но многие депозитарии допускают анонимный вход (имя пользователя ANONYMOUS, RFC-1635), который не требует слова пропуска (пароля) или допускает ввод вашего почтового адреса вместо него.

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

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

Выбор каталога.
3. Определение режима обмена (поблочный, поточный, ascii или двоичный).
4. Выполнение команд обмена (get, mget, dir, mdel, mput или put).
5. Завершение процедуры (quit или close).

FTP довольно необычная процедура, так как поддерживает две логические связи между ЭВМ (Рис 4.5.4.1). Одна связь служит для удаленного доступа и использует протокол Telnet. Другая связь предназначена для обмена данными. Сервер производит операцию passive open для порта 21 и ждет соединения с клиентом. Клиент осуществляет операцию active open для порта 21. Канал остается активным до завершения процедуры FTP. TOS (тип IP-сервиса) соответствует минимуму задержки, так как этот канал используется для ручного ввода команд. Канал для передачи данных (TCP) формируется каждый раз для пересылки файлов. Канал открывается перед началом пересылки и закрывается по коду end_of_file (конец файла). IP-тип сервиса (TOS) в этом случае ориентирован на максимальную пропускную способность.


Конечный пользователь взаимодействует с протокольным интерпретатором, в задачи которого входит управление обменом информацией между пользователем и файловой системой, как местной, так и удаленной. Схема взаимодействия различных частей Internet при работе FTP изображена на рис. 4.5.4.1.

Сначала по запросу клиента формируется канал управления, который в дальнейшем используется для передачи команд от клиента и откликов от сервера. Информационный канал формируется сервером по команде клиента, он не должен существовать постоянно на протяжении всей FTP-сессии и может формироваться и ликвидироваться по мере необходимости. Канал управления может быть закрыт только после завершения информационного обмена. Для канала управления используется протокол Telnet. После того как управляющий канал сформирован, клиент может посылать по нему команды. Сервер воспринимает, интерпретирует эти команды и передает отклики.



Рис. 4.5.4.1 Схема работы протокола ftp.

Возможна и другая схема взаимодействия, когда по инициативе клиента осуществляется файловый обмен между двумя ЭВМ, ни одна из которых не является машиной клиента (см. рис. 4.5.4.2).



Рис. 4.5.4.2. Организация информационного обмена между двумя удаленными машинами

На фазе задания режима обмена предоставляются следующие возможности:

Команда Block сохраняет структуру логических записей файла.

Команда Stream устанавливает режим, при котором не производится пересылки контрольной информации для блоков. Это наиболее быстрый режим обмена, он работает по умолчанию.

Команда TYPE может задать режимы обмена IMAGE, ASCII или EBCDIC. Из них ASCII - используется по умолчанию. Режим EBCDIC применяется для обменов между ЭВМ, работающими с набором символов EBCDIC. Режим IMAGE предполагает обмен 8-битными байтами, используется для передачи двоичной (а не текстовой) информации. Более подробный список команд помещен ниже. Структурно информация может передаваться в виде файлов (структура по умолчанию), в виде последовательности записей (применимо для текстовых файлов ASCII или EBCDIC) или постранично (последняя структура не относится к числу рекомендуемых).



Для копирования файла из удаленного сервера используется команда GET, для копирования группы файлов - MGET, в последнем случае применяются символы заменители, например, MGET *.txt (или RFC-18*.txt, при этом скопируются файлы с RFC-1800.txt до RFC-1899.txt, если таковые существуют в текущем каталоге). Аналогом команды GET в какой-то степени является команда DIR (ls), только она переносит содержимое каталога, что для некоторых операционных систем эквивалентно. При использовании модификации mget проявляйте осторожность - вы можете заблокировать телекоммуникационный канал длительным копированием. Для записи файла в удаленный сервер применяется команда PUT. При операциях обмена обычно используется текущий каталог локальной ЭВМ. В вашем распоряжении всегда имеется возможность поменять местный каталог с помощью команды LCD или ее аналога. Любая команда обмена выполняется в несколько этапов:

  • Формирование канала под управлением клиента, так как именно клиент выдал команду get, dir, put и т.д.


  • Клиент выбирает произвольный номер порта на своей ЭВМ и осуществляет процедуру passive open для этого порта.


  • Клиент посылает номер порта серверу по каналу управления (порт 21), используя команду PORT. Можно обойтись и без команды PORT (используется тот же порт, что и в командном канале), но это увеличивает задержки и по этой причине не рекомендуется.


  • Сервер получает номер порта по каналу управления и выдает команду active open в указанный порт ЭВМ-клиента. Сервер для канала данных всегда использует порт с номером 20.


  • Рассмотрим пример FTP-сессии. Для этого выдадим команду (тексты, набираемые с клавиатуры, выделены курсивом):

    FTP -d ns.itep.ru (флаг -d означает установку отладочного режима, при котором выдаются все сообщения и внутренние команды на экран терминала).
    FTP Trying...Open

    220- *** Welcome at FTP-Server ftp.ITEP.RU ***

    220-

    220 ns.itep.ru FTP server ready.

    Userid for logging in on ns.itep.ru (SEMENOV)? semenov


    FTP command: USER semenov

    FTP response: 331 Password required for semenov.



    331 Password required for semenov.

    Password for logging in as semenov on ns.itep.ru? XXXXXXXX

    PASS XXXXXXXX (ввод пароля не отображается на экране)
    FTP response: 230 User semenov logged in.

    230 User semenov logged in.

    ftp:ns.itep.ru> hel (просьба выдать список доступных на данном сервере FTP-команд)
    Any unambiguous abbreviation for a command may be used.

    Available commands are:

    ! ? acct append ascii binary bye cd debug
    delete dir drive exit fcd fdir fpwd get help
    iget image iput lcd ldir lmkdir local login lpwd
    ls mdelete mget mkdir mput option parent passive put
    pwd quit quote rename retrieve rmdir send server show
    stat store take tenex tget tput type user verbose
    version

    ftp:ns.itep.ru> quit

    FTP command: QUIT

    FTP response: 221 Goodbye.

    Уход из FTP производится по команде quit. В приведенном примере файловый обмен не производился, но и команда HELP требует переноса информации (также как и dir), так как вам выдается список команд, доступных на удаленном сервере. Из воспроизведенного списка команд, самая опасная mdelete, так как способна стереть целый каталог. Нетекстовые файлы (архивированные, графические и программные) следует пересылать в режиме binary. Для перевода в этот режим используется одноименная команда. Для перехода из одного каталога в другой на удаленном сервере служит команда cd имя_каталога, а для возврата в предшествующий cd .. . Например, cd /pub/msdos.

    Ссылка на объект, доступный через анонимное FTP, обычно записывается в виде:

    Название ресурса Имя сервера Имя каталога в сервере.
    Например:

    Internet-cmc ftp.rpi.edu /pub/communications/internet-cmc.txt
    ftp://ftp.rpi.edu/pub/communications/internet-cmc.txt

    Internet-cmc (CMC - computer-mediated communication) -это межкомпьютерный обмен по сети Internet.

    Ниже приведен список базовых команд FTP. Следует разделять внутренний набор команд FTP, которыми обмениваются клиент и сервер по командному каналу, и набор команд доступный пользователю. Служебные команды содержат три или четыре заглавные буквы. Эти наборы команд перекрываются лишь частично. Служебные команды унифицированы (они выделены в приведенном выше примере FTP-сессии жирным шрифтом, в помещенной ниже таблице эти команды представлены в ее верхней части), пользовательский же набор команд может варьироваться от реализации к реализации. Если выдать команду FTP без аргументов, система обычно откликается приглашением FTP> и вы можете выполнить некоторые из приведенных ниже команд (весь набор становится доступным только после идентификации).



    Таблица 4.5.4.1



    Субкоманды FTP



    Описание

    ABOR Прерывание исполнения предыдущей FTP-команды и связанного с ней обмена
    ACCT<SP> <account-information> Ввод идентификатора пользователя (ID);
    ALLO <SP> <десятичное целое> [<SP> R <SP> <десятичное целое>] Зарезервировать достаточно места ( в байтах) для пересылки файла. Для файлов с постраничной структурой после символа R указывается число записей
    APPE <SP> <проход> Присовокупить передаваемые данные к файлу, указанному в параметре проход
    CDUP Переход в каталог прародитель
    CWD <SP> <проход> Изменить рабочий каталог (CD);
    DELE <SP> <проход> Стереть файл (del);
    HELP Выдать справочную информацию о выполнимых командах
    HELP [<SP> <строка>] Выдать описание работы данной команды
    LIST [<SP> <проход>] Вывод списка файлов или каталогов (dir);
    MKD <SP> <проход> Создать каталог
    MODE <SP> <код режима> Режим обмена = поток, блоки или со сжатием
    NLST [<SP> <проход>] Переслать оглавление каталога от сервера к клиенту
    NOOP Пустая команда
    PASS <SP> <пароль> Слово-пропуск (пароль) пользователя, заполняется пользователем
    PASV Перевести сервер в режим прослушивания информационного порта на предмет установления соединения
    PORT <SP> <порт ЭВМ> IP-адрес и номер порта клиента
    PWD Выдать имя текущего каталога
    QUIT Уход из FTP
    REIN Завершение сессии и открытие новой
    REST <SP> <маркер> Возобновление обмена, начиная с места, указанного маркером
    RETR <SP> <проход> Переслать копию файла (get) другому адресату
    RMD <SP> <проход> Удалить каталог
    RNFR <SP> <проход> Начало процедуры переименования файла (Rename From)
    RNTO <SP> <проход> Указание нового имени файла при переименовании (Rename To)_
    SITE <SP> <строка> Используется сервером для реализации локально специфических команд
    SMNT <SP> <проход> Позволяет пользователю смонтировать нужную файловую систему
    STAT Выдать текущие значения параметров (STATUS)
    STOR <SP> <проход> Сервер должен запомнить полученные данные в виде файла
    STOU Аналог команды STOR но записывает файл в текущий каталог и присваивает файлу уникальное имя
    STRU <SP> <код структуры> Структура файла = файл, запись или страница
    SYST Сервер сообщает тип системы
    TYPE <SP> <код типа> Специфицирует тип информации, часто для этой цели используются команды binary и ASCII
    USER <SP> < [имя [пропуск]] > Идентифицирует пользователя, запрашивается сервером
    ? тоже что и HELP;
    lcd Изменить локальный каталог (на вашей ЭВМ);
    ! Выйти временно из FTP и уйти в Shell (UNIX)
    ! команда Исполнить команду Shell (UNIX)
    close Прервать связь с удаленным сервером, оставаясь в FTP
    open [имя_ЭВМ] Установить связь с указанным удаленным сервером
    dir Выдать содержимое удаленного каталога
    <


    /p> <SP> пробел; все команды завершаются последовательностью <CRLF> возврат каретки + перевод строки. В квадратных скобках записан опционный аргумент. Выполнение любой команды можно прервать с помощью Ctrl-C.

    Возможная форма обращения к FTP (SunOS 4.1): FTP [ -опции ] [ имя_ЭВМ ]

    Допустимы следующие опции (модификаторы) команды:



    -d

    включение отладочного режима.


    -g

    блокировка группового исполнения команд.


    -i

    Выключение интерактивного приглашения при множественной пересылке файлов.


    -v

    Отображает все отклики удаленного сервера и статистику обмена; этот режим работает обычно по умолчанию.
    В рамках процедуры FTP доступны следующие команды (приведенный перечень команд является неполным):

    ! [ команда ] Исполняется команда интерпретатора shell вашей ЭВМ (UNIX). Если имя команды явно не введено, система переходит в интерактивный режим shell.


    $ имя-макро [ аргументы ]

    Выполняется макро, имя которого введено, аргументы используются этим макро.


    account [ пароль ]

    Позволяет ввести пароль, необходимый для доступа в удаленный сервер.


    append имя_местного_файла

    [ имя_удаленного_файла ]

    Добавить местный файл к файлу на удаленном сервере.


    Bye

    Завершает FTP-сессию.


    case

    Переключает регистр символов, которыми записаны имена файлов на удаленной ЭВМ, в процессе выполнения команды MGET. Если case включен (по умолчанию выключен), все прописные буквы в именах файлов на удаленной ЭВМ, меняются при переносе в вашу ЭВМ на строчные.


    close

    Завершает FTP-сессию и возвращает систему в интерактивный командный режим. Все описанные ранее макро стираются.


    debug [ debug-value ]

    Включает/выключает режим отладки. Значение debug-value определяет отладочный уровень. Если отладка включена, FTP отображает на экране каждую команду, посылаемую удаленной ЭВМ. Эта информация помечается символом '-->'.
    dir [ удаленный каталог ]

    [ местный файл ]
    Выдает на экран содержимое удаленного каталога. Если в качестве параметра указано имя местного файла, результат заносится в него. Если имя удаленного каталога не указано, команда выполняется для текущего каталога.


    disconnect

    синоним close.


    hash

    включает/выключает знак (#). Во включенном состоянии отмечается пересылка каждого блока, что позволяет визуально контролировать процесс обмена.


    macdef macro-name

    Определяет макро. Последующие строки запоминаются в качестве текста макро с именем macro-name. Нулевая строка (двойное нажатие клавиши RETURN) завершает ввод текста макро. Можно ввести до 16 макро с суммарным объемом до 4096 символов.


    mdelete [ имена_файлов_на удаленной_ЭВМ ]

    удаляет файлы на удаленной ЭВМ.


    open имя-ЭВМ [ port ]

    устанавливает связь с указанным FTP-сервером (ЭВМ) через специфицированный порт.


    prompt

    включает/выключает нтерактивные запросы со стороны ЭВМ. Это бывает полезным при выполнении групповых команд MPUT, MGET или MDELETE и позволяет проводить соответствующие операции над файлами выборочно.


    proxy

    ftp-команда выполняет FTP-команду на вторичной удаленной ЭВМ. Эта команда позволяет связать два удаленных FTP-сервера и осуществить пересылку файлов между ними. Первой proxy-командой должна быть команда open, необходимая для связи со вторичным сервером. Введите команду proxy ?, чтобы проверить выполнимость этих команд на данном сервере.


    quit

    синоним bye.


    recv

    удаленный_файл [ местный_файл ] синоним команды get.


    remotehelp [ имя_команды ]

    Запрашивает справочную информацию у удаленного FTP-сервера. Если имя_команды задано, запрашивается информация о конкретной команде.
    runique Включает режим записи файлов в вашу ЭВМ только с уникальными именами. Если файл с таким именем уже существует, то новому файлу будет присвоено имя с расширением .1, если и такое имя уже есть, то с расширением .2. Это может продолжаться вплоть до расширения .99, после чего будет выдано сообщение об ошибке. Впрочем, такую ситуацию вообразить крайне трудно, если вы сами не наплодили файлов с цифровыми расширениями. Для команды mget это крайне полезная функция, которая застрахует вас от стирания ваших файлов из текущего каталога, имеющих имена, совпадающие с именами на удаленном сервере. По умолчанию runique не включено.


    send local-file [ remote-file ]

    Синоним команды put.


    status

    Отображает текущее состояние ftp.
    <


    /p> В депозитариях можно встретить файлы следующих разновидностей (все виды ниже перечисленных файлов пересылаются в режиме binary, а не ASCII):

    Таблица 4.5.4.2

    Тип файла Пример записи имени файла Программа обработки файла
    Архивированный файл файл.Z compress, uncompress
    tar-файл файл.tar tar
    Архивированный tar-файл файл.tar.Z tar, compress, uncompress
    файл.tar.gz Применен архиватор GZIP
    uuencode-файл файл.uue uuencode, uudecode
    Архивированный uuencode-файл файл.uue.Z uuencode, uudecode, compress, uncompress
    zip-файл файл.zip pkzip, pkunzip
    shar-файл файл.shar shar, sh, unshar
    сжатый shar-файл файл.shar.Z shar, sh, unshar, compress, uncompress
    При выполнении FTP система возвращает трехразрядные десятичные коды-отклики, которые позволяют судить о корректности обмена и диагностировать процедуру. Выдача кода сопровождается текстом-комментарием. Первая цифра может принимать значения от 1 до 5. Структура кодов показана в таблице 4.5.4.3:

    Таблица 4.5.4.3. Коды диагностики

    Значение кода-отклика Описание
    1yz Позитивный предварительный отклик, который означает, что операция начата. До завершения процедуры следует ожидать как минимум еще один отклик
    2yz Сигнал успешного завершения процедуры, говорящий о том, что можно ввести новую команду
    3yz Положительный промежуточный отклик, указывающий на то, что команда воспринята, но для продолжения требуется дополнительная информация
    4yz Негативный отклик, свидетельствующий о том, что команда не воспринята, но можно попробовать ее исполнить еще раз
    5yz Отклик, говорящий о том, что команда не выполнена и не может быть выполнена вообще
    Значение кода "y" в вышеприведенной таблице может принимать значения от 0 до 5. Значения кодов "y" приведены ниже:

    Значение кода-отклика Описание
    x0z Указывает на синтаксическую ошибку; синтаксис верен но команда не имеет смысла
    x1z Указание на необходимость ввода дополнительной информации
    x2z Отклик, связанный с управлением каналом связи
    x3z Отклик для команд идентификации пользователя и проверки пароля
    x4z Функция не определена
    x5z Отклик, характеризующий состояние файловой системы
    <


    /p> Далее в тексте встречается выражение "анонимное FTP", это подразумевает следующую процедуру (см. также RFC-1635):

    ftp> login: anonymous

    ftp> password: [ваш полный E-mail адрес]

    ftp> cd <имя_каталога > (смена каталога)
    ftp> binary (если текст, например, архивирован, в противном случае команду выдавать не нужно)
    ftp> get <имя_файла> (копирование файла)
    ftp> quit (уход из процедуры)
    Следует иметь в виду, что некоторые анонимные FTP-серверы (также как, например, GOPHER-серверы) требуют, чтобы ЭВМ, с которой осуществляется ввод, имела не только IP-адрес, но и зарегистрированное в локальном DNS-сервере имя. Эти FTP-серверы, получив запрос, пытаются выяснить имя ЭВМ, так как они ведут "журнал посещений", и в случае неуспеха прерывают сессию. Таким образом, анонимное FTP может считаться таковым лишь условно, в смысле ненужности быть авторизованным на сервере, чтобы иметь к нему доступ. Конкретные примеры кодов статуса обмена для FTP

    Таблица 4.5.4.4. Коды откликов

    Код-отклик Описание
    110 Комментарий
    120 Функция будет реализована через nnn минут
    125 Канал открыт, обмен данными начат
    150 Статус файла правилен, подготавливается открытие канала
    200 Команда корректна
    211 Системный статус или отклик на справочный запрос
    212 Состояние каталога
    213 Состояние файла
    214 Справочное поясняющее сообщение
    220 Слишком много подключений к FTP-серверу (можете попробовать позднее). В некоторых версиях указывает на успешное завершение промежуточной процедуры
    221 Благополучное завершение по команде quit
    225 Канал сформирован, но информационный обмен отсутствует
    226 Закрытие канала, обмен завершен успешно
    230 Пользователь идентифицирован, продолжайте
    250 Запрос прошел успешно
    331 Имя пользователя корректно, нужен пароль
    332 Для входа в систему необходима аутентификация
    421 Процедура не возможна, канал закрывается
    425 Открытие информационного канала не возможно
    426 Канал закрыт, обмен прерван
    450 Запрошенная функция не реализована, файл не доступен, например, занят
    451 Локальная ошибка, операция прервана
    452 Ошибка при записи файла (не достаточно места)
    500 Синтаксическая ошибка, команда не может быть интерпретирована (возможно она слишком длинна)
    501 Синтаксическая ошибка (неверный параметр или аргумент)
    502 Команда не используется (нелегальный тип MODE)
    503 Неудачная последовательность команд
    504 Команда не применима для такого параметра
    530 Система не загружена (not logged in)
    532 Необходима аутентификация для запоминания файла
    550 Запрошенная функция не реализована, файл не доступен, например, не найден
    552 Запрошенная операция прервана, недостаточно выделено памяти
    В настоящее время разработаны версии FTP для работы с IPv6 (RFC-2428).


    Содержание раздела