Bagaimana cara kerja tautan magnet BitTorrent?

157

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 ( btihdalam 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.

Barmar
sumber
3
Apakah ini bahkan relevan dengan pemrograman?
Krypton

Jawaban:

156

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:, announcemengidentifikasi pelacak yang akan digunakan untuk unduhan, dan info, berisi nama file dan hash untuk torrent. "Infohash" adalah hash dari infodata 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 infometadata torrent , yang berisi nama file dan daftar hash. Setelah kami mengunduh informasi ini dan memverifikasi bahwa itu benar menggunakan yang diketahui infohash, kami berada pada posisi yang sama dengan klien yang memulai dengan .torrentfile 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

Jeremy Banks
sumber
1
Apakah simpul bootstrap, misalnya dht.transmission.com, hanyalah pelacak? Cara saya memahaminya adalah bahwa ia perlu melacak daftar rekan-rekan per info hash - yang persis apa pelacak lakukan.
Kar
3
@ Kate Tidak persis begitu. Node DHT khusus menyimpan daftar rekan untuk beberapa torrent yang "dekat" di "ruang" jaringan DHT. Pelacak malah mencoba menyimpan daftar rekan untuk setiap torrent yang diketahuinya. Selain itu, node DHT bootstrap secara khusus tidak menyimpan daftar rekan untuk torrent apa pun . Sebaliknya, mereka hanya mendistribusikan daftar node DHT lainnya, untuk membantu Anda terhubung ke jaringan secara keseluruhan. Anda kemudian dapat menemukan simpul DHT khas dengan daftar rekan yang Anda minati.
Jeremy Banks
"Beberapa tautan magnet menyertakan pelacak atau seed web" - Saya agak bingung. Magnet digunakan untuk mengunduh file torrent seperti yang Anda gambarkan. Dari spesifikasi Magnet URI saya melihat "sumber yang dapat diterima" dan "pelacak" sebagai informasi yang dapat dikodekan dalam URI. Sekarang pelacak jelas spesifik Bittorrent dan kemungkinan besar akan digunakan selain pelacak yang tercantum dalam file torrent. Apakah "sumber yang dapat diterima" dimaksudkan untuk digunakan untuk mengunduh file torrent atau (salah satu) file aktual yang akan diunduh melalui file Torrent?
Frederick Nord
@FrederickNord Dalam mendukung klien torrent, ws=parameter menunjuk ke URL seed web BEP-19 dari data aktual, dan xs=parameter menunjuk ke URL dengan .torrentfile itu sendiri. Saya pikir ini agak tidak konsisten dengan kegunaan lain dari magnet:skema, tapi begitulah. Saya lupa jika ada klien yang menggunakan as=apa pun ... mungkin hanya sebagai cadangan untuk xs=, tetapi tidak didukung secara luas, IIRC.
Jeremy Banks
46

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

Bruno Grieder
sumber
Ini menurut saya adalah jawaban yang paling ringkas tanpa banyak jargon teknis. Terima kasih.
desaivv
26

Saya sendiri penasaran dengan pertanyaan yang sama. Membaca kode untuk transmisi, saya menemukan yang berikut di libtrnasmission/tr-dht.c:

3248:     bootstrap_from_name( "dht.transmissionbt.com", 6881,
                               bootstrap_af(session) );

Itu mencoba itu 6 kali, menunggu 40 (!) Detik di antara percobaan. Saya kira Anda dapat mengujinya dengan menghapus file konfigurasi ( ~/.config/transmissionpada unix), dan memblokir semua komunikasi dht.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.

yhager
sumber
9

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
Ah, saya kira saya benar tentang pergi ke DHT untuk mencari klien. "Jika tidak ada pelacak yang ditentukan, klien HARUS menggunakan DHT (BEP 0005 [3]) untuk mendapatkan teman sebaya."
Jeff Mercado
8

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.

static string CalculateInfoHash(string path)
{
    // assumes info block is last entry in dictionary
    var infokey = "e4:info";
    var offset = File.ReadAllText(path).IndexOf(infokey) + infokey.Length;
    byte[] fileHash = File.ReadAllBytes(path).Skip(offset).ToArray();
    byte[] bytes;
    using (SHA1 sha1 = SHA1.Create())
        bytes = sha1.ComputeHash(fileHash, 0, fileHash.Length - 1); // need to remove last 'e' to compensate for bencoding
    return String.Join("", bytes.Select(b => b.ToString("X2")));
}

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

Jeff Mercado
sumber
2
Ini tidak membantu. Tetapi apakah Anda mengatakan itu hash seluruh file torrent melewatkan blok infokey? Pertanyaan saya adalah bagaimana menemukan teman sebaya.
1
@ acidzombie24 Anda mungkin berpikir tentang pelacak terdistribusi yang menggunakan DHT untuk mencari teman sebaya. Ini tidak ada hubungannya dengan tautan magnet. ( en.wikipedia.org/wiki/… )
Alexander Sagen
2
@ Jeff J: Tapi apa yang 'mengirim' daftar teman-teman kembali. Tautan hanyalah tautan yang tidak ada pelacak yang terkait dengannya. Saya mencoba mencari tahu APA yang mengirim balik teman-teman.
1
+1. Tautan magnet yang dimaksud tidak menentukan tr (acker). Hanya dia yang membuatku bingung. Terutama ketika saya menggunakan instalasi baru tanpa torrents berjalan (dan tidak terhubung ke rekan-rekan) dan memiliki link magnet menemukan rekan-rekan. Keajaibannya, saya tidak tahu cara kerjanya. Pasti ada beberapa server rumah yang bisa meminta teman. Tetapi apakah itu berarti saya mengirim pertanyaan ke teman-teman yang mencari hash dan klien meneruskan pesan ke banyak teman sampai seseorang menjawab panggilan saya?
1
Saya tidak yakin bagaimana menjawabnya. Semua uris magnet yang pernah saya lihat selalu menentukan pelacak. Mungkin klien Anda yang mencoba daftar pelacak publik yang diketahui dan satu kebetulan memilikinya. Pelacak apa yang digunakan daftar torrent terkait? Bagaimana cara ditampilkan? Apakah ada hubungan antara pelacak yang terhubung dan sumber tautan magnet? Mungkin itu torrent yang menggunakan DHT? Apakah hal yang sama berlaku untuk torrent pribadi? Sekali lagi, saya tidak tahu bagaimana tepatnya DHT bekerja. Saya akan melihat apakah saya dapat menemukan informasi lebih lanjut.
Jeff Mercado
3

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.

Moe
sumber
Itu tempat yang sangat logis untuk mencari hash dan teman-teman lainnya. +1