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?
la source
Beau papier sur le sujet ici
http://davidhales.name/posters/patarin-hales-delis-poster6.pdf (la note est en fait un
.pdf
fichier et peut être consultée avec Acrobat Reader.)Voici un fichier image que quelqu'un a fait de son contenu:
la source
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.
la source
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
1
si le client a cette pièce particulière ,0
sinon.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).
la source