Протокол за пренос на податотеки

**Протокол за пренос на податотеки** (**ППП**) е стандарден мрежен протокол кој се користни за копирање на податотека од еден на друг хост преку TCP заснована мрежа, како што е Интернет. ППП се заснова на клиент-опслужувач архитектурата. ППП клиентите се индентификуваат со користење на корисничко име и лозинка, но исто така може да се поврзат и анонимно на ППП опслужувачот доколку истиот тоа го има дозволено.

Првите ППП клиентски апликации беа интерактивни алатки за командната линија, спроведувајќи стандардни команди и синтакса. Графичките кориснички интерфејс клиенти, кои беа развиени за многу  популарните десктоп оперативни системи, се користат и денес.

## Историја

Оригиналните спецификации за Протоколот за пренос на податотеки напишани од Abhay Brushan и објавени како RFC 114 на 16 Април 1971 и подоцна заменети со RFC 765 (Јуни 1980) и RFC 959 (Октомври 1985), тековните спецификации. Неколку предложени измени за стандардот RFC 959, на пример RFC 2228 (Јуни 1997) предлагаат безбедносни екстензии и RFC 2428 (Септември 1998) дава поддршка за IPv6 и дефинира нов тип на пасивен режим. .

## Преглед на протоколот
Протоколот е наведен во RFC 959, кој е сумиран подолу. .

Клиентот прави TCP врска до опслужувачката порта 21. Оваа врска, наречена *контролна врска*, останува отворена за време на траењето на сесијата, со втора врска, наречена *податочна врска* , отворена од опслужувачот **од** неговата порта 20 до клиентската порта (наведени во преговарачкиот дијалог) како што е потребно за пренос на податочна податотека. Контролната врска се користи за администрација на сесија (односно, команди, идентификација, лозинки) ) разменета помеѓу клиентот и опслужувачот користејќи telnet како протокол. На пример "RETR "filename"" веднаш ќе ја пренесе одредената податотека од опслужувачот до клиентот. Поради две-портната структура, ППП се смета за *out-of-band*, за разлика на *in-band* протоколот како што е HTTP.

опслужувачот одговара на контролната врска со статус код со три цифри во ASCII со опционална текст порака, на пример "200" (или "200 OK.") значи дека последната команда беше успешна. Бројките го претставуваат кодот број и опционалниот текст претставува објаснување (на пример ,) или се потребни параметри (на пример, ). Пренос на податотека во прогрес низ податочна врска може да биде прекинат користејќи порака на прекин испратена низ контролната врска.

ППП може да биде извршен во *активен* или *пасивен* режим, којшто одредува како податочната врска е воспоставена. Во активен режим, клиентот ја испраќа на опслужувачот IP-адресата и бројот на портата на која клиентот ќе слуша, и опслужувачот иницира TCP врска. Во ситуации кога клиентот е зад firewall и не може да ја прифати дојдовната TCP врска, *пасивниот режим* може да се користи. Во овој режим клиентот испраќа PASV команда на опслужувачот и добова една IP-адреса и бројот на портата за возврат. Клиентот ги користи овие податоци за отворање на врската до опслужувачот. Двете форми се ажурирани во септември 1998 година за да поддржат IPv6. Во тоа време беа направени и други промени на пасивниот режим, правејќи го *продолжен пасивен режим*.

Додека се пренесуваат податоци низ мрежата, четири претставувања на податоци може да се користат:
* ASCII режим: секористи за текст. Податоците се претворени, ако е потребно, од испраќачкиот хост на претставувањето на карактерите во "8-битен ASCII" пред преносот, и (повторно, ако е потребно) до примачкиот хост на претставувањето на карактерите. Како последица на тоа, овој режим е несоодветен за податотеки кои содржат податоци, освен обичен текст.
* Слика режим (вообичаено се нарекува Бинарен режим): испраќачката машина ја испраќа секоја податотека бајт по бајт, и примателот ги снима овие потоци од бајти како што ги прима.(Поддршката за Image режим се препорашува за сите имплементации на ППП).
* EBCDIC режим:се користи за обичен текст помеѓу домаќините користејќи го множеството со карактери EBCDIC. Овој режим инаку е како ASCII режимот.
* Локален режим:дозволува два или повеќе компјутери со идентични поставувања  да испраќаат податоци во неслободен формат, без потреба да ги претвораат во ASCII.

За текстуални податотеки, различен формат ги контролира и евидентира опциите на структурата кои се предвидени. Овие одлики се дизајнирани за да се олеснат податотеките кои содржат Telnet или ASA форматирање.

Преносот на податоци може да се направи на било кој од трите начини:

* Поточен режим:Податоците се праќаат како континуиран поток, ослободувајќи го ППП од каква било обработка. Донекаде, сите обработки се оставени на TCP. Не е потребен индикатор End-of-file, доколку податоците се поделени во записи.
* Блок режим:ППП ги разбива податоците во неколку блокови, (наслов на блокот, број на бајт, и податочно поле) и потоа ги пренесува во TCP.
* Компресиран режим:Податоците се компресирани со еден единствен алгоритам (вообичаено run-length кодирање).

## Безбедност
ППП не бил дизајниран да биде сигурен протокол-особено на денешните стандарди-и има многу безбедносни слабости. Во Мај 1999, авторите на RFC 2577 ги набројале следните недостатоци:

* Напади на отскокнување
* Напади од измами
* Напади од брутална сила
* Фаќање на пакети (душкање)
* Заштита на корисничкото име
* Крадење на порти

ППП не бил дизајниран за да го шифрира својот сообраќај; сите преноси се во чист текст, и корисничките имиња, лозинки, команди и податоците може лесно да бидат прочитани од било кој кој може да фаќа пакети преку ( душкање) на мрежата. Овој проблем е заеднички за многу спецификации на Интернет протоколи (како што се SMTP, Telnet, POP и IMAP) дизајнирани пред создавањето на механизми за шифрирање како што се TLS или SSL. Заедничко решение за овој проблем е користењето на “безбеден”, TLS-заштитена верзија на несигурни протоколи (на пример,  FTPS за FTP, TelnetS за Telnet и други) или избор на различен, посигурен протокол кој може да се справи со работата, како што е SFTP/SCP алатки, заедно со повеќето имплементации на Secure Shell протоколот.

## Анонимни ППП
Хост којшто обезбедува услуги на ППП може дополнително да обезбедува анонимен ППП пристап. Корисниците обично се најавуваат на сервисот со ‘анонимна’ корисничка сметка кога ќе бидат известени за корисничко име. Иако корисниците најчесто треба да ги испраќаат своите email адреси наместо лозинка, без потврда всушност изведена доставата на податоци; примери на анонимни ППП опслужувачи можат да бидат најдени овде.

## Далечински ППП или ПППmail
Каде што ППП пристапот е ограничен, далечинскиот ППП (или ПППmail) сервисот може да се користи за да се избегне проблемот. Е-поштата која ги содржи ППП командите за да се изврши е испратен на далечинскиот ППП опслужувач, кој е опслужувач за пошта што го расчленува дојдовната е-пошта, ги извршува ППП командите, и испраќа назад е-пошта со сите преземени податотеки како прилог. Очигледно ова е помалку флексибилно од ППП клиент, како што не е можно да се погледнат директориумите интерактивно или за менување на команди, и исто така може да има проблеми со големите датотечни прикачувања во одговорите што се добиваат од опслужувачите за пошта. Услугата се користи само кога некои корисници имаат пристап до Интернет преку е-мејл портали како што е BBS или онлајн сервис.

## Поддршка за прелистувачи
Најчестите прелистувачи можат да вчитат податоци хостирани на ППП опслужувачи, иако тие можеби не поддржуваат протокол екстензии како што е FTPS. ]]. Кога ППП-наместо HTTP- URL е добиена, достапни содржини на оддалечен опслужувач се претставени на начин сличен на оној што се користи за други веб содржини. Полно-опремен ППП клиент може да се движи (run) во рамките на Firefox во форма на проширување наречена FireFTP https://addons.mozilla.org/en-US/firefox/addon/684/ 

ППП URL синтаксата е опишана во RFC 1738, земајќи ја формата:

`ftp://[<корисник>[:<лозинка>]@]<хост>[:<порта>]/<патека_на_url>`

(Делот во заградите е опционален.) На пример:

`ftp://public.ftp-servers.example.com/mydirectory/myfile.txt`

или:

`ftp://user001:secretpassword@private.ftp-servers.example.com/mydirectory/myfile.txt`

Повеќе детали за впишувањена корисничкото име и лозинката може да се нјдат во документацијата на пребарувачите, како што се, на пример , Firefox и Internet Explorer.

Стандардно, повеќето прелистувачи користат пасивен (PASV) режим, кој полесно го преминува крајниот корисничи firewall.

## NAT и поминувањето на  огнените ѕидови
ППП нормално пренесува податоци со тоа што опслужувачот се поврзува назад со клиентот, откако командата PORT е испратена на од страна на клиентот. Ова е проблематично и за NAT и за огнените ѕидови, кои не дозволуваат врски од Интернетот кон внатрешните домаќини. За NAT, дополнителна компликација е застапеноста на IP-адреси и бројот на портата во PORT командата што се однесува на IP-адресата на домашниот хост и портата, наместо јавната IP-адреса и портата на NAT.

Постојат два пристапа кон овој проблем. Една од нив е дека ППП клиентот и ППП опслужувачот ја користат PASV командата, која што предизвикува податочната врска да се утврди од ППП клиентот до опслужувачот. Ова е широко употребувано од современите ППП клиенти. Другиот пристап е да NAT ги менува вредностите на PORT командата, користејќи апликација на ниво на портал за оваа намена.

## Безбеден ППП
Постојат неколку методи за безбедно пренесување на податотеки што се нарекуваат “Безбеден ППП” во една точка или друга.

### FTPS (експлицитен)
Експлицитниот FTPS е продолжение на ППП стандардот којшто им овозможува на клиентите да побараад да ППП сесијата биде шифрирана. Тоа се прави со праќање на командата “AUTH TLS”. опслужувачот има опција да дозволи или одбие врски кои не барааат TLS. Најновата дефиниција на овој протокол е RFC 4217.

### FTPS (имплицитен)
Имплицитниот FTPS е застарен стандард за ППП којшто бара употреба на SLL или TLS врска. ТОј бил определен да користи различни порти од обичниот ППП.

### SFTP
SFTP,  "SSH Протокол за пренос на податотеки," не е поврзан со ППП освен тоа што и тој исто така пренесува податотеки и има слично командно множество за корисниците.

### ППП преку SSH (не SFTP)
*ППП преку SSH (не [[SSH Протокол за пренос на податотеки|БППП]])” се однесува на праксата на тунелирање на нормална ППП сесија во текот на [[Secure Shell|SSH]] врска.
Бидејќи ППП користи повеќе [[Transmission Control Protocol|TCP]] врски (невообичаено за TCT/IP протокол кој сè уште е во употреба), особено е тешко да се пробие преку SSH. Со многу SSH клиенти, којшто се обидуваат да се пробијат за “каналот за контрола” (почетна клиент-опслужувач врска на портата 21) ќе биде заштитен само тој канал; кога податоците се пренесени, ППП софтверот на двата краја ќе постави нови TCP врски (“податочни канали”),  којшто ја заобиколуваат SSH врската, според тоа нема доверливост, интегрирана заштита итн.

Во спротивно, е неопходно за SSH клиент софтверот да има специфични знаења за ППП протоколот, и да се следи и да се поправи ППП каналот за контрола на пораки и автономно да се отвораат нови препраќања за ППП податочните канали. Верзијата 3 на [[SSH Комуникациската безбедност , [[GPL]] лиценцирано [http://fonc.sourceforge.net/ FONC], и [http://dovetail.com/products/ftpsshproxy.html Co:Z FTPSSH Proxy]  се трите софтверски пакети кои го поддржувааат овој режим.

ППП преку SSH, понекогаш се нарекува “безбеден ППП”; ова не треба да се меша со другите методи за обезбедување на ППП, како на пример со SSL/TLS ([[FTPS]]). Други методи на пренос на податотеки со користење на SSH кои не се поврзани со ППП вклучуваат  [[SSH Протокол за пренос на податотеки|SFTP]] и [[Безбедна копија|БКП]]; во секоја од овие, целиот разговор (акредитиви и податоци) е секогаш заштитен со SSH протоколот.

== Список на ППП команди ==
Подолу е *'Список на ППП команди''' кои мошат да бидат до ППП  опслужувач, вклучувајќи ги сите команди кои се стандардизирани во RFC 959 од страна на IETF. Сите команди подолу се RFC 959 засновани освен ако не е поинаку назначено. Имајте на ум дека повеќето командни линии на ППП клиентите на корисниците им презентираат свое множество команди. На пример, GET е заедничка корисничка команда за да ја спуштите податотеката наместо необработената (сурова) команда RETR.

* Список на повратни кодови на ППП опслужувачот – како одговор накоманди од клиентот, ППП опслужувачето враќа одговор кодови.

## Поврзано
* Спередба на ППП клинет софтверот
* Споредба на ППП опслужувач софтверот
* Curl-loader - FTP/S loading/testing open-source SW
* File eXchange Protocol (FXP)
* File Service Protocol (FSP)
* FTAM
* FTPFS
* List of file transfer protocols
* List of FTP commands
* List of FTP server return codes
* Managed File Transfer
* OBEX
* Shared file access
* TCP Wrapper

## Наводи

## Натамошно читање
* RFC 959 – (Standard) протокол за пренос на податотеки (FTP). J. Postel, J. Reynolds. October 1985.
* RFC 1579 – (Informational) Firewall-Friendly FTP. February 1994.
* RFC 1635 – (Informational) How to Use Anonymous FTP. May 1994.
* RFC 1639 – FTP Operation Over Big Address Records (FOOBAR). June 1994.
* RFC 1738 – Uniform Resource Locators (URL). December 1994.
* RFC 2228 – (Proposed Standard) FTP Security Extensions. October 1997.
* RFC 2389 – (Proposed Standard) Feature negotiation mechanism for the протокол за пренос на податотеки. August 1998.
* RFC 2428 – (Proposed Standard) Extensions for IPv6, NAT, and Extended passive mode. September 1998.
* RFC 2577 – (Informational) FTP Security Considerations. May 1999.
* RFC 2640 – (Proposed Standard) Internationalization of the протокол за пренос на податотеки. July 1999.
* RFC 3659 – (Proposed Standard) Extensions to FTP. P. Hethmon. March 2007.
* RFC 5797 – (Proposed Standard) FTP Command and Extension Registry. March 2010.
* RFC 7151 – (Proposed Standard) протокол за пренос на податотеки HOST Command for Virtual Hosts.  March 2014.

## Надворешни врски

* FTP Commands and Extensions registry
* Raw FTP command list
* FTP Sequence Diagram 
* VsFTPd (Unix)
* ProFTPd (Unix)
* Pure-FTPd (Unix)
* FileZilla Server (Windows)
* FTP Server Test (Online)

Категорија:FTP
FTP commands
Категорија:Clear text protocols
Категорија:Network file transfer protocols
Категорија:History of the Internet
Категорија:Application layer protocols
Категорија:Internet protocols
Категорија:Internet standards
Категорија:Unix network-related software