BitTorrent & liens magnet

Magneeeeeeeeet !

BitTorrent: le protocole peer to peer qui détrôna eDonkey

Peu, bien peu de distributions GNU/Linux ne sont pas disponibles via le protocole BitTorrent: latence faible, hachage fort des données, moindre proportion d’utilisateurs leecheurs, pas de file d’attente, gestion de sources intelligente, … le protocole BitTorrent reste à ce jour un ténor du club des protocoles P2P. Pour bien comprendre la suite, on va « décortiquer » ce qui permet un échange avec ce protocole: le « fichier graine », plus connu sous l’appellation de « fichier torrent ». Grâce au logiciel « BEncode editor« .

BEncode, c’est le format dans lequel sont encodés les informations d’un torrent. Ce format lui-même n’a rien de bien intéressant, et il est quelque peu dommage qu’on ne puisse pas l’ouvrir avec un éditeur de texte standard comme si c’était un modèle XML (mais il existe bien des APIs en différents langages). Bref.

bencode

Anglophobes, restez là 🙂

  • announce désigne, de façon évidente, l’URL du tracker auquel le client devra s’annoncer. On peut en définir plusieurs: à ce moment là une ligne « announce-list » s’ajoute.
  • created by… bah le logiciel utilisé pour créer le torrent
  • creation date: la date de création, format UNIX
  • encoding: le format d’encodage des caractères (pour que les caractères accentués et signes chinois, hébreu ou autres soient bien traités, on préférera toujours le format UTF-8)
  • lenght: le poids du/des fichier(s) en octets
  • name: le nom du/des fichier(s)
  • piece lenght: le poids d’une pièce (un morceau quoi)
  • pieces: les hash des pièces (servira à vérifier si un autre client envoie pas de la merde)
  • private: 0: public. 1: privé. Dans le second cas, le client a interdiction de s’annoncer ailleurs que sur le tracker

Forts de ces informations, les clients BitTorrent savent quoi télécharger, et d’où trouver des sources.

Tout ça c’est bien, mais si le tracker est indisponible, piraté, saisi, .. bref, injoignable ? Pas de panique, tous les clients BitTorrent actuels supportent un mécanisme décentralisé: la DHT.

Decentralize yourself: DHT

DHT: Distributed Hash Table. Pour faire simple: le rôle du tracker est assuré.. par les clients BitTorrent eux-même. Ça tombe bien, à tout moment il y a des … quantités inconnues mais énormes de clients BitTorrent qui s’échangent des données, peu de risque d’être seul avec son torrent et un tracker mort.

Au sein de la DHT, les clients conservent des références ou font transiter les demandes, pour assurer des découvertes rapides pour initier les échanges. Le principe:

  • [vous] coucou tout le monde, il me faut des pièces pour le torrent 7cdd1be8af8842f5372172f634e0e333b95bb41b. Qui en a ?
  • [1] coucou, je connais pas ce torrent, je fais passer le message.
  • [2] coucou, je connais pas ce torrent, je fais passer le message.
  • [3] oh j’ai ça dans mes références ! Il y a [25] et [80] qui partagent ce torrent !
  • [25] coucou. Le torrent 7cdd1be8af8842f5372172f634e0e333b95bb41b ? Je l’ai en entier ! Demande-moi les pièces qu’il te faut.

Bien souvent, les clients BitTorrent essayent d’avoir 200-300 « voisins » dans la DHT, c’est à dire des nœuds qui ont des références ou peuvent faire transiter les demandes vers ceux qui en ont (small world network).

Pour identifier un torrent de façon unique, on utilise l’infohash. Accrochez-vous: il s’agit du hash des « info » d’un torrent. Si les infos du torrent ne correspondent pas au hash -> poubelle. Ce mécanisme rend BitTorrent beaucoup beaucoup moins sensible au spam de pièces corrompues (comme avec eDonkey) et fait gagner en confidentialité (un même fichier n’ayant pratiquement jamais le même infohash, ce dernier étant plus ou moins aléatoire selon le poids des pièces, leur nombre,..).

Concentrons-nous sur l’infohash: quand je donne comme exemple « 7cdd1be8af8842f5372172f634e0e333b95bb41b », il s’agit de l’infohash SHA-1 (vous voyez bien: caractères 0-9 et a-f). µTorrent et quelques autres clients rajoutent une couche, un encodage Base32 (dans mon exemple, ça donne PTORX2FPRBBPKNZBOL3DJYHDGO4VXNA3). Si votre infohash est en majuscules et contient toutes les lettres de l’alphabet, alors c’est un Base32(SHA-1). Dans les faits, ça ne pose aucun problème aux clients BitTorrent.

Distribuer des fichiers torrent ? Has been.

Il y a peu, le fameux moteur de recherche de torrents The Pirate Bay a enlevé les fichiers torrent pour les torrents qui ont plus de 10 sources. Pourquoi attendre cette limite ? Parce qu’en dessous, on met un certain temps jusqu’à pouvoir trouver des sources dans la DHT (mais ça marche quand même). Au lieu de distribuer des fichiers torrent, The Pirate Bay met à disposition un lien magnet.

Ah oui: ce mécanisme reposant entièrement sur la DHT, les torrents privés n’ont aucun intérêt (marchera pas, aucune source s’annonçant dans la DHT, donc aucune source disponible pour transmettre les infos).

Lien magnet: du texte identifiant un contenu

En reprenant mon exemple, un lien magnet minimaliste aurait cette forme:

  • magnet:?xt=urn:btih:7cdd1be8af8842f5372172f634e0e333b95bb41b

Et c’est bien sous cette forme que je les fournis pour les séries. En gros, on indique juste l’infohash au client, charge à lui ensuite de récupérer les infos dans la DHT. Pour le détail des paramètres magnet, Wikipedia vous aidera.

Tel quel, le client doit récupérer le nom du torrent, son poids, le nombre de pièces et leur poids uniquement depuis la DHT. Encore une fois, on ne peut pas tricher: de « méchants » clients ne peuvent pas changer le nom ou le poids, car alors les infos feraient changer l’infohash et seraient rejetées. Mais on peut donner un coup de pouce au client (mais attention: si le client récupère le reste des infos et remarque que le tout ne correspond pas à l’infohash, ce qui a été récupéré valide de la DHT fait loi).

  • magnet:?xt=urn:7cdd1be8af8842f5372172f634e0e333b95bb41b&dn=linuxmint-201204-mate-cinnamon-64bit-rc.iso&tr=http%3a%2f%2ftorrents.linuxmint.com%2fannounce.php

Assez évident non ? 🙂 Le paramètre « dn » permet de définir un nom au torrent, et « tr » un/plusieurs tracker(s) (le client utilisera la DHT et le tracker). Bien sûr si le nom fourni depuis la DHT est différent, le client fera fi de ce que l’on lui a indiqué dans le lien magnet.

Créer un torrent

Dans qBittorrent, cliquer sur: Outils > Créateur de torrent. Simple. Dans l’onglet « Général » d’un torrent, vous trouverez son infohash (SHA-1). Pour les autres clients BitTorrent, c’est grosso modo la même procédure.

Créer un torrent sans interface graphique ? Et bien il existe « mktorrent » pour GNU/Linux. Lisez le manuel pour savoir comment utiliser.

Et sur un serveur web, possible ? Oui, possible. J’aime bien ce script PHP. Permet de lire les infos d’un torrent, le modifier, ou en créer, retourner un lien magnet.

Oui ok, mais je ne suis pas connecté H24 !

Pas grave 🙂 Le réseau BitTorrent est si efficace qu’on est habitué à de très hauts débits de sa part, mais quand le torrent est peu populaire, il faut savoir patienter. Oui oui, il m’arrive de télécharger des trucs de quelques centaines de mega-octets depuis 2-3 pignoufs chinois utilisant un client BitTorrent local pas très partageur, Xunlei. Cependant, quand vous avez la chance d’avoir un japonais ou coréen « à l’autre bout du fil » -ou plutôt de la fibre optique notamment NTT, vous pestez contre le grincheux abonné Orange ou SFR qui culmine à 5 ko/s.

Ceci dit, si vous en avez le besoin, vous pouvez louer un serveur et en faire un « super-seedeur » pour distribuer à haute vitesse à ceux qui en ont besoin. Oui il existe des loueurs spéciaux « seedbox BitTorrent », mais ça laisse un nombre de fonctionnalités faible par rapport au prix moyen. OVH a récemment lancé son offre de serveurs virtuels Kimsufi: un peu moins de 6 € par mois, pour un trafic maximum de 1 To. Mettez-y une distrib’ Debian ou Ubuntu, « apt-get install qbittorrent-nox » et amusez-vous bien 🙂 (qbittorrent-nox est une console web pour contrôler un qBittorrent sans interface graphique, je préfère à ruTorrent).

Conclusion

Peut-être que cet article fera rire dans quelques années si un réseau peer to peer aussi efficace supplante BitTorrent, en particulier sachant que BitTorrent n’est pas anonyme. Quoi qu’il en soit, le peer to peer c’est l’idéal pour distribuer de gros fichiers à plein de gens alors qu’il n’y a pas un Megaupload à faire fermer 😉 Même fermer des trackers ne sert à rien, grâce à la DHT il faudrait déconnecter TOUS les ordinateurs du réseau un peu partout dans le monde pour affecter les transmissions d’infos. Bonne chance.

Et en plus ça permet aux fournisseurs d’accès internet d’équilibrer leurs volumes de données échangées, et donc de faciliter les accords de peering et réduire la facture du transit. À propos facture: mon prochain article traitera des frais de votre blog, comment les compenser 🙂

Une réflexion sur « BitTorrent & liens magnet »

  1. j’ ai beaucoup appris en tant que simple utilisateur ; dans l’ optique de comprendre le fonctionnement « info-hash »/torrent pour choisir le site streaming qui correspond à mes besoins.

Les commentaires sont fermés.