Concrétisons Nos Idées

JAH-11 – Du partage des données par BitTorrent

Rédigé par Samaël - -

Journal de bord du capitaine :
Date : 20 mars 2012
Lieu : Perdu dans le cyber espace

Ellipse de temps, partie 2, le retour. Voilà près d'un an que je n'avais pas consigné mes tribulations dans ce journal. Les jours, semaines, mois, années passent, j'ai le temps ponctuellement de dépiler certaines tâches de ma liste de choses à faire mais cela n'avance pas aussi vite que je le voudrais et je préfère parfois prendre du temps pour faire avancer les choses que de les consigner par écrit. Bref, le temps nous file entre les doigts, c'est pas nouveau, tout le monde le sait et tout le monde s'en fout.

J'ai décidé de consacrer cette entrée de journal au partage de données par BitTorrent. Le problème s'est présenté à moi en ces termes : j'avais une grande quantité de vidéos (une douzaine de Gio [1]) à partager avec des personnes distantes, comment m'y prendre ?

J'envisageai quatre possibilités :

  • Graver le tout sur des DVDs et utiliser le bon vieux système postal pour envoyer tout ça.
    • Avantage : pas de problème de bande passante.
    • Inconvénients : coût (DVDs vierges, envois recommandés etc), flexibilité (les gens ne pouvaient pas choisir les vidéos) et surtout cette méthode était "Soooooooooo XXème siècle !"
  • Mettre à disposition mes vidéos sur un serveur tiers :
    • Avantage : téléversement une unique fois des vidéos (donc économie de bande passante pour moi).
    • Inconvénients : centralisation (les données ne sont disponible qu'à un seul endroit) et données personnelles sur un serveur que je ne contrôle pas.
  • Mettre à disposition les vidéos sur mon serveur pour un téléchargement direct.
    • Avantage : les données restent sur mon serveur.
    • Inconvénients : centralisation et téléversement des mêmes données multipliées par le nombre d'utilisateurs or la bande passante montante étant très limitée en ADSL, cette solution augmentait énormément le temps d'obtention des données.
  • Mettre en place un système de partage des données pair à pair en utilisant le protocole BitTorrent.
    • Avantages : données sur mon serveur, décentralisation des données au fur et à mesure et donc téléversement des données inférieur ou égal à la solution de téléchargement direct.
    • Inconvénients : Temps d'obtention des données assez long mais néanmoins inférieur à la solution précédente (ou au pire égal).

La solution me semblant la plus adaptée était la quatrième, je me suis donc mis à chercher de la documentation sur le protocole BitTorrent. Petit rappel pour les nouveaux : l'utilisateur télécharge un fichier .torrent qui contient des informations sur les données à échanger et l'adresse du tracker (le tracker est en fait un serveur qui recense tout les pairs partageant ces données qu'elles soient en cours de téléchargement ou complète), le client va alors se connecter au tracker pour connaître les pairs avec qui il va ensuite pouvoir communiquer directement pour échanger des parties de données qui leur manquent. L'avantage de ce protocole apparaît dès qu'il y a plus de deux pairs : le transfert devient plus efficace que du téléchargement direct car une fois qu'un pair a récupéré un morceau de fichier, il peut à son tour le partager avec ceux qui ne l'ont pas encore, évitant ainsi à la source originelle de retransmettre à tout le monde cette partie de donnée [2]. Dernier point de vocabulaire : celui qui envoie est un seeder et celui qui reçoit un leecher. Lorsqu'on télécharge un fichier via le protocole BitTorrent on est donc en général les deux à la fois.

Pour partager mes données il fallait donc :

  • Mette en place un tracker sur mon serveur.
  • Créer le fichier de métadonnées .torrent.
  • Utiliser n'importe quel client pour commencer le partage.
Mais là, surprise ! Les logiciels concernant la partie client sont légion, alors que les serveurs ne sont qu'une poignée. Les deux principaux qui étaient disponibles dans les dépôts Debian étant : BitTorrent (le serveur originel développé et maintenu par un des auteurs du protocole) et BitTornado (un fork du précédent). Les deux logiciels étant relativement semblable, notamment en terme de configuration, j'ai décidé d'utiliser BitTorrent. Il est intéressant de noter que la documentation upstream de ce logiciel est quasi inexistante et que la man page fournie dans Debian est l'œuvre du l'empaqueteur.

Ce faible nombre de serveurs BitTorrent se répercute de manière très visible sur la quantité de documentation disponible sur le web. En effet, les tutoriels ou autre exemples de configuration se comptent presque sur les doigts de la main. Au final, la configuration n'est pas très compliquée et j'ai pu obtenir rapidement un serveur fonctionnel. La génération du fichier de métadonnées est on ne peut plus simple et une fois cette étape faite il n'y a plus qu'à lancer le partage depuis n'importe quel client.

Recherchant un client utilisable en console, je me suis tourné vers rTorrent. Là encore, il n'y a que quelques paramètres à ajuster afin de personnaliser sa configuration et rTorrent est prêt à échanger avec d'autres pairs. À noter que rTorrent dispose d'une option intéressante lors du démarrage d'un partage : superseed. Elle permet entre autre d'optimiser la bande passante de la source originelle en choisissant les morceaux de fichiers à partager, afin que les autres pairs puissent le plus rapidement possible échanger entre eux sans se reposer uniquement sur la source. À noter également, j'ai lancé rTorrent dans le multiplexeur de terminal : screen, cela permet de le garder actif même lorsque la session qui a servi à le lancer est fermée.

Lors de ce premier essai, j'ai rencontré plusieurs fois des problèmes de stabilité : au bout d'un certain temps le serveur s'arrêtait. En cherchant la cause du problème dans les logs, j'ai pu me rendre compte de leur inutilité ! En effet, ils sont gérés de telle manière que lors d'un plantage, l'écriture dans les logs est interrompue avant que les dernières données aient pu être inscrites, ce qui rend l'investigation d'éventuels problèmes assez complexe. Je soupçonne malgré tout un problème lié aux connexions en IPv6.

Devant ces problèmes de stabilité et manquant de temps pour investiguer, j'ai changé de serveur pour utiliser BitTornado et j'ai par la même occasion désactivé l'IPv6. Une fois ce serveur lancé, je n'ai plus eu de soucis de plantage, par ailleurs BitTornado semble mieux maintenu que BitTorrent, je recommanderai donc plutôt l'utilisation de BitTornado.

En approfondissant mes recherches sur BitTorrent, j'ai appris qu'aujourd'hui un tracker n'était plus nécessaire, il suffit d'utiliser la Distributed Hash Table (DHT). En pratique lorsqu'on utilise la DHT n'importe quel pair peut servir de tracker, il n'y a donc plus besoin d'un tracker central, cela simplifie grandement le processus de partage. Néanmoins, pour l'instant, elle est surtout vue comme un complément des trackers classiques. En effet, les outils fournis avec BitTorrent ou BitTornado ne permettent pas de créer un fichier de métadonnées sans préciser de tracker, bien que cela soit parfaitement possible [3].

Conclusions :

  • L'échange d'importantes quantités de données est tout à fait possible de manière optimisée sans utiliser de service tiers et centralisé.
  • Les outils existent mais nécessitent un minimum de temps et d'investissement pour bien les utiliser, la documentation n'étant pas abondante.
  • L'utilisation de la DHT permet de faciliter le partage et rend le processus accessible au plus grand nombre si la génération d'un fichier de métadonnées est par exemple incluse dans le client BitTorrent.
Prochaine entrée dans le journal : Du contournement d'un serveur mandataire HTTP .

Notes

[1] Non le « i » n'est pas une faute de frappe, il s'agit de Gibioctets (230 octets) et non de Gigaoctets (109 octets). Plus de précisions sur les préfixes binaires ici .

[2] L'article Wikipédia sur le protocole BitTorrent contient une animation expliquant très bien ce principe. Vous pouvez la voir ici .

[3] On peut néanmoins trouver des scripts permettant de le faire comme par exemple celui-ci.

#1 thuban a dit :

salut!
Tu soulèves ici un problème que j'ai déjà rencontré. Et pour envoyer de gros fichiers, le protocole bittorrent est vraiment excellent.
Cependant, nul besoin d'un tracker à installer, on peut très bien s'en passer.
J'ai écrit une petite application qui surveille le contenu d'un dossier, puis crée et partage chaque fichier/dossier placé dedans. Je compte l'améliorer pour en faire un truc à auto-héberger, mais pour l'instant ça marche pas trop mal en local. Si tu veux t'en inspirer, ça s'appelle btshare : http://yeuxdelibad.net/Programmation/BTshare.html

#2 Nel a dit :

Salut,

J'aime beaucoup ton journal d'un auto-hébergé. D'ailleurs il faudrait qu'un jour je re-franchisse le pas. Je m'étais fait un petit serveur perso il y a quelques années, mais suite à un déménagement, je l'ai mis dans un carton et il n'est plus jamais ressorti. Bref, par fainéantise tes articles me permettent de revivre d'une certaine façon l'aventure par procuration. Jusqu'à ce que je m'y remette un jour pour de vrai. :)

Sinon 2-3 petits trucs. Un seeder est un client qui possède le torrent dans sa totalité, un leecher est celui qui n'en possède qu'une partie. https://fr.wikipedia.org/wiki/BitTorrent_%28protocole%29#Vocabulaire

Pour créer des .torrent, il existe aussi le paquet mktorrent dans les dépôts. C'est assez simple à utiliser :
mktorrent -a ADDRESSE_DU_TRACKER NOM_DU_FICHIER_OU_DOSSIER
on peut ajouter -o NOM_DU_TORRENT pour sortir un .torrent avec un nom différent du fichier ou dossier, ajouter d'autres trackers avec une seconde/troisième/ou plus option -a, le mettre dispo uniquement sur un tracker privé avec -p (désactive la DHT et le partage par pair), spécifier la longueur des pièces avec -l, etc. (voir le man)
Par contre on ne peut pas créer un .torrent sans spécifier de tracker contrairement à gentorrent.

Il est possible aussi d'utiliser des trackers ouverts comme : https://openbittorrent.com/
Quand on ajoute un de ces trackers à un torrent, on s'annonce automatiquement à ces trackers comme seeder ou leecher de tel ou tel torrent. De fait la base de donnée des torrents sur le tracker est continuellement mise à jour et quand un leecher tente de télécharger un torrent, le tracker renvoie tous les autres utilisateurs connus ayant aussi ce torrent. Comparé à la DHT, ça permet d'initier plus rapidement le téléchargement. Par DHT j'ai déjà eu des cas d'attente de 15 à 30min avant de trouver un pair (le seul en l'occurrence) qui partageait le torrent. Ça peut être un peu déroutant pour qui ne connaît/comprend pas le fonctionnement de BitTorrent.

En dehors de la ligne de commande, on peut aussi créer ses .torrent avec le client transmission. Ce dernier peut aussi créer des liens magnet à partir de ses propres téléchargements BitTorrent. Ce sont des simples liens hypertextes qui, une fois cliqué dessus dans le navigateur, vont ouvrir le client BitTorrent et commencer le téléchargement sans passer par un quelconque fichier torrent intermédiaire : https://fr.wikipedia.org/wiki/Magnet_%28standard%29

De là j'en arrive à ma question. Comment s'est passé la formation du côté des utilisateurs sur ce qu'est BitTorrent, les fichiers .torrent, comment les utiliser, quel client conseiller, comment le configurer, où sont les fichiers téléchargés, le blocage de ports... bref tout le tra-la-la habituel avec les personnes pour qui télécharger en http et retrouver le fichier est déjà une épreuve en soi.

#3 Samaël a dit :

@thuban :
BTShare à l'air vraiment pas mal, j'avais même cloné le dépôt il y a longtemps mais je n'ai pas pris le temps de regarder ça plus en avant. J'avoue être assez suspicieux et très réticent à l'idée de faire tourner sur mon serveur des logiciels issus de dépôts privés sans avoir au préalable épluché les sources au peigne fin, du coup ça me prend du temps pour tester de nouvelles choses.
J'espère que tu vas pouvoir continuer à l'améliorer car l'idée est très bonne et ça permettra peut être d'augmenter l'utilisation de ce protocole à mon avis très sous exploité et en parti à cause de la mauvaise image que lui on collé des incompétents et incultes.

@Nel :
Merci pour les corrections de vocabulaire, le pire c'est que je m'étais noté de vérifier ce point et que je ne l'ai pas fait …

Je ne connaissais pas mktorrent, je vais y jeter un œil ça peut être pratique.

Les trackers ouvert sont effectivement un bon moyen de partager sans avoir à installer son propre tracker et sans avoir la latence au démarrage de la DHT. Je préfère néanmoins avoir mon propre tracker déjà par curiosité intellectuelle (mettre les mains dans le cambouis et comprendre la chaîne de bout en bout ça fait partie de ce qui me plaît dans l'auto-hébergement) et surtout ça permet de passer d'un réseau de partage peer to peer à friend to friend en contrôlant finement qui peut avoir accès à tel ou tel contenu.

J'aime beaucoup les liens magnets c'est super pratique, le seul inconvénient qu'il peut y avoir c'est comme toujours sur des fichiers peu seedés ou cela rajoute encore une latence le temps que le client récupère les métadonnées complètes, et d'expérience ça peut être (très) long.

Enfin pour répondre à ta question sur la formation des utilisateurs, je dois dire que j'ai eu la chance de ne vouloir partager qu'avec des gens qui était un minimum familier avec ce protocole même si certains ne se doutaient pas que tout le monde pouvait s'en servir et surtout pour partager des contenus légaux. J'ai quand même du faire un courriel de tutoriel pas à pas très « Michu friendly » en précisant où trouver le torrent et conseillant un client avec une configuration par défaut prête à l'emploi et surtout qui gérait l'ouverture des ports automatiquement (via upnp si ma mémoire est bonne).
Le vrai problème n'est pas d'expliquer aux gens comment récupérer ce qui les intéressent (pour ça ils sont toujours motivés) mais plutôt de leur démontrer l'intérêt de continuer à laisser leur PC allumé avec le client qui tourne pour seeder une fois qu'ils ont récupéré tout ce qu'ils voulaient. J'avoue avoir eu des résultats beaucoup plus mitigé sur ce point …

#4 karibu a dit :

Salut,
Tu as essaye de passer sur une technologie plus recente? xD
Genre WebRTC?

Avec Sharefest par exemple, tu peux envoyer un fichier en p2p par ton navigateur. Les peers n'ont qu'a ouvrir ton lien pour le telecharger et une fois complet, ils vont le seeder aussi.

Ce n'est pas parfait, mais c'est super simple et moderne.

J'avais fait un article dessus pour l'installer"
http://freedif.org/sharefest-web-based-p2p-file-sharing/

#5 Samaël a dit :

@karibu :
Même s'il n'est publié que maintenant cet article a été écrit en 2012 du coup à l'époque je ne sais pas si Sharefest existait ^^ .
Maintenant c'est vrai qu'aujourd'hui il y a certainement d'autres solutions que BitTorrent, d'après ce que tu décris Sharefest semble être une bonne idée et surtout très accessible pour des non-initiés aux arcanes de BitTorrent.
Par contre j'avoue que je ne suis pas forcément fan du concept des navigateurs qui deviennent des couteaux suisses qui doivent savoir tout faire. L'histoire a tendance à nous montrer qu'il vaut mieux un logiciel simple qui fait une chose bien plutôt qu'un couteau suisse qui fait tout mal … Les navigateurs ont tendance à devenir des OS à part entière hors j'en ai pas besoin d'un deuxième j'ai déjà emacs ;-) .

#6 Elessar a dit :

Oh, mon gentorrent.py ! La célébrité me guette on dirait… ;-)

#7 Samaël a dit :

@Elessar :
Faudrait vérifier dans les logs du salon debian-fr mais si ma mémoire ne me joue pas de tour je me demande si le "someone" de ton article « Then someone pointed out that I could try using the dynamic hash table or DHT » ça serait pas moi justement ^^

Les commentaires sont fermés.