- Modalità attiva: Il client FTP si connette al server verso a porta di destinazione TCP/21, con porta sorgente casuale (N), di solito maggiore di 1024. Sulla TCP/21 il server ascolta in attesa di comandi, e risponde con messaggi di stato. Una volta stabilita la connessione su questo canale, su cui passeranno solo i comandi di controllo, il client si mette in ascolto sulla porta N+1, e manda al server (usando il canale TCP/21) il comando PORT N+1. A questo punto il server inizierà una connessione dalla sua porta TCP/20 verso la porta TCP/N+1 del client, ed invierà i dati richiesti.
Quindi una sessione FTP è formata da due processi distinti:
Protocol Interpreter (PI) sulla porta TCP/21, che viene usato per trasmettere i comandi fra client e server FTP. Il PI da inizio al processo.
Data Transfer Process (DTP) che viene usato per la trasmissione vera e propria dei dati tra i due host, il DTP del client rileva la connessione DTP iniziata dal server.
E’ chiaro a questo punto che questo schema ha grossi problemi a funzionare in presenza di un firewall di tipo packet filtering, che ispeziona i pacchetti in transito. Esso rileva una connessione in ingresso che non è apparentemente originata da una corrispondente richiesta interna sulla stessa porta, e scarta il pacchetto, impedendo di fatto il trasferimento dei dati.
Per ovviare a questo problema è stata descritta una modalità alternativa di funzionamento, definita nella RFC1579, detta modalitàà passiva.
- Modalità passiva: la fase iniziale è identica alla precedente, ma invece di mandare il comando PORT e mettersi in ascolto, il client manda un comando PASV. A questo punto è il server che si mette in ascolto su una porta N (maggiore di 1024) e risponde con il comando PORT N. Al client non resta che aprire una connessione verso la porta di destinazione N, per iniziare a ricevere i dati. In questo modo il firewall vede entrare pacchetti che sono stati richiesti da una connessione originata dall’interno e lascia passare il flusso di dati.