Bagaimana cara kerja Bittorrent?

34

Saya ingin belajar lebih banyak tentang cara berbagi file yang lebih kecil. Saya adalah pengguna yang secara teknis mahir (programmer), jadi materi yang secara teknis sudah maju tidak masalah, tetapi harus ringkas dan langsung ke intinya. Saya membutuhkan buku sumber daya / web yang bagus yang menjelaskan keseluruhan arsitektur bittorrent.

Saya tidak tertarik pada detail, hanya keseluruhan arsitektur dan terminologi seperti biji, teman sebaya, dll.

Ada saran?

explorest
sumber

Jawaban:

29

Gambaran umum tentang cara kerja bittorrent:

  • Anda memiliki teman dan pelacak . Semua teman sebaya bersama pada saat tertentu adalah kawanan . Situasi yang biasa terjadi adalah satu atau beberapa rekan memiliki set berkas lengkap dan ingin membuatnya tersedia bagi rekan-rekan lainnya.

  • Rekan memperoleh file .torrent, yang akan memiliki antara lain A) hash SHA-1 dari fileset, B) URL pelacak, dan C) jumlah potongan file yang dipecah, serta hash SHA-1 untuk setiap bagian. Ukuran potongan ditentukan oleh torrent itu sendiri.

  • Rekan kemudian menghubungkan ke pelacak menggunakan URL yang ditentukan dalam torrent. Pelacak merespons dengan daftar teman. Pelacak berbicara melalui HTTP port 80 atau 443.

  • Rekan tersebut kemudian memilih rekan lain, menggunakan informasi dari pelacak, dan menghubunginya secara langsung untuk mengatur sesi pertukaran, berusaha mendapatkan bagian. Perhatikan bahwa sesi pertukaran secara langsung dilakukan oleh rekan-rekan dan pelacak TIDAK terlibat dalam transfer. Pelacak hanya memberikan informasi.

  • Setelah rekan memiliki sepotong, itu memverifikasi terhadap hash SHA-1, dan menulisnya ke file. Kemudian dapat menawarkan bagian itu ketika memilih rekan lain. Sesi pertukaran berikutnya melibatkan bagian "perdagangan". Saya percaya teman sebaya umumnya hanya akan memberi Anda potongan pertama jika Anda tidak memiliki potongan lainnya.

  • Rekan rekonsultasikan pelacak sekali-sekali untuk mendapatkan daftar teman yang diperbarui. Rekan tidak harus menunggu satu pertukaran selesai sebelum memulai yang lain jika memiliki beberapa bagian, jadi setelah rekan memiliki banyak potongan, transfer dapat benar-benar dipercepat. Inilah sebabnya mengapa torrents mulai lambat tetapi mendapatkan kecepatan dengan cepat saat rekan kerja mendapatkan potongan.

  • Ketika rekan memiliki semua bagian, seluruh file diverifikasi terhadap hash fileset SHA-1. Kemudian, itu menjadi seeder , dan sekarang tidak melakukan apa-apa selain membantu fileset tersedia lebih tinggi. Rekan-rekan yang tidak memiliki semua bagian adalah lintah .

  • Jika torrent tidak memiliki benih, itu sudah mati, meskipun jika ada salinan lengkap dari file tersebut di antara semua bagian yang dipegang oleh semua rekan, akhirnya mereka akan berdagang untuk mendapatkan salinan lengkap di antara mereka sendiri.

  • Hash SHA-1 adalah bagaimana pelacak dan rekan "tahu" file mana yang seharusnya dikerumuni. Nama file dalam torrent tidak digunakan untuk mengidentifikasi data. Potongan-potongan yang tidak memverifikasi terhadap hase dalam file .torrent dibuang. Peer yang terus-menerus mengirim potongan buruk dihina oleh rekan-rekan lain dan pada akhirnya tidak akan dapat terhubung dengan siapa pun di dalam kawanan.

  • Ukuran potongan yang lebih kecil berarti torrent lebih kuat karena rekan-rekan dapat berdagang potongan lebih cepat, tetapi juga berarti lebih banyak potongan hash dalam file .torrent harus didaftar dan oleh karena itu file .torrent bisa besar.

  • Jika Anda menerbitkan sesuatu melalui BitTorrent, yang terbaik adalah mengunggah file selama Anda ingin membuatnya tersedia. Rekan-rekan lain akan membantu Anda, karena sebagian besar perangkat lunak BitTorrent menerapkan algoritma yang mendukung upaya menyebarkan hal-hal di antara rekan-rekan sebanyak mungkin untuk memaksimalkan koneksi yang ada saat ini. Dengan cara ini BitTorrent dapat membantu Anda mempublikasikan sesuatu dan menghemat biaya bandwidth.

LawrenceC
sumber
1
Jawaban yang indah! Satu sindiran: Saya percaya benih lebih suka benih langka , bukan yang pertama. Tidak yakin apakah ini hal algoritma, tapi itu yang saya dapatkan dari program torrent sekali saat mengacaukan pengaturan.
Gallifreyan
8

Ada video yang cukup bagus di YouTube yang menjelaskan hal ini secara visual dengan potongan kardus. Ini bukan penjelasan yang sangat teknis, tetapi bagus untuk menjelaskan ide di balik BitTorrent kepada orang-orang dengan cara yang sederhana dan mudah dimengerti.

cara kerja bittorrent di youtube

nhinkle
sumber
3
+1 Video yang bermanfaat. Menunjukkannya kepada ayahku. Dia tidak punya pertanyaan sesudahnya. Mengherankan. :)
zero2cx
2

Tinjauan umum tentang protokol pesan rekan .

Klien dapat menggunakan dua protokol untuk berbagi informasi dengan rekan, TCP atau uTP (lebih dari UDP). Data ini mengikuti spesifikasi protokol bittorrent , bagian pesan rekan .

Jadi secara pemrograman, koneksi harus dimulai antara dua klien. Setelah koneksi diatur (melalui TCP atau uTP), sebuah jabat tangan bittorrent diprakarsai oleh klien yang mengambil informasi rekan jauh (ip & port) dari pelacak atau melalui DHT . Jabat tangan ini berisi info_hash yang mengidentifikasi torrent yang akan berhubungan dengan koneksi ini.

Mari kita lihat dulu bagaimana data Torrent terpotong melalui protokol. Sebuah karya adalah bagian dari data Anda berbagi melalui jaringan. Jangan sampai bingung dengan blok , yang merupakan bagian dari sepotong dibungkus menjadi sebuah paket. The blok adalah granularity untuk berbagi sepotong melalui paket, dan sepotong adalah granularity untuk berbagi Torrent melalui rekan-rekan.

Ketika koneksi dimulai, kedua klien (klien lokal, yang saya sebut LC dan klien jarak jauh, RC ) tersedak dan tidak tertarik . Tersedak berarti "Saya tidak akan menjawab pesan Anda, terlalu sibuk, tetapi saya mungkin akan mempertimbangkannya". Karenanya, tidak terkunci berarti "Saya akan menjawab pesan Anda". Tertarik tentu saja berarti saya ingin beberapa potong yang Anda miliki. Oleh karena itu, keadaan koneksi antara dua rekan dapat didefinisikan dengan empat status: LC_chocked ?, LC_interested ?, RC_chocked ?, RC_interested? Untuk memperingatkan RC bahwa saya (tidak) dicekik atau (tidak) tertarik, Saya harus mengirimnya (tidak) tertarik dan (tidak) dicekal pesan, dan secara timbal balik.

Untuk saling memberi tahu potongan mana yang mereka miliki, mereka dapat mengirim pesan bitfield segera setelah berjabat tangan. Seperti namanya, ini adalah string bit di mana setiap bit diatur ke 1jika klien memiliki bagian aneh ini , 0jika tidak.

Jadi jika LC adalah chocked dan tertarik dan RC memiliki unchocked dia, maka dia dapat mengirim permintaan pesan untuk meminta blok milik salah satu bagian dia tahu LC memiliki berkat bitfield pesan.

Ketika seorang rekan telah menerima seluruh bagian , dia bisa mengirim pesan bagian untuk menginformasikan semua rekan-rekan jauh sehingga mereka memperbarui bitfield terkait yang mereka pegang.

Itu adalah gambaran yang sangat mendasar, dan tentu saja tidak semua detail disediakan di sini, seperti algoritma choking dll ... Jika Anda ingin lebih detail, periksa dua tautan yang saya posting di atas, di bagian komentar (sebagai pengguna baru saya bisa dapat memiliki lebih dari dua tautan dalam pos).

Jules Randolph
sumber