Untuk pertama kalinya saya menggunakan tautan magnet . Penasaran dengan cara kerjanya, saya mencari spesifikasi dan tidak menemukan jawaban. Wiki mengatakan xt
"topik yang tepat" dan diikuti oleh format ( btih
dalam hal ini) dengan hash SHA1. Saya melihat base32 disebutkan, mengetahui itu 5 bit per karakter dan 32 karakter, saya menemukan itu memegang 160bits, yang persis ukuran SHA1.
Tidak ada ruang untuk alamat IP atau apa pun, itu hanya SHA1. Jadi bagaimana klien BitTorrent menemukan file yang sebenarnya? Saya menyalakan Pengintai URL untuk melihat apakah itu mengunjungi halaman (menggunakan TCP) atau melakukan pencarian atau sejenisnya, tetapi tidak ada yang terjadi. Saya tidak tahu bagaimana klien menemukan teman. Bagaimana cara kerjanya?
Juga, apa hash? Apakah hash array dari semua hash file bersama? Mungkin itu hash dari file torrent yang sebenarnya diperlukan (menghapus informasi tertentu)?
Dalam VM, saya mencoba tautan magnet dengan uTorrent (yang baru saja diinstal) dan berhasil menemukan rekan-rekan. Dari mana asal rekan pertama? Itu segar dan tidak ada torrents lainnya.
sumber
Jawaban:
Tautan magnet BitTorrent mengidentifikasi torrent menggunakan nilai hash 1 a SHA-1 atau terpotong SHA-256 yang dikenal sebagai "infohash". Ini adalah nilai yang sama yang digunakan rekan kerja (klien) untuk mengidentifikasi torrent ketika berkomunikasi dengan pelacak atau rekan kerja lainnya. File .torrent tradisional berisi struktur data dengan dua kunci tingkat atas:,
announce
mengidentifikasi pelacak yang akan digunakan untuk unduhan, daninfo
, berisi nama file dan hash untuk torrent. "Infohash" adalah hash dariinfo
data yang disandikan .Beberapa tautan magnet menyertakan pelacak atau benih web, tetapi seringkali tidak. Klien Anda mungkin tidak tahu apa-apa tentang torrent kecuali infohash-nya. Hal pertama yang perlu dilakukan adalah menemukan rekan lain yang mengunduh torrent. Ini dilakukan menggunakan jaringan peer-to-peer 2 yang terpisah yang mengoperasikan "tabel hash terdistribusi" (DHT). DHT adalah indeks terdistribusi besar yang memetakan torrents (diidentifikasi oleh infohash) ke daftar rekan-rekan (diidentifikasi oleh alamat IP dan port) yang berpartisipasi dalam segerombolan torrent itu (mengunggah / mengunduh data atau metadata).
Pertama kali klien bergabung dengan jaringan DHT, ia menghasilkan ID 160-bit acak dari ruang yang sama dengan infohash. Kemudian bootstraps koneksinya ke jaringan DHT menggunakan alamat klien yang dikodekan dengan keras yang dikontrol oleh pengembang klien, atau klien pendukung DHT yang sebelumnya ditemui di torrent swarm. Ketika ingin berpartisipasi dalam swarm untuk sebuah torrent diberikan, ia mencari jaringan DHT untuk beberapa klien lain yang ID adalah sebagai dekat 3 mungkin untuk infohash tersebut. Ini memberi tahu klien ini bahwa mereka ingin berpartisipasi dalam segerombolan, dan meminta mereka untuk informasi koneksi dari setiap rekan yang sudah mereka kenal tentang siapa yang berpartisipasi dalam segerombolan.
Ketika rekan-rekan mengunggah / mengunduh torrent tertentu, mereka mencoba untuk saling memberi tahu tentang semua rekan lain yang mereka kenal yang berpartisipasi dalam segerombolan torrent yang sama. Ini memungkinkan rekan sejawat mengenal satu sama lain dengan cepat, tanpa membuat pelacak atau DHT untuk permintaan konstan. Setelah Anda mengetahui beberapa rekan dari DHT, klien Anda akan dapat meminta informasi kepada teman-teman sebaya tersebut tentang lebih banyak teman dalam torrent torrent, sampai Anda memiliki semua teman sebaya yang Anda butuhkan.
Akhirnya, kita dapat meminta rekan-rekan ini untuk
info
metadata torrent , yang berisi nama file dan daftar hash. Setelah kami mengunduh informasi ini dan memverifikasi bahwa itu benar menggunakan yang diketahuiinfohash
, kami berada pada posisi yang sama dengan klien yang memulai dengan.torrent
file biasa dan mendapat daftar teman dari pelacak yang disertakan.Pengunduhan dapat dimulai.
1 Infohash biasanya dikodekan-hex, tetapi beberapa klien lama menggunakan basis 32 sebagai gantinya. v1 (
urn:btih:
) menggunakan digest SHA-1 secara langsung, sementara v2 (urn:bimh:
) menambahkan awalan multihash untuk mengidentifikasi algoritma hash dan panjang digest.2 Ada dua jaringan DHT primer: DHT "arus utama" yang lebih sederhana, dan protokol yang lebih rumit yang digunakan oleh Azureus.
3 Jarak diukur dengan XOR.
Bacaan lebih lanjut
sumber
dht.transmission.com
, hanyalah pelacak? Cara saya memahaminya adalah bahwa ia perlu melacak daftar rekan-rekan per info hash - yang persis apa pelacak lakukan.ws=
parameter menunjuk ke URL seed web BEP-19 dari data aktual, danxs=
parameter menunjuk ke URL dengan.torrent
file itu sendiri. Saya pikir ini agak tidak konsisten dengan kegunaan lain darimagnet:
skema, tapi begitulah. Saya lupa jika ada klien yang menggunakanas=
apa pun ... mungkin hanya sebagai cadangan untukxs=
, tetapi tidak didukung secara luas, IIRC.Penemuan rekan dan penemuan sumber daya (file dalam kasus Anda) adalah dua hal yang berbeda.
Saya lebih akrab dengan JXTA tetapi semua jaringan peer to peer bekerja dengan prinsip dasar yang sama.
Hal pertama yang perlu terjadi adalah penemuan teman sebaya.
Peer Discovery
Sebagian besar jaringan p2p adalah jaringan "seeded": ketika pertama kali memulai peer akan terhubung ke alamat yang terkenal (hard-coded) untuk mengambil daftar rekan yang berjalan. Ini bisa berupa penyemaian langsung seperti menyambung ke
dht.transmissionbt.com
seperti yang disebutkan dalam pos lain atau penyemaian tidak langsung seperti yang biasanya dilakukan dengan JXTA di mana rekan terhubung ke alamat yang hanya memberikan daftar teks biasa dari alamat jaringan rekan lain.Setelah koneksi dibuat dengan peer (beberapa) pertama, peer menghubungkan melakukan penemuan dari rekan-rekan lain (dengan mengirimkan permintaan) dan memelihara tabel mereka. Karena jumlah rekan lain bisa sangat besar, rekan yang menghubungkan hanya mempertahankan bagian dari Tabel Hash Terdistribusi (DHT) dari rekan-rekan. Algoritma untuk menentukan bagian mana dari tabel yang harus dipertahankan oleh rekan penghubung bervariasi tergantung pada Jaringan. BitTorrent menggunakan Kademlia dengan pengenal / kunci 160 bit.
Penemuan Sumber Daya
Setelah beberapa rekan telah ditemukan oleh rekan penghubung, yang terakhir mengirimkan beberapa permintaan untuk menemukan sumber daya kepada mereka. Tautan magnet mengidentifikasi sumber daya tersebut dan dibuat sedemikian rupa sehingga merupakan "tanda tangan" untuk sumber daya dan menjamin bahwa mereka mengidentifikasi secara unik konten yang diminta di antara semua rekan. Rekan penghubung kemudian akan mengirim permintaan penemuan untuk tautan / sumber daya magnet ke rekan-rekan di sekitarnya. DHT dibangun sedemikian rupa sehingga membantu menentukan rekan mana yang harus ditanyakan terlebih dahulu untuk sumber daya (baca di Kademlia di Wikipedia untuk informasi lebih lanjut). Jika rekan yang diminta tidak memiliki sumber daya yang diminta, biasanya akan "meneruskan" kueri ke rekan-rekan tambahan yang diambil dari DHT-nya sendiri.
Jumlah "hop" yang dapat ditanyakan oleh kueri biasanya terbatas; 4 adalah nomor biasa dengan jaringan jenis JXTA.
Ketika rekan memegang sumber daya, ia membalas dengan detail lengkapnya. Rekan penghubung kemudian dapat terhubung ke rekan yang memegang sumber daya (langsung atau melalui relay - saya tidak akan masuk ke detail di sini) dan mulai mengambilnya.
Sumber daya / Layanan dalam jaringan P2P tidak secara langsung dilampirkan ke alamat jaringan: mereka didistribusikan dan itulah keindahan dari jaringan yang sangat skalabel ini.
sumber
Saya sendiri penasaran dengan pertanyaan yang sama. Membaca kode untuk transmisi, saya menemukan yang berikut di
libtrnasmission/tr-dht.c
:Itu mencoba itu 6 kali, menunggu 40 (!) Detik di antara percobaan. Saya kira Anda dapat mengujinya dengan menghapus file konfigurasi (
~/.config/transmission
pada unix), dan memblokir semua komunikasidht.transmissionbt.com
, dan melihat apa yang terjadi (tunggu setidaknya 240 detik).Jadi tampaknya klien memiliki simpul bootstrap bawaan untuk memulai. Tentu saja, setelah masuk ke jaringan, tidak perlu lagi simpul bootstrap itu.
sumber
Saya akhirnya menemukan spesifikasi. Untuk pertama kalinya google tidak membantu . (wiki ditautkan ke bittorrent.com yang merupakan situs utama. Saya mengklik tautan pengembang, perhatikan tab bittorrent.org di sebelah kanan maka mudah dari sana. Sulit menemukan tautan ketika Anda tidak tahu labelnya dan berapa banyak klik saja).
Sepertinya semua torrents memiliki jaringan teman sebaya. Anda menemukan rekan-rekan dari pelacak dan Anda menjaga mereka di antara sesi. Jaringan memungkinkan Anda menemukan teman dan hal-hal lain. Saya belum pernah membaca bagaimana ini digunakan dengan tautan magnet tetapi sepertinya itu tidak ditentukan bagaimana klien baru menemukan teman sebaya. Mungkin beberapa dipanggang, atau mereka menggunakan server rumah mereka atau pelacak yang dikenal ditanamkan ke klien untuk mendapatkan rekan pertama dalam jaringan.
sumber
Ketika saya mulai menjawab pertanyaan Anda, saya tidak menyadari Anda bertanya bagaimana skema magnet itu bekerja. Hanya berpikir Anda ingin tahu bagaimana bagian-bagian yang relevan dengan protokol bittorrent dihasilkan.
Hash yang tercantum dalam magnet uri adalah info hash torrent yang disandikan di base32. Info hash adalah hash sha1 dari blok info yang ditandai dari torrent.
Kode python ini menunjukkan bagaimana cara menghitungnya.
Saya menulis implementasi C # (sangat naif) untuk menguji ini karena saya tidak memiliki bencoder dan cocok dengan apa yang diharapkan dari klien.
Seperti yang saya pahami, hash ini tidak termasuk informasi tentang cara menemukan pelacak, klien harus mencari tahu ini melalui cara lain (url yang diumumkan disediakan). Inilah yang membedakan satu torrent dari yang lainnya di pelacak.
Segala sesuatu yang terkait dengan protokol bittorrent masih berputar di sekitar pelacak. Itu masih merupakan sarana komunikasi utama di antara kerumunan. Skema magnet uri tidak dirancang khusus untuk digunakan oleh bittorrent. Ini digunakan oleh protokol P2P sebagai bentuk komunikasi alternatif. Klien Bittorrent diadaptasi untuk menerima tautan magnet sebagai cara lain untuk mengidentifikasi torrent dengan cara itu Anda tidak perlu mengunduh file .torrent lagi. Magnet uri masih perlu menentukan
tr
acker untuk menemukannya sehingga klien dapat berpartisipasi. Ini dapat berisi informasi tentang protokol lain tetapi tidak relevan dengan protokol bittorrent. Protokol bittorrent pada akhirnya tidak akan berfungsi tanpa pelacak.sumber
daftar rekan mungkin diisi dari torrent yang meningkatkan klien (misalnya ada torrent untuk utorrent yang memperbaruinya). selama semua orang menggunakan klien yang sama, itu harus baik karena Anda tidak punya pilihan selain berbagi peningkatan.
sumber