File Transfer Protocol

**File Transfer Protocol** (**FTP**) (shqip: *Protokolli i Transferimit të Skedave*) është një protokoll rrjeti që përdoret për transferimin e të dhënave nga një kompjuter në një tjetër përmes një rrjeti siç është Interneti.

FTP është një protokoll për shkëmbim dhe manipulim të fajllave përmes një rrjeti kompjuterik TCP. Një FTP klient mund të lidhet me një FTP server për të manipuluar fajllat në atë server.

Përparësi e tij ndaj shërbimeve tjera është që me futjen (*Loging*) e kompjuterit personal në atë llogaritësin shërbyes (*Server*) prezantohet e gjithë amëza e llogaritësit nga aty shpejtë mund të barten ose të shkarkohen regjistra të tëra. Përpos kësaj ky shërbim ofron edhe *protokollin FTP* i cili e bene të mundshëm prezantimin e amëzës dhe përdorimin e saj nga një kompjuter i largët, sikur të ishte ajo amëzë në vetë kompjuterin e përdoruesit.  

## Mënyrat e lidhjes 
FTP punon përmes TCP-së. Sipas parazgjedhjes lidhet portin 21 për lidhje hyrëse nga klientë FTP. Një lidhje në këtë port nga klienti FTP formon rrjedhën kontrolluese përmes së cilës barten udhëzimet nga klienti FTP tek serveri FTP dhe në raste edhe anasjelltas. FTP përdor "out-of-band control", që do të thotë se përdorë një lidhje tjetra për kontrollin dhe të dhënat. Rrjedhimisht, në mënyrë që transferi të zhvillohet, kërkohet një lidhje tjetër, e cila quhet "data stream" apo rrjedha e të dhënave. Varësisht nga mënyra e transferit, procesi i përgatitjes së data stream ndryshon. Porti 21 për kontrollim (ose program), porti 20 për të dhënat.

Në **mënyrën aktive**, klienti FTP hap një port dinamik, ia dërgon serverit FTP numrin e portit dinamik mbi të cilin po funksionon përmes "control stream" dhe pret një lidhje nga serveri. Kur serveri FTP fillon lidhjen e të dhënave me klientin FTP, ai lidh portin burimor me portin 20 në server.

Për të përdorur mënyrën aktive, klienti dërgon një PORT komandë, me IP-në dhe portin si argument. Formati për IP dhe port është "h1, h2, h3, h4, p1, p2".  Secila fushë është një paraqitje decimale 8 bitëshe e IP-së host, e përndjekur nga një port i përzgjedhur i të dhënave. Për shembull, një klient me IP 192.168.0.1, duke "dëgjuar" mbi portin 49154 për lidhjen e të dhënave do të dërgojë komandën "PORT 192,168,0,1,192,2". Fushat e porteve duhet të interpretohen si p1×256 + p2 = port, ose, në këtë rast, 192×256 + 2 = 49154.

Në **mënyrën pasive**, serveri FTP hap një port dinamik, ia dërgon klientit FTP IP adresën e serverit për t'u lidhur dhe portin në të cilin po dëgjon (një vlerë 16-bitëshe e thyer në një bajt të lartë dhe të ulët, siç shpjegohet më lartë) përmes "control stream" dhe pret një lidhje nga klienti FTP. Në këtë rast, klienti lidh portin burimor të lidhjes në një port dinamik

Për të përdorur mënyrën pasive, klienti dërgon komandën *PASV* ndaj së cilës serveri do të përgjigjej me diçka si "227 Entering Passive Mode (127,0,0,1,192,52)". Sintaksa e adresës IP dhe portit janë të njëjta me argumentin e PORT komandës.  

Në **mënyrën e zgjeruar pasive**, serveri funksionon njëjtë si në mënyrën pasive por transmeton vetëm numrin e portit (jo të thyer në bajta të lartë dhe të ulët) dhe klienti pandeh se po lidhet me adresën e njëjtë IP që ishte lidhur më parë. Mënyra e zgjeruar pasive ishte shtuar nga RFC 2428 në shtator 1998.

Derisa transferohen të dhënat përmes data stream, control stream qëndron pa vepruar. Kjo mund të shkaktojë probleme me transfera të mëdhaja me firewall të cilat ndalin seancat pas periudhave të gjata të qëndrimit në këtë mënyrë të control stream. Derisa skedat mund të transferohen me sukses, seanca control mund të çlidhet nga firewall, duke shkaktuar ndonjë error.

Protokolli FTP përkrah vazhdimin e shkarkimeve të ndërprera duke përdorur komandën REST. Klienti bart numrin e bajtëve që tanimë ka pranuar si argument tek komanda REST dhe ri-fillon transferin. Në disa klientë të linjave udhëzuese (command-line clients) për shembull, ekziston një komandë shpesh e injoruar por mjaft e dobishme, "reget" (që do të thotë "merr përsëri") që do t'i mundësojë një komande "get" të ndërprerë të vazhdojë, duke shpresuar deri në përfundim, pas një ndërprerjeje të komunikimit.

Vazhdimi i ngarkimeve, sidoqoftë, nuk është kaq i lehtë. Megjithëse protokolli FTP përkrah komandën APPE për të shtuar të dhëna te një skede (fajlli) në server, klienti nuk e di pozicionin e saktë në të cilin u ndërpre transferi. Ai duhet të gjejë madhësinë e skedës në një mënyrë tjetër, për shembull përmes një liste direktorie ose duke përdorur komandën SIZE.

Në mënyrën ASCII, vazhdimi i transferit mund të shkaktojë problem të shumta nëse klienti dhe serveri përdorin karaktere kompjuterike *end of line* të ndryshme nga njëra tjetra.

Qëllimet e FTP-së janë, siç përshkruhen nga RFC-ja e saj:
# Promovimi i shpërndarjes së skedave (programve kompjuterike dhe/ose të dhënave).
# Frymëzimi i përdorimit direkt apo indirekt të remote computer (kompjuterëve nga largësia).
# Mbrojtja e një përdoruesi nga variacionet e sistemeve të ruajtjes së skedave mes hostëve të ndryshëm.
# Transferimi i të dhënave në mënyrë të besueshme dhe efikase.

## Problemet e sigurisë 
Specifikimi origjinal i FTP-së është metodë thelbësisht e pasigurt e transferimit të skedave sepse nuk ka metodë të caktuar të transferimit të të dhënave në mënyrë të shifruar (encrypted). Kjo do të thotë se nën shumicën e konfiguracioneve të rrjetit, nofkat (user name), fjalëkalimet, FTP komandat dhe të dhënat e transferuara mund të kapen nga çdokush në rrjetin e njëjtë që përdor një packet sniffer. Ky është një problem jo i rrallë te shumë specifikime të protokollit të Internetit, të shkruara para krijimit të SSL, si HTTP, SMTP dhe Telnet. Zgjidhja e zakonshme për këtë problem është përdorimi ose i SFTP (SSH File Transfer Protocol), ose i FTPS (FTP over SSL), që i jep shifrim SSL ose TLS një FTP-je, siç përshkruhet nga RFC 4217.

## FTP anonime 
Një host që ofron shërbimin FTP mund të ofrojë edhe akses FTP anonim. Nën këtë marrëveshje, përdoruesit nuk e kanë të domosdoshme një llogari llogari në atë host. Në vend të saj përdoruesit shkruajnë "anonymous" ose "ftp" kur kërkohet nofka. Megjithëse përdoruesve shpesh u kërkohet të dërgojnë email adresën si fjalëkalim, por performohet pak ose fare verifikim në të dhënat e dërguara.  

Ndërsa FTP klientët modernë zakonisht fshehin procesin e kyçjes anonime nga përdoruesi, klienti ftp jep "të dhëna budallaqe" si fjalëkalim (meqë email adresa e përdoruesit mund të mos njihet nga aplikacioni). Për shembull, agjentët ftp në vijim kanë listuar fjalëkalimet për kyçje anonime:

* **Mozilla Firefox** (3.0.7) — `mozilla@example.com`
* **KDE Konqueror** (3.5) — `anonymous@`
* **wget** (1.10.2) — `-wget@`
* **lftp** (3.4.4) — `lftp@`

Protokolli Gopher është sugjeruar si një alternativë e FTP-së anonime, si dhe Trivial File Transfer Protocol (TFTP) dhe File Service Protocol (FSP).

## FTP dhe shfletuesit e rrjetit 
Shumica e shfletuesve modernë të rrjetit dhe menaxhuesit e skedave (file manager) mund të lidhen në serverë FTP, megjithëse atyre mund të ju mungojë përkrahja për ekstensionet protokollare si FTPS. Kjo lejon manipulimin e skedave nga larg përmes FTP nëpër një ndërfaqe të ngjajshme me atë që përdoret për skeda lokale. Kjo bëhet përmes një FTP URL, e cila merr formën ftp(s)`://`&nbsp;&nbsp;(p.sh., https://web.archive.org/web/20110927180542/http://ftp.gimp.org/). Një fjalëkalim mund të shtohet sipas dëshirës në URL, p.sh.: &nbsp;&nbsp;ftp(s)`://``:``@`:. Shumica e shfletuesve kërkojnë përdorimin e mënyrës pasive FTP, të cilën nuk mund ta mbajnë të gjithë serverët FTP. Disa shfletues lejojnë vetëm shkarkimin e skedave, por jo edhe ngarkimin në server.

Punoj: Granit Karaj

## Referime 
## Lidhje të jashtme 
* RFC 959 – File Transfer Protocol
* RFC 1579 – Firewall Friendly FTP
* RFC 2228 – FTP Security Extensions
* RFC 2428 – FTP Extensions for IPv6 and NATs
* RFC 2640 – Internationalization of the File Transfer Protocol
* RFC 3659 – Extensions to FTP

;Servera
* VsFTPd (Unix)
* ProFTPd (Unix)
* Pure-FTPd (Unix)
* FileZilla Server (Windows)
* FTP Server Test (Online)

;Protokoll
* Lista e FTP komandave
* FTP Sequence Diagram