Fonctionnement du protocole BitTorrent

in #fr6 years ago

man-3211171_1920.jpg

Lorsque nous souhaitons télécharger un contenu sur un serveur, nous devons réaliser une requête à ce dernier. Cependant, si nous sommes nombreux à vouloir télécharger le même fichier, le serveur ne pourra pas traiter toutes les demande. Afin de remédier à ce problème, les réseaux de pair à pair ont vu le jour en utilisant une communication par torrent.

Différence entre un réseau client/serveur et un réseau de pair à pair.

Afin d'illustrer la différence entre un réseau client/serveur et un réseau de pair à pair, nous allons nous placer dans le cas où nous cherchons à accéder à un fichier.

Dans le cas d'un réseau client/serveur, seul le serveur à accès au fichier. En tant que client, si nous souhaitons avoir accès à ce fichier, nous allons demander au serveur de nous l'envoyer. Si une autre personne arrive dans le réseau, il va lui aussi le demander au serveur.

Dans le cas d'un réseau de pair à pair, plusieurs personnes ont accès au fichier. Ainsi, si nous souhaitons avoir accès à ce dit fichier, nous allons le demander aux pairs que nous connaissons. Ces derniers vont pouvoir nous envoyer le fichier si ils l'ont. Si une autre personne arrive dans le réseau et demande lui aussi le même fichier, alors nous pourrons, à notre tour, lui donner.

client server vs p2p.png

Protocole BitTorrent

Le protocole BitTorrent s'appuie sur le fait que si un fichier se trouve sur un serveur, plus ce fichier sera demandé et moins elle sera accessible à cause de la saturation du serveur. En revanche, si chaque client qui télécharge ce fichier devient à leur tour des serveur alors nous n'avons plus de problème de saturation.

Afin de transmettre le fichier, nous allons le découper en petit bloc de données. Ainsi, si je cherche à obtenir le fichier, je vais chercher à obtenir tous ces petits blocs qui le composent. Lorsqu'une autre personne demandera le fichier, nous pourrons nous aussi contribuer au réseau en lui donnant les blocs que nous avons accumulé. Ce système de fonctionnement permet à l'ensemble des ordinateurs connecté de participer au réseau. Nous évitons le problème de saturation, car plusieurs ordinateurs ont accès à l'information que l'on souhaite obtenir. Nous appelons seeder une personne qui a la totalité du fichier. Nous appelons leecher une personne qui souhaite télécharger le fichier, mais qui ne l'a pas entièrement.

Architecture

Dans ce type de réseau, nous allons avoir, dans un premier temps, un ou plusieurs seeder, c'est-à-dire, une ou plusieurs personnes qui possèdent le fichier. Puis, nous allons avoir un ou plusieurs leecher, c'est-à-dire des personnes qui souhaitent télécharger le fichier. Afin de connaître les personnes connectées au réseau, nous allons questionner le tracker. Le tracker est un serveur qui possède une liste des différentes personnes connectées sur le réseau. Ainsi, lorsque nous le questionnons, il nous indique les personnes avec qui nous pouvons échanger afin d'obtenir le fichier que nous voulons. Afin de connaître l'adresse du tracker, nous allons utiliser un fichier .torrent que nous aurons au préalable récupéré sur un serveur ou bien qu'un ami nous a envoyés. Ce fichier torrent contient plusieurs informations comme des informations sur le fichier que nous souhaitons télécharger mais aussi l'adresse du tracker.

Fonctionnement

Nous allons ici réaliser un exemple concret sur le fonctionnement de ce protocole. Imaginons que je souhaite télécharger l'intégralité des tutoriels d'ApprendreHacking. Il se trouve qu'un ami a en sa possession une archive contenant l'ensemble de ces tutoriels. Ainsi, afin de nous les transmettre, nous décidons d'utiliser le protocole BitTorrent. Ainsi, je vais, à l'aide du fichier .torrent, questionner le tracker, afin de connaître les différentes adresses présentes dans le réseau de pair à pair. À partir de ces adresses, nous allons pouvoir les questionner afin de savoir s'ils y peuvent nous envoyer l'archive que nous souhaitons obtenir. Pour cela, ils vont découper l'archive en petits paquets qu'ils vont m'envoyer. À partir de là, il ne nous reste plus qu'à assembler tous ces petits paquets ensemble afin de former l'archive. Une fois le fichier reconstitué, nous sommes devenu un seeder. Ainsi, si une autre personne se connecte sur le réseau et nous demande l'accès à l'archive des tutoriels, nous allons pouvoir lui transmettre.

Structure d'un fichier torrent

Lors de cet article, nous avons abordé l'utilisation d'un fichier .torrent. Ce fichier contient l'ensemble des informations du fichier ainsi que sa manière dont nous pouvons le télécharger. Ce fichier .torrent est encodé au format BEncoding et est structuré comme un dictionnaire. Nous allons avoir un ensemble de clés et des valeurs associées pour chacune. Nous allons avoir une première clé "info" qui décrit le contenu des données à télécharger. Si nous avons un seul fichier à télécharger, nous aurons comme paramètre :

  • length: La taille du fichier
  • signature: La signature du fichier. Cela nous sert à vérifié l'intégrité des données que nous récupérons.
  • name: Le nom du fichier.
  • piece length: La taille des morceaux que nous allons télécharger.
  • pieces: Chaîne de caractère contenant la concaténation des signatures de chacun des morceaux que nous allons télécharger.
Dans le cas où nous avons plusieurs fichiers à télécharger, nous allons avoir :
  • files: Liste décrivant l'ensemble des fichiers contenant pour chacun :
    • length: La taille d'un fichier
    • signature: La signature du fichier
    • path: Le chemin du fichier dans l'arborescence
  • name: Le nom du répertoire racine.
  • piece length: La taille des morceaux que nous allons télécharger.
  • pieces: Chaîne de caractère contenant la concaténation des signatures de chacun des morceaux que nous allons télécharger.
Nous allons ensuite avoir :
  • announce: L'URL du Tracker
Nous pouvons avoir d'autres paramètre comme la date de création, l'auteur du torrent, des commentaires ...

La connexion au tracker

Une fois la composition du fichier .torrent détaillé, nous allons nous intérresser à l'échange que nous allons réaliser avec le tracker. Cet échange que nous allons réaliser est une simple requête HTTP par la méthode GET, c'est-à-dire que les paramètre vont être envoyé dans l'url. Nous allons lui envoyé divers paramètres tels que :
  • info_hash: La signature de l'ensemble des données contenu dans la clé info de notre fichier .torrent. Ainsi, même si nous avons deux fichiers .torrent différents, du moment que le contenu reste identique, nous aurons la même adresse du réseau.
  • peer_id: Un id unique généré par l'application.
  • port: Le n° de port d'écoute du client.
  • uploaded: Le nombre total d'octets envoyés du client, depuis que le client a envoyé une requête "started" au Tracker indiquant le début de sa session sur ce dernier.
  • downloaded: Le nombre total d'octets téléchargés du client, depuis que le client a envoyé une requête "started" au Tracker indiquant le début de sa session sur ce dernier.
  • left: Le nombre d'octets restant à télécharger pour le client
  • event: Indique l'état du client sur le Tracker. Les différentes valeurs sont les suivantes :
    • started : A effectuer sur la 1ère requête. Indique le commencement d'une session sur le tracker.
    • stopped : A effectuer au moment de la déconnexion. Indique la fin de la session sur le tracker.
    • completed : À effectuer quand le téléchargement est terminé. Permet au tracker de modifier le nombre de seeder connectés
  • numwant: Indique le nombre de clients que nous souhaitons récupérer à partir du Tracker Par défaut 50 clients seront renvoyés.
Une fois la requête envoyée, le tracker va nous répondre en nous donnant comme information :
  • failure reason : Indique si nous avons une erreur. Si présent, aucune autre clé sera présentes.
  • interval : L'intervalle de seconde indiquant au client le délai à attendre avant de recontacter le tracker.
  • complete : Le nombre de seeder.
  • incomplete : Le nombre de leecher.
  • peers : Liste indiquant les coordonnées de chacun des clients :
    • peer id : L'identifiant du client.
    • ip : l'adresse ip.
    • port : le port d'écoute du client.
Une fois la liste des clients récupérés, nous allons pouvoir récupérer le fichier que nous souhaitons télécharger.

Échange entre les clients

Avec la liste que nous avons récupérer, nous allons pouvoir questionner les différents clients présents sur le réseau. Lors de l'échange, un client va maintenir différents états :
  • choked : Quand un client choque un autre client, aucune réponse ne sera envoyée par le client dans cet état. Aucune requête ne doit être envoyée.
  • interested : Indique si le client est intéressé par ce qu'un client a à lui offrir.
Ainsi, un morceau du fichier va être envoyé chez un client si celui-ci est dans l'état interested. Il est important dans ce type de réseau de tenir informé les autres clients. Pour que deux clients communiquent, ils vont tout d'abord réaliser une connexion par poignée de main. Puis, le client va communiquer la signature du fichier qu'il souhaite avoir et l'échange va se réaliser.

Dans cet article, nous avons vu le fonctionnement global du protocole BitTorrent. Pour résumé, nous allons dans un premier temps, à l'aide d'un fichier .torrent, questionner le tracker. Ce dernier va nous donner une liste des utilisateurs qui possèdent le fichier que nous souhaitons télécharger. À partir de là, il ne nous reste plus qu'à communiquer avec les utilisateurs afin qu'ils puissent nous donner le fichier que l'on cherche. Afin de faciliter la communication, l'échange se fait par des petits blocs que nous allons assembler afin d'avoir l'ensemble du fichier. Une fois le fichier téléchargé, nous pouvons à notre tour partager ce dernier.

Cet article est un peut long, mais nous espérons qu'il aura été intéressant pour vous. Peut-être que nous reviendrons plus en détaille sur les avantages ainsi que les inconvénients de ce protocole dans un autre article. N'hésitez pas à nous donner vos retours sur cet article.

Sort:  

Merci pour cet article ! Il est très complet :D
J' ai du soucis à me faire puisque moi aussi j' aime écrire sur ces sujets lol :D
N' hésites pas à aller sur http://grav.zonguin.shost.ca/posts-utiles-aux-nouveaux-zonguin et à suivre mon guide si jamais tu en as besoin :-)

Merci, je vais regarder ce lien, je suis tout nouveau dans cette communauté.
Ne te fais pas de soucis, nos articles pourront être complémentaires et aider plus de personnes =)

;-) Tu peux aussi venir sur FrancoPartages : https://discord.gg/nyBJHnt !

Article intéressant et très complet, un peu trop même. En effet sur Steem la majorité des gens à qui tu t'adresses n'ont que peu de connaissances dans les sujets que t'aborde donc il serait mieux si tu parvenait à vulgariser un peu plus.

Merci pour ton retour, je vais essayer de vulgariser davantage. Quand j'écris, je me laisse facilement emporté ^^

T'inquiètes je te comprends ;-)

Très bel article avec la juste dose de détail pour ne pas nous perdre, une partie 2 sur des cas d'application du système peer to peer et les dérivés/concurrents de bitTorrent seraient tout aussi intéressant ;)

En étude de cas intéressante, il y a le peer to peer de Windows Update dont peu de possesseurs d'ordi ont conscience.

Merci, je le note sur ma liste de sujet à réaliser =)

Très bon article explicatif sur le fonctionnement et le comportement du protocole Bittorent ! Upvoté à 100% !

Merci, ça fait plaisir =)

Coin Marketplace

STEEM 0.25
TRX 0.11
JST 0.032
BTC 63517.53
ETH 3062.83
USDT 1.00
SBD 3.81