FTP-протокол

 

  Модели работы FTP

  Команды протокола

  Шаблоны групповых операций

  Протоколы TFTP и SFTP



 

Модели работы FTP


Простейшая модель работы протокола FTP представлена на рисунке 1. В FTP соединение инициируется интерпретатором протокола пользователя. Управление обменом осуществляется по каналу управления в стандарте протокола TELNET. Команды FTP генерируются интерпретатором протокола пользователя и передаются на сервер. Ответы сервера отправляются пользователю также по каналу управления. В общем случае пользователь имеет возможность установить контакт с интерпретатором протокола сервера и отличными от интерпретатора протокола пользователя средствами.


Рис.1


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


Алгоритм работы протокола FTP состоит в следующем:

  1. Сервер FTP использует в качестве управляющего соединение на TCP порт 21, который всегда находится в состоянии ожидания соединения со стороны пользователя FTP.

  2. После того как устанавливается управляющее соединение модуля 'Интерпретатор протокола пользователя' с модулем сервера - 'Интерпретатор протокола сервера', пользователь (клиент) может отправлять на сервер команды. FTP-команды определяют параметры соединения передачи данных: роль участников соединения (активный или пассивный), порт соединения (как для модуля 'Программа передачи данных пользователя', так и для модуля 'Программа передачи данных сервера'), тип передачи, тип передаваемых данных, структуру данных и управляющие директивы, обозначающие действия, которые пользователь хочет совершить (например, сохранить, считать, добавить или удалить данные или файл и другие).
  3. После того как согласованы все параметры канала передачи данных, один из участников соединения, который является пассивным (например, 'Программа передачи данных пользователя'), становится в режим ожидания открытия соединения на заданный для передачи данных порт. После этого активный модуль (например, 'Программа передачи данных сервера') открывает соединение и начинает передачу данных.
  4. После окончания передачи данных, соединение между 'Программой передачи данных сервера' и 'Программой передачи данных пользователя' закрывается, но управляющее соединение 'Интерпретатора протокола сервера' и 'Интерпретатора протокола пользователя' остается открытым. Пользователь, не закрывая сессии FTP, может еще раз открыть канал передачи данных.

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



Рис. 2


Алгоритм работы при соединение двух FTP-серверов, ни один из которых не расположен на локальном хосте пользователя:

  1. Модуль 'Интерпретатор протокола пользователя' указал модулю сервера 'Интерпретатор протокола сервера 1' работать в пассивном режиме, после чего модуль 'Интерпретатор протокола сервера 1' отправил пользователю адрес и номер порта (N) , который он будет слушать.
  2. Модуль 'Интерпретатор протокола пользователя' назначил модуль сервера 2 'Интерпретатор протокола сервера 2' в качестве активного участника соединения и указал ему передавать данные на хост 'Интерпретатор протокола сервера 1' на порт (N).
  3. 'Интерпретатор протокола пользователя' подал 'Интерпретатору протокола сервера 1' команду 'сохранить поступившие данные в таком-то файле', а 'Интерпретатор протокола сервера 2' - 'передать содержимое такого-то файла'.
  4. Между модулями 'Интерпретатор протокола сервера 1' и 'Интерпретатор протокола сервера 2' образуется поток данных, который управляется клиентским хостом.

Ниже приведена схема организации передачи данных между двумя серверами FTP, соответствующая рисунку 2. Здесь использованы следующие обозначения: User PI - интерпретатор протокола пользователя; Server1(2) интерпретатор протокола сервера1 (сервера2).


User PI (U) ? Server1 (S1)

User PI (U) ? Server2 (S2)

U ? S1: Connect
U ? S1: PASV
U ? S1: 227 Entering Passive Mode.
A1, A2, A3, A4, a1, a2

U ? S2 Connect
U ? S2: PORT A1, A2, A3, A4, a1, a2

 

U ? S2: 200 Okay

U ? S1: STOR ...

U ? S2: RETR ...

S1 ? S2: Connect ...

Основу передачи данных FTP составляет механизм установления соединения между соответствующими портами и выбора параметров передачи. Каждый участник FTP-соединения должен поддерживать порт передачи данных по умолчанию. По умолчанию 'Программа передачи данных пользователя' использует тот же порт, что и для передачи команд (обозначим его 'U'), а 'Программа передачи данных сервера' использует порт L-1, где 'L'- управляющий порт. Однако, участниками соединения используются порты передачи данных, выбранные для них 'Интерпретатором протокола пользователя', поскольку из управляющих процессов участвующих в соединении, только 'Интерпретатор протокола пользователя' может изменить порты передачи данных как у 'Программы передачи данных пользователя', так и у 'Программы передачи данных сервера'.
Пассивная сторона соединения должна до того, как будет подана команда 'начать передачу', 'слушать' свой порт передачи данных. Активная сторона, подающая команду к началу передачи данных, определяет направление перемещения данных.
После того как соединение установлено, между 'Программой передачи данных сервера' и 'Программой передачи данных пользователя' начинается передача. Одновременно по каналу 'Интерпретатор протокола сервера' - 'Интерпретатор протокола пользователя' передаются уведомления о получении данных. Протокол FTP требует, чтобы управляющее соединение было открыто, пока по каналу обмена данными идет передача. Сессия FTP считается закрытой только после закрытия управляющего соединения.
Как правило, сервер FTP ответственен за открытие и закрытие канала передачи данных. Сервер FTP должен самостоятельно закрыть канал передачи данных в следующих случаях:

  1. Сервер закончил передачу данных в формате, который требует закрытия соединения.
  2. Сервер получил от пользователя команду 'прервать соединение'.
  3. Пользователь изменил параметры порта передачи данных.
  4. Было закрыто управляющее соединение.
  5. Возникли ошибки, при которых невозможно возобновить передачу данных.

меню

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Команды протокола


Команды управления контролем передачи данных, которыми обмениваются 'Интерпретатор протокола сервера' и 'Интерпретатор протокола пользователя', можно разделить на три большие группы:

  • Команды управления доступом к системе.
  • Команды управления потоком данных.
  • Команды FTP-сервиса.

Рассмотрим несколько наиболее характерных команд из каждой группы. Среди команд управления доступом к системе следует отметить следующие:


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


PASS. Данная команда подается после ввода идентификатора пользователя и, в качестве аргумента содержит пароль пользователя. Напомним, что данные аутентификации FTP передаются по сети открытым текстом, поэтому для обеспечения защищенности канала пользователю необходимо предпринимать дополнительные меры.


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


REIN. Команда реинициализации. Эта команда очищает все переменные текущего пользователя, сбрасывает параметры соединения. Если в момент подачи команды происходит передача данных, передача продолжается и завершается с прежними параметрами.


QUIT. Команда закрывает управляющий канал. Если в момент подачи команды происходит передача данных, канал закрывается после окончания передачи данных.


Команды управления потоком устанавливают параметры передачи данных. Все параметры, описываемые этими командами имеют значение по умолчанию, поэтому команды управления потоком используются только тогда, когда необходимо изменить значение параметров передачи, используемых по умолчанию. Команды управления потоком могут подаваться в любом порядке, но все они должны предшествовать командам FTP-сервиса. Из команд управления потоком данных следует выделить следующие:


PORT. Команда назначает адрес и порт хоста, который будет использоваться как активный участник соединения по каналу передачи данных. Аргументами команды являются 32-битный IP адрес и 16-битный номер порта соединения. Эти значения разбиты на шесть 8-битных полей и представлены в десятичном виде: h1, h2, h3, h4, p1, p2, где hN - байты адреса (от старшего к младшему), а pN - байты порта (от старшего к младшему).


PASV. Эта команда отправляется модулю, который будет играть пассивную роль в передаче данных ('слушать' соединение). Ответом на данную команду должна быть строка, содержащая адрес и порт хоста, находящиеся в режиме ожидания соединения в формате команды PORT - 'h1, h2, h3, h4, p1, p2'.


Команды TYPE, STRU, MODE определяют, соответственно, тип передаваемых данных (ASCII, Image и другие), структуру или формат передачи данных (File, Record, Page), способ передачи (Stream, Block и другие). Использование этих команд очень важно при построении взаимодействия в гетерогенных средах и весьма отличающихся операционных и файловых систем взаимодействующих хостов.


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


RETR. Эта команда указывает модулю 'Программа передачи данных сервера' передать копию файла, заданного параметром этой команды, модулю передачи данных на другом конце соединения.


STOR. Команда указывает модулю 'Программа передачи данных сервера' принять данные по каналу передачи данных и сохранить их как файл, имя которого задано параметром этой команды. Если такой файл уже существует, он будет замещен новым, если нет, будет создан новый.


Команды RNFR и RNTO должны следовать одна за другой. Первая команда содержит в качестве аргумента старое имя файла, вторая - новое. Последовательное применение этих команд переименовывает файл.


ABOR. Команда предписывает серверу прервать выполнение предшествующей сервисной команды (например, передачу файла) и закрыть канал передачи данных.


Команда DELE удаляет указанный файл.


Команды MKD и RMD, соответственно, создают и удаляют указанный в аргументе каталог.


При помощи команд LIST и NLST можно получить список файлов в указанном каталоге.


Все команды FTP-протокола отправляются 'Интерпретатором протокола пользователя' в текстовом виде - по одной команде в строке. Каждая строка команды - идентификатор и аргументы - заканчиваются символами <CRLF>. Имя команды отделяется от аргумента символом пробела - <SP>.


Обработчик команд возвращает код обработки каждой команды, состоящий из трех цифр. Коды обработки составляют определенную иерархическую структуру и, как правило, определенная команда может возвратить только определенный набор кодов. За кодом обработки команды следует символ пробела - <SP>, затем следует текст пояснения. Например, строка успешного завершения операции выглядит следующим образом: '200 Command okay'.


Ниже приведен пример работы с FTP-протокола. Обозначения: S - сервер, U - пользователь:


S: 220 Service ready for new user
U: USER Gluk
> S: 331 User name okay, need password
U: PASS murmur
S: 230 User logged in, proceed
U: RETR test.txt
S: 150 File status okay; about to open data connection
<Идет передача файла ...>
S: 226 Closing data connection, file transfer successful
U: TYPE I
S: 200 Command okay
U: STOR /home/images/first.my
S: 550 Access denied

меню

 

 

 

 

 

 

 

Шаблоны групповых операций

При большом количестве файлов перебор их имен - утомительная задача. Порой трудно перечислить 5-6 файлов, а если их сотня?
Выход есть. Существует система шаблонов, которую лучше всего изучать на примерах. Перед этим объяснение специальных знаков:
Символ '*' обозначает любой набор символов.
Символ '?' обозначает один любой символ.
Примеры:


abc*

- все файлы, начинающиеся на abc

abc?

- все файлы, имеющие длину имени в четыре символа, начинающиеся на abc и заканчивающиеся на любой символ.

??abc?

- файлы с именем в шесть символов, 3,4,5 символы abc и остальные любые.

*abc

- все файлы, оканчивающиеся на abc

*

- все файлы

 

 

 

 

 

меню

 

 

 

 

 

 

 

 

 

 

 

Протоколы TFTP и SFTP


FTP-протокол имеет двух 'младших братьев': SFTP - Simple FTP и TFTP - Trivial FTP.


TFTP-протокол
- это простейший протокол передачи файлов. Он работает поверх транспортного протокола UDP и обеспечивает выполнение только самых элементарных операций передачи файлов, а именно, записи и чтения файлов. TFTP был разработан как простой и легкий в применении протокол. Он не позволяет вызвать список каталога и не имеет никаких средств аутентификации, но может передавать 8-битную информацию в соответствии со всеми стандартами Internet.


Поскольку передача данных осуществляется поверх UDP, протокол TFTP реализует собственные методы надежной доставки данных - пакеты подтверждения, нумерация блоков данных и пакетов подтверждения и т.п. Все очень похоже на упрощенный вариант эмуляции протокола TCP.


TFTP работает лишь пятью командами:

  1. Read request (RRQ) - запрос на чтение.
  2. Write request (WRQ) - запрос на запись.
  3. Data (DATA) - пакет данных.
  4. Acknowledgment (ACK) - подтверждение.
  5. Error (ERROR) - ошибка.

Процесс передачи данных начинается с поступления от клиента TFTP на сервер запроса на чтение или запись файла. Соединение устанавливается после получения подтверждения готовности на один из запросов, либо на запись, либо на чтение.
При открытии соединения, каждая из сторон выбирает (случайным образом) уникальный идентификатор - TID, который используется и UDP как порт соединения. Каждый пересылаемый пакет ассоциирован с двумя TID, соответствующими каждой стороне соединения. Первоначальный запрос отправляется инициатором TF TP-соединения на UDP-порт 69 (порт инициализации), в котором указывается порт соединения. Дальнейший обмен уже происходит через порты, выбранные участниками передачи данных.
Если сервер разрешает запрос, обмен открывается, и указанный файл передается (блоками по 512 байт). Каждый пакет передаваемых данных содержит один блок (512 байт) и номер блока в передаваемом потоке. Поступление каждого блока на хост назначения должно быть подтверждено пакетом ACK (подтверждение), с номером поступившего блока. Только после получения пакета подтверждения будет отправлен следующий пакет данных.
Если длина пакета менее 512 байт - это служит сигналом для закрытия канала связи. В случае потери пакета при передаче, через некоторый промежуток времени сервер отправит этот пакет данных повторно.


Три типа ситуаций порождают отправку ошибочных пакетов:

  1. Не подтвержденный запрос, например, не был найден файл, нет прав доступа и др.
  2. Неправильный формат пакета, например, произошла ошибка коммутации.
  3. Потеря доступа к требуемому ресурсу.

При большом количестве сообщений об ошибках соединение может быть закрыто по инициативе одной из сторон.


Схема TFTP-транзакции следующая:

  1. Хост A отправляет запрос WRQ хосту B. Порт источника - TIDA, порт назначения - 69. Пакет содержит имя файла, тип передачи.
  2. Хост B отправляет ACK (номер блока - 0) хосту A. Порт источника - TIDB, порт назначения - TIDA.
  3. Хост A отправляет (по соединению TIDA - TIDB) команду DATA и блок данных. Пакет также содержит номер блока.

SFTP-протокол передачи файлов пользуется популярностью в тех случаях, если пользователю необходим чуть более гибкий и надежный протокол, чем TFTP и не такой сложный и громоздкий, как FTP.
SFTP поддерживает механизмы идентификации пользователя, передачу файлов, просмотр каталогов, изменение текущего каталога, переименование и удаление файлов. В большинстве операций, которые пользователь проводит с удаленным FTP-сервером, этого сервиса вполне достаточно. SFTP может передавать 8-битный поток данных и использует, как TFTP, только один канал соединения - как для команд, так и для данных. В отличие от TFTP, SFTP работает поверх TCP, порт 115.


Команды SFTP отправляются поочередно, после получения ответа обработки предшествующей команды. Все команды состоят из четырех ASCII-символов и символа пробела, который отделяет команду от аргументов. Ответ сервера состоит из кода ответа и текстового сообщения. Каждая команда и ответ должны заканчиваться символом <NULL> ('\0'- то же, что и завершение строки в C). SFTP для управления передачей данных использует всего 11 основных команд и только 4 кода ответа (символы: '+' - успешно, '-' - ошибки, '!' - внимание, ' ' - другое).
Команда SFTP имеют почти тот же синтаксис и предназначение, что и аналогичные команды FTP.
В представленном далее сценарии работы SFTP, сервер SFTP - 'MIT-XX' находится в состоянии ожидания соединения. Пользователь 'MKL' (пароль 'foo') подсоединился к SFTP-серверу, запросил список файлов стандартного формата из каталога 'PS' - командой 'LIST F PS:', затем запросил список файлов в расширенном формате из того же каталога командой 'LIST V PS:'. Далее пользователь построил запрос на файл с именем 'Small.File' - команда 'RETR SMALL.FILE'. В ответ сервер вернул его размер - 69 и подготовил к отправке. После этого командой SEND пользователь считал файл. По команде DONE соединение закрылось.
Обозначения: S - сервер SFTP, U - пользователь SFTP.
S: +MIT-XX SFTP Service
U: USER MKL
S: +MKL ok, send password
U: PASS foo
S: ! MKL logged in
U: LIST F PS:

меню


Hosted by uCoz