Il protocollo FTP (File Transfer Protocol)

Il protocollo FTP (File Transfer Protocol), è, come indicato dal suo nome, un protocollo di trasferimento di file. La creazione del protocollo FTP data 1971, anno nel quale un meccanismo di trasferimento di file (descritti nel RFC 141) tra i terminali del MIT (Massachussetts Institute of Technology) era stato elaborato. Numerosi RFC hanno apportato in seguito dei miglioramenti al protocollo di base, ma le più grandi innovazioni sono del luglio del 1973. Il protocollo FTP è attualmente definito da RFC 959 (File Transfer Protocol (FTP) - Specifications).

Il ruolo del protocollo FTP

Il protocollo FTP definisce il modo in cui i dati devono essere trasferiti su una rete TC/IP. Il protocollo FTP ha come obiettivi:

Permettere una condivisione di file tra terminali remoti;

Permettere un'indipendenza ai sistemi di file dei terminali client e server;

Permettere di trasferire dei dati in modo efficace.

Il modello FTP

Il protocollo FTP si iscrive in un modello client-server, cioè un terminale invia degli ordini (il client) e un altro aspetta delle richieste per effettuare delle azioni (i server). Durante una connessione FTP, si aprono il canale di trasmissione per i comandi (canale di controllo) e il canale per i dati:

Il modello FTP

Così, sia il client che il server possiedono due processi che permettono di gestire questi due tipi di informazione:

ll DTP (Data Transfer Process) è il processo incaricato di stabilire la connessione e di gestire il canale di dati. Il DTP lato server è detto SERVER-DTP, il DTP lato client è detto USER-DTP.

Il PI (Protocol Interpreter) è l'interprete di protocollo che permette di comandare il DTP attraverso degli ordini ricevuti sul canale di controllo. Esso è diverso sul client e sul server:

Il SERVER-PI è incaricato di ascoltare gli ordini provenienti da uno USER-PI sul canale di controllo su una porta di data, di stabilire la connessione per il canale di controllo, di ricevere su quest'ultimo gli ordini dell'USER-PI, di rispondervi e di pilotare il SERVER-DTP;

Lo USER-PI è incaricato di stabilire la connessione con il server FTP, d'inviare gli ordini FTP, di ricevere le risposte del SERVER-PI e di controllare lo USER-DTP se necessario.

Durante la connessione di un client FTP ad un server FTP, lo USER-PI inizia la connessione al server secondo il protocollo Telnet. Il client invia degli ordini FTP al server, quest'ultimo li interpreta, pilota il suo DTP, poi rinvia una risposta standard. Una volta che la connessione è stabilita, il server-PI da la porta sulla quale i dati saranno inviati al client DTP. Il client DTP ascolta allora sulla porta specifica i dati provenienti dal server.

È importante notare che, visto che le porte di controllo e di dati sono su canali separati, è possibile inviare gli ordini partendo da un terminale e di ricevere i dati su un altro. Così, ad esempio, è possibile trasferire i dati tra due server FTP passando da un client per inviare le istruzioni di controllo e trasferendo le informazioni tra due processi di server connessi alla porta corretta:

Trasferimento di dati via FTP tra due server

In questa configurazione, il protocollo impone che i canali di controllo restino aperti durante tutto il trasferimento dei dati. Così un server può bloccare una trasmissione se il canale di controllo è interrotto durante la trasmissione.

I comandi FTP

Tutte le comunicazioni effettuate sul canale di controllo seguono le raccomandazioni del protocollo Telnet. Così i comandi FTP sono delle stringhe di caratteri Telnet (in codice NVT.-ASCII) terminati dal codice finale di linea Telnet (cioè la sequenza <CR>+<LF>, Carriage Return (ritorno a capo) seguito dal carattere Line Feed, sigla <CRLF>). Se il comando FTP ammette un parametro, questo è separato dal comando da uno spazio (<SP>). I comandi FTP permettono di precisare: la porta utilizzata; il modo di trasferimento dei dati; la struttura dei dati; la natura dell'azione da effettuare (Retrieve, List, Store, ecc.).

Si distinguono tre tipi di comandi FTP, tra cui i comandi di controllo di accesso, i comandi di configurazione del trasferimento e i comandi di servizio FTP:

Comando di controllo d'accesso
Comando Descrizione
USER Stringa di caratteri che permette di identificare l'utente. L'identificazione dell'utente è necessaria per stabilire una comunicazione sul canale dei dati.
PASS Stringa di caratteri che specifica la password dell'utente. Questo comando deve essere immediatamente preceduto dal comando USER. Al client conviene mascherare la visualizzazione di questo comando per ragioni di sicurezza.
ACCT Stringa di caratteri che rappresenta l'account dell'utente. Questo comando non è generalmente necessario. Al momento della risposta all'accettazione della password, se la risposta è 230 questa fase non è necessaria, si la risposta è 332, allora lo è.
CWD Change Working Directory: questo comando permette di cambiare la cartella corrente. Esso necessita del percorso di accesso alla cartella da raggiungere come argomento.
CDUP Change to Parent Directory: questo comando permette di risalire alla cartella parente. È stato introdotto per rimediare ai problemi di denominazione di cartelle parenti secondo il sistema (generalmente "..")
SMNT Structure Mount:
REIN Reinitialize:
QUIT Comando che permette di terminare la sessione in corso. Il server aspetta di finire il trasferimento in corso e, se questo avviene, di fornire una risposta prima di chiudere la connessione.
Comando dei parametri di trasferimento
Comando Descrizione
PORT Stringa di caratteri che permette di precisare il numero di porta da usare
PASV Comando che permette di indicare al server DTP di aspettare una connessione su una porta specifica scelta casualmente fra quelle disponibili. La risposta a questo comando è l'indirizzo IP del terminale e la porta.
TYPE Questo comando permette di precisare il tipo di formato in cui i dati saranno inviati.
STRU Carattere Telnet che precisa la struttura del file (F per File, R per Record, P per Page).
MODE Carattere Telnet che precisa il modo di trasferimento dei dati (S per Stream, B per Block, C per Compressed).
Comando di servizio FTP
Comando Descrizione
RETR Questo comando (RETRIEVE) chiede al server DTP una copia del file il cui percorso di accesso è passato in parametro.
STOR Questo comando (store) chiede al server DTP di accettare i dati inviati sul canale di dati e di stoccarli nel file che porta il nome passato in parametro. Se il file non esiste, il server lo crea, altrimenti lo sopprime.
STOU Questo comando è identico al precedente, se non per il fatto che chiede al server di creare un file il cui nome è unico. Il nome del file è incluso nella risposta.
APPE Grazie a questo comando (append) i dati inviati sono concatenati nel file che ha il nome passato in parametro se già esistente, in caso contrario esso viene creato.
ALLO Questo comando (allocate) chiede al server di prevedere uno spazio di stoccaggio sufficiente per contenere il file il cui nome è passato in argomento.
REST Questo comando (restart) permette di riprendere un trasferimento al punto dove si era interrotto. Per fare questo il comando invia in parametro evidenziato che rappresenta la posizione nel file alla quale il trasferimento era stato interrotto. Questo comando deve essere immediatamente seguito da un comando di trasferimento.
RNFR Questo comando (rename from) permette di rinominare un file. Esso indica in parametro il nome del file da rinominare e deve essere immediatamente seguito dal comando RNTO.
RNTO Questo comando (rename to) permette di rinominare un file. Esso indica in parametro il nome del file da rinominare e deve essere immediatamente preceduto dal comando RNFR.
ABOR Questo comando (abort) indica al server DTP di abbandonare tutti i trasferimenti associati al comando precedente. Se nessuna connessione di dati è aperta, il server DTP non fa niente, altrimenti la chiude. Il canale di controllo resta invece aperto.
DELE Questo comando (delete) permette di cancellare il file il cui nome è passato in parametro. Questo comando è irrimediabile, può essere fatta una conferma solo a livello del client.
RMD Questo comando (remove directory) permette di cancellare una cartella. Esso indica in parametro in nome della cartella da cancellare.
MKD Questo comando (make directory) permette di creare una cartella. Esso indica in parametro il nome della cartella da creare.
PWD Questo comando (print working directory) permette di rinviare il percorso completo della cartella corrente.
LIST Questo comando permette di rinviare l'elenco dei file e cartelle presenti nella cartella corrente. Questo elenco è inviato sul DTP passivo. E' possibile passare in parametro di questo comando un nome di cartella, il server DTP invierà la lista dei file nella cartella passata in parametro.
NLST Questo comando (name liste) permette di inviare l'elenco dei file e cartelle nella cartella corrente.
SITE Questo comando (site parameters) permette al server di proporre dei servizi specifici, non definiti nel protocollo FTP.
SYST Questo comando (system) permette di inviare delle informazioni sul server remoto.
STAT Questo comando (status) permette di emettere lo stato del server, ad esempio per conoscere la progressione di un trasferimento in corso. Questo comando accetta come argomento un percorso d'accesso, esso rinvia allora le stesse informazioni di LIST ma sul canale di controllo.
HELP Questo comando permette di conoscere l'insieme dei comandi compresi dal server. Le informazioni sono rinviate sul canale di controllo.
NOOP Questo comando (no operations) serve unicamente ad ottenere un comando OK dal server. Esso può servire unicamente per non essere disconnessi dopo un tempo di inattività troppo lungo.

Le risposte FTP

Le risposte FTP permettono di assicurare la sincronizzazione tra client e server FTP. Così ad ogni comando inviato dal client, il server effettuerà eventualmente un'azione e rinvierà sistematicamente una risposta.

Le risposte sono costituite da un codice a 3 cifre che indica il modo in cui il comando inviato dal client è stato trattato. Tuttavia, essendo questo codice a 3 cifre difficilmente leggibile da un essere umano, è accompagnato da un testo (stringa di caratteri Telnet separata dal codice numerico da uno spazio). I codici di risposta sono costituiti da 3 cifre di cui trovate qui di seguito i significati. La prima cifra indica lo stato della risposta (successo o fallimento); la seconda cifra indica a cosa la risposta si riferisce; la terza cifra da un significato più specifico (relativo ad ogni seconda cifra):

Prima cifra
Cifra Significato Descrizione
1 yz Risposta preliminare positiva Mentre l'azione richiesta è in corso di realizzazione, prima di inviare un secondo comando deve essere ottenuta una seconda risposta.
2 yz Risposta positiva di realizzazione Una volta che l'azione richiesta è stata realizzata, si può inviare un nuovo comando.
3 yz Risposta intermedia positiva L'azione richiesta è temporaneamente sospesa. Si attendono delle informazioni supplementari dal client.
4 yz Risposta negativa di realizzazione L'azione richiesta non si è verificata dato che il comando non è stato temporaneamente accettato. Il client è pregato di riprovare più tardi.
5 yz Risposta negativa permanente L'azione richiesta non si è verificata dato che il comando non è stato accettato. Il client è pregato di formulare una richiesta differente.
Seconda cifra
Cifra Significato Descrizione
x 0 z Sintassi L'azione presenta un errore di sintassi, oppure si tratta di un comando non capito dal server.
x 1 z Informazione Si tratta di una risposta che rinvia delle informazioni (ad esempio per una risposta ad un comando STAT).
x 2 z Connessioni La risposta riguarda il canale di dati.
x 3 z Autenticazione e account La risposta riguarda il login (USER/PASS) o la domanda di cambiamento di account (CPT).
x 4 z Non usato dal protocollo FTP.
x 5 z Sistema di file La risposta riguarda il sistema di file remoto.

Ulteriori informazioni

Per saperne di più sul protocollo FTP, non esitate a consultare i seguenti documenti:

La RFC 959.

Foto: © Pixabay.

I nostri contenuti sono creati in collaborazione con esperti di high-tech, sotto la direzione di Jean-François Pillou, fondatore di CCM.net. CCM è un sito di high-tech leader a livello internazionale ed è disponibile in 11 lingue.
Il documento intitolato « Il protocollo FTP (File Transfer Protocol) » dal sito CCM (it.ccm.net) è reso disponibile sotto i termini della licenza Creative Commons. È possibile copiare, modificare delle copie di questa pagina, nelle condizioni previste dalla licenza, finché questa nota appaia chiaramente.