Téléchargement de fichiers multithread pour Linux
Lorsqu'un fichier volumineux est téléchargé depuis un seul serveur HTTP ou FTP à l'aide d'un outil standard tel que curl ou wget, une seule connexion TCP est ouverte et le fichier est téléchargé de manière séquentielle. Sur un réseau rapide, le débit peut être limité par la limite de vitesse du serveur par connexion, par le slow start de TCP ou par la latence aller-retour. Les utilitaires de téléchargement parallèle ouvrent plusieurs connexions vers la même source simultanément, chacune récupérant une plage d'octets différente, puis réassemblent le résultat localement. Cela ne fonctionne que si le serveur accepte les requêtes HTTP Range (en répondant avec HTTP 206 Partial Content) ; sur les serveurs qui les prennent en charge, le transfert est souvent nettement plus rapide qu'avec un outil utilisant un seul flux.
Dans cet article, le terme « téléchargement multithread » désigne ce modèle de connexions parallèles, et non l'utilisation de plusieurs threads à l'intérieur du processus de téléchargement lui-même.
Cet article présente deux utilitaires de ce type pour Linux : Axel et aria2.
Axel
Axel est un outil léger de téléchargement en ligne de commande. Il ouvre plusieurs connexions vers une même source et télécharge différentes plages d'octets en parallèle. Il prend en charge HTTP, HTTPS, FTP et FTPS, et permet de reprendre un téléchargement interrompu.
Installation d'Axel
Sur Debian et Ubuntu :
sudo apt install axel
Sur RHEL, CentOS Stream, AlmaLinux et Rocky Linux, activez d'abord EPEL :
sudo dnf install epel-release sudo dnf install axel
Sur Fedora :
sudo dnf install axel
Utilisation d'Axel
Téléchargement de base :
axel https://nl.lg.introserv.eu/1000MB.test
L'option -a active un indicateur de progression compact :
axel -a https://nl.lg.introserv.eu/1000MB.test
Limitez la vitesse maximale de téléchargement en octets par seconde avec -s (ou --max-speed). Par exemple, pour limiter le transfert à 500 Ko/s :
axel --max-speed=512000 https://nl.lg.introserv.eu/1000MB.test
Enregistrez le fichier sous un autre nom avec -o :
axel -o gigabyte.test https://nl.lg.introserv.eu/1000MB.test
Définissez le nombre de connexions parallèles avec -n :
axel -n 10 https://nl.lg.introserv.eu/1000MB.test
Reprenez un téléchargement partiel avec -c :
axel -c https://nl.lg.introserv.eu/1000MB.test
Avec -c, si un fichier local portant le même nom existe déjà, Axel reprend le téléchargement là où il s'était arrêté au lieu de recommencer depuis le début.
aria2
aria2 prend en charge le même cas d'utilisation de téléchargement parallèle qu'Axel et offre un ensemble de fonctionnalités plus complet. Il prend en charge HTTP, HTTPS, FTP, SFTP, BitTorrent et Metalink, et peut récupérer le même fichier à partir de plusieurs sources simultanément. Comme Axel, il divise un fichier en segments et les télécharge en parallèle.
Principales fonctionnalités :
- nombre de connexions par serveur, taille des segments et niveau de concurrence globale configurables
- reprise automatique des téléchargements interrompus
- vérification de l'intégrité à l'aide de sommes de contrôle
- prise en charge de HTTPS et FTPS
- clients BitTorrent et Metalink natifs
Installation d'aria2
Sur Debian et Ubuntu :
sudo apt install aria2
Sur RHEL, CentOS Stream, AlmaLinux et Rocky Linux :
sudo dnf install aria2
Sur Fedora :
sudo dnf install aria2
Utilisation d'aria2
Téléchargement de base :
aria2c https://nl.lg.introserv.eu/1000MB.test
Téléchargez le même fichier à partir de deux miroirs simultanément. aria2 combine les connexions aux deux sources et réassemble le fichier localement :
aria2c "https://nl.lg.introserv.eu/1000MB.test" "https://uk.lg.introserv.eu/1000MB.test"
Mélangez des sources HTTP et FTP en fournissant les identifiants FTP :
aria2c --ftp-user=<USER> --ftp-passwd=<PASSWD> "ftp://<ftpserver_ip>/<file>" "https://uk.lg.introserv.eu/1000MB.test"
Ouvrez huit connexions parallèles vers un seul serveur et divisez le fichier en huit segments :
aria2c -x8 -s8 https://nl.lg.introserv.eu/1000MB.test
L'option -x (ou --max-connection-per-server) limite le nombre de connexions qu'aria2 ouvre vers un seul serveur (1 par défaut). L'option -s (ou --split) définit le nombre maximal de segments en lesquels le fichier est divisé (5 par défaut). Pour une seule source, le nombre effectif de connexions parallèles est le plus petit des deux paramètres : -x8 -s5 ouvre 5 connexions, et -x5 -s8 en ouvre également 5. Pour obtenir réellement 8 connexions parallèles vers un seul serveur, les deux paramètres doivent être augmentés, raison pour laquelle ils sont généralement définis à la même valeur.
L'option -k (ou --min-split-size) définit la taille minimale d'un segment en lequel le fichier peut être divisé. Des valeurs plus petites permettent d'utiliser davantage de segments parallèles, mais augmentent les frais généraux :
aria2c -x8 -s8 -k1M https://nl.lg.introserv.eu/1000MB.test
-x, -s et -j répondent à des besoins différents. -x contrôle le nombre de connexions ouvertes vers un serveur lors du téléchargement d'un fichier. -s contrôle le nombre de segments en lesquels un fichier est divisé. -j (ou --max-concurrent-downloads) contrôle le nombre de fichiers distincts qu'aria2 télécharge simultanément.
Téléchargez deux fichiers en parallèle :
aria2c -j2 https://nl.lg.introserv.eu/1000MB.test https://uk.lg.introserv.eu/1000MB.test
Reprenez un téléchargement partiel avec -c :
aria2c -c https://nl.lg.introserv.eu/1000MB.test
Lorsqu'un fichier Metalink est fourni, aria2 peut sélectionner automatiquement les miroirs, vérifier les données téléchargées à l'aide des sommes de contrôle indiquées dans le fichier Metalink et réessayer les miroirs défaillants sans intervention manuelle.
Pour une utilisation répétée, aria2 lit les options par défaut dans ~/.aria2/aria2.conf si le fichier existe. Des paramètres tels que max-connection-per-server et split peuvent donc être définis une seule fois dans ce fichier au lieu d'être spécifiés à chaque exécution.
Ouvrir un grand nombre de connexions parallèles vers un miroir public ou un CDN peut enfreindre la politique d'utilisation de l'opérateur et entraîner une limitation du débit ou un bannissement temporaire. Pour les sources publiques, gardez un nombre de connexions modéré (4 à 8 est généralement une valeur sûre) ; n'utilisez des valeurs supérieures que sur une infrastructure dont vous savez qu'elle les autorise.
Quand les téléchargements parallèles sont-ils utiles ?
Les téléchargements parallèles sont particulièrement efficaces lorsque le goulot d'étranglement est la limite de vitesse du serveur par connexion ou la capacité de transfert maximale d'une source, plutôt que le disque local ou la connexion réseau dans son ensemble. Lorsque la liaison réseau est déjà saturée, ouvrir davantage de connexions n'augmente pas la bande passante totale ; cela ne fait que la répartir différemment. Certains serveurs HTTP refusent également les requêtes Range ou limitent le nombre de connexions simultanées provenant d'un même client. Dans ce cas, un outil à flux unique tel que wget peut être aussi rapide qu'Axel ou aria2.