FTP — File Transfer Protocol

Couche OSI : L7 — Application
Ports : 21 (contrôle) · 20 (données actif) · aléatoire (données passif)

FTP est un protocole de transfert de fichiers entre un client et un serveur. Il sépare la connexion de contrôle (commandes) de la connexion de données (fichiers), ce qui le distingue de la plupart des protocoles.


Architecture : deux connexions distinctes

Client                          Serveur FTP
  │                                  │
  │── TCP:21 (contrôle) ───────────► │  connexion permanente pendant la session
  │   USER alice                     │  → authentification, navigation (ls, cd)
  │   PASS ****                      │  → commandes de gestion
  │   LIST                           │
  │   RETR fichier.zip               │
  │                                  │
  │── TCP:20 ou aléatoire (données) ►│  connexion ouverte uniquement pour chaque transfert
  │   [contenu binaire du fichier]   │  → fermée après chaque transfert

Mode actif vs mode passif

Le mode détermine qui initie la connexion de données.

Mode actifMode passif
Connexion donnéesLe serveur se connecte au clientLe client se connecte au serveur
Port côté clientAléatoire (envoyé au serveur via PORT)
Port côté serveur20Aléatoire (communiqué au client via PASV)
ProblèmeLe firewall client bloque souvent les connexions entrantesAucun — le client initie
UsageRare (environnements contrôlés)Recommandé (Internet, NAT, firewalls)

Mode actif :

Client → Serveur:21  "PORT 192.168.1.5:5000 (mon IP et port)"
Serveur:20 → Client:5000  (le serveur initie la connexion données)

Mode passif :

Client → Serveur:21  "PASV"
Serveur → Client  "227 Entering Passive Mode (203.0.113.1,195,149)"
                   → IP: 203.0.113.1, port: 195*256+149 = 50069
Client → Serveur:50069  (le client initie la connexion données)

Commandes FTP principales

USER alice          → authentification (nom d'utilisateur)
PASS motdepasse     → authentification (mot de passe)
LIST                → lister les fichiers du répertoire courant
RETR fichier.zip    → télécharger un fichier (download)
STOR fichier.zip    → envoyer un fichier (upload)
DELE fichier.zip    → supprimer un fichier
MKD mondossier      → créer un répertoire
CWD /chemin         → changer de répertoire
PWD                 → afficher le répertoire courant
QUIT                → fermer la session
TYPE I              → mode binaire (pour les fichiers non-texte)
TYPE A              → mode ASCII (pour les fichiers texte)
PASV                → passer en mode passif

Codes de réponse FTP

CodeSignification
220Serveur prêt
230Connexion réussie
331Mot de passe demandé
200Commande acceptée
150Connexion de données ouverte
226Transfert terminé avec succès
425Impossible d’ouvrir la connexion de données
530Authentification échouée
550Fichier non trouvé ou accès refusé

FTP vs SFTP vs FTPS

FTPSFTPFTPS
ChiffrementAucun — tout en clairOui (SSH)Oui (TLS)
Port21 (contrôle) + 20 (données)22 (une seule connexion)990 ou 21
Protocole baseFTP natifSSH (protocole différent)FTP + TLS
FirewallDifficile (2 connexions)Simple (1 connexion)Difficile (2 connexions)
Usage recommandéRéseaux internes isolésInternet, cloudEnvironnements legacy

SFTP (SSH File Transfer Protocol) n’est pas du FTP sur SSH — c’est un protocole entièrement différent, conçu dans le cadre de SSH. À préférer sur Internet.


Utilisation en ligne de commande

# Client FTP natif
ftp 203.0.113.10
> USER alice
> PASS ****
> passive          # passer en mode passif
> binary           # mode binaire
> get fichier.zip  # télécharger
> put upload.tar   # envoyer
> bye
 
# SFTP (recommandé)
sftp alice@203.0.113.10
sftp> get fichier.zip
sftp> put upload.tar
sftp> ls -la
sftp> exit
 
# Avec curl
curl ftp://203.0.113.10/fichier.zip --user alice:password -o fichier.zip
curl -T upload.tar ftp://203.0.113.10/ --user alice:password

En relation avec