# File Transfer Protocol

Il *File Transfer Protocol* (`FTP`) è un protocollo che consente il trasferimento di file da una sorgente A a una sorgente B. A livello di trasporto, utilizza il TCP.

Di base, FTP non prevede crittografia, e per questo motivo il suo utilizzo è sconsigliato in contesti in cui la sicurezza è fondamentale. Il protocollo si basa su due canali di comunicazione:

- *Canale di controllo*: questo canale è specializzato nell'invio di comandi e risposte. La connessione stabilita per questo canale è persistente e rimane attiva per tutta la durata della comunicazione tra i due host. Si tratta di una classica connessione client/server, basata su TCP, che utilizza la *well-known port 21* per il server
- *Canale dati*: questo canale è dedicato esclusivamente al trasferimento dei file. A differenza del canale di controllo, non è persistente; per ogni file trasferito viene creata una nuova connessione. Anche questo canale è basato su TCP e può essere stabilito in due modalità:
  - *Modalità passiva*: in questa modalità, il server FTP riceve passivamente una connessione da parte del client. Il client richiede l'attivazione della modalità passiva per il canale dati utilizzando i comandi `PASV` o `EPSV`. Il server, a questo punto, apre una porta di un numero maggiore di 1023 e comunica al client, tramite il canale di controllo, l'indirizzo di questa porta
  - *Modalità attiva*: in questa modalità, il server FTP si connette attivamente al client. Il client utilizza i comandi `PORT` o `EPRT`, specificando una porta X che ha aperto appositamente. Attraverso questi comandi, il client informa il server, tramite il canale di controllo, che esiste una porta alla quale il server deve connettersi attivamente. In questo caso, il server utilizza la *well-known port 20*

## Funzionalità del Server FTP

Un server FTP offre diverse funzionalità utili per la gestione dei file:

- Download e upload di file
- Ripresa di trasferimenti interrotti
- Rimozione o rinomina di file
- Creazione di directory
- Navigazione tra directory

## Autenticazione FTP

Un client FTP accede a un server FTP attraverso un processo di autenticazione.

- *Autenticazione classica*: molti server FTP utilizzano un sistema di autenticazione basato su credenziali, richiedendo agli utenti di inserire un nome utente e una password.
- *Server FTP pubblici*: alcuni server FTP sono configurati come archivi pubblici e non richiedono un vero meccanismo di autenticazione

## Versioni di FTP

Esistono diverse versioni del protocollo FTP:

- `FTP` (File Transfer Protocol): utilizza TCP senza crittografia. Opera sulla porta 21 per il canale di controllo e sulla porta 20 per il canale dati in modalità attiva. È la versione standard
- `SFTP` (SSH File Transfer Protocol): Si tratta di FTP over SSH. Utilizza TCP e offre crittografia, operando sulla porta 22.
- `FTPS` (FTP Secure): aggiunge crittografia al protocollo FTP attraverso l'uso di certificati SSL/TLS. Utilizza la porta 990
- `TFTP` (Trivial File Transfer Protocol): una versione semplificata e primordiale dell'FTP. Utilizza UDP e opera sulla porta 69. TFTP non prevede autenticazione né crittografia
