File Transfer Protocol

File Transfer Protocol (FTP) (protocollo di trasferimento file), in informatica e nelle telecomunicazioni,
è un protocollo di livello applicativo per la trasmissione di file tra host
basato su TCP e con architettura di tipo client-server.

Il protocollo usa connessioni TCP distinte per trasferire i dati e per controllare i trasferimenti e richiede autenticazione del client tramite nome utente e password, sebbene il server possa essere configurato per connessioni anonime con credenziali fittizie.
Dato che FTP trasmette in chiaro sia tali credenziali sia ogni altra comunicazione, e visto che non dispone di meccanismi di autenticazione del server presso il client, il protocollo è spesso reso sicuro utilizzando un sottostrato SSL/TLS e tale variante è chiamata FTPS.
L'acronimo SFTP designa invece un altro protocollo che, pur essendo molto simile a quest'ultimo dal punto di vista funzionale, è alquanto diverso da quello tecnologico: SSH File Transfer Protocol.

Storia 
FTP è uno dei primi protocolli definiti della Rete Internet e ha subito una lunga evoluzione negli anni. La prima specifica, sviluppata presso il MIT, risale al 1971. L'attuale specifica fa riferimento all'RFC 959.

Gli obiettivi principali di FTP descritti nella sua RFC ufficiale furono:

 Promuovere la condivisione di file (programmi o dati)
 Incoraggiare l'uso indiretto o implicito di computer remoti.
 Risolvere in maniera trasparente incompatibilità tra differenti sistemi di stoccaggio file tra host.
 Trasferire dati in maniera affidabile ed efficiente.

Descrizione

Modello 

Dove:

 PI (protocol interpreter) è l'interprete del protocollo, utilizzato da client (User-PI) e server (Server-PI) per lo scambio di comandi e risposte. In gergo comune ci si riferisce a esso come "canale comandi".
 DTP (data transfer process) è il processo di trasferimento dati, utilizzato da client (User-DTP) e server (Server-DTP) per lo scambio di dati. In gergo comune ci si riferisce a esso come "canale dati".

Funzionamento generale 
FTP, a differenza di altri protocolli come per esempio HTTP, utilizza due connessioni separate per gestire comandi e dati. Un server FTP generalmente rimane in ascolto sulla porta 21 TCP a cui si connette il client. La connessione da parte del client determina l'inizializzazione del canale comandi attraverso il quale client e server si scambiano comandi e risposte. Lo scambio effettivo di dati (come per esempio un file) richiede l'apertura del canale dati, che può essere di due tipi.

 In un canale dati di tipo attivo il client apre una porta solitamente casuale, tramite il canale comandi rende noto il numero di tale porta al server e attende che si connetta. Una volta che il server ha attivato la connessione dati al client FTP, quest'ultimo effettua il binding della porta sorgente alla porta 20 del server FTP. A tale scopo possono venire impiegati i comandi PORT o EPRT, a seconda del protocollo di rete utilizzato (in genere IPv4 o IPv6).

 In un canale dati di tipo passivo il server apre una porta solitamente casuale (superiore alla 1023), tramite il canale comandi rende noto il numero di tale porta al client e attende che si connetta. A tale scopo possono venire impiegati i comandi PASV o EPSV, a seconda del protocollo di rete utilizzato (in genere IPv4 o IPv6).

Sia il canale comandi, sia il canale dati sono delle connessioni TCP; FTP crea un nuovo canale dati per ogni file trasferito all'interno della sessione utente, mentre il canale comandi rimane aperto per l'intera durata della sessione utente, in altre parole il canale comandi è persistente mentre il canale dati è non persistente.

Un server FTP offre svariate funzioni che permettono al client di interagire con il suo filesystem e i file che lo popolano, tra cui:

 Download/upload di file.
 Resume di trasferimenti interrotti.
 Rimozione e rinomina di file.
 Creazione di directory.
 Navigazione tra directory.

FTP fornisce inoltre un sistema di autenticazione in chiaro (non criptato) degli accessi. Il client che si connette potrebbe dover fornire delle credenziali a seconda delle quali gli saranno assegnati determinati privilegi per poter operare sul filesystem. L'autenticazione cosiddetta "anonima" prevede che il client non specifichi nessuna password di accesso e che lo stesso abbia privilegi che sono generalmente di "sola lettura".

Comandi 
Lista dei comandi definiti nella RFC 959.

Codici di risposta 
 1xx: Risposta positiva preliminare. L'azione richiesta è incominciata ma ci sarà un'altra risposta a indicare che essa è effettivamente completata.
 2xx: Risposta positiva definitiva. L'azione richiesta è completata. Il client può ora mandare altri comandi.
 3xx: Risposta positiva intermedia. Il comando è stato accettato ma è necessario mandarne un secondo affinché la richiesta sia completata definitivamente.
 4xx: Risposta negativa temporanea. Il comando non è andato a buon fine ma potrebbe funzionare in un secondo momento.
 5xx: Risposta negativa definitiva. Il comando non è andato a buon fine e il client non dovrebbe più ripeterlo.
 x0x: Errore di sintassi.
 x1x: Risposta a una richiesta informativa.
 x2x: Risposta relativa alla connessione.
 x3x: Risposta relativa all'account e/o ai permessi.
 x4x: Non meglio specificato.
 x5x: Risposta relativa al file-system.

Problemi relativi alla sicurezza 
La specifica originale di FTP non prevede alcuna cifratura per i dati scambiati tra client e server. Questo comprende nomi utenti, password, comandi, codici di risposta e file trasferiti i quali possono essere "sniffati" o visionati da malintenzionati in determinate situazioni (esempio: ambienti intranet).

Il problema è comune a diversi altri protocolli utilizzati prima della diffusione di SSL quali HTTP, TELNET e SMTP. Per ovviare al problema è stata definita una nuova specifica che aggiunge al protocollo FTP originale un layer di cifratura SSL/TLS più una nuova serie di comandi e codici di risposta.
Il protocollo prende il nome di FTPS ed è definito nella RFC-4217.
Da non confondersi con SFTP che è comunque una valida alternativa per ovviare al problema descritto.

Applicazioni che utilizzano FTP 
FileZilla, Fire Downloader, gFTP, JDownloader sono alcuni dei tanti gestori di download che permettono di trasferire i dati mediante connessione FTP.

Tuttavia nei sistemi operativi, in genere, si può effettuare l'accesso anche tramite riga di comando.

Server FTP 
Alcuni server FTP popolari sono:
 FileZilla Server (Windows e Linux)
 Titan FTP Server (Windows)
 Pure-FTPd (Unix)
 VsFTPd (Unix)
 ProFTPd (Unix)

Note

Bibliografia

Voci correlate 
 Hypertext Transfer Protocol
 Protocollo di comunicazione
 Protocollo di rete

Altri progetti

Collegamenti esterni 
 
 
 
 
 

Massachusetts Institute of Technology