सरल शब्दों में, कैसे एक बिटटोरेंट क्लाइंट शुरू में DHT का उपयोग कर साथियों की खोज करता है?


45

मैंने पहले ही इस SuperUser उत्तर और इस विकिपीडिया लेख को पढ़ा है, लेकिन मेरे लिए वास्तव में अपना सिर लपेटने के लिए दोनों बहुत तकनीकी हैं।

मैं एक ट्रैकर के विचार को समझता हूं: ग्राहक एक केंद्रीय सर्वर से जुड़ते हैं जो एक झुंड में साथियों की सूची रखता है।

मैं सहकर्मी विनिमय के विचार को भी समझता हूं: पहले से ही एक झुंड में ग्राहक अपने साथियों की पूरी सूची एक दूसरे को भेजते हैं। यदि नए साथियों की खोज की जाती है, तो उन्हें सूची में जोड़ा जाता है।

मेरा सवाल है, DHT कैसे काम करता है? यही है, एक नए ग्राहक किसी भी ट्रैकर के बिना एक झुंड में शामिल हो सकते हैं या साथियों के साथ आदान-प्रदान करने के लिए झुंड के कम से कम एक सदस्य का ज्ञान हो सकता है?

(नोट: सरल स्पष्टीकरण सर्वोत्तम हैं।)

जवाबों:


48

सारांश

एक नया ग्राहक किसी भी ट्रैकर के बिना एक झुंड में शामिल हो सकता है या साथियों के साथ विनिमय करने के लिए झुंड के कम से कम एक सदस्य का ज्ञान हो सकता है?

आप नहीं कर सकते। यह असंभव है।*

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


संदर्भ

बिटोरेंट डीएचटी को एक प्रोटोकॉल के माध्यम से लागू किया जाता है , जिसे किमेडीलिया के रूप में जाना जाता है , जो कि डिस्ट्रीब्यूटेड हैड टेबल की सैद्धांतिक अवधारणा का एक विशेष मामला है ।


प्रदर्शनी

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

मुझे लगता है कि आपका वास्तविक प्रश्न बोल्ड में है - कि किसी अन्य सदस्य को जाने बिना एक शिक्षाविद डीएचटी नेटवर्क से कैसे जुड़ना है - एक झूठी धारणा पर आधारित है।

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

असल में, DHT के रूप में ही शामिल होने तंत्र के रूप में विकेंद्रीकरण है, और क्योंकि शामिल होने तंत्र काफी भंगुर है (वहाँ पूरे इंटरनेट पर "प्रसारण" करने के लिए कोई रास्ता नहीं है! ताकि आपको यह यूनिकास्ट एक व्यक्ति पूर्व-असाइन की मेजबानी के लिए DHT पाने के लिए डेटा), Kademlia DHT वास्तव में विकेंद्रीकृत नहीं है । शब्द के सख्त अर्थों में नहीं।

इस परिदृश्य की कल्पना करें: कोई व्यक्ति जो पी 2 पी को रोकना चाहता है वह बाहर जाता है और सभी आमतौर पर इस्तेमाल किए जाने वाले स्थिर डीएचटी नोड्स पर हमला करता है जो बूटस्ट्रैपिंग के लिए उपयोग किए जाते हैं। एक बार जब वे अपने हमले का मंचन कर लेते हैं, तो वे इसे एक ही बार में सभी नोड्स पर वसंत कर देते हैं । धाम ; हर एक बूटस्ट्रैपिंग DHT नोड एक झपट्टा में सभी नीचे है। अब क्या? आप उन लोगों से पारंपरिक सूचियों को डाउनलोड करने के लिए केंद्रीकृत ट्रैकर्स से जुड़ने से चिपके हुए हैं। ठीक है, अगर वे ट्रैकर्स पर भी हमला करते हैं, तो आप वास्तव में, वास्तव में हैंएक बकवास दूसरे शब्दों में, Kademlia और संपूर्ण बीटी नेटवर्क इंटरनेट की सीमाओं से ही विवश है, इसमें कंप्यूटर का एक परिमित (और अपेक्षाकृत छोटा) नंबर होता है जिसे रोकने के लिए आपको सफलतापूर्वक हमला करना होगा या रोकना होगा>> 90% उपयोगकर्ताओं को नेटवर्क से कनेक्ट करने से।

एक बार जब "छद्म केंद्रीकृत" बूटस्ट्रैपिंग नोड्स चले गए हैं, तो DHT के आंतरिक नोड्स, जो बूटस्ट्रैपिंग नहीं कर रहे हैं, क्योंकि DHT के बाहर कोई भी आंतरिक नोड्स के बारे में नहीं जानता है , बेकार हैं; वे DHT में नए नोड नहीं ला सकते हैं। इसलिए, जैसा कि प्रत्येक आंतरिक नोड समय-समय पर DHT से डिस्कनेक्ट हो जाता है, या तो लोगों को अपने कंप्यूटर बंद करने, अपडेट के लिए रिबूट करने, आदि के कारण नेटवर्क ध्वस्त हो जाएगा।

बेशक, इस के आसपास पाने के लिए, कोई पहले से निर्धारित स्थिर DHT नोड्स या DNS पते की नई सूची के साथ एक पैच बिटटोरेंट क्लाइंट को तैनात कर सकता है, और इसके बजाय इस नई सूची का उपयोग करने के लिए P2P समुदाय को जोर-शोर से विज्ञापन दे सकता है। लेकिन यह एक "व्हेक-ए-मोल" स्थिति बन जाएगी, जहां हमलावर (नोड-ईटर) उत्तरोत्तर इन सूचियों को स्वयं डाउनलोड करेगा, और बहादुर नए बूटस्ट्रैपिंग नोड्स को लक्षित करेगा, फिर उन्हें ऑफ़लाइन भी ले जाएगा।


जिस तरह से आप DHT का वर्णन करते हैं, वह पीयर एक्सचेंज के समान लगता है।
सेलेरिटास

DHT के बारे में वितरित की जाने वाली बात यह है कि वास्तविक डेटा पेलोड - अर्थ, आईपी और बंदरगाहों की सूची जहां फाइलें डाउनलोड की जा सकती हैं - वितरित की जाती हैं। एक सहकर्मी एक्सचेंज में, पूरी सूची को एक कंप्यूटर पर संग्रहीत किया जाता है, आमतौर पर ट्रैकर, और डाउनलोड फ़ाइल के लिए असमान रूप से डाउनलोड नहीं किया जाता है। मैं अपने उत्तर में इसका उल्लेख कर सकता हूं, लेकिन यह संपूर्ण प्रश्न (और उत्तर) केवल DHT नेटवर्क की प्रारंभिक खोज या शामिल होने के बारे में है, न कि आपके शामिल होने के बाद क्या होता है।
allquixotic

1
सभी बूटस्ट्रैप नोड्स को हिट करने से नए उपयोगकर्ताओं को बूटस्ट्रैपिंग से रोक दिया जाएगा, लेकिन जरूरी नहीं कि मौजूदा उपयोगकर्ता ऑफ़लाइन हों और फिर वापस आएं। मुझे यह आभास है कि कई ग्राहक अपने सक्रिय नोड सेट को याद करते हैं और हर बार बूटस्ट्रैप करने के बजाय उन्हें फिर से कनेक्ट करने के लिए उपयोग करते हैं।
क्लॅक

Masscan ( github.com/robertdavidgraham/masscan ) जैसी परियोजनाओं के साथ एक केंद्रीकृत निर्देशिका के बिना DHT नोड्स की खोज संभव होना चाहिए
newlog

19

संक्षिप्त उत्तर: इसे .torrent फ़ाइल से प्राप्त किया जाता है।

जब BitTorrent क्लाइंट एक ट्रैकरलेस .torrent फ़ाइल (जब कोई व्यक्ति BitTorrent के माध्यम से कुछ नया साझा करने के लिए तैयार हो रहा है) उत्पन्न करता है, तो यह एक "नोड्स" कुंजी जोड़ता है (जैसे "की / वैल्यू पेयर" में, एक सेक्शन हेडर की तरह; नहीं एक क्रिप्टो कुंजी) .torrent फ़ाइल जिसमें K निकटतम DHT नोड्स है जो उस क्लाइंट के लिए जाना जाता है।

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

एक ट्रैकरलेस टोरेंट शब्दकोश में "घोषणा" कुंजी नहीं है। इसके बजाय, एक ट्रैकरलेस टोरेंट में एक "नोड" कुंजी होती है। इस कुंजी को क्लाइंट के राउटिंग टेबल के टोरेंट में K निकटतम नोड्स पर सेट किया जाना चाहिए। वैकल्पिक रूप से, कुंजी एक ज्ञात अच्छे नोड पर सेट की जा सकती है जैसे कि टोरेंट उत्पन्न करने वाले व्यक्ति द्वारा संचालित। कृपया स्वचालित रूप से "राउटर .bittorrent.com" को टोरेंट फाइलों में न जोड़ें या स्वचालित रूप से क्लाइंट रूटिंग टेबल में इस नोड को जोड़ें।

इसलिए जब आप अपने BitTorrent क्लाइंट को .torrent फ़ाइल को डाउनलोड करने के लिए चाहते हैं, जो एक ट्रैकरलेस टोरेंट को फीड करता है, तो वह अपने पहले कुछ DHT नोड्स को खोजने के लिए .torrent फ़ाइल से उस "नोड्स" की वैल्यू का उपयोग करता है।


3
यह अच्छी, व्याख्यात्मक जानकारी है। मुझे लगता है कि आपका उत्तर बताता है कि वर्तमान बिटटोरेंट क्लाइंट मेरे जवाब में पहचाने जाने वाली सैद्धांतिक सीमाओं और समस्याओं को संभालने के लिए क्या करते हैं। उम्मीद है कि हमारे दोनों उत्तर उत्कीर्ण हैं, क्योंकि वे उत्तर के विभिन्न पहलुओं की व्याख्या करते हैं।
allquixotic

3
यही कारण है कि कई ग्राहकों में "टोरेंट डाउनलोडिंग के साथ नई टोरेंट फाइल को मर्ज करना" एक मृत धार को जीवंत बनाता है?
जेसविन जोस

2
@aitchnyu हाँ, लेकिन धार फ़ाइल में अतिरिक्त / अलग ट्रैकर हो सकते हैं।
लॉन्गनेक

2
ऐसा प्रतीत होता है कि किसी भी बिटटोरेंट क्लाइंट में वास्तव में नोड्स की जानकारी शामिल नहीं है। ट्रांसमिशन, वुज़, डेल्यूज़, मेनलाइन और अन्य का परीक्षण किया है।
अन्नौंन

1

आप नहीं कर सकते! आपको झुंड में से कम से कम एक आईपी को जानना होगा, यह पी 2 पी नेटवर्क की कमजोरी है। आप पहले आईपी को खोजने के लिए नेत्रहीन प्रसारण कर सकते हैं, लेकिन एक बड़े नेटवर्क में, अगर हर कोई यह कर रहा है कि हमें भीड़ की समस्या होगी। आप कैश का उपयोग कर सकते हैं, लेकिन यह केवल बड़े स्वार्म्स (बड़े पीयर एड्रेस कैश) के लिए संभव है। आपको हमेशा पहले आईपी से पूछने के लिए एक ट्रैकर कनेक्ट करना होगा।

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

टॉरेंट-फ्रीक ने इस विषय पर एक पोस्ट लिखी


0

एक नया ग्राहक किसी भी ट्रैकर के बिना एक झुंड में शामिल हो सकता है या साथियों के साथ विनिमय करने के लिए झुंड के कम से कम एक सदस्य का ज्ञान हो सकता है?

यह इसके लिए पूछता है।

DHT का समर्थन करने वाले बिटटोरेंट क्लाइंट दो अलग-अलग सहकर्मी से सहकर्मी एप्लिकेशन चलाते हैं।

पहले वाला फ़ाइल-साझाकरण करता है: बिटटोरेंट लिंगो में एक झुंड एक बिटोरेंट ऑब्जेक्ट (जैसे फ़ाइल या निर्देशिका संरचना) साझा करने वाले साथियों का एक समूह है। प्रत्येक बिटोरेंट ऑब्जेक्ट में कुछ मेटाडेटा होता है जो एक .torrent-file में सेव होता है। (इसमें ऑब्जेक्ट का आकार, फ़ोल्डर का नाम, संभवतः ट्रैकर की जानकारी या नोड्स शामिल हैं। ect।) इस बिटटोरेंट ऑब्जेक्ट को डाउनलोड करने के लिए आवश्यक मेटाडेटा के हैश को इन्फोहाश कहा जाता है।

DHT मूल रूप से ट्रैकर्स को बदलने के लिए एक दूसरा पी 2 पी एप्लीकेशन है: यह (इन्फोहाश, झुंड) के जोड़े को स्टोर करता है और स्वॉर्म को अपडेट करता है यदि यह घोषणा संदेश प्राप्त करता है। एक नए क्लाइंट को DHT की जानकारी को बूटस्ट्रैप करने के लिए कुछ "नोड" (DHT के एक सहकर्मी के लिए बिटोरेंट लिंगो) का ज्ञान होना चाहिए। यहाँ @allquixotic द्वारा दिए गए तर्क लागू होते हैं। वर्तमान में MDHT में 7 मिलियन से अधिक सहकर्मी शामिल हैं, जो सेवा हमले के निरंतर इनकार की संभावना नहीं है।

यह तब एक Dshsh के संबंध में DHT को क्वेरी कर सकता है और उसे किसी ट्रैकर का उपयोग करने या किसी सहकर्मी को जानने की ज़रूरत नहीं है जो पहले झुंड का हिस्सा है। यदि वह साथियों में से एक से संपर्क करता है, तो वह मेटाडेटा साझा करने का समर्थन करता है, इसके लिए केवल जानकारी की जरूरत होती है, झुंड से .torrent-file को पुनः प्राप्त कर सकता है।


0

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

उदाहरण के लिए:

यहां बूटस्ट्रैप नोड्स की एक सूची दी गई है:

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

यहां वह जगह है जहां मुवक्किल की सूची को हाइड करने के लिए क्लाइंट उनसे जुड़ता है:

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

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

बिटकॉइन कोर वॉलेट उसी तरह काम करता है। यह आपको बूटस्ट्रैप बीज साथियों को बदलने देता है अगर किसी कारण से डिफ़ॉल्ट बंद हो जाता है।


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