Il protocollo FTP (File Transfer Protocol) Introduzione al protocollo FTP 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 de MIT (Massachussetts Institute of Technology) era stato messo a punto. 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 dall' 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 a come obiettivo di : 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 due canali di trasmissione : Un canale per i comandi (canale di controllo) Un canale per i dati Così, sia il client che il server possiedono due processori che permettono di gestire questi due tipi di informazione : il 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'inter prestatore di protocollo che permette di comandare 1-6
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 data porta, 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. E' 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. 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. 2-6
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 lt;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 d trasferimento dei dati La struttura dei dati La natura dell'azione da effettuare (Retrieve, List, Store,...) Si distinguono tre tipi di comandi FTP : I comandi da controllo di accesso I comandi da para metraggio di trasferimento I comandi di servizio FTP Comando di controllo d'accesso Comando USER PASS ACCT CWD CDUP Descrizione Stringa di caratteri che permette di identificare l'utente. L'identificazione dell'utente è necessaria per stabilire una comunicazione sul canale dei dati. 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 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 è. Change Working Directory : questo comando permette di cambiare la cartella corrente. Esso necessita del percorso di accesso alla cartella da raggiungere come argomento Change to Parent Directory : questo comando permette di risalire alla cartella parente. E' 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 PORT PASV Descrizione Stringa di caratteri che permette di precisare il numero di porta da usare Comando che permette di indicare al server DTP di aspettare una connessione du una porta specifica scelta casualmente fra quelle disponibili. La risposta a 3-6
questo comando è l'indirizzo IP del terminale e la porta. TYPE STRU MODE Comando RETR STOR STOU APPE ALLO REST RNFR RNTO ABOR DELE RMD MKD PWD LIST Questo comando permette di precisare il tipo di formato in cui i dati saranno inviati Carattere Telnet che precisa la struttura del file (F per File, R per Record, P per Page) Carattere Telnet che precisa il modo di trasferimento dei dati (S per Stream, B per Block, C per Compressed) Comando di servizio FTP Descrizione Questo comando (RETRIEVE) chiede al server DTP una copia del file il cui percorso di accesso è passato in parametri. 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 nei parametri. Se il file non esiste, il server lo crea, altrimenti lo sopprime 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 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 Questo comando (allocate) chiede al server di prevedere uno spazio di stoccaggio sufficiente per contenere il file il cui nome è passato in argomento. 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. Questo comando (rename from) permette di rinominare un file. Esso indica in parametri il nome del file da rinominare e deve essere immediatamente seguito dal comando RNTO Questo comando (rename to) permette di rinominare un file. Esso indica in parametri il nome del file da rinominare e deve essere immediatamente preceduto dal comando RNFR Questo comando (abort) indica al server DTP di abbandonare tutti i trasferimenti associati al comando precedente. Si nessuna connessione di dati è aperta, il server DTP non fa niente, altrimenti la chiude. Il canale di controllo resta invece aperto. Questo comando (delete) permette di sopprimere il file il cui nome è passato in parametri. Questo comando è irrimediabile, può essere fatta una conferma solo a livello del client. Questo comando (remove directory) permette di sopprimere una cartella. Esso indica in parametri in nome della cartella da sopprimere Questo comando (make directory) permette di creare una cartella. Esso indica in parametri il nome della cartella da creare Questa cartella (print working directory) permette di rinviare il percorso completo della cartella corrente 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 parametri di questo comando un nome di cartella, il server DTP invierà la lista dei file nella cartella passata in parametri. 4-6
NLST SITE SYST STAT HELP NOOP Questo comando (name liste) permette di inviare l'elenco dei file e cartelle nella cartella corrente Questo comando (site parameters) permette al server di proporre dei servizi specifici, non definiti nel protocollo FTP Questo comando (system) permette di inviare delle informazioni sul server remoto 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. Questo comando permette di conoscere l'insieme dei comandi compresi dal server. Le informazioni sono rinviate sul canale di controllo 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 indicante 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 2 yz 3 yz 4 yz 5 yz Risposta preliminare positiva Risposta positiva di realizzazione Risposta intermedia positiva Risposta negativa di realizzazione Risposta negativa permanente Mentre l'azione richiesta è in corso di realizzazione, prima di inviare un secondo comando deve essere ottenuta una seconda risposta Una volta che l'azione richiesta è stata realizzata, si può inviare un nuovo comando L'azione richiesta è temporaneamente sospesa. Si attendono delle informazioni supplementari dal client L'azione richiesta non si è verificata dato che il comando non è stato temporaneamente accettato. Il client è pregato di riprovare più tardi 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 5-6
x 3 z Autentificazione 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 6-6