BitTorrent
Différents algorithmes utilisés
Mécanisme d'encouragement au partage
BitTorrent est doté d’un mécanisme qui récompense les clients qui envoient des données. En effet, à tout moment, un client upload vers maximum quatre peers (c'est la version officielle du protocole qui limite à maximum 4 clients pour un client donné). Ces quatre peers doivent évidemment être intéressés par le contenu du client, mais aussi ils doivent être les quatre de chez qui le client télécharge le plus vite (principe de réciprocité).
A noter que, pour éviter un changement incessant, un client évalue (et change éventuellement) ses peers seulement toutes les dix secondes. D’autre part, une fois qu’un client devient Seeder, il ne décide plus à quels peers il envoie des données sur base de leur vitesse d’upload (puisqu’elle est forcément nulle) mais bien sur leur vitesse de download.
Rarest First
Chaque client est mis au courant des pièces que chacun des clients possédent. Il est ainsi possible de les compter et de savoir quel morceau est le plus rare. Cet algorithme consiste donc à privilégier le téléchargement des parties les plus rares afin de pouvoir les distribuer le plus rapidement possible.
Optimistic Unchocking
Pour avoir la possibilité d’explorer le réseau, il y a en permanence un Peer qui est ”unchoked” quel que soit son taux d’upload. Ce peer peut changer toutes les 30 secondes. Lorsqu’une nouvelle connexion est établie avec un Peer, celui-ci a trois fois plus de chance que les autres d’être sélectionné, ce qui lui offre une opportunité raisonnable d’obtenir un morceau complet.
SuperSeed
L’algorithme de super-seeding a été conçu pour aider un fournisseur de contenu disposant d’une bande passante limitée à envoyer un fichier sur le réseau BitTorrent le plus rapidement possible.
A noter que cet algorithme ne fait pas partie de la spécification originale du protocole et n’est pas non plus implanté dans le client officiel. Il a été proposé ultérieurement par John Hoffman et est implanté dans divers clients dont le sien.
Lorsqu’un client est en mode ”super-seed”, il n’agit pas comme une seed normal, en laissant les clients demander les morceaux au hasard, mais plutot essaie d’envoyer tous les morceaux du fichier le plus rapidement possible. Le Seeder accomplit ceci en faisant semblant d’être un client normal qui n’a aucun morceau. Il va pouvoir choisir les morceaux qu’il distribue en envoyant aux autres clients des messages du type ”j’ai reçu tel morceau” pour faire croire à ces clients qu’il ne dispose que de ce morceau-là. Et pour favoriser les clients qui redistribuent les morceaux qu’ils reçoivent, le Seeder n’envoie un deuxième morceau à un client particulier qu’après avoir vu chez un autre client le dernier morceau qu’il a envoyé à ce client.
Cet algorithme s’avère être très efficace pour le Seeder initial (entre 150 et 200% plus efficace que l’algorithme standard, c’est à dire entre 150 et 200% moins de données à envoyer avant de voir apparaître un autre Seeder) mais ne devrait jamais être utilisé pour les autres Seeder, car il diminue l’efficacité du transfert dans le cas d’un système ayant déjà plusieurs Seeders.