|
Bog BOS: FTP - File Transfer Protocol. Стандарты, программы
|
Последнее изменение файла: 2010.04.21
Скопировано с www.bog.pp.ru: 2024.11.23
Bog BOS: FTP - File Transfer Protocol. Стандарты, программы
Стандарты,
относящиеся к FTP (по
состоянию на январь 1999)
-
rfc2428: FTP Extensions for IPv6 and NATs
(вместо команд PORT и PASV
вводятся EPRT и EPSV; в wu-ftpd их нет)
-
rfc2389: Feature negotiation mechanism for the File Transfer Protocol
(предлагаются средства,
позволяющие ftp-клиенту
распознать какие
возможности
поддерживает сервер (FEAT, OPTS); в wu-ftpd их нет)
-
rfc2228: FTP Security Extension
(расширения к протоколу: шифровка
паролей и данных, проверка
целостности данных, AUTH и др.; в wu-ftpd их нет)
-
rfc1639: FTP Operation Over Big Address Records (FOOBAR)
(устарел)
-
rfc1635: How to Use Anonymous FTP
(руководство для чайников)
-
rfc1579: Firewall-Friendly FTP
(рекомендуется
переписать клиенты так, чтобы они всегда
выдавали PASV - перевод сервера в
пассивный режим -, чтобы клиент мог
работать за firewall и к нему не было бы
входящих соединений на
случайный порт. Правда это
порождает входящие
соединения на случайный порт сервера)
-
rfc1545: FTP Operation Over Big Address Records (FOOBAR)
(устарел)
-
rfc1415: FTP-FTAM Gateway Specification
(устарел)
-
rfc959: File Transfer Protocol
(основной текст)
-
rfc949: FTP unique-named store command
(устарел)
-
rfc775: Directory oriented FTP commands
(устарел)
-
rfc751: Survey of FTP mail and MLFL
(устарел)
-
rfc743: FTP extension: XRSQ/XRCP
(устарел)
-
rfc737: FTP extension: XSEN (устарел)
-
rfc697: CWD command of FTP (устарел)
-
rfc691: One more try on the FTP
(устарел)
-
rfc640: Revised FTP reply codes
(устарел)
-
rfc630: FTP error code usage for more reliable mail service
(устарел)
Основные компоненты:
-
Сервер-FTP состоит из
интерпретатора команд, процесса
передачи данных.
-
Клиент-FTP состоит из
пользовательского
интерфейса,
интерпретатора команд и процесса
передачи данных.
-
Управляющее
соединение:
TCP-соединение между
интерпретаторами команд сервера и
клиента на базе протокола Telnet. Клиент
посылает по нему команды; сервер - ответы.
Сервер слушает на порту 21 (по
умолчанию); клиент
инициирует
соединение.
Закрывается сервером по команде
клиента.
-
Соединение для передачи файлов
(соединение данных):
полнодуплексное
соединение для передачи данных между
клиентом и сервером или двумя
серверами; данными могут быть файл, часть файла,
группа файлов -
определяется командами клиента по
управляющему
соединению.
Общая схема работы
Интерпретатор протокола клиента
инициирует
управляющее
соединение (используя протокол telnet) с
хостом, на котором
расположен сервер, по tcp/21.
Исходный порт
произволен (обычно больше 1024). По
команде
пользователя
интерпретатор протокола клиента
генерирует команды и передает их по
управляющему
соединению
интерпретатору команд сервера.
Интерпретатор команд сервера
посылает по
управляющему
соединению
стандартные ответы. Команды
определяют параметры
последующей передачи данных по
соединению данных (порт, режим
передачи, тип
представления, структура). Процесс
передачи данных клиента слушает ДО начала
обговоренный порт, процесс
передачи данных сервера
инициирует соединение данных и
начинается передача (или прием). Порт данных не
обязан быть на том же хосте, что
инициировал
управляющее
соединение.
Управляющее
соединение д.б. открыто все время
передачи данных. Клиент д.
запросить закрытие
управляющего
соединения, а сервер
выполнить. Порт данных для
клиентского процесса по
умолчанию тот же что и порт для
управляющего
соединения. Порт данных для
серверного процесса по
умолчанию равен порту
управляющего
соединения минус 1.
Клиентский процесс может изменить свой порт
данных командой PORT (как порт, так и ip-адрес).
Клиентский процесс может
запросить сервер указать
нестандартный порт данных на
серверной стороне командой PASV, на что
серверный процесс отвечает ip-адресом и
портом, который он будет слушать (м.б. на
другом хосте). В этом случае
клиентский процесс д.
обеспечить открытие
соединения данных (сам или с помощью
другого сервера). Команды PORT и PASV могут быть
выданы
одновременно.
Типы данных (типы
представлений):
-
ASCII (TYPE A [
управление-вертикальным-форматированием ] )
-
no vertical format information
-
telnet format controls (CR, LF, NL, VT, FF)
-
ASA (FORTRAN)
-
EBCDIC (TYPE E)
-
IMAGE (TYPE I - поток бит,
упакованных в 8-битные байты)
-
LOCAL (TYPE L - длина байта
определяется вторым
параметром команды TYPE)
Структуры данных:
-
последовательность байт (файл)
-
последовательность записей
-
индексированные страницы
(заголовок - длина
заголовка, индекс страницы, число
логических байт, тип страницы и др)
Режимы передачи:
-
stream (поток байт); если
структура данных - файл, то конец файла
определяется тем, что
посылающий хост закрывает
соединение. Здесь возникает
проблема с посылкой
следующего файла, т.к. TCP
резервирует порт некоторое время после
рассоединения.
Предлагается
использовать для каждой
пересылки
нестандартный порт или другой режим
передачи.
-
блочный режим
(последовательность блоков данных с
заголовками). Заголовок содержит длину блока и
управляющие флажки (в
частности, конец файла)
-
режим со сжатием (типичный RLE и
управляющие флажки как в блочном режиме)
Команды (прописные и строчные буквы не
различаются):
-
управления доступом
-
USER
имя-пользователя
-
PASS пароль
-
ACCT
учетная-запись
(необязательно для
регистрации)
-
CWD
имя-новой-рабочей-директории
-
CDUP (перейти на один уровень
директории вверх)
-
SMNT
имя-монтируемой-директории
-
REIN
(реинициализация
соединения)
-
QUIT
-
установки параметров передачи
-
PORT ip1,ip2,ip3,ip4,port1,port2 (1 -
старший байт)
-
PASV (сервер д.
определить
нестандартный порт данных, начать его
слушать и вернуть ip-адрес и номер порта в
формате команды PORT)
-
TYPE { { A | E } [ N | T | C ] } | I | L
размер-байта (по умолчанию - A N)
-
STRU { F | R | P } (по
умолчанию - файл)
-
MODE { S | B | C } (по
умолчанию - stream )
-
действия
-
RETR имя-файла (взять файл)
-
STOR имя-файла (передать файл)
-
STOU имя-файла (передать файл, записав его там под
уникальным именем)
-
APPE имя-файла (передать файл, добавив его в конец
файла на той стороне)
-
ALLO байт
(зарезервировать место на сервере для
будущей передачи)
-
REST маркер (при
последующей передаче
"перемотать" к
соответствующей позиции в файле - обычно
указывается смещение в байтах)
-
RNFR
старое-имя-файла
-
RNTO
новое-имя-файла
-
ABOR (прервать передачу данных и
закрыть соединение данных)
-
DELE
имя-удаляемого-файла
-
RMD
имя-удаляемой-директории
-
MKD
имя-создаваемой-директории
-
PWD (в ответе указать имя текущей
директории)
-
LIST [
имя-директории-или-файла ]
(передать по
соединению данных список имен файлов в
директории или
информацию о файле)
-
NLST [
имя-директории ] (передать по
соединению данных список имен файлов в
директории,
разделенных CRLF)
-
SITE (выполнить
нестандартное действие,
реализованное данным сервером;
синтаксис и семантика д.
объясняться по HELP SITE)
-
SYST (ответ должен
содержать тип ОС сервера и др.
полезную информацию)
-
STAT (ответ д. содержать
информацию о текущем
состоянии сервера; если команда выдана в
процессе передачи файла и
предварена посылкой сигналов telnet-а IP и Synch, то
ответ д. содержать
информацию о состоянии
пересылки)
-
STAT имя-файла (ответ д.
содержать информацию о файле)
-
прочее
-
HELP [ имя-команды ]
-
NOOP
Ответы сервера
Каждая команда должна
порождать минимум один ответ. Ответ
состоит из
трехзначного числа, пробела и строки текста.
Первая строка
многострочного ответа состоит из
трехзначного числа, минуса и строки текста.
Последняя строка должна
начинаться с того же самого числа и
пробела.
Первая цифра:
-
1yz
(предварительный
положительный ответ: команда принята, но не
завершена)
-
2yz (действие успешно
завершено)
-
3yz (команда принята, сервер ждет
дополнительную
информацию)
-
4yz (временная неудача,
повторить через некоторое время)
-
5yz (фатальная ошибка)
Вторая цифра:
-
x0z (синтаксис)
-
x1z (ответ на запрос
информации)
-
x2z (ответ относится к
состоянию
управляющего
соединения или
соединения данных)
-
x3z
(аутентификация и учет)
-
x4z (смысл не определен)
-
x5z (состояние файловой системы
сервера)
Третья цифра
уточняющая. Текст сообщения не
стандартизован.
Минимальная
реализация:
-
тип
представления: ASCII Non-print
-
режим передачи: stream
-
структура: файл, записи
-
команды: USER, QUIT, PORT, TYPE, MODE, STRU, RETR, STOR, NOOP
Программное обеспечение
- серверы
- клиентская часть (интерактивная)
- ftp (Unix)
- ftp (MS)
- ncftp (bash-like)
- gftp (GTK+)
- ftptool (openwindows)
- пакетные качалки
- обработка статистики
|
Bog BOS: FTP - File Transfer Protocol. Стандарты, программы
|
Copyright © 1996-2024 Sergey E. Bogomolov; www.bog.pp.ru