Libtorrent
लिबटोरेंट बिटटोरेंट प्रोटोकॉल का एक ओपन-सोर्स कार्यान्वयन है। यह सी + + में लिखा गया है और इसका मुख्य पुस्तकालय इंटरफेस सी + + में है। इसकी सबसे उल्लेखनीय विशेषताएँ मेनलाइन डी. एच. टी., आई. पी. वी. 6, एच. टी. टी. पी. बीज और माइक्रोटोरेंट के सहकर्मी विनिमय के लिए समर्थन हैं। लिबटोरेंट बूस्ट का उपयोग करता है, विशेष रूप से Boost.Asio अपनी प्लेटफॉर्म स्वतंत्रता प्राप्त करने के लिए। यह विंडोज और अधिकांश यूनिक्स जैसे ऑपरेटिंग सिस्टम (ओएस एक्स, लिनक्स और कई बीएसडी) पर बनाने के लिए जाना जाता है। लिबटोरेंट को बिटटोरेंट एक्सटेंशन के साथ अद्यतित रखा जाता है जिसे डेवलपर्स सबसे उपयोगी मानते हैं, और सक्रिय रूप से वातावरण के एक व्यापक सेट में काम करने के लिए अनुकूलित किया जा रहा है। इसकी कई विशेषताओं को संकलन-समय पर अक्षम किया जा सकता है ताकि कोड को शामिल न किया जा सके जिसका उपयोग किसी विशेष उपयोग मामले में नहीं किया जाएगा। इसका उद्देश्य एम्बेडेड उपकरणों के साथ-साथ डेस्कटॉप और सीड-सर्वर के लिए सबसे उपयुक्त लिबटोरेंट कार्यान्वयन होना है। इसके कार्यान्वयन के कुछ विवरण विशेषता अनुभाग में वर्णित हैं। लिबटोरेंट के मूल लेखक अरविद नॉर्बर्ग हैं। यह माइक्रोटोरेंट के साथ मिलकर विस्तार प्रोटोकॉल का समर्थन करने वाला पहला ग्राहक है, जो अब एक आधार है जिस पर कई अन्य विस्तार निर्माण करते हैं। सुविधाएँ कार्यान्वित बी. ई. पी. बी. ई. पी. बिटटोरेंट संवर्धन प्रस्ताव प्रक्रिया का एक हिस्सा हैं। बी. ई. पी. एक डिज़ाइन दस्तावेज़ है जो बिटटोरेंट समुदाय को जानकारी प्रदान करता है, या बिटटोरेंट प्रोटोकॉल के लिए एक नई सुविधा का वर्णन करता है। बी. ई. पी. को सुविधा का एक संक्षिप्त तकनीकी विनिर्देश और सुविधा के लिए एक तर्क प्रदान करना चाहिए। उनका उद्देश्य नई सुविधाओं का प्रस्ताव करने, किसी मुद्दे पर सामुदायिक इनपुट एकत्र करने और बिटटोरेंट में गए डिजाइन निर्णयों का दस्तावेजीकरण करने के लिए प्राथमिक तंत्र बनना था। बी. ई. पी. लेखक समुदाय के भीतर सर्वसम्मति बनाने और असहमति वाले विचारों का दस्तावेजीकरण करने के लिए जिम्मेदार है। क्योंकि बी. ई. पी. को एक संस्करणित भंडार में पुनर्गठित पाठ फ़ाइलों के रूप में बनाए रखा जाता है, उनका संशोधन इतिहास सुविधा प्रस्ताव का ऐतिहासिक रिकॉर्ड है तीन प्रकार के बी. ई. पी. हैंः एक मानक ट्रैक बी. ई. पी. बिटटोरेंट प्रोटोकॉल में से एक के विस्तार या इन प्रोटोकॉल में अभिनेताओं में से एक के व्यवहार में परिवर्तन का वर्णन करता है, जहां अभिनेता वर्तमान में ग्राहक, ट्रैकर और वेब सर्वर हैं। एक सूचनात्मक बी. ई. पी. बिटटोरेंट डिजाइन मुद्दे का वर्णन करता है, या बिटटोरेंट समुदाय को सामान्य दिशानिर्देश या जानकारी प्रदान करता है, लेकिन एक विस्तार का प्रस्ताव नहीं करता है। सूचनात्मक बी. ई. पी. आवश्यक रूप से बिटटोरेंट समुदाय की सर्वसम्मति या सिफारिश का प्रतिनिधित्व नहीं करते हैं, इसलिए उपयोगकर्ता और कार्यान्वयनकर्ता सूचनात्मक बी. ई. पी. को अनदेखा करने या उनकी सलाह का पालन करने के लिए स्वतंत्र हैं। एक प्रक्रिया बी. ई. पी. बिटटोरेंट के आसपास की एक प्रक्रिया का वर्णन करता है या एक प्रक्रिया में (या एक घटना में) परिवर्तन का प्रस्ताव देता है। प्रोसेस बी. ई. पी. मानक ट्रैक बी. ई. पी. की तरह होते हैं लेकिन बिटटोरेंट प्रोटोकॉल के अलावा अन्य क्षेत्रों पर लागू होते हैं। वे अनुशंसाओं से अधिक हैं, और उपयोगकर्ता आमतौर पर उन्हें अनदेखा करने के लिए स्वतंत्र नहीं हैं। उदाहरणों में रिलीज अनुसूची, प्रक्रियाएं, दिशानिर्देश, निर्णय लेने की प्रक्रिया में परिवर्तन, और बिटटोरेंट विकास में उपयोग किए जाने वाले उपकरणों या वातावरण में परिवर्तन शामिल हैं। लिबटोरेंट को संशोधित किए बिना कस्टम बिटटोरेंट एक्सटेंशन को लागू करने के लिए विविध सुविधाओं की सूची प्लगइन इंटरफेस माइक्रोटोरेंट पीयर एक्सचेंज प्रोटोकॉल (पीईएक्स) का समर्थन करता है। स्थानीय सहकर्मी खोज का समर्थन करता है (एक ही स्थानीय नेटवर्क पर साथियों के लिए मल्टीकास्ट) ट्रैकर स्क्रैप एलटी _ ट्रैकर विस्तार का समर्थन करता है, साथियों के बीच ट्रैकर का आदान-प्रदान करने के लिए नो _ पीयर _ आईडी = 1 विस्तार का समर्थन करता है जो ट्रैकरों के भार को कम करेगा। कॉम्पैक्ट = 1 ट्रैकर पैरामीटर का समर्थन करता है। मर्केल हैश ट्री टॉरेंट के लिए समर्थन। यह टोरेंट फ़ाइलों के आकार को सामग्री के आकार के साथ अच्छी तरह से मापता है। एक अलग डिस्क आई/ओ धागे का उपयोग करता है ताकि डिस्क कभी भी नेटवर्क या क्लाइंट इंटरैक्शन को अवरुद्ध न करे। उन प्रणालियों पर 2 गीगाबाइट से बड़ी फ़ाइलों का समर्थन करता है जो इसका समर्थन करते हैं। फास्ट रेज़्यूमे सपोर्ट, रेज़्यूमे टॉरेंट की शुरुआत में महंगे पीस चेक से छुटकारा पाने का एक तरीका है। भंडारण स्थिति, पीस _ पिकर स्थिति के साथ-साथ सभी स्थानीय साथियों को एक अलग फास्ट-रेज़्यूमे फ़ाइल में सहेजता है। बेहतर डिस्क थ्रूपुट के लिए एक समायोज्य पढ़ने और लिखने योग्य डिस्क कैश है। फाइल जाँच के लिए सभी को समानांतर रूप से जाँचने के बजाय कतारें लग जाती हैं। जिस टॉरेंट में यह फिर से शुरू होता है, उसमें पीस ऑर्डर पर कोई आवश्यकता नहीं होती है। इसका मतलब है कि यह किसी भी ग्राहक द्वारा डाउनलोड किए गए टोरेंट को फिर से शुरू कर सकता है। यह विरल फ़ाइलों और कॉम्पैक्ट फ़ाइल आवंटन (जहां टुकड़ों को डिस्क पर समेकित किया जाता है) दोनों का समर्थन करता है, जहां डिस्क पर फ़ाइलों को पूरा माना जाता है, और प्रत्येक टुकड़े के हैश को पहली बार अनुरोध किए जाने पर सत्यापित किया जाता है। डाउनलोड दर के आधार पर अनुरोध कतार की लंबाई को समायोजित करता है। एक ही पोर्ट पर कई टोरेंट की सेवा करता है और एक ही थ्रेड में एच. टी. टी. पी. प्रॉक्सी का समर्थन करता है और बुनियादी प्रॉक्सी प्रमाणीकरण जीज़िप किए गए ट्रैकर का समर्थन करता है-प्रतिक्रियाएं अपलोड और डाउनलोड बैंडविड्थ उपयोग को सीमित कर सकती हैं और कनेक्शन की संख्या को सीमित करने के लिए अनचोक्ड साथियों की अधिकतम संख्या की संभावना हो सकती है। देरी में संदेश होते हैं यदि सहकर्मी के लिए कोई अन्य आउटगोइंग ट्रैफिक नहीं है, और उन साथियों को संदेश नहीं भेजता है जिनके पास पहले से ही टुकड़ा है। यह बैंडविड्थ बचाता है। चयनात्मक डाउनलोड करना। यह चुनने की क्षमता कि आप एक धार के किन भागों को डाउनलोड करना चाहते हैं। आई. पी. फिल्टर आई. पी. पतों और आई. पी. को अस्वीकार करने के लिए एन. ए. टी.-पी. एम. पी. और यू. पी. एन. पी. समर्थन (इसका समर्थन करने वाले राउटरों पर स्वचालित पोर्ट मैपिंग) को जोड़ने और जोड़ने से लेकर आई. पी. रेंज आई. 2. पी. अनामता नेटवर्क के माध्यम से प्रॉक्सी टोरेंट ट्रैफिक कर सकते हैं। डिस्क कैचिंग लिबटोरेंट में सभी डिस्क I/O को डिस्क io थ्रेड द्वारा नेटवर्क थ्रेड के साथ अतुल्यकालिक रूप से किया जाता है। जब एक ब्लॉक पढ़ा जाता है, तो डिस्क io थ्रेड उस टुकड़े से बाद के सभी ब्लॉकों को रीड कैश में पढ़ता है, यह मानते हुए कि ब्लॉक का अनुरोध करने वाला सहकर्मी भी उसी टुकड़े से अधिक ब्लॉक का अनुरोध करेगा। इससे डेटा पढ़ने के लिए सिसकॉल की संख्या कम हो जाती है। यह मांग में देरी को भी कम करता है। इसी तरह, लेखन अनुरोधों के लिए, ब्लॉक को कैश किया जाता है और एक बार एक पूरा टुकड़ा पूरा हो जाने के बाद डिस्क पर फ्लश किया जाता है या जब अधिक कैश स्थान की आवश्यकता होती है तो टुकड़ा सबसे कम हाल ही में अपडेट किया गया होता है। कैश गतिशील रूप से लिखने और पढ़ने वाले कैश के बीच जगह आवंटित करता है। रीड कैश पर राइट कैश को सख्ती से प्राथमिकता दी जाती है। कैश ब्लॉक जो उपयोग में हैं, उन्हें भौतिक स्मृति में बंद कर दिया जाता है ताकि इसे डिस्क में पृष्ठित न किया जा सके। डिस्क कैश को डिस्क में पेज आउट करने की अनुमति देने का मतलब है कि इसे फ्लश करना बेहद अक्षम हो जाएगा, क्योंकि इसे केवल डिस्क पर फिर से फ्लश करने के लिए भौतिक मेमोरी में वापस पढ़ना होगा। मेमोरी और सिस्टम कॉल को संरक्षित करने के लिए, आईओवीईसी फ़ाइल संचालन का उपयोग एक ही कॉल में कई कैश ब्लॉकों को फ्लश करने के लिए किया जाता है। लो-मेमोरी सिस्टम पर, मेमोरी को बचाने के लिए डिस्क कैश को पूरी तरह से अक्षम किया जा सकता है या एक छोटी सीमा पर सेट किया जा सकता है। नेटवर्क बफर छोटे एल2 कैश वाले सीपीयू पर, स्मृति की प्रतिलिपि बनाना महँगा संचालन हो सकता है। ऐसी मशीनों पर कम से कम नकल करते रहना महत्वपूर्ण है। यह ज्यादातर एम्बेडेड सिस्टम पर लागू होता है। प्राप्त डेटा की नकल की संख्या को कम करने के लिए, पेलोड डेटा के लिए प्राप्त बफर को सीधे पृष्ठ-संरेखित डिस्क बफर में प्राप्त किया जाता है। यदि कनेक्शन एन्क्रिप्टेड है, तो बफर को जगह-जगह डिक्रिप्ट किया जाता है। इसके बाद बफर को बिना नकल किए डिस्क कैश में स्थानांतरित कर दिया जाता है। एक बार जब किसी टुकड़े के लिए सभी ब्लॉक प्राप्त हो जाते हैं, या कैश को फ्लश करने की आवश्यकता होती है, तो सभी ब्लॉकों को एक ही सिसकॉल में फ्लश करने के लिए सीधे रिटेव () को पारित किया जाता है। इसका मतलब है कि यूजरस्पेस मेमोरी में एक एकल प्रति और कर्नेल मेमोरी में एक एकल प्रति वापस। सामान्य रूप से सीडिंग और अपलोड करते समय, संरेखित बफ़र्स में ब्लॉकों को कैशिंग करके अनावश्यक प्रतिलिपि बनाने से बचा जाता है, जिन्हें एक बार सहकर्मी के सेंड बफ़र में कॉपी किया जाता है। पीयर का सेंड बफर संरेखित होने की गारंटी नहीं है, भले ही यह ज्यादातर समय होता है। सेंड बफर को फिर पीयर विशिष्ट कुंजी के साथ एन्क्रिप्ट किया जाता है और भेजने के लिए आईओवीईसी पर जंजीर से बांध दिया जाता है। इसका मतलब है कि असंबद्ध सहकर्मी अनुरोधों और सहकर्मी-विशिष्ट कूटलेखन की अनुमति देने के लिए एक उपयोगकर्ता स्थान प्रतिलिपि है। पीस पिकर एक बिटटोरेंट कार्यान्वयन में एक केंद्रीय घटक है। लिबटोरेंट में पीस पिकर को दुर्लभतम टुकड़ों को जल्दी से खोजने के लिए अनुकूलित किया गया है। यह दुर्लभता के आधार पर क्रमबद्ध किए गए सभी उपलब्ध टुकड़ों की एक सूची रखता है, और समान दुर्लभता वाले टुकड़ों में फेरबदल करता है। सबसे दुर्लभ पहला मोड प्रमुख पीस पिकर मोड है। अन्य मोड भी समर्थित हैं और विशिष्ट स्थितियों में साथियों द्वारा उपयोग किए जाते हैं। टुकड़ा चुनने वाला प्राथमिकता के साथ एक टुकड़े की उपलब्धता को संयोजित करने की अनुमति देता है। एक साथ वे टुकड़े की सूची के क्रम को निर्धारित करते हैं। प्राथमिकता 0 वाले टुकड़ों को कभी नहीं चुना जाएगा, जिसका उपयोग चयनात्मक डाउनलोड सुविधा के लिए किया जाता है। जितना संभव हो सके कम से कम आंशिक रूप से तैयार किए गए टुकड़े रखने के लिए, साथियों का उसी गति श्रेणी में अन्य साथियों के समान टुकड़ों से ब्लॉक चुनने के प्रति लगाव होता है। गति श्रेणी उनके डाउनलोड दर के आधार पर साथियों का एक मोटा वर्गीकरण है। यह धीमे साथियों को एक ही टुकड़े से ब्लॉक चुनने के लिए मजबूर करता है, और तेज साथियों को एक ही टुकड़े से चुनता है, और इसलिए धीमे साथियों के टुकड़ों के पूरा होने में बाधा डालने की संभावना कम हो जाती है। पीस पिकर को क्रमिक क्रम में पीस डाउनलोड करने के लिए भी सेट किया जा सकता है। मर्केल हैश ट्री टॉरेंट यह बिटटोरेंट प्रोटोकॉल का बीईपी30 है। मर्केल हैश ट्री टॉरेंट एक विस्तार है जो एक टॉरेंट फ़ाइल को केवल हैश ट्री का रूट हैश रखने देता है जो पीस हैश बनाता है। इस सुविधा का मुख्य लाभ यह है कि इस बात की परवाह किए बिना कि एक टोरेंट में कितने टुकड़े हैं,. टोरेंट फ़ाइल हमेशा एक ही आकार की होगी। यह केवल फाइलों की संख्या के साथ बढ़ेगा (क्योंकि इसमें अभी भी फाइल के नाम होने चाहिए)। नियमित टोरेंट के साथ, ग्राहकों को टुकड़ों के लिए कई ब्लॉकों का अनुरोध करना पड़ता है, आमतौर पर अलग-अलग साथियों से, इससे पहले कि डेटा को पीस हैश के खिलाफ सत्यापित किया जा सके। टुकड़े जितने बड़े होंगे, एक पूरे टुकड़े को डाउनलोड करने और इसे सत्यापित करने में उतना ही अधिक समय लगेगा। टुकड़े के सत्यापित होने से पहले, इसे झुंड के साथ साझा नहीं किया जा सकता है, जिसका अर्थ है कि बड़े टुकड़े का आकार, साथियों द्वारा डाउनलोड किए जाने पर धीमा टर्नअराउंड डेटा होता है। चूंकि औसतन डेटा को सत्यापित होने से पहले क्लाइंट बफ़र्स में बैठना पड़ता है, प्रतीक्षा करनी पड़ती है और इसे फिर से अपलोड किया जा सकता है। बड़े टुकड़े के आकार के साथ एक और समस्या यह है कि एक ग्राहक के लिए दुर्भावनापूर्ण या बग्गी सहकर्मी को इंगित करना कठिन होता है जब एक टुकड़ा विफल हो जाता है, और इसे फिर से डाउनलोड करने में अधिक समय लगेगा और टुकड़े के सफल होने से पहले अधिक प्रयास करने लगेंगे। नियमित टॉरेंट में टुकड़े का आकार. टॉरेंट फ़ाइल के आकार और टुकड़े के आकार के बीच एक समझौता है। अक्सर, 4 जीबी की फ़ाइलों के लिए, टुकड़े का आकार 2 या 4 एमबी होता है, बस. टोरेंट फ़ाइल को बहुत बड़ा बनाने से बचने के लिए। मर्केल टॉरेंट. टॉरेंट साइज और पीस साइज के बीच के अंतर को हटाकर इन समस्याओं को हल करता है। मर्कल टॉरेंट के साथ, टुकड़े का आकार न्यूनतम ब्लॉक आकार (16 KB) हो सकता है, जो साथियों को साथियों से प्राप्त डेटा के प्रत्येक ब्लॉक को तुरंत सत्यापित करने देता है। यह एक न्यूनतम परिवर्तन समय देता है और दुर्भावनापूर्ण साथियों की पहचान करने की समस्या को पूरी तरह से दूर करता है। अनुप्रयोग कुछ उल्लेखनीय अनुप्रयोग जो लिबटोरेंट का उपयोग करते हैंः डिलिज, क्रॉस-प्लेटफ़ॉर्म बिटटोरेंट क्लाइंट इलेक्ट्रिक शीप स्क्रीन सेवर, स्क्रीनसेवर फ्री डाउनलोड मैनेजर के लिए बिटटोरेंट क्लाइंट, विंडोज ओपन सोर्स डाउनलोड मैनेजर लाइमवायर, मल्टी-प्लेटफ़ॉर्म फ़ाइल शेयरिंग क्लाइंट मिरो, एक क्रॉस-प्लेटफ़ॉर्म इंटरनेट टेलीविज़न एप्लिकेशन क्यूबिटोरेंट, सी + +/क्यूटी बिटटोरेंट क्लाइंट ट्रिबलर, विकेंद्रीकृत अनाम पीयर-टू-पीयर बिटटोरेंट क्लाइंट रून्स ऑफ़ मैजिक, एक एम. एम. ओ. आर. पी. जी जिसका एफ. ओ. जी. डाउनलोडर गेम क्लाइंट वर्ल्ड ऑफ़ टैंक्स को अपडेट करने के लिए लिबटोरेंट का उपयोग करता है, एक एम. एम. ओ. आर. पी. जी. जिसका लॉन्चर गेम क्लाइंट को अपडेट करने के लिए लिबटोरेंट का उपयोग करता है तुलना भी देखें