Niveau :
Résumé : trickle -d 100 lftp
Aujourd'hui nous allons parler de limitation volontaire de bande passante.
Lors de la création du protocole IP et d'internet, il n'a jamais été question de limiter le débit d'une communication. Chacun devait faire de son mieux pour gérer au plus vite les paquets de données qui lui sont envoyés. Le protocole IP n'ayant pas changé, c'est toujours le cas. Seule la personne qui envoie les données dispose d'un réel contrôle sur le débit. Bien entendu, il existe des moyens du côté des destinataires, mais ils ne sont pas "propres".
Les méthodes
Il est possible de limiter une bande passante au niveau du routeur ou de la machine elle-même grâce au noyau. Mais nous allons nous intéresser à la limitation au niveau de l'application. Certaines applications (comme openssh) implémentent cette fonctionnalité directement :
$ scp -l 100 moi@machine.net:~/backup.tgz ~/ #limitation du débit à 100ko/s
Mais avouez que c'est dommage d'avoir à réimplémenter ceci pour chaque commande que vous voulez utiliser. D'autant plus qu'il existe une roue que nous n'aurons pas à réinventer : trickle.
Trickle dispose de plusieurs options, les plus courantes sont -u (upload) et -d (download), et d'un paramètre : la commande à lancer.
# Lance lftp avec une limite de débit montant de 100ko/s et une limite de débit descendant de 500ko/s $ trickle -u 100 -d 500 lftp
Principe de fonctionnement
Trickle utilise la notion de préchargement introduite avec les bibliothèques partagées (les .so). Il redéfinit les fonctions send et receive pour les sockets dans une nouvelle bibliothèque. Ces fonctions vont bien entendu changer de comportement de base et limiter les transferts.
Ensuite trickle précharge cette bibliothèque (utilisation de LD_PRELOAD pour les curieux). Ce qui fait que lorsque le programme va appeler une de ces fonctions les chargeur dynamique va appeler les fonctions de trickle en priorité.
Plus d'informations sur ce qu'il est possible de faire avec le chargeur dynamique (ld-linux sous linux) dans le man ld-linux.
Comments