Dalam istilah sederhana, bagaimana awalnya klien BitTorrent menemukan rekan menggunakan DHT?


45

Saya sudah membaca jawaban SuperUser dan artikel Wikipedia ini tetapi keduanya terlalu teknis bagi saya untuk benar-benar membungkus kepala saya.

Saya memahami gagasan pelacak: klien terhubung ke server pusat yang mengelola daftar teman sebaya dalam kerumunan.

Saya juga memahami gagasan pertukaran teman: klien yang sudah berkerumun mengirimkan daftar lengkap rekan-rekan mereka satu sama lain. Jika teman baru ditemukan, mereka ditambahkan ke daftar.

Pertanyaan saya adalah, bagaimana cara kerja DHT? Yaitu, bagaimana klien baru dapat bergabung dengan gerombolan tanpa pelacak atau pengetahuan setidaknya satu anggota gerombolan untuk bertukar rekan dengan?

(Catatan: penjelasan sederhana adalah yang terbaik.)

Jawaban:


48

Ringkasan

Bagaimana klien baru dapat bergabung dengan gerombolan tanpa pelacak atau pengetahuan setidaknya satu anggota gerombolan untuk bertukar rekan dengan?

Kamu tidak bisa Itu tidak mungkin.*

* (Kecuali jika simpul di jaringan area lokal Anda sudah menjadi simpul di DHT. Dalam hal ini, Anda bisa menggunakan mekanisme penyiaran, seperti Avahi, untuk "menemukan" rekan ini, dan bootstrap dari mereka. Tapi bagaimana caranya mereka bootstrap sendiri? Akhirnya, Anda akan menghadapi situasi di mana Anda perlu terhubung ke Internet publik. Dan Internet publik hanya unicast, bukan multicast, sehingga Anda terjebak dengan menggunakan daftar teman sebaya yang sudah ditentukan sebelumnya.)


Referensi

Bittorrent DHT diimplementasikan melalui protokol yang dikenal sebagai Kademlia , yang merupakan kasus khusus dari konsep teoritis tabel hash Terdistribusi .


Eksposisi

Dengan protokol Kademlia, saat Anda bergabung dengan jaringan, Anda menjalani prosedur bootstrap , yang mutlak mengharuskan Anda tahu, terlebih dahulu , alamat IP dan port setidaknya satu node yang sudah berpartisipasi dalam jaringan DHT. Pelacak yang Anda sambungkan, misalnya, mungkin merupakan simpul DHT. Setelah Anda terhubung ke satu node DHT, Anda kemudian melanjutkan untuk mengunduh informasi dari DHT, yang memberikan Anda informasi konektivitas untuk lebih banyak node, dan Anda kemudian menavigasi struktur "grafik" itu untuk mendapatkan koneksi ke semakin banyak node, yang dapat menyediakan keduanya konektivitas ke node lain, dan data payload (potongan unduhan).

Saya pikir pertanyaan Anda yang sebenarnya dalam huruf tebal - yang bagaimana untuk bergabung dengan jaringan Kademlia DHT tanpa mengetahui setiap anggota lain - didasarkan pada asumsi yang salah.

Jawaban sederhana untuk pertanyaan Anda dalam huruf tebal adalah, Anda tidak . Jika Anda sama sekali tidak mengetahui informasi APA PUN tentang satu pun host yang mungkin mengandung metadata DHT, Anda mandek - Anda bahkan tidak bisa memulai. Maksud saya, tentu saja, Anda dapat dengan brutal berusaha menemukan IP di internet publik dengan port terbuka yang kebetulan menyiarkan informasi DHT. Tetapi lebih mungkin, klien BT Anda dikodekan ke beberapa IP statis atau DNS spesifik yang memutuskan ke simpul DHT yang stabil, yang hanya menyediakan metadata DHT.

Pada dasarnya, DHT hanya terdesentralisasi seperti mekanisme penggabungan, dan karena mekanisme penggabungannya cukup rapuh (tidak ada cara untuk "menyiarkan" melalui seluruh Internet! Jadi Anda harus unicast ke masing-masing host yang ditugaskan untuk mendapatkan DHT data), Kademlia DHT tidak terlalu terdesentralisasi. Tidak dalam arti kata yang paling ketat.

Bayangkan skenario ini: Seseorang yang ingin P2P berhenti keluar dan menyiapkan serangan pada semua node DHT stabil yang umum digunakan yang digunakan untuk bootstrap. Setelah mereka melakukan serangan, mereka akan mengaktifkannya pada semua node sekaligus. Wham ; setiap simpul DHT bootstrap tunggal turun semua dalam satu gerakan. Sekarang apa? Anda tidak dapat terhubung dengan pelacak terpusat untuk mengunduh daftar teman sebaya dari mereka. Nah, jika mereka menyerang pelacak juga, maka Anda benar- benarsebuah sungai. Dengan kata lain, Kademlia dan seluruh jaringan BT dibatasi oleh keterbatasan Internet itu sendiri, dalam hal itu, ada sejumlah komputer yang terbatas (dan relatif kecil) yang harus Anda serang atau jadikan offline untuk mencegah> 90% pengguna dari terhubung ke jaringan.

Setelah node bootstrap "pseudo-terpusat" semua hilang, node interior DHT, yang bukan bootstrap karena tidak ada di luar DHT yang tahu tentang interior node , tidak berguna; mereka tidak dapat membawa node baru ke DHT. Jadi, karena setiap node interior terputus dari DHT dari waktu ke waktu, baik karena orang mematikan komputer mereka, me-reboot untuk pembaruan, dll, jaringan akan runtuh.

Tentu saja, untuk menyiasatinya, seseorang dapat menggunakan klien BitTorrent yang ditambal dengan daftar baru node DHT stabil atau alamat DNS, dan beriklan dengan keras ke komunitas P2P untuk menggunakan daftar baru ini sebagai gantinya. Tapi ini akan menjadi situasi "pukulan keras" di mana agresor (pemakan simpul) akan mengunduh daftar ini sendiri secara progresif, dan menargetkan node bootstrap baru yang berani, kemudian membawanya secara offline juga.


Cara Anda menggambarkan DHT terdengar sama dengan pertukaran teman.
Celeritas

Hal yang Didistribusikan tentang DHT adalah bahwa muatan data aktual - artinya, daftar IP dan port tempat file dapat diunduh - didistribusikan. Dalam pertukaran rekan, seluruh daftar disimpan di satu komputer, biasanya pelacak, dan diunduh tidak berbeda dengan unduhan file. Saya dapat menyebutkan bahwa dalam jawaban saya, tetapi seluruh pertanyaan ini (dan jawabannya) hanya tentang penemuan awal atau bergabung dengan jaringan DHT, bukan tentang apa yang terjadi setelah Anda bergabung.
allquixotic

1
Memukul semua node bootstrap akan menghentikan pengguna baru dari bootstrap, tetapi belum tentu ada pengguna yang offline dan kemudian kembali. Saya memiliki kesan bahwa beberapa klien mengingat set node aktif mereka dan menggunakannya untuk menyambung kembali, daripada bootstrap setiap saat.
clacke

Dengan proyek-proyek seperti masscan ( github.com/robertdavidgraham/masscan ) menemukan node DHT tanpa direktori terpusat harus layak
newlog

19

Jawaban singkat: Diperoleh dari file .torrent.

Ketika klien BitTorrent membuat file .torrent tanpa jejak (yaitu, ketika seseorang bersiap untuk membagikan sesuatu yang baru melalui BitTorrent), ia menambahkan kunci "simpul" (kunci seperti pada "pasangan kunci / nilai"; seperti header bagian, bukan kunci kripto) ke file .torrent yang berisi simpul DHT terdekat K yang diketahui klien itu.

http://www.bittorrent.org/beps/bep%5F0005.html#torrent-file-extensions

Kamus torrent pelacak tidak memiliki kunci "umumkan". Alih-alih, torrent pelacak tidak memiliki kunci "node". Kunci ini harus ditetapkan ke K node terdekat di tabel routing klien penghasil torrent. Atau, kunci dapat diatur ke simpul yang dikenal baik seperti yang dioperasikan oleh orang yang menghasilkan torrent. Tolong jangan otomatis menambahkan "router.bittorrent.com" ke file torrent atau secara otomatis menambahkan node ini ke tabel routing klien.

Jadi, ketika Anda memberi makan klien BitTorrent Anda file .torrent dari torrent pelacak yang ingin Anda unduh, ia menggunakan nilai kunci "node" dari file .torrent untuk menemukan beberapa node DHT pertamanya.


3
Ini bagus, informasi penjelasan. Saya pikir jawaban Anda menjelaskan apa yang dilakukan klien BitTorrent saat ini untuk menangani keterbatasan teoretis dan masalah yang diidentifikasi dalam jawaban saya. Mudah-mudahan kedua jawaban kami terangkat, karena mereka menjelaskan berbagai aspek jawaban.
allquixotic

3
Apakah itu sebabnya "menggabungkan file torrent baru dengan mengunduh torrent" di banyak klien membuat torrent mati menjadi hidup?
Jesvin Jose

2
@aitchnyu ya, tetapi file torrent mungkin memiliki pelacak tambahan / berbeda juga.
longneck

2
Tampaknya tidak ada klien BitTorrent yang benar-benar memasukkan informasi node. Telah menguji Transmisi, Vuze, Deluge, Mainline, dan lainnya.
Aeyoun

1

kamu tidak bisa! Anda harus tahu setidaknya satu IP dari salah satu gerombolan, ini adalah kelemahan dari jaringan P2P. Anda dapat menyiarkan secara membabi buta untuk menemukan IP pertama, tetapi dalam jaringan besar, jika semua orang melakukan itu kita akan mengalami masalah kemacetan. Anda dapat menggunakan cache, tetapi hanya dimungkinkan untuk gerombolan besar (cache alamat peer yang lebih besar). Anda selalu harus menghubungkan pelacak untuk menanyakan IP pertama.

Didistribusikan dalam DHT berarti klien tidak harus memegang semua daftar yang berisi jumlah md5 dari nama file bersama, dengan rekan yang sesuai. Daftar hash adalah bentuk menjadi bagian yang sama dan didistribusikan dengan redundansi ke seluruh kawanan. Jika peer disconnect ada tempat lain dengan bagian hashlist yang sama. Teman sebaya saling berbagi alamat kepada pemegang yang baik dari bagian hashlist.

torrent-freak menulis posting tentang hal ini


0

Bagaimana klien baru dapat bergabung dengan gerombolan tanpa pelacak atau pengetahuan setidaknya satu anggota gerombolan untuk bertukar rekan dengan?

Ia memintanya.

Klien Bittorrent yang mendukung DHT menjalankan dua aplikasi peer-to-peer yang terpisah.

Yang pertama melakukan file-sharing: Segerombolan dalam bittorrent lingo adalah sekelompok rekan yang berbagi objek bittorrent (misalnya struktur file atau direktori). Setiap objek bittorent memiliki beberapa metadata yang disimpan dalam file .torrent. (Ini termasuk ukuran objek, nama folder, mungkin informasi pelacak atau node. Dll.) Hash dari metadata yang diperlukan untuk mengunduh objek bittorrent ini disebut infohash.

DHT pada dasarnya adalah aplikasi P2P kedua yang bertujuan untuk menggantikan pelacak: Ini menyimpan pasangan (infohash, segerombolan) dan memperbarui segerombolan jika menerima pesan mengumumkan. Klien baru harus memiliki pengetahuan tentang beberapa "simpul" (istilah bittorrent untuk rekan DHT) untuk mem-bootstrap informasi DHT-nya. Di sini argumen yang diberikan oleh @allquixotic berlaku. Karena MDHT saat ini terdiri dari lebih dari 7 juta rekan, penolakan serangan layanan berkelanjutan tampaknya tidak mungkin.

Ia kemudian dapat menanyakan DHT sehubungan dengan infohash dan tidak harus menggunakan pelacak atau mengenal rekan yang merupakan bagian dari kerumunan sebelumnya. Jika salah satu rekan yang dihubungi mendukung berbagi metadata, itu hanya memerlukan infohash yang dapat mengambil file .torrent dari swarm.


0

Sebagian besar klien jaringan p2p di-bootstrap dari daftar rekan-rekan seed mereka awalnya terhubung ke ... begitu mereka terhubung ke satu rekan bootstrap itu unduh sisanya dengan cara terdistribusi. Ini terhubung ke rekan bootstrap dan mengunduh daftar rekan-rekan DHT dan kemudian pergi ke masing-masing dan melakukan hal yang sama, dll. Dll.

Sebagai contoh:

Berikut adalah daftar node bootstrap:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L10

Di sinilah klien terhubung ke mereka untuk menghidrasi daftar rekan:

https://github.com/dontcontactme/p2pspider/blob/master/lib/dhtspider.js#L60

Ini mirip dengan cara kerja pelacak, kecuali hampir semua orang bisa menjadi simpul bootstrap sehingga hampir tidak mungkin untuk mematikannya.

Dompet inti Bitcoin bekerja dengan cara yang sama. Ini memungkinkan Anda mengubah rekan-rekan seed bootstrap jika karena alasan tertentu yang shutdown.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.