Протокол передачи файлов (FTP ) - стандартный сетевой протокол, используемый для передачи компьютерных файлов между клиентом и сервером в компьютерной сети.
FTP построен на архитектуре модели клиент-сервер, использующей отдельные соединения управления и передачи данных между клиентом и сервером. Пользователи FTP могут аутентифицироваться с помощью протокола входа в виде открытого текста, обычно в форме имени пользователя и пароля, но могут подключаться анонимно, если сервер настроен на это. Для безопасной передачи, которая защищает имя пользователя и пароль и шифрует контент, FTP часто защищен с помощью SSL / TLS (FTPS ) или заменяется на Протокол передачи файлов SSH (SFTP).
Первыми клиентскими приложениями FTP были программы командной строки, разработанные до того, как операционные системы имели графические пользовательские интерфейсы, и до сих пор поставляются с большинством Операционные системы Windows, Unix и Linux. Многие клиенты FTP и служебные программы автоматизации были разработаны для настольных компьютеров, серверов, мобильных устройств и оборудования, а FTP был включен в приложения для повышения производительности, например.
Первоначальная спецификация для протокола передачи файлов была написана Абхаем Бхушаном и опубликована как RFC 114 от 16 апреля 1971 г. До 1980 г. FTP работал на NCP, предшественнике TCP / IP. Позднее протокол был заменен версией TCP / IP, RFC 765 (июнь 1980 г.) и RFC 959 <182.>(Октябрь 1985 г.) текущая спецификация. Несколько предложенных стандартов изменяют RFC 959, например, RFC 1579 (февраль 1994 г.) включает протокол FTP с поддержкой межсетевого экрана. (пассивный режим), RFC 2228 (июнь 1997 г.) предлагает расширения безопасности, RFC 2428 (сентябрь 1998 г.) добавляет поддержку IPv6 и определяет новый тип пассивного режима.
FTP может работать в активном или пассивном режиме, который определяет, как устанавливается соединение для передачи данных. (Обратите внимание, что это несколько сбивает с толку, это значение «режима» отличается от значения команды MODE в протоколе FTP и фактически соответствует командам PORT / PASV / EPSV / etc.) В обоих случаях клиент создает TCP управлять соединением от случайного, обычно непривилегированного, порта N к командному порту 21 FTP-сервера.
Оба режима были обновлены в сентябре 1998 года для поддержки IPv6. В то время были внесены дальнейшие изменения в пассивный режим, обновив его до расширенного пассивного режима.
Сервер отвечает через управляющее соединение трехзначным кодом состояния в ASCII с дополнительным текстом сообщение. Например, «200» (или «200 OK») означает, что последняя команда была успешной. Цифры представляют собой код ответа, а необязательный текст представляет понятное человеку объяснение или запрос (например,
Причина, по которой FTP требуется два порта (один для отправки и один для приема), связана с тем, что изначально он был разработан для работы с программой управления сетью (NCP), которая была симплексный протокол, который использует два адреса порта, устанавливая два соединения для двусторонней связи. Нечетный и четный порт были зарезервированы для каждого приложения или протокола прикладного уровня. Стандартизация TCP и UDP снизила необходимость использования двух симплексных портов для каждого приложения до одного дуплексного порта, но протокол FTP никогда не изменялся так, чтобы использовать только один порт, а продолжал использовать два для обратной совместимости.
FTP обычно передает данные, когда сервер подключается обратно к клиенту после того, как клиент отправляет команду PORT. Это проблематично как для NAT, так и для брандмауэров, которые не разрешают подключения из Интернета к внутренним хостам. Для NAT дополнительная сложность заключается в том, что представление IP-адресов и номера порта в команде PORT относится к IP-адресу и порту внутреннего хоста, а не к общедоступному IP-адресу и порту NAT.
Есть два подхода к решению этой проблемы. Один из них заключается в том, что FTP-клиент и FTP-сервер используют команду PASV, которая устанавливает соединение для передачи данных от FTP-клиента к серверу. Это широко используется современными FTP-клиентами. Другой подход состоит в том, чтобы NAT изменял значения команды PORT, используя для этой цели шлюз уровня приложения.
При передаче данных по сети определены четыре типа данных:
Просроченный Internet Draft определяет ТИП U для передачи текстовых файлов Unicode с использованием UTF -8 ; хотя проект так и не стал RFC, он был реализован несколькими FTP-клиентами / серверами.
Обратите внимание, что эти типы данных обычно называются «режимами», хотя неоднозначно это слово также используется для обозначения режима связи «активный-пассивный» (см. Выше) и режимов, установленных командой MODE протокола FTP ( увидеть ниже).
Для текстовых файлов (TYPE A и TYPE E) предусмотрены три различных параметра управления форматом, чтобы контролировать способ печати файла:
Эти форматы в основном относились к линейным принтерам ; большинство современных FTP-клиентов / серверов поддерживают только управление форматом по умолчанию N.
Файловая организация указывается с помощью команды STRU. Следующие файловые структуры определены в разделе 3.1.1 RFC959:
Большинство современных FTP-клиентов и серверов поддерживают только STRU F. STRU R все еще используется в приложениях для передачи файлов мэйнфреймов и мини-компьютеров.
Передача данных может осуществляться в любом из трех режимов:
Большинство современных FTP-клиентов и серверов не реализуют РЕЖИМ B или РЕЖИМ C; Исключением являются FTP-клиенты и серверы для операционных систем мэйнфреймов и миникомпьютеров.
Некоторое программное обеспечение FTP также реализует режим сжатия на основе DEFLATE, который иногда называют «Режим Z» после команды, которая его включает. Этот режим был описан в Internet Draft, но не стандартизован.
GridFTP определяет дополнительные режимы, MODE E и MODE X, как расширения MODE B.
FTP-вход использует обычную схему имени пользователя и пароля для предоставления доступа. Имя пользователя отправляется на сервер с помощью команды USER, а пароль отправляется с помощью команды PASS. Эта последовательность не зашифрована «на проводе», поэтому может быть уязвима для сетевой атаки сниффингом. Если информация, предоставленная клиентом, принимается сервером, сервер отправляет приветствие клиенту, и сеанс начинается. Если сервер поддерживает это, пользователи могут входить в систему без предоставления учетных данных, но тот же сервер может разрешать только ограниченный доступ для таких сеансов.
Хост, предоставляющий службу FTP, может предоставить анонимный доступ по FTP. Пользователи обычно входят в службу с «анонимной» (строчной и чувствительной к регистру на некоторых FTP-серверах) учетной записью при запросе имени пользователя. Хотя пользователей обычно просят отправить свой адрес электронной почты вместо пароля, проверка предоставленных данных фактически не выполняется. Многие FTP-узлы, предназначенные для предоставления обновлений программного обеспечения, допускают анонимный вход.
HTTP по существу исправляет ошибки в FTP, которые делали его неудобным для использования для многих небольших эфемерных передач. типично для веб-страниц.
FTP имеет управляющее соединение с отслеживанием состояния, которое поддерживает текущий рабочий каталог и другие флаги, и для каждой передачи требуется вторичное соединение, через которое передаются данные. В «пассивном» режиме это вторичное соединение от клиента к серверу, тогда как в «активном» режиме по умолчанию это соединение от сервера к клиенту. Эта очевидная смена ролей в активном режиме и случайные номера портов для всех передач - вот почему межсетевые экраны и шлюзы NAT так тяжело работают с FTP. HTTP не имеет состояния и мультиплексирует управление и данные через одно соединение от клиента к серверу на хорошо известных номерах портов, которые тривиально проходят через шлюзы NAT и просты для управления брандмауэрами.
Установка управляющего соединения FTP происходит довольно медленно из-за задержек отправки всех требуемых команд и ожидания ответов в оба конца, поэтому принято устанавливать управляющее соединение и удерживать его открытым для нескольких файлов. передает, а не отбрасывает и каждый раз заново устанавливает сеанс. Напротив, HTTP изначально сбрасывал соединение после каждой передачи, потому что это было очень дешево. Хотя впоследствии HTTP получил возможность повторно использовать TCP-соединение для множественных передач, концептуальная модель все еще представляет собой независимые запросы, а не сеанс.
Когда FTP передает через соединение для передачи данных, контрольное соединение не используется. Если передача занимает слишком много времени, брандмауэр или NAT могут решить, что контрольное соединение не работает, и прекратить его отслеживание, фактически разорвав соединение и запутав загрузку. Одиночное HTTP-соединение простаивает только между запросами, и это нормально и ожидается, что такие соединения будут сброшены после тайм-аута.
Наиболее распространенные веб-браузеры могут получать файлы, размещенные на FTP-серверах, хотя они могут не поддерживать такие расширения протокола, как FTPS. Когда предоставляется FTP - а не HTTP - URL, доступное содержимое на удаленном сервере представляется способом, аналогичным тому, который используется для другого веб-содержимого. Полнофункциональный FTP-клиент может быть запущен в Firefox в форме расширения под названием FireFTP.
. С 2019 года основные браузеры, такие как Chrome и Firefox, в разной степени отказываются от поддержки FTP, Google планирует полностью удалить его в Chrome 82. Mozilla в настоящее время обсуждает предложения, в том числе удаление поддержки только старых реализаций FTP, которые больше не используются, для упрощения их кода.
FTP Синтаксис URL описан в RFC 1738 и имеет форму: ftp: // [пользователь [: пароль] @] хост [: порт] / url- путь
(части в квадратных скобках необязательны).
Например, URL-адрес ftp://public.ftp-servers.example.com/mydirectory/myfile.txt представляет файл myfile.txt из каталога mydirectory на сервере public.ftp-servers.example.com как FTP-ресурс. URL-адрес ftp: // user001: [email#160;protected]/mydirectory/myfile.txt добавляет спецификацию имени пользователя и пароля, которые должны использоваться для доступа к этому ресурсу.
Более подробную информацию об указании имени пользователя и пароля можно найти в документации браузеров (например, Firefox и Internet Explorer ). По умолчанию большинство веб-браузеров используют пассивный режим (PASV), который легче преодолевает межсетевые экраны конечных пользователей.
Существовали некоторые различия в том, как разные браузеры обрабатывают разрешение пути в тех случаях, когда для пользователя есть не корневой домашний каталог.
FTP не был разработан для быть безопасным протоколом и имеет много слабых мест. В мае 1999 года авторы RFC 2577 перечислили уязвимость для следующих проблем:
FTP не шифрует свой трафик; все передачи осуществляются в виде открытого текста, а имена пользователей, пароли, команды и данные могут быть прочитаны любым лицом, способным выполнить захват пакетов (прослушивание ) в сети. Эта проблема характерна для многих спецификаций интернет-протокола (таких как SMTP, Telnet, POP и IMAP), которые были разработаны до создания таких механизмов шифрования, как TLS. или SSL.
Общие решения этой проблемы включают:
FTP через SSH - это практика туннелирования обычного сеанса FTP через соединение Secure Shell. Поскольку FTP использует несколько соединений TCP (необычно для протокола TCP / IP, который все еще используется), туннелирование через SSH особенно сложно. Со многими клиентами SSH попытка настроить туннель для канала управления (начальное соединение клиент-сервер на порту 21) защитит только этот канал; при передаче данных программное обеспечение FTP на обоих концах устанавливает новые TCP-соединения (каналы данных) и поэтому не имеет конфиденциальности или защиты целостности.
В противном случае это необходимо для клиентского программного обеспечения SSH иметь специальные знания о протоколе FTP, отслеживать и перезаписывать сообщения канала управления FTP и автономно открывать новые пересылки пакетов для каналов данных FTP. Программные пакеты, поддерживающие этот режим, включают:
Явный FTPS - это расширение стандарта FTP, которое позволяет клиентам запрашивать шифрование FTP-сеансов. Это делается путем отправки команды «AUTH TLS». Сервер может разрешить или запретить подключения, которые не запрашивают TLS. Это расширение протокола определено в RFC 4217. Неявный FTPS - это устаревший стандарт FTP, требующий использования SSL или TLS-соединения. Было указано использовать порты, отличные от обычного FTP.
Протокол передачи файлов SSH (хронологически второй из двух протоколов, сокращенно SFTP) передает файлы и имеет аналогичный набор команд для пользователей, но использует Secure Протокол Shell (SSH) для передачи файлов. В отличие от FTP, он шифрует как команды, так и данные, предотвращая открытую передачу паролей и конфиденциальной информации по сети. Он не может взаимодействовать с программным обеспечением FTP.
Простой протокол передачи файлов (TFTP) - это простой FTP-протокол с блокировкой, который позволяет клиенту получать файл с удаленного хоста или помещать файл на него. Одно из его основных применений - на ранних этапах загрузки из локальной сети, потому что TFTP очень просто реализовать. TFTP не хватает безопасности и большинства расширенных функций, предлагаемых более надежными протоколами передачи файлов, такими как протокол передачи файлов. TFTP был впервые стандартизирован в 1981 году, и текущую спецификацию протокола можно найти в RFC 1350.
Simple File Transfer Protocol ( первый протокол, сокращенно SFTP), как определено в RFC 913, был предложен как (незащищенный) протокол передачи файлов с уровнем сложности, промежуточным между TFTP и FTP. Он никогда не был широко принят в Интернете, и теперь ему присвоен исторический статус IETF. Он работает через порт 115 и часто получает инициализацию SFTP. Он имеет набор команд из 11 команд и поддерживает три типа передачи данных: ASCII, двоичный и непрерывный. Для систем с размером слова, кратным 8 битам, реализация двоичного и непрерывного языков одинакова. Протокол также поддерживает вход с использованием идентификатора пользователя и пароля, иерархические папки и управление файлами (включая переименование, удаление, загрузку, загрузку, загрузку с перезаписью и загрузку с добавлением).
Ниже приводится сводка кодов ответов FTP, которые могут быть возвращены сервером FTP . Эти коды были стандартизированы IETF в RFC 959. Код ответа представляет собой трехзначное значение. Первая цифра используется для обозначения одного из трех возможных результатов - успех, неудача или для обозначения ошибки или неполного ответа:
Вторая цифра определяет вид ошибки:
Третья цифра кода ответа используется для предоставления дополнительных сведений для каждой из категорий, определяемых второй цифрой.