कैसे एक बिटटोरेंट क्लाइंट शुरू में अपने साथियों की खोज करता है?
जब आपका टोरेंट क्लाइंट फ़ाइल के टुकड़ों को साझा करने और इकट्ठा करने के लिए झुंड में शामिल होता है, तो वास्तव में यह कैसे पता चलता है कि उसके सभी साथी कहाँ हैं? बिटटोरेंट प्रोटोकॉल से गुजरने वाले तंत्रों के अंदर हम प्रहार करते हैं.
आज का प्रश्न और उत्तर सत्र सुपरयूज़र के सौजन्य से आता है-स्टैक एक्सचेंज का एक उपखंड, क्यू एंड ए वेब साइटों का एक समुदाय-संचालित समूह है।.
प्रश्न
सुपरयूजर रीडर स्टीव वी। बिटटोरेंट के भीतर डिस्ट्रीब्यूटेड हैश टेबल (DHT) सिस्टम के बारे में एक बहुत ही विशिष्ट प्रश्न था:
मैंने पहले ही इस SuperUser उत्तर और इस विकिपीडिया लेख को पढ़ा है, लेकिन मेरे लिए वास्तव में अपना सिर लपेटने के लिए दोनों बहुत तकनीकी हैं.
मैं एक ट्रैकर के विचार को समझता हूं: क्लाइंट एक केंद्रीय सर्वर से जुड़ते हैं जो एक झुंड में साथियों की सूची रखता है.
मैं सहकर्मी विनिमय के विचार को भी समझता हूं: पहले से ही एक झुंड में ग्राहक अपने साथियों की पूरी सूची एक दूसरे को भेजते हैं। यदि नए साथियों की खोज की जाती है, तो उन्हें सूची में जोड़ा जाता है.
मेरा सवाल है, DHT कैसे काम करता है? अर्थात्, कोई भी ग्राहक बिना किसी ट्रैकर या झुंड के कम से कम एक सदस्य के ज्ञान के साथ एक झुंड में कैसे शामिल हो सकता है?
(नोट: सरल स्पष्टीकरण सर्वोत्तम हैं।)
बदले में उनके प्रश्न ने बिटटोरेंट प्रणाली के विभिन्न कार्यों के बारे में वास्तव में विस्तृत उत्तर दिया; आइए अब इस पर एक नज़र डालते हैं.
उत्तर
सुपरयूजर योगदानकर्ता Allquixotic एक गहराई से स्पष्टीकरण में प्रदान करता है:
एक ट्रैकर के बिना एक नया ग्राहक कैसे झुंड में शामिल हो सकता है या साथियों के साथ विनिमय करने के लिए झुंड के कम से कम एक सदस्य का ज्ञान हो सकता है?
आप नहीं कर सकते। यह असंभव है।*
* (जब तक आपके ऊपर एक नोड न हो स्थानीय क्षेत्र अंतरजाल DHT में पहले से ही नोड हो सकता है। इस मामले में, आप एक प्रसारण तंत्र का उपयोग कर सकते हैं, जैसे अवही, इस सहकर्मी को "खोजने" और उनसे बूटस्ट्रैप करने के लिए। लेकिन कैसे किया? वे खुद को बूटस्ट्रैप? आखिरकार, आप एक ऐसी स्थिति से टकराएँगे जहाँ आपको सार्वजनिक इंटरनेट से जुड़ने की आवश्यकता है। और सार्वजनिक इंटरनेट यूनिकस्ट-केवल, मल्टीकास्ट नहीं है, इसलिए आप साथियों की पूर्व-निर्धारित सूचियों का उपयोग करने के साथ फंस गए हैं।)
संदर्भ
बिटोरेंट डीएचटी को एक प्रोटोकॉल के माध्यम से कार्यान्वित किया जाता है, जिसे किडेलिया के रूप में जाना जाता है, जो डिस्ट्रीब्यूटरी हैश टेबल की सैद्धांतिक अवधारणा का एक विशेष मामला है.
प्रदर्शनी
Kademlia प्रोटोकॉल के साथ, जब आप नेटवर्क में शामिल होते हैं, तो आप एक बूटस्ट्रैपिंग प्रक्रिया से गुजरते हैं, जिसके लिए पूरी तरह से आपको पता होना चाहिए, अग्रिम रूप से, DHT नेटवर्क में पहले से ही भाग ले रहे आईपी एड्रेस और कम से कम एक नोड का पोर्ट। उदाहरण के लिए, आप जिस ट्रैकर से कनेक्ट होते हैं, वह स्वयं एक DHT नोड हो सकता है। एक बार जब आप एक DHT नोड से कनेक्ट होते हैं, तो आप DHT से जानकारी डाउनलोड करने के लिए आगे बढ़ते हैं, जो आपको अधिक नोड्स के लिए कनेक्टिविटी जानकारी प्रदान करता है, और फिर आप अधिक से अधिक नोड्स के लिए कनेक्शन प्राप्त करने के लिए "ग्राफ़" संरचना को नेविगेट करते हैं, जो दोनों प्रदान कर सकते हैं अन्य नोड्स के लिए कनेक्टिविटी, और पेलोड डेटा (डाउनलोड का हिस्सा).
मुझे लगता है कि आपका वास्तविक प्रश्न बोल्ड में है - कि बिना जाने Kademlia DHT नेटवर्क से कैसे जुड़ना है कोई भीअन्य सदस्य - एक गलत धारणा पर आधारित है.
आपके प्रश्न का सरल उत्तर बोल्ड में है, तुम नहीं. यदि आपको एक भी होस्ट के बारे में कोई जानकारी नहीं है, जिसमें DHT मेटाडाटा भी हो सकता है, तो आप फंस गए हैं - आप भी शुरू नहीं कर सकते। मेरा मतलब है, निश्चित रूप से, आप सार्वजनिक इंटरनेट पर एक आईपी पोर्ट को खोजने के लिए बल का प्रयास कर सकते हैं जो एक खुले पोर्ट के साथ होता है जो डीएचटी जानकारी प्रसारित करता है। लेकिन अधिक संभावना है, आपका बीटी क्लाइंट कुछ विशिष्ट स्थिर आईपी या डीएनएस के लिए हार्ड-कोडेड है जो एक स्थिर डीएचटी नोड का समाधान करता है, जो सिर्फ डीएचटी मेटाडेटा प्रदान करता है.
मूल रूप से, DHT केवल शामिल होने वाले तंत्र के रूप में विकेंद्रीकृत है, और क्योंकि जुड़ने का तंत्र काफी भंगुर है (पूरे इंटरनेट पर "प्रसारण" करने का कोई तरीका नहीं है! इसलिए आपके पास है) यूनिकास्टDHT डेटा प्राप्त करने के लिए एक व्यक्तिगत पूर्व-निर्धारित होस्ट), Kademlia DHT नहीं है वास्तव में विकेन्द्रीकृत। शब्द के सख्त अर्थ में नहीं.
इस परिदृश्य की कल्पना करें: कोई व्यक्ति जो पी 2 पी को रोकना चाहता है, वह बाहर चला जाता है और एक हमले की तैयारी करता है सब आमतौर पर स्थिर DHT नोड्स का उपयोग किया जाता है जो बूटस्ट्रैपिंग के लिए उपयोग किए जाते हैं। एक बार जब वे अपने हमले का मंचन कर लेते हैं, तो वे उस पर पानी फेर देते हैं सब एक ही बार में सभी नोड्स. वैम; हर एक बूटस्ट्रैपिंग DHT नोड एक झपट्टा में सभी नीचे है। अब क्या? आप से कनेक्ट करने के लिए फंस गए हैं केंद्रीकृत ट्रैकर्स उन लोगों से साथियों की पारंपरिक सूची डाउनलोड करने के लिए। ठीक है, अगर वे ट्रैकर्स पर भी हमला करते हैं, तो आप वास्तव में हैं, वास्तव में एक बकवास दूसरे शब्दों में, Kademlia और संपूर्ण बीटी नेटवर्क खुद इंटरनेट की सीमाओं से विवश है, इसमें कंप्यूटर का एक परिमित (और अपेक्षाकृत छोटा) नंबर होता है जिसे रोकने के लिए आपको सफलतापूर्वक हमला करना या ऑफलाइन लेना होगा> 90% उपयोगकर्ताओं को नेटवर्क से कनेक्ट करने से.
एक बार "छद्म केंद्रीकृत" बूटस्ट्रैपिंग नोड्स चले गए हैं, DHT के आंतरिक नोड्स, जो बूटस्ट्रैपिंग नहीं हैं क्योंकि DHT के बाहर कोई भी आंतरिक नोड्स के बारे में नहीं जानता है, बेकार हैं; वे DHT में नए नोड नहीं ला सकते हैं। इसलिए, जैसा कि प्रत्येक आंतरिक नोड समय-समय पर DHT से डिस्कनेक्ट होता है, या तो लोग अपने कंप्यूटर को बंद करने के कारण, अपडेट के लिए रिबूट करना, आदि, नेटवर्क ध्वस्त हो जाएगा।.
बेशक, इस के आसपास पाने के लिए, कोई पहले से निर्धारित स्थिर DHT नोड्स या DNS पतों की एक नई सूची के साथ एक पैच किए गए बिटटोरेंट क्लाइंट को तैनात कर सकता है, और इस नई सूची का उपयोग करने के लिए जोर से P2P समुदाय को विज्ञापन दे सकता है। लेकिन यह एक "व्हेक-ए-मोल" स्थिति बन जाएगी, जहां हमलावर (नोड-ईटर) उत्तरोत्तर इन सूचियों को स्वयं डाउनलोड करेगा, और बहादुर नए बूटस्ट्रैपिंग नोड्स को लक्षित करेगा, फिर उन्हें ऑफ़लाइन ले जाएगा, भी.
न केवल हमने मूल प्रश्न का उत्तर सीखा बल्कि हमने बिटटोरेंट सिस्टम की प्रकृति और उसकी कमजोरियों के बारे में भी काफी कुछ सीखा.
स्पष्टीकरण में कुछ जोड़ना है? टिप्पणियों में ध्वनि बंद। अन्य टेक-सेवी स्टैक एक्सचेंज उपयोगकर्ताओं से अधिक उत्तर पढ़ना चाहते हैं? पूरी चर्चा धागा यहाँ देखें.