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).