Comment fonctionne Bittorrent?

34

Je veux en savoir plus sur la façon bittorrent de partager des fichiers. Je suis un utilisateur techniquement avancé (programmeur), donc le matériel techniquement avancé ne pose aucun problème, mais il doit être concis et pertinent. J'ai besoin d'un bon livre de ressources / web qui explique l'architecture globale de bittorrent.

Je ne suis pas intéressé par les détails, juste l'architecture globale et la terminologie comme les graines, les pairs, etc.

Aucune suggestion?

explorest
la source

Réponses:

29

Aperçu du fonctionnement de bittorrent:

  • Vous avez des pairs et un tracker . Tous les pairs ensemble à un moment donné sont l' essaim . La situation habituelle est qu'un ou quelques pairs ont l'ensemble de fichiers complet et souhaitent le mettre à la disposition d'autres pairs.

  • Un pair acquiert un fichier .torrent, qui aura entre autres A) le hachage SHA-1 de l'ensemble de fichiers, B) l'URL du tracker, et C) le nombre de pièces dans lesquelles le fichier est divisé, ainsi que un hachage SHA-1 de chaque pièce. La taille des pièces est déterminée par le torrent lui-même.

  • Le pair se connecte ensuite au tracker en utilisant l'URL spécifiée dans le torrent. Le tracker répond avec une liste de pairs. Les trackers parlent HTTP sur le port 80 ou 443.

  • Le pair sélectionne ensuite un autre pair, en utilisant les informations du tracker, et le contacte directement pour mettre en place une session d'échange, en essayant d'obtenir un morceau. Notez que les sessions d'échange sont directement effectuées par les pairs et le tracker n'est PAS impliqué dans le transfert. Le tracker ne fournit que des informations.

  • Une fois que le pair a un morceau, il le vérifie par rapport au hachage SHA-1 et l'écrit dans le fichier. Il peut ensuite offrir cette pièce lors de la sélection d'un autre pair. Les sessions d'échange suivantes impliquent des «échanges» de pièces. Je crois que les pairs ne vous donneront généralement le premier morceau que si vous n'en avez pas d'autres.

  • Le pair reconsulte le tracker de temps en temps pour obtenir une liste à jour des pairs. Le pair n'a pas à attendre la fin d'un échange avant d'en commencer un autre s'il a plusieurs morceaux, donc une fois que le pair a un tas de morceaux, le transfert peut vraiment accélérer. C'est pourquoi les torrents commencent lentement mais gagnent rapidement en vitesse lorsque le pair acquiert des pièces.

  • Lorsqu'un homologue possède toutes les pièces, le fichier entier est vérifié par rapport au hachage SHA-1 de l'ensemble de fichiers. Ensuite, il devient un semoir et ne fait plus qu'améliorer la disponibilité du jeu de fichiers. Les pairs qui n'ont pas toutes les pièces sont des sangsues .

  • Si un torrent n'a pas de graines, il est mort, bien que si une copie complète du fichier existe entre toutes les pièces détenues par tous les pairs, ils finiront par échanger pour obtenir une copie complète entre eux.

  • Le hachage SHA-1 permet au traqueur et aux pairs de «savoir» quel fichier est censé être essaimé. Les noms de fichiers dans le torrent ne sont pas utilisés pour identifier les données. Les éléments qui ne vérifient pas par rapport aux hases du fichier .torrent sont supprimés. Les pairs qui envoient continuellement de mauvaises pièces sont snobés par d'autres pairs et ne pourront finalement se connecter à personne dans l'essaim.

  • Une taille de pièce plus petite signifie que le torrent est plus robuste car les pairs peuvent échanger des pièces plus rapidement, mais cela signifie également que davantage de hachages de pièces dans le fichier .torrent doivent être répertoriés et que le fichier .torrent peut donc être volumineux.

  • Si vous publiez quelque chose via BitTorrent, il est préférable d'amorcer le fichier tant que vous souhaitez le rendre disponible. D'autres pairs vous aideront, car la plupart des logiciels BitTorrent implémentent des algorithmes qui favorisent la répartition des choses entre le plus de pairs possible afin de maximiser les connexions simultanées. De cette façon, BitTorrent peut vous aider à publier des choses et à réduire les coûts de bande passante.

LawrenceC
la source
1
Une belle réponse! Une astuce: je crois que les graines préfèrent les graines les plus rares , pas les premières pièces en premier. Je ne sais pas s'il s'agit d'un algorithme, mais c'est ce que j'ai obtenu d'un programme torrent une fois tout en jouant avec les paramètres.
Gallifreyan
8

Il y a une belle vidéo sur YouTube expliquant cela de manière visuelle avec des découpes en carton. Ce n'est pas une explication très technique, mais c'est génial pour expliquer l'idée derrière BitTorrent aux gens d'une manière simple et compréhensible.

comment fonctionne bittorrent sur youtube

ne pas penser
la source
3
+1 Vidéo utile. Je l'ai montré à mon père. Il n'avait plus de questions par la suite. Étonnant. :)
zero2cx
2

Une vue d'ensemble du protocole des messages de pairs .

Le client peut utiliser deux protocoles pour partager des informations avec des pairs, TCP ou uTP (via UDP). Ces données suivent la spécification du protocole bittorrent , section messages de pairs .

Donc, par programme, une connexion doit commencer entre deux clients. Une fois la connexion établie (via TCP ou uTP), une poignée de main bittorrent est initiée par le client qui a saisi les informations de l'homologue distant (ip et port) à partir du tracker ou via DHT . Cette poignée de main contient l' info_hash qui identifie le torrent de cette connexion.

Voyons d'abord comment les données Torrent sont tronquées via le protocole. Une pièce fait partie des données que vous partagez via le réseau. Ne pas confondre avec un bloc , qui est une section d'une pièce enveloppée dans un paquet. Le bloc est la granularité pour partager un morceau via des paquets, et un morceau est la granularité pour partager un Torrent via des pairs.

Lorsque la connexion démarre, les deux clients (client local, que j'appellerai LC et client distant, RC ) sont étouffés et ne sont pas intéressés . Choked signifie "Je ne répondrai à aucun de vos messages, trop occupé, mais je pourrais en tenir compte". Unchocked signifie donc "je répondrai à vos messages". Intéressé signifie bien sûr que j'aimerais avoir quelques pièces que vous avez. Par conséquent, l'état d'une connexion entre deux homologues pourrait être défini avec ces quatre états: LC_chocked ?, LC_interested ?, RC_chocked ?, RC_interested? Pour avertir RC que je suis (in) choqué ou (in) intéressé, Je dois lui envoyer des messages (in) intéressés et (in) choqués , et réciproquement.

Pour s'informer mutuellement des pièces dont ils disposent, ils peuvent envoyer un message de champ de bits juste après la prise de contact. Comme son nom l'indique, c'est une chaîne de bits où chaque bit est défini 1si le client a cette pièce particulière , 0sinon.

Donc , si LC est calées et intéressé et RC a unchocked lui, alors il peut envoyer une demande des messages à demander un bloc appartenant à une pièce , il sait LC a grâce à bitfield message.

Lorsqu'un pair a reçu la pièce entière , il peut envoyer un message de morceau pour informer tous ses pairs distants afin qu'ils mettent à jour le champ binaire associé qu'ils détiennent.

C'est un aperçu très basique, et bien sûr, tous les détails ne sont pas fournis ici, comme l' algorithme d'étouffement, etc. Si vous voulez plus de détails, consultez les deux liens que j'ai postés ci-dessus, dans la section des commentaires (en tant que nouvel utilisateur, je peux pas plus de deux liens dans un message).

Jules Randolph
la source