•  अनतोरेह-प्रकाश

टीसीस्प्लिटर

कई टीसीपी कनेक्शनों में टीसीपी या यूडीपी कनेक्शन को विभाजित करने के लिए एक सुरंग

लक्ष्य

आप कब एक टीसीपी कनेक्शन को कई में विभाजित करना चाहेंगे? आमतौर पर आप a . का उपयोग करते हैं सुरंग प्राप्त करने के लिए ठीक विपरीत . मेरा उपयोग मामला मोबाइल नेटवर्क में बैंडविड्थ सीमाओं को दरकिनार कर रहा था, इसलिए सिम कार्ड के साथ परीक्षण किए गए थे, इसकी योजना पर कोई और डेटा नहीं बचा था[1].

यह कैसे काम करता है

NS सुरंग में लिखा गया था गोलंग चूंकि यह काफी तेज है, और आमतौर पर नेटवर्क टूलिंग के लिए उपयोग किया जाता है। चूंकि मैंने विभिन्न तरीकों का परीक्षण किया था, इसलिए अधिकांश विकल्पों पर फिर से काम किया गया था, क्योंकि क्ली मुश्किल से प्रयोग करने योग्य है।

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

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

पैकेट तब सर्वर को भेजे जाते हैं, जिन्हें उन्हें सही क्रम में फिर से बनाना होता है, क्योंकि विभिन्न टीसीपी कनेक्शन किसी भी समय डेटा स्ट्रीम को समाप्त कर सकते हैं (भेजे गए आदेश का सम्मान नहीं किया जाता है, क्योंकि रूटिंग ), और फिर प्राप्त करने वाले ऐप को अग्रेषित कर दिया गया।

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

यह क्यों काम करता है

यहां इरादा यह नियंत्रित करना है कि प्रत्येक कनेक्शन को कितना डेटा संभालना चाहिए। हमारे उद्देश्यों के लिए, यह कभी भी परे नहीं था आमतौर पर था एमटीयू खिड़की का आकार। आप एमटीयू को डेटा के एक टुकड़े की ऊपरी सीमा के रूप में सोच सकते हैं जो पूरे नेटवर्क से गुजरता है, और यह हमारा लक्ष्य था क्योंकि हम एक गेटेड नेटवर्क की बैंडविड्थ दर सीमा को बायपास करना चाहते थे। क्लाइंट कितना डेटा पास कर सकता है, इसे सीमित करने के लिए, आपको करने की आवश्यकता है गिनती यह सही? यदि आपका तर्क a . जैसी किसी चीज़ के साथ काम करता हैdo-while

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

विभिन्न बंदरगाहों पर परीक्षण से यह भी पता चला कि यह केवल खत्म हो सकता है कुछ बंदरगाहों, और यह कि बंदरगाहों के बीच सीमा लगातार भिन्न थी443 ऊंची खिड़कियों में से एक देना, आसपास20kb , अनुमान लगाना क्योंकिTLS हैंडशेक के लिए अधिक डेटा की आवश्यकता होती है, और ये दर-सीमा दिन के समय के आधार पर बदल जाएगी[2].

परिणाम

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

यह पता चला कि यह केवल एक दर-सीमा थी कि एक क्लाइंट नेटवर्क पर कितने टीसीपी कनेक्शन भेज सकता है, इसलिए सिर्फ एक डॉस सुरक्षा जिसके बारे में मैं कुछ नहीं कर सकता। एक्स कनेक्शन की मात्रा के बाद कोई भीSYN कोशिशों को उनका हक मिलना बंद हो गया हैACK , बैकलॉग भरना और अंततः सुरंग को स्टाल बनाना। परीक्षण और त्रुटि से पता चला कि यह संभव था4-8[3] कनेक्शन किसी भी समय खुले हैं, और एमटीयू के साथ500-1000 बाइट्स आप कम से कम एक स्थिर स्ट्रीम रख सकते हैं128kbps , यदि एक स्थिर स्ट्रीम की आवश्यकता नहीं होती, तो आप निम्न द्वारा कम समयावधि में उच्च गति प्राप्त कर सकते हैं फोड़ मांग पर कई कनेक्शन।

इसके विपरीत, एक (सच)DNS सुरंग मुश्किल से धक्का दे सकती है56kbps और जल्दी से थ्रॉटल हो सकता है क्योंकि मुझे लगता है कि टीसीपी अनुरोधों की तुलना में अधिक संख्या में DNS अनुरोध अधिक संदिग्ध लगते हैं। हमें यह निर्दिष्ट करना होगा कि atrue डीएनएस टनल फर्जी सबडोमेन पर डेटा को एनकोड (आउटगोइंग) करता है और डीएनएस रिकॉर्ड्स को क्वेरी करके प्राप्त डेटा को डीकोड करता है, जबकि कभी-कभी डीएनएस टनल को डीएनएस पोर्ट पर एक कच्चा यूडीपी कनेक्शन माना जा सकता है, जो शायद अतीत में कभी-कभी डीएनएस सर्वर होता है। अनुमति दी और सही ढंग से अग्रेषित किया।

निष्कर्ष

मुझे यकीन नहीं है कि मैं अपने लक्ष्य तक पहुँच गया हूँ उपयोगिता बुद्धिमान, चूंकि इस तरह की सुरंग चलाने से आपका फोन काफी गर्म हो सकता है, और बहुत सारी बैटरी बर्बाद हो सकती है, लेकिन इसे बैकअप कनेक्शन के रूप में रखना आश्वस्त कर सकता है ... अगर मैं वास्तव में इसे पर्याप्त स्थिर बनाने के लिए परेशान हूं :)

[1]आमतौर पर जब किसी सिम कार्ड में वेब ब्राउज़ करने के लिए अधिक डेटा नहीं होता है, तो वेब अनुरोध कैप्चर गेटवे पर रीडायरेक्ट करता है (आपको अधिक डेटा खरीदने के लिए कहने के लिए)
[2]मोबाइल डेटा प्लान रात के समय बेहतर कनेक्शन प्रदान कर सकते हैं
[3]यह संख्या, कुछ हद तक सामान्य कोर काउंट्स से जुड़ी हुई है, आपको यह संदेह करने के लिए प्रेरित कर सकती है कि कर्नेल किसी तरह कनेक्शन को सीमित कर रहा है, हमारी सुरंग के खुले कनेक्शन का परिदृश्य निश्चित रूप से असामान्य है, लेकिन ट्यूनिंग लाइनक्स नॉब्स ने कभी भी मेरे अंत में बेहतर परिणाम नहीं दिए।

पोस्ट टैग: