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 actif | Mode passif | |
|---|---|---|
| Connexion données | Le serveur se connecte au client | Le client se connecte au serveur |
| Port côté client | Aléatoire (envoyé au serveur via PORT) | — |
| Port côté serveur | 20 | Aléatoire (communiqué au client via PASV) |
| Problème | Le firewall client bloque souvent les connexions entrantes | Aucun — le client initie |
| Usage | Rare (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 passifCodes de réponse FTP
| Code | Signification |
|---|---|
220 | Serveur prêt |
230 | Connexion réussie |
331 | Mot de passe demandé |
200 | Commande acceptée |
150 | Connexion de données ouverte |
226 | Transfert terminé avec succès |
425 | Impossible d’ouvrir la connexion de données |
530 | Authentification échouée |
550 | Fichier non trouvé ou accès refusé |
FTP vs SFTP vs FTPS
| FTP | SFTP | FTPS | |
|---|---|---|---|
| Chiffrement | Aucun — tout en clair | Oui (SSH) | Oui (TLS) |
| Port | 21 (contrôle) + 20 (données) | 22 (une seule connexion) | 990 ou 21 |
| Protocole base | FTP natif | SSH (protocole différent) | FTP + TLS |
| Firewall | Difficile (2 connexions) | Simple (1 connexion) | Difficile (2 connexions) |
| Usage recommandé | Réseaux internes isolés | Internet, cloud | Environnements 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:passwordEn relation avec
- Protocoles OSI - Index — tous les protocoles par couche
- Couches OSI — FTP opère en L7
- SSH — SFTP est intégré à SSH
- TLS et SSL — FTPS utilise TLS
- Paquets IP et TCP — FTP utilise TCP pour les deux connexions