बिटटोरेंट चुंबक लिंक कैसे काम करते हैं?


157

पहली बार मैंने चुंबक लिंक का उपयोग किया । यह कैसे काम करता है इसके बारे में उत्सुक, मैंने चश्मा देखा और कोई जवाब नहीं मिला। विकी का कहना है xtकि "सटीक विषय" का अर्थ है और प्रारूप के बाद ( btihइस मामले में) SHA1 हैश के साथ। मैंने बेस 32 का उल्लेख किया है, यह जानते हुए कि यह प्रति वर्ण 5 बिट्स और 32 वर्णों का है, मैंने पाया कि यह बिल्कुल 160 बिट्स है, जो वास्तव में SHA1 के आकार का है।

IP पते या किसी भी चीज के लिए कोई जगह नहीं है, यह सिर्फ SHA1 है। तो बिटटोरेंट क्लाइंट वास्तविक फ़ाइल को कैसे खोजता है? मैंने URL स्नूपर को यह देखने के लिए चालू किया कि क्या यह एक पृष्ठ पर जाता है (टीसीपी का उपयोग करके) या एक लुकअप या पसंद करता है, लेकिन कुछ भी नहीं हुआ। मुझे पता नहीं है कि ग्राहक कैसे सहकर्मी पाता है। यह कैसे काम करता है?

इसके अलावा, क्या हैश है? यह एक साथ सभी फ़ाइल हैश की एक सरणी का हैश है? शायद यह वास्तविक धार फ़ाइल की एक हैश (कुछ जानकारी अलग करना) है?


एक वीएम में, मैंने uTorrent (जो हौसले से स्थापित था) के साथ एक चुंबक लिंक की कोशिश की और यह साथियों को खोजने में कामयाब रहा। पहला पीर कहाँ से आया? यह ताजा था और कोई और धार नहीं थी।


3
क्या यह प्रोग्रामिंग के लिए भी प्रासंगिक है?
क्रिप्टन

जवाबों:


156

एक बिटटोरेंट चुंबक लिंक 1 एसएचए -1 का उपयोग करके एक धार को पहचानता है या "जानकारी" के रूप में जाना जाने वाला SHA-256 हैश मान को काट दिया जाता है। यह वही मूल्य है जो ट्रैकर्स या अन्य साथियों के साथ संवाद करते समय साथियों की पहचान करने के लिए साथियों (क्लाइंट) का उपयोग करता है। एक पारंपरिक .torrent फ़ाइल में दो शीर्ष-स्तरीय कुंजियों के साथ एक डेटा संरचना होती है: announceडाउनलोड के लिए उपयोग करने के लिए ट्रैकर (ओं) की पहचान, और infoटोरेंट के लिए फाइलनाम और हैश युक्त। "Infohash" एन्कोडेड infoडेटा का हैश है ।

कुछ चुंबक लिंक में ट्रैकर या वेब बीज शामिल होते हैं, लेकिन वे अक्सर नहीं होते हैं। अपने ग्राहक को इसके बारे में जानकारी के अलावा धार के बारे में कुछ नहीं पता हो सकता है। पहली चीज़ जो अन्य साथियों को मिल रही है, वह है जो टोरेंट को डाउनलोड कर रहे हैं। यह एक अलग सहकर्मी से सहकर्मी नेटवर्क 2 का उपयोग करके "वितरित हैश तालिका" (DHT) का उपयोग करता है। DHT एक बड़ा वितरित सूचकांक है जो साथियों (आईपी पते और बंदरगाहों द्वारा पहचाने जाने वाले) (सूचियों द्वारा पहचाने जाने वाले) पर टोरेंट को मैप करता है जो उस टोरेंट (डेटा या मेटाडेटा को अपलोड / डाउनलोड करने) के लिए एक झुंड में भाग ले रहे हैं।

पहली बार जब कोई ग्राहक DHT नेटवर्क से जुड़ता है, तो वह उसी स्थान से 160-बिट आईडी बनाता है जो इंफोशेस के समान है। यह तब DHT नेटवर्क के लिए अपने कनेक्शन को बूट करता है, जो क्लाइंट डेवलपर द्वारा नियंत्रित ग्राहकों के हार्ड-कोडित पतों या DHT-सपोर्टिंग क्लाइंट्स के पहले धार वाले झटके में उपयोग किया जाता है। जब यह किसी दिए गए टॉरेंट के लिए झुंड में भाग लेना चाहता है, तो यह कई अन्य ग्राहकों के लिए DHT नेटवर्क की खोज करता है, जिनकी ID जानकारी के लिए संभव के रूप में करीब 3 हैं । यह इन ग्राहकों को सूचित करता है कि यह झुंड में भाग लेना चाहते हैं, और उनसे किसी भी साथियों की कनेक्शन जानकारी के लिए पूछते हैं जो वे पहले से जानते हैं कि कौन झुंड में भाग ले रहे हैं।

जब सहकर्मी किसी विशेष टोरेंट को अपलोड / डाउनलोड कर रहे होते हैं, तो वे एक दूसरे को उन सभी साथियों के बारे में बताने की कोशिश करते हैं, जिनके बारे में उन्हें पता होता है कि वे एक ही धार के झुंड में भाग ले रहे हैं। इससे सहकर्मी एक दूसरे को जल्दी से जान पाते हैं, बिना किसी अनुरोध के किसी ट्रैकर या DHT के अधीन। एक बार जब आप DHT से कुछ साथियों के बारे में जान लेते हैं, तो आपका क्लाइंट उन साथियों से टोरेंट झुंड में अभी तक अधिक साथियों की कनेक्शन जानकारी के लिए पूछ सकेगा, जब तक कि आपको उन सभी साथियों की ज़रूरत न हो।

अंत में, हम इन साथियों को टोरेंट के infoमेटाडेटा के लिए पूछ सकते हैं , जिसमें फाइलनाम और हैश सूची शामिल हैं। एक बार जब हम इस जानकारी को डाउनलोड कर लेते हैं और सत्यापित करते हैं कि यह ज्ञात का उपयोग करके सही है infohash, तो हम व्यावहारिक रूप से एक क्लाइंट के रूप में उसी स्थिति में हैं जो एक नियमित .torrentफ़ाइल के साथ शुरू हुआ और इसमें शामिल ट्रैकर से साथियों की एक सूची मिली।

डाउनलोड शुरू हो सकता है।

1 इन्फोहाश आमतौर पर हेक्स-एनकोडेड होता है, लेकिन कुछ पुराने क्लाइंट इसके बजाय बेस 32 का इस्तेमाल करते हैं। v1 ( urn:btih:) सीधे SHA-1 डाइजेस्ट का उपयोग करता है, जबकि v2 ( urn:bimh:) हैश एल्गोरिथ्म की पहचान करने और लंबाई को पचाने के लिए एक मल्टीहैश उपसर्ग जोड़ता है ।
2 दो प्राथमिक DHT नेटवर्क हैं: सरल "मेनलाइन" DHT, और एक अधिक जटिल प्रोटोकॉल जिसका उपयोग Azureus द्वारा किया जाता है।
3 दूरी XOR द्वारा मापा जाता है।

आगे की पढाई


1
क्या बूटस्ट्रैप नोड, उदाहरण के लिए dht.transmission.com, बस एक ट्रैकर है? जिस तरह से मैं इसे समझता हूं वह यह है कि प्रति जानकारी हैश के साथियों की सूची पर नजर रखने की जरूरत है - जो कि एक ट्रैकर करता है।
कर

3
@ केट बिल्कुल नहीं। एक विशिष्ट DHT नोड कुछ टोरेंटों के लिए सहकर्मी सूचियों को संग्रहीत करता है जो "DHT नेटवर्क" स्पेस में "पास" हैं। इसके बजाय एक ट्रैकर प्रत्येक टोरेंट के लिए सहकर्मी सूचियों को संग्रहीत करने की कोशिश करता है, जिसके बारे में वह जानता है। इसके अलावा, बूटस्ट्रैप DHT नोड्स विशेष रूप से किसी भी टोरेंट के लिए सहकर्मी सूचियों को संग्रहीत नहीं करता है । इसके बजाय, वे केवल अन्य DHT नोड्स की सूची वितरित करते हैं, जो आपको समग्र नेटवर्क से कनेक्ट करने में मदद करते हैं। फिर आप जिस पीर की सूची में रुचि रखते हैं उसके साथ एक विशिष्ट DHT नोड पा सकते हैं।
जेरेमी बैंक्स

"कुछ चुंबक लिंक में ट्रैकर या वेब बीज शामिल हैं" - मैं थोड़ा भ्रमित हूं। आप वर्णन के रूप में धार फ़ाइल को डाउनलोड करने के लिए चुंबक का उपयोग किया जा रहा है । चुंबक URI युक्ति से मैं "स्वीकार्य स्रोत" और "ट्रैकर" को जानकारी के रूप में देखता हूं जिसे URI में एन्कोड किया जा सकता है। अब ट्रैकर स्पष्ट रूप से बिटोरेंट विशिष्ट है और इसका सबसे अधिक उपयोग टोरेंट फ़ाइल में सूचीबद्ध ट्रैकर्स के अलावा किया जाएगा। क्या "स्वीकार्य स्रोत" का उपयोग टोरेंट फाइल को डाउनलोड करने के लिए किया जाना है या (एक) टोरेंट फाइल के माध्यम से डाउनलोड की जाने वाली वास्तविक फाइलें हैं?
फ्रेडरिक नॉर्ड

@FrederickNord टोरेंट क्लाइंट्स को सपोर्ट ws=करने के लिए , पैरामीटर वास्तविक डेटा के BEP-19 वेब सीड URL की ओर इशारा करता है, और xs=पैरामीटर .torrentफाइल के साथ एक URL की ओर इशारा करता है। मुझे लगता है कि यह magnet:योजना के अन्य उपयोगों के साथ थोड़ा असंगत है , लेकिन यह है कि यह कैसा है। मैं भूल जाता हूं कि कोई भी ग्राहक किसी भी as=चीज के लिए उपयोग करता है ... शायद सिर्फ एक गिरावट के रूप में xs=, लेकिन व्यापक रूप से समर्थित नहीं, आईआईआरसी।
जेरेमी बैंक्स

46

सहकर्मी खोज और संसाधन खोज (आपके मामले की फाइलें) दो अलग-अलग चीजें हैं।

मैं JXTA से अधिक परिचित हूं लेकिन सभी सहकर्मी से सहकर्मी नेटवर्क समान मूल सिद्धांतों पर काम करते हैं।

पहली चीज़ जो होनी चाहिए वह है पीयर डिस्कवरी।

पीयर डिस्कवरी

अधिकांश पी 2 पी नेटवर्क "सीडेड" नेटवर्क होते हैं: जब पहली बार एक पीयर शुरू होता है, तो चल रहे साथियों की सूची को पुनः प्राप्त करने के लिए एक प्रसिद्ध (हार्ड-कोडेड) पते से कनेक्ट होगा। यह dht.transmissionbt.comएक अन्य पोस्ट में उल्लिखित की तरह प्रत्यक्ष सीडिंग हो सकता है या अप्रत्यक्ष रूप से सीडिंग जेएक्सटीए के साथ किया जा सकता है जहां सहकर्मी एक पते से जुड़ता है जो केवल अन्य पीयर नेटवर्क पते की एक सादे पाठ सूची को बचाता है।

एक बार जब कनेक्शन पहले (कुछ) पीयर (एस) के साथ स्थापित हो जाता है, तो कनेक्टिंग पीयर अन्य साथियों की खोज करता है (अनुरोध भेजकर) और उनमें से एक तालिका बनाए रखता है। चूंकि अन्य साथियों की संख्या बहुत बड़ी हो सकती है, इसलिए कनेक्टिंग पीयर केवल साथियों के डिस्ट्रीब्यूटेड हैश टेबल (डीएचटी) का हिस्सा बनाए रखता है। यह निर्धारित करने के लिए एल्गोरिथ्म कि कनेक्टिंग पीयर के किस हिस्से को नेटवर्क के आधार पर अलग-अलग बनाए रखना चाहिए। बिटटोरेंट 160 बिट आइडेंटिफ़ायर / कीज़ के साथ केमलिया का उपयोग करता है।

संसाधन खोज

कनेक्टिंग पीयर द्वारा कुछ साथियों की खोज की जाने के बाद, बाद वाले उन्हें संसाधनों की खोज के लिए कुछ अनुरोध भेजते हैं। चुंबक लिंक उन संसाधनों की पहचान करते हैं और इस तरह से बनाए जाते हैं कि वे एक संसाधन के लिए "हस्ताक्षर" हैं और गारंटी देते हैं कि वे सभी साथियों के बीच अनुरोधित सामग्री की विशिष्ट पहचान करते हैं। कनेक्टिंग पीयर तब चुंबक लिंक / संसाधन के लिए साथियों के लिए एक खोज अनुरोध भेजेगा। DHT इस तरह से बनाया गया है कि यह निर्धारित करने में मदद करता है कि कौन से साथियों को संसाधन के लिए पहले पूछा जाना चाहिए (अधिक के लिए विकिपीडिया में Kademlia पर पढ़ें)। यदि अनुरोध किया गया सहकर्मी अनुरोधित संसाधन को धारण नहीं करता है, तो यह आमतौर पर "पास" पर होगा जो अतिरिक्त साथियों के क्वेरी को अपने DHT से प्राप्त किया गया है।

"हॉप्स" की संख्या जिस पर पारित की जा सकती है वह आमतौर पर सीमित है; 4 JXTA प्रकार के नेटवर्क के साथ एक सामान्य संख्या है।

जब कोई सहकर्मी संसाधन रखता है, तो वह इसकी पूरी जानकारी देता है। कनेक्ट करने वाला सहकर्मी संसाधन को पकड़े हुए सहकर्मी से जुड़ सकता है (सीधे या किसी रिले के माध्यम से - मैं यहां विवरण में नहीं जाऊंगा) और इसे प्राप्त करना शुरू कर दूंगा।

पी 2 पी नेटवर्क में संसाधन / सेवाएं सीधे नेटवर्क के पते से जुड़ी नहीं हैं: वे वितरित किए जाते हैं और यही इन अत्यधिक स्केलेबल नेटवर्क की सुंदरता है।


मुझे लगता है कि बहुत सारे तकनीकी शब्दजाल के बिना सबसे रसीला जवाब है। धन्यवाद।
desaivv

26

मैं स्वयं उसी प्रश्न से उत्सुक था। ट्रांसमिशन के लिए कोड पढ़ना, मुझे निम्नलिखित में मिला libtrnasmission/tr-dht.c:

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

यह कोशिश करता है कि 6 बार, 40 (!) सेकंड का इंतज़ार करता है। मुझे लगता है कि आप इसे कॉन्फ़िगर फ़ाइलों को हटाने ( ~/.config/transmissionयूनिक्स पर), और सभी संचार को अवरुद्ध करके dht.transmissionbt.comदेख सकते हैं और देखें कि क्या होता है (कम से कम 240 सेकंड प्रतीक्षा करें)।

तो ऐसा प्रतीत होता है कि क्लाइंट के पास बूटस्ट्रैप नोड है जिसे शुरू करने के लिए बनाया गया है। बेशक, एक बार नेटवर्क में आने के बाद, उसे उस बूटस्ट्रैप नोड की आवश्यकता नहीं है।


9

मैं अंत में विनिर्देशन मिला। पहली बार google ने सहायता नहीं की । (wiki को bittorrent.com से जोड़ा गया जो कि मुख्य साइट है। मैंने डेवलपर्स लिंक पर क्लिक किया है, दाईं ओर bittorrent.org टैब को नोटिस किया है। यह वहां से आसान था। इसकी हार्ड फाइंडिंग लिंक जब आपको पता नहीं होता है कि वे क्या लेबल हैं और कई हैं दूर क्लिक करता है)।

ऐसा लगता है जैसे सभी टॉरेंट में साथियों का एक नेटवर्क है। आपको ट्रैकर्स से सहकर्मी मिलते हैं और आप उन्हें सत्रों के बीच रखते हैं। नेटवर्क आपको साथियों और अन्य चीजों को खोजने की अनुमति देता है। मैंने पढ़ा है कि कैसे चुंबक लिंक के साथ इसका उपयोग किया जाता है, लेकिन ऐसा लगता है कि यह अपरिभाषित है कि एक ताजा ग्राहक कैसे सहकर्मी पाता है। शायद कुछ में बेक किया गया है, या वे नेटवर्क में पहला पीयर प्राप्त करने के लिए अपने होम सर्वर या क्लाइंट में जाने वाले ट्रैकर्स का उपयोग करते हैं।


आह, मुझे लगता है कि मैं ग्राहकों को खोजने के लिए DHT में जाने के बारे में सही था। "यदि कोई ट्रैकर निर्दिष्ट नहीं किया जाता है, तो क्लाइंट को अधिग्रहित करने के लिए ग्राहक SHOULD DHT (BEP 0005 [3]) का उपयोग करता है।"
जेफ मर्काडो

8

जब मैंने आपके प्रश्न का उत्तर देना शुरू किया, तो मुझे महसूस नहीं हुआ कि आप पूछ रहे हैं कि चुंबक योजना कैसे काम करती है। बस आपने सोचा कि आप जानना चाहते हैं कि बिटोरेंट प्रोटोकॉल के लिए प्रासंगिक भाग कैसे उत्पन्न हुए।


चुंबक उड़ी में सूचीबद्ध हैश टोरेंट की जानकारी हैश बेस 32 में एन्कोडेड है। जानकारी हैश धार के bencoded जानकारी ब्लॉक के sha1 हैश है।

यह अजगर कोड दर्शाता है कि इसकी गणना कैसे की जा सकती है।

मैंने इसे लिखने के लिए (बहुत भोला) C # क्रियान्वयन किया क्योंकि मेरे पास हाथ पर बेनक्रोडर नहीं था और यह क्लाइंट से अपेक्षा की जाती है।

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")));
}

जैसा कि मैं इसे समझता हूं, इस हैश में ट्रैकर का पता लगाने के तरीके के बारे में कोई जानकारी शामिल नहीं है, ग्राहक को इसे अन्य माध्यमों (प्रदान की गई यूआरएल) के माध्यम से पता लगाना होगा। यह वही है जो ट्रैकर पर एक धार को दूसरे से अलग करता है।

बिटोरेंट प्रोटोकॉल से संबंधित सब कुछ अभी भी ट्रैकर के चारों ओर घूमता है। यह अभी भी झुंड के बीच संचार का प्राथमिक साधन है। चुंबक यूरी योजना को विशेष रूप से बिटोरेंट द्वारा उपयोग के लिए डिज़ाइन नहीं किया गया था। यह किसी भी पी 2 पी प्रोटोकॉल द्वारा संचार के वैकल्पिक रूप के रूप में उपयोग किया जाता है। बिटटोरेंट क्लाइंट ने टोरेंट को पहचानने के लिए एक और तरीका के रूप में चुंबक लिंक को स्वीकार करने के लिए अनुकूलित किया है जिस तरह से आपको .torrent फ़ाइलों को अब डाउनलोड करने की आवश्यकता नहीं है। चुंबक यूरी को अभी भी trएएसी निर्दिष्ट करने की आवश्यकता है ताकि यह पता लगाया जा सके कि ग्राहक भाग ले सकता है। इसमें अन्य प्रोटोकॉल के बारे में जानकारी हो सकती है लेकिन यह बिटोरेंट प्रोटोकॉल के लिए अप्रासंगिक है। बिटकॉइन प्रोटोकॉल अंततः ट्रैकर्स के बिना काम नहीं करेगा।


2
यह मदद नहीं करता है। लेकिन क्या आप कह रहे हैं कि इसने पूरी धार फ़ाइल को इनोकी ब्लॉक को छोड़ दिया है? मेरा सवाल यह था कि यह साथियों को कैसे पाता है।

1
@ acidzombie24 आप शायद वितरित ट्रैकर्स के बारे में सोच रहे हैं जो साथियों का पता लगाने के लिए DHT का उपयोग करता है। यह चुंबक लिंक के साथ कुछ नहीं करना है। ( en.wikipedia.org/wiki/… )
अलेक्जेंडर सेगेन

2
@ जेफ एम: लेकिन क्या 'वापस' साथियों की एक सूची भेजता है। एक लिंक सिर्फ एक लिंक है जिससे कोई ट्रैकर इससे जुड़ा नहीं है। मैं यह पता लगाने की कोशिश कर रहा था कि पीठ के साथी क्या भेजते हैं।

1
+1। इसके अलावा प्रश्न में चुंबक लिंक tr (acker) निर्दिष्ट नहीं करता है। केवल th sha1 जिसने मुझे भ्रमित किया। खासतौर पर तब, जब मैं ताज़े इंस्टाल का इस्तेमाल कर रहा हूं, जिसमें बिना टॉरेंट के चलने वाली (और किसी भी पीयर से कनेक्टेड) ​​नहीं है और चुंबक लिंक को पीयर ढूंढते हैं। इसका जादू, मुझे नहीं पता कि यह कैसे काम करता है। वहाँ कुछ घर सर्वर होना चाहिए यह साथियों के लिए पूछ सकते हैं। लेकिन क्या इसका मतलब है कि मैं हैश की तलाश करने वाले साथियों को प्रश्न भेजता हूं और ग्राहक कई साथियों को संदेश भेजता है जब तक कि कोई मेरी कॉल का जवाब न दे?

1
मुझे यकीन नहीं है कि इसका जवाब कैसे देना है। मैंने जो भी चुंबक यूरिस देखे हैं वे हमेशा ट्रैकर को निर्दिष्ट करते हैं। यह हो सकता है कि आपका क्लाइंट सार्वजनिक ट्रैकर्स की एक सूची की कोशिश करे, जिसके बारे में वह जानता है और एक ऐसा होता है। संबंधित ट्रैटर सूची का उपयोग करने वाले ट्रैकर्स क्या कहते हैं? इसे कैसे प्रदर्शित किया जाता है? क्या यह ट्रैकर और चुंबक लिंक के स्रोत के बीच कोई संबंध है? शायद यह एक धार है जो DHT का उपयोग करता है? क्या निजी टोरेंट के लिए भी यही काम है? फिर, मुझे नहीं पता कि DHT ठीक कैसे काम करता है। मैं देखूंगा कि क्या मुझे कोई और जानकारी मिल सकती है।
जेफ मर्काडो

3

साथियों की सूची संभवतः क्लाइंट को अपग्रेड करने वाली धार से पॉपुलेटेड होती है (जैसे कि यूटॉरेंट के लिए एक टोरेंट है जो इसे अपग्रेड करता है)। जब तक हर कोई समान क्लाइंट का उपयोग कर रहा है, तब तक यह अच्छा होना चाहिए क्योंकि आपके पास अपग्रेड साझा करने के अलावा कोई विकल्प नहीं है।


हैश और अन्य साथियों की खोज करने के लिए एक बहुत ही तार्किक जगह। +1
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.