Bibliografia:
Computer Networking. Cap. 3. Autori: James F. Kurose (University of Massachusetts, Amherst) Keith W. Ross (Polytechnic Institute of NYU).

File Transfer Protocol: FTP

In una tipica sessione FTP, l'utente è seduto di fronte ad un host locale e vuole trasferire un file da o verso un host remoto. Prima di poter accedere all'host remoto, l'utente deve fornire un nome di identificazione e una password. Dopo aver fornito queste informazioni di autorizzazione, l'utente può trasferire i file dal file system locale al file system remoto e viceversa. L'utente interagisce con FTP attraverso un User-Agent FTP. L'utente fornisce prima il nome dell'host remoto, in modo che il processo FTP client nell'host locale apra una connessione TCP con il processo FTP server nell'host remoto. L'utente fornisce quindi il nome di identificazione e la password, che vengono inviati attraverso la connessione TCP come parte di comandi FTP. Una volta che il server ha autorizzato l'utente, l'utente copia uno o più file memorizzati nel file system locale nel file system remoto (o viceversa).

HTTP e FTP sono due protocolli di trasferimento file che si appoggiano su TCP. Tuttavia, i due protocolli a livello di applicazione hanno alcune differenze importanti. La differenza più evidente è che FTP utilizza due connessioni TCP in parallelo per trasferire un file, una connessione di controllo e una connessione dati. La connessione di controllo viene utilizzata per l'invio di informazioni di controllo tra i due host, come l'identificativo utente, la password, i comandi per cambiare directory remota, e i comandi "put" e "get" per trasferire i file. La connessione dati viene utilizzata per inviare effettivamente un file. Poichè FTP utilizza una connessione di controllo separata, si dice che FTP invia le informazioni di controllo fuori banda. HTTP, come si ricorderà, manda pacchetti di richiesta e di risposta sulla stessa connessione TCP sulla quale trasferisce il file. Per questo motivo, si dice che HTTP invia le informazioni di controllo in banda.

Quando un utente avvia una sessione FTP con un host remoto, il lato client FTP (utente) prima apre una connessione TCP di controllo con il lato server (host remoto) sulla porta numero 21 del server. La parte client FTP invia l'identificativo dell'utente e la password su questa connessione di controllo. Il lato client FTP invia anche, tramite la connessione di controllo, i comandi per modificare la directory remota. Quando il lato server riceve un comando per un trasferimento di file sulla connessione di controllo, il server apre una connessione TCP sul lato client. FTP invia esattamente un file sulla connessione dati e quindi chiude la connessione. Se, durante la stessa sessione, l'utente vuole trasferire un altro file, FTP apre un'altra connessione. Così, con FTP, la connessione di controllo resta aperta per tutta la durata della sessione, ma la connessione per il trasferimento dei dati viene creata per ogni file che deve essere trasferito (Le connessioni dati sono non-persistenti).

Nel corso di una sessione, il server FTP deve mantenere lo stato. In particolare, il server deve associare la connessione di controllo con un account utente specifico, e il server deve tenere traccia della directory corrente dell'utente mentre questi si sposta nel file system del server. Tenere traccia delle informazioni di stato per ogni sessione utente condiziona significativamente il numero totale di sessioni che FTP è in grado di mantenere contemporaneamente. Ricordiamo che http è senza stato - non deve tenere traccia di ogni stato dell'utente.

Comandi e Risposte FTP

Questa sezione termina con una breve discussione di alcuni dei comandi FTP più comuni e con le risposte relative all'esito del comando. I comandi, dal client al server e le risposte, dal server al client, vengono inviate sulla connessione di controllo in formato ASCII di 7 bit. Così, come i comandi HTTP, i comandi FTP viaggiano in chiaro. Per delimitare i comandi, ognuno viene terminato con la coppia di caratteri ritorno a capo e avanzamento riga. Ogni comando è composto da quattro caratteri ASCII maiuscoli, alcuni con argomenti opzionali. Alcuni dei comandi più comuni sono:

Vi è una corrispondenza uno a uno tra il comando che l'utente invia e il comando FTP inviato sulla connessione di controllo. Ciascun comando è seguito da una risposta inviata dal server al client. Le risposte sono numeri di tre cifre, con un messaggio opzionale dopo il numero. Questo è simile, nella struttura, al codice di stato con la frase nella riga di stato del messaggio di risposta HTTP.

Alcune possibili risposte con i loro messaggi sono le seguenti: