Fitxategien Transferentziarako Protokoloa

**FTP** edo **F**ile **T**ransfer **P**rotocol (euskaraz: **Fitxategien Transferentziarako Protokoloa**) edozein sistema eragileren artean fitxategiak trukatzeko aukera ematen duen sare protokoloa da. RFC 959 agirian deskribatzen den protokolo hau 1971n sortu zen, eta gaur egun fitxategi-transferentziarako beste protokolo batzuk existitzen diren arren, oso erabilia da oraindik.

## Aplikazioaren osagaiak 
FTP protokoloan oinarritzen den edozein aplikazioren osagai garrantzitsuenak hauek dira:

*	Bezeroa: Ondoko hiru zati hauek ditu: erabiltzailearekiko interfazea, fitxategi-sistema lokalarekiko interfazea, eta zerbitzariarekiko harremanetarako zatia. Azken hau da FTP protokoloak arautzen duena eta estandarizatuta dagoena. Modu askotako bezeroak daude merkatuan: komando-lerroko interfazea dutenak eta leiho moduko interfazedunak, doakoak eta ordaindu beharrekoak ...

*	Zerbitzariak: fitxategi-sistema lokalarekiko interfazea eta bezeroarekiko harremanetarako zatia bakarrik dituzte, ez dutelako erabiltzaileekin lan zuzena egiten. Badaude zerbitzari pribatuak (baimendutako erabiltzaileak bakarrik erabili ditzakete) eta publikoak, edozein erabiltzailek erabiltzeko prest *anonymous* (izengabe) erabiltzaile bezala.

*	Protokoloa: zerbitzari batekin harremanetan jartzeko erabiltzaile baten izena eta pasahitza eman behar denez, konexioaren bidezko aplikazio-mailako protokoloa da FTP.

*	Informazioa: beste aplikazioetan ez bezala, FTP-ren bidez elkarri trukatutako informaziorako egiturarik ez da definitzen. Fitxategiak bit-multzoak besterik ez dira. Egia esan, protokoloak badu modu berezia ASCII kodeko fitxategiak mugitzeko, baina erredundantea da. Normalena, aplikazioa bit moduan egikaritzea da.

## FTP protokoloa 
FTP-k TCP-ren gainean bakarrik egiten du lan. FTP zerbitzariek defektuz 21. portuan entzuten diete FTP bezeroen konexioei. Bezero batek portu honetara ezartzen duen konexioa **kontrol fluxua** sortzen du. Kontrol fluxuaren bidez, komandoak pasatzen zaizkio zerbitzariari, batzuetan fluxu hori zerbitzari bezero norantzan joan daitekeelarik. Fitxategi transferentzia gertatu dadin ordea, beste konexio mota bat behar da, **datu fluxua** deitzen dena. Transferentzia modua kontutan hartuta, datu fluxuren hasieratze prozesua desberdina da.

**Modu aktiboa**n, FTP bezeroak zorizko portu bat (>1023) irekitzen du, FTP zerbitzariari bidaltzen dio kontrol fluxuaren gainean entzuten ari den zorizko portuaren zenbakia eta itxaron egiten du FTP zerbitzariak konexioa ezarri dezan. FTP zerbitzariak datu konexioa hasieratzen duenean FTP bezero norabidean iturri portuari 20. portua lotzen dio.
Modu aktiboa erabili ahal izateko, bezeroak PORT komandoa bidaltzen du, IP helbidea eta portua argumentu bezala doazela. IP eta portuarentzat formatua honakoa da: "h1,h2,h3,h4,p1,p2". Eremu bakoitza zerbitzariaren IP helbidearen 8 biteko errepresentazio hamartarra da, aukeratutako datu portuak jarraitzen diolarik. Adibidez, 192.168.0.1 IP helbidea duen eta datu konexioa 1025 portuan entzuten ari den bezeroak “PORT 192,168,0,1,4,1” komandoa bidaliko du. Portuaren eremua honela irakurri behar da: 4*256 + 1 = 1025.

**Modu pasiboa**n, FTP zerbitzariak zorizko portu bat (>1023) irekitzen du, zerbitzariaren IP helbidea eta portua bidaltzen dio bezeroari konektatu dadin , non kontrol fluxua entzuten ari den eta FTP bezeroaren konexio bati itxaroten dio. Kasu honetan FTP bezeroak konexioaren igorle portua lotzen dio 1023 baino handiagoa den zorizko portu bati.
Modu pasiboa erabiltzeko, bezeroak PASV komandoa bidaltzen du, zeini zerbitzariak “227 Entering Passive Mode (127,0,0,1,78,52)" moduko zerbaiti erantzungo dion. IP helbidearen eta portuaren sintaxia PORT komandoren argumentuen berdina da.

**Modu pasibo hedatua**n, FTP zerbitzariak modu pasiboan bezala lan egiten du, baina kasu honetan portu zenbakia bakarrik transmititzen du eta bezeroak suposatzen du hasieratik konektatuta zegoen IP helbide berdinera konektatu behar dela. Modu pasibo hedatua RFC 2428 agiriak gehitu zuen 1998ko irailean.
Datuak datu fluxuaren bidez transmititzen ari diren bitartean, kontrol fluxua geldirik dago. Honek arazoak sor ditzake suhesien bidez egiten diren datu transferentzia handiekin, hauek, sesioak itxi ditzakete kontrol fluxua geldirik denbora asko sumatzen dutenean. Fitxategia ondo transferitzen ari den bitartean datu konexioaren bidez, suhesiak kontrol sesioa itzali dezake eta ondorioz errore bat sortu.

FTP protokoloak moztutako datu jaitsierekin jarraitzea onartzen du REST komandoa erabiliz. Bezeroak , argumentu bezala jasotako byte kopurua REST komandoari bidaltzen dio eta transferentzia berrabiarazten du. Komando-lerro motako bezero batzuetan, asko erabiltzen ez den komando garrantzitsu bat dago, REGET (berriro lortu esanahiarekin) moztutako GET komando bat berrabiaraztea ahalbidetzen duena.

Moztu den datu igoera batekin jarraitzea ez da hain erraza. FTP protokoloak zerbitzariko fitxategi bateri informazioa gehitzeko APPE komando erabiltzen duen harren, bezeroak ezin du jakin zehatz-mehatz zein posiziotan moztu den transferentzia. Beste era batera fitxategiaren tamaina lortu behar du, adibidez katalogo bat listatuz edo SIZE komandoa erabiliz.
ASCII moduan, moztutako transferentziekin jarraitzea arazoak eman ditzake bezeroak eta zerbitzariak lerro amaierako karaktere desberdinak erabiltzen badituzte.

RFCk dioen bezala, FTPren helburuak hauek dira:

#	Fitxategien trukatzea bultzatzea.
#	Esplizituki edo inplizituki urrutiko ordenagailuen erabilpena sustatzea.
#	Zerbitzari desberdinetan fitxategiak gordetzeko modu desberdinetatik babestea erabiltzailea.
#	Informazioa transferitzea modu fidagarri eta eraginkorrean.

## FTP komandoak eta erantzunak 
Komandoen eta erantzunen sintaxia oso sinplea da, 7 biteko ASCII formatuan idazten baitira. Beraz, FTP protokoloa karaktere modukoa eta, honela, DNS mezuak ez bezala, gizakiok FTP komandoak irakurri ditzakegu.
Komando bakoitzean bi eremu besterik ez daude: komandoren identifikazioa eta komandoren argumentuak (existitzen badira). Identifikazioa 4 ASCII karaktereek egiten dute; argumentuak ere ASCII kodean agertzen dira . Komandoen bukaera bereizteko (eta erantzunena), *return* karaktere bat eta lerro-bukaeraren karakterea erabiltzen dira. Komandorik erabilienak taulan agertzen direnak dira:

Komando bakoitzari erantzun bat ematen dio zerbitzariak. Erantzunak hiru digituko ASCII zenbakiak dira, gehi hautazkoa den ASCII testu bat, erantzuna adierazten duena. Hauek dira erantzun batzuk, beren mezu posibleekin:

## Segurtasun arazoak 
Jatorrizko FTP espezifikazioa fitxategiak trukatzeko modu ez segurua da, ez dagoelako erarik datuak modu enkriptatuan bidaltzeko. Honek esan nahi du sare konfigurazio gehienetan, erabiltzaile izenak, pasahitzak, FTP komandoak eta transferitutako fitxategiak edozeinek ikusi edo irakurri ditzakeela paketeen sniffer bat erabiliz. Hala ere, arazo hau mankomuna da SSL baino lehen sortu ziren Internet protokolo askotan, adibidez, HTTP, SMTP, eta Telnet. Arazo honentzako irtenbiderik errazena SFTP (SSH File Transfer Protocol) edo FTPS (FTP over SSL) erabiltzea da. Honek, SSL edo TLS enkripzioa gehitzen dio FTPri RFC 4217 agirian esaten den bezala.

## Kanpo loturak 
* RFC 959 — File Transfer Protocol (FTP). J. Postel, J. Reynolds. 1985.
* RFC 1579 — Firewall-Friendly FTP
* RFC 2228 — FTP Segurtasun Hedapenekin
* RFC 2428 — IPv6 eta NAT -entzat hedapenak eta Modu Pasibo Hedatua 1998.
* RFC 3659 — FTP-rentzat hedapenak. P. Hethmon. March-2007.
* Raw FTP command list - FTP komandoen lista ingelesez
* FTP Sequence Diagram - FTP saio baten sekuentzia diagrama ingelesez (PDF formatuan)

### Zerbitzariak 
* FTP Server Test (Online)
* FileZilla Server (Windows)
* Pure-FTPd (Unix)
* VsFTPd (Unix)
* ProFTPd (Unix)