FTP протокол передачи файлов

 

FTP ( File Transfer Protocol — протокол передачи файлов) — стандартный протокол, предназначенный для передачи файлов по TCP-сетям, построенный на архитектуре «клиент-сервер» и использующий разные сетевые соединения для передачи команд и данных между клиентом и сервером.

Сервер предоставляет клиенту доступ к данным (обычно это файлы и каталоги) клиенту либо анонимно, либо после аутентификации, при которой логин и пароль передаются открытым текстом. Можно использовать протокол SSH для шифрования логина, пароля и передаваемых данных.

Протокол достаточно простой, для его работы используются различные TCP соединения для команд и для передаваемых данных. Обычно это 21 порт для управляющих команд и 20 для передачи данных (в прочем это может быть и по другому). После установки TCP соединения на 21 порт общение FTP клиента с сервером происходит по средствам достаточно простых текстовых команд.

В соответствии с RFC 959 Сервер по потоку управления (21 порт) отвечает трехзначными ASCII-кодами состояния с необязательным текстовым сообщением.

Существует 2 режима работы протокола FTP: активный и пассивный.

В активном режиме клиент создаёт управляющее TCP-соединение с сервером на 21 порту и отправляет серверу свой IP-адрес и произвольный номер клиентского порта, после чего ждёт, пока сервер не запустит TCP-соединение с этим адресом и номером порта. 

В пассивном режиме клиент использует поток управления (TCP порт 21), чтобы послать серверу команду PASV, и затем получает от сервера его IP-адрес и номер порта, которые затем используются клиентом для открытия потока данных с произвольного клиентского порта к полученному адресу и порту.

Знание режимов работы FTP помогает, если вам нужно подключаться к FTP серверу или поднимать его в сети, которая спрятана за NAT и\или защищена брендмауэром, что как можно догадаться не редкость. Если клиент не может принимать входящие соединения на произвольный порт, то необходимо настроить сервер в пассивном режиме, тогда входящие соединения к клиенту не потребуются, но сервер же должен быть готов принять входящее соединение на заранее установленные порты. Активный режим подойдет серверу, администратор которого не готов принимать входящие соединения на порты кроме 21, но в этом случае клиент сможет подключится только если сам примет входящие соединение. Так что в любом случае придется кому то открыть дополнительные порты.

При передачи могут быть использованы четыре представления данных:

  • ASCII — используется для текста.

  • Режим изображения (бинарный) — устройство-отправитель посылает каждый файл байт за байтом, а получатель сохраняет поток байтов при получении.

  • EBCDIC — используется для передачи обычного текста между хостами в кодировке EBCDIC.

  • Локальный режим — позволяет двум компьютерам с идентичными установками посылать данные в собственном формате без конвертации в ASCII.

Передача данных может осуществляться в любом из трёх режимов:

  • Поточный режим — данные посылаются в виде непрерывного потока, освобождая FTP от выполнения какой бы то ни было обработки.

  • Блочный режим — FTP разбивает данные на несколько блоков (блок заголовка, количество байт, поле данных) и затем передаёт их TCP.

  • Режим сжатия — данные сжимаются единым алгоритмом.

FTP использует для аутентификации логин и пароль для предоставления доступа. Имя пользователя посылается серверу командой USER, а пароль — командой PASS. Если предоставленная клиентом информация принята сервером, то сервер отправит клиенту приглашение и начинается сессия. Логин и пароль передаются открытым текстом, так что безопасным этот способ назвать нельзя. Так же FTP сервер может предоставлять анонимный доступ к данным, то есть для всех желающих, не спрашивая логин и пароль.
Существуют расширения и способы для безопасной передачи данных и аутентификации, например: FTPS SFTP FTP через SSH.

Приведу пример FTP сессии со своими комментариями. Тут показан вывод команд (только в управляющем канале, естественно) которые FTP клиент передавал серверу и ответы сервера без сокращений (звездочками заменю некоторые параметры, например пароль из соображений безопасности):

Status: - это сообщение FTP клиента, при обмене командами с FTP "вручную" вы этих сообщений не увидите.  Response: - это ответы FTP сервера Command: - это те команды которые клиент отправляет серверу (в ручном режиме вы будете вводить их с клавиатуры).

Status:    Connecting to 37.140.*.* ...
Status:    Connected with 37.140.*.*. Waiting for welcome message...
Response:    220 (vsFTPd 2.2.2)                                     - итак,  стучимся на 21 порт 37.140.*.* и нам говорят что там трудится vsFTPd
Command:    USER *********                                          - посылаем имя пользователя
Response:    331 Please specify the password.                       - имя пользователя принято
Command:    PASS ********                                           - посылаем пароль
Response:    230 Login successful.                                  -пароль принят
Command:    SYST                                                    - "и какая у вас ОС?" спросим мы
Response:    215 UNIX Type: L8                                      - "а вот такая" ответит сервер
Command:    FEAT                                                    - что ты можешь, сервер?
Response:    211-Features:                                          - а вот что :)
Response:     EPRT
<... Не будем оглашать весь список ...>
Response:     UTF8
Response:    211 End                                                 - сервер закончил перечислять функции
Command:    OPTS UTF8 ON                                             - говори с нами в кодировке UTF-8
Response:    200 Always in UTF8 mode.                                - да не вопрос
Status:    Connected                                                 - Это мы оживляем соединение
Status:    Retrieving directory listing...
Command:    PWD                                                      - покажи нам рабочий каталог
Response:    257 "/"                                                 - на! это название рабочего каталога (у нас /)
Command:    TYPE A                                                   - но сначала зададим режим представления данных
Response:    200 Switching to ASCII mode.                            - ок
Command:    PASV                                                     - и попросимся в пассивный режим
Response:    227 Entering Passive Mode (37,140,192,202,249,140).     - получили список портов
Command:    LIST                                                     - отдай список содержимого каталога
Response:    150 Here comes the directory listing.
Response:    226 Directory send OK.
Status:    Directory listing successful                              - в этом месте мы получили оглавление по каналу данных
Command:    TYPE A
Response:    200 Switching to ASCII mode.
Status:    Retrieving directory listing...
Command:    CWD www                                                  - меняем рабочий каталог на www
Response:    250 Directory successfully changed.                     -ответ "ок"
Command:    PWD                                                      - снова запрашиваем рабочий каталог
Response:    257 "/www"                                              - теперь он /www
Command:    TYPE A                                                   - и выбрав режим представления данных
Response:    200 Switching to ASCII mode.
Command:    PASV                                                     -  опять в пассивном режиме
Response:    227 Entering Passive Mode (37,140,192,202,252,174).
Command:    LIST                                                     - запрашиваем оглавление каталога               
Response:    150 Here comes the directory listing.
Response:    226 Directory send OK.
Status:    Directory listing successful                              -оглавление мы получили и теперь
Status:    Starting download of /www/google8f2c0456e362dfaa.html     - хотим скачать файл
Command:    TYPE A                                                   - для этого опять выберем тип
Response:    200 Switching to ASCII mode.
Command:    PASV                                                     - и режим передачи данных
Response:    227 Entering Passive Mode (37,140,192,202,254,190).
Command:    RETR google8f2c0456e362dfaa.html                         - и скажем: "Отдай на файл"
Response:    150 Opening BINARY mode data connection for google8f2c0456e362dfaa.html (53 bytes).
Response:    226 Transfer complete.                                  - и вот файл был получен по каналу данных
Status:    Download successful                  
Status:    Retrieving directory listing...
<... Пропустим некоторые повторяющиеся действия ...>
Command:    MKD fff                                                  - а вот тут мы создали папку
Response:    257 "/www/moop-nz.ru/02-uslugi/fff" created
Command:    RNFR /www/moop-nz.ru/02-uslugi/fff                       - и хотим переименовать папку fff
Response:    350 Ready for RNTO.
Command:    RNTO /www/moop-nz.ru/02-uslugi/eee                       - в папку eee
Response:    250 Rename successful.                                  - операция прошла успешно
<... Пропустим некоторые повторяющиеся действия ...>
Command:    RMD /www/moop-nz.ru/02-uslugi/eee/                       - удаляем ранее созданную папку
Response:    250 Remove directory operation successful.              - всё получилось
Status:    Connected
Status:    Starting upload of C:\12345\12345 001.jpg                 - начинаем загружать файл на сервер
<... Пропустим некоторые повторяющиеся действия ...>
Command:    TYPE I
Response:    200 Switching to Binary mode.
Command:    PASV
Response:    227 Entering Passive Mode (37,140,192,202,243,234).
Command:    STOR 12345 001.jpg                                        - на этот раз отправляем файл на сервер
Response:    150 Ok to send data.
Response:    226 Transfer complete.
Status:    Upload successful
Status:    Retrieving directory listing...
Command:    TYPE A
Response:    200 Switching to ASCII mode.
Command:    PASV
Response:    227 Entering Passive Mode (37,140,192,202,251,25).
Command:    LIST
Response:    150 Here comes the directory listing.
Response:    226 Directory send OK.
Status:    Directory listing successful
Command:    DELE /www/moop-nz.ru/02-uslugi/12345 001.jpg               - и удаляем его напоследок
Response:    250 Delete operation successful.

Много создали люди FTP серверов и клиентов (как никак с 1971 живет протокол).

Есть специальные программы работающие в качестве FTP клиента, такие как: FileZilla, gFTP, cURL, lftp и многие другие, но сейчас в качестве FTP клиента может работать почти любой браузер (Mozilla Firefox, Konqueror, Opera, Яндекс.Браузер, Google Chrome, Internet Explorer и т.д.) или файловый менеджер (Midnight Commander, Krusader, GNOME Commander, Konqueror, Nautilus, Dolphin, FAR Manager, Total Commander, Проводник Windows и т. д.), так что в использовании специальных программ нет необходимости (хотя я пользуюсь иногда gFTP).

Для того чтобы поднять свой FTP сервер с преферансом и аутентификацией понадобится специальная программа, которая будет исполнять роль сервера. Таких программ тоже много, в том числе: vsftpd, ProFTPD, Pure-FTPd, glFTPd, oftpd, Serv-U File Server и многие другие.

Кажется в общих чертах понятно, что такое FTP и для чего оно нужно.

Добавить комментарий


Защитный код
Обновить