IPv6: क्या चिंता का कारण है?

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


IPv6 नामक नया प्रोटोकॉल वर्तमान में अंततः आधुनिक ऑपरेटिंग सिस्टम द्वारा अनुमोदित और समर्थित है, लेकिन अभी भी व्यापक रूप से उपयोग नहीं किया जाता है। इस लेख में, मैं कुछ लाभों के बारे में चर्चा करूँगा जो यह प्रदान करता है और अपने अनुप्रयोगों में इसके लिए समर्थन कैसे प्रदान करें।

IPv6 सार


IPv6 की सबसे विज्ञापित विशेषता बड़े पते की जगह है। यदि आप IPv6 के बारे में कुछ भी पढ़ते हैं, तो आप शायद जानते हैं कि यह पते के आकार को 32 बिट्स से बढ़ाकर 128 बिट्स कर देता है। यह उन सभी के लिए पर्याप्त है, जिनके पास वर्तमान इंटरनेट की तुलना में एक निजी नेटवर्क बड़ा है। यहां तक ​​कि अगर आपके पास सब कुछ है (ऐसी चीजें जिनमें कोई भी इलेक्ट्रॉनिक्स शामिल नहीं है) का अपना आईपीवी 6 पता होगा, तब भी आप पता स्थान के केवल एक छोटे हिस्से का उपयोग करेंगे।

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

एक विशिष्ट होम नेटवर्क के लिए, यह एक बहुत ही सरल उपाय है। यदि प्राप्तकर्ता का पता आरक्षित आंतरिक श्रेणियों में से एक में है, तो इसे अंदर भेजें, अन्यथा इसे बाहर भेजें। बड़े वाणिज्यिक रूटर्स को बहुत अधिक जटिल निर्णय लेने की आवश्यकता होती है। 90 के दशक के मध्य से, जब आईपीवी 4 पते सीमित संसाधन के रूप में देखे जाने लगे, तो उन्हें 8-बिट रेंज में विभाजित किया गया। इसका मतलब है कि आप पूरी तरह से अलग नेटवर्क पर तीन आसन्न ब्लॉक प्राप्त कर सकते हैं। इस आवंटन योजना के साथ, 2 ^ 24 संभावित नेटवर्क प्राप्त किए जाते हैं, और राउटर को यह तय करने में सक्षम होना चाहिए कि उनमें से किसी के लिए किस्मत में किस पैकेट को भेजना है। 2 ^ 24 17 मिलियन से थोड़ा कम है। सौभाग्य से, सादगी के लिए, आप उनके नोड्स को मर्ज कर सकते हैं, लेकिन यह अभी भी मार्गों के बारे में निर्णय को सरल नहीं करता है।

IPv6 के अब पर्याप्त पते हैं ताकि प्रत्येक देश या बड़े नेटवर्क को एक विस्तृत श्रृंखला आवंटित की जा सके। फिर आप कनेक्ट किए गए नेटवर्क और इतने पर सबबैंड का चयन कर सकते हैं। यह श्रेणीबद्ध असाइनमेंट (कम से कम सिद्धांत में) रूटिंग को सरल बनाता है।

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

बाहरी रूप से शुरू किए गए कनेक्शन को अस्वीकार करने की नीति सुरक्षा प्रदान करती है, लेकिन यह राउटर के फ़ायरवॉल द्वारा सुनिश्चित किया जाता है और NAT के लिए अजीब नहीं है। अधिकांश गैर-नैट फ़ायरवॉल ऐसा ही करेंगे।

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

डिफ़ॉल्ट सुरक्षा


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

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

वर्तमान में, IPsec का उपयोग आमतौर पर एन्क्रिप्शन कुंजी के साथ किया जाता है जो एक समूह के लिए सामान्य हैं। एक वैकल्पिक उपयोग एक सार्वजनिक कुंजी शुरू करने के लिए है, जिसका उपयोग एक DNS रिकॉर्ड में, IPsec कनेक्शन स्थापित करने के लिए किया जा सकता है। काम करने के लिए डीएनएसएसईसी का उपयोग करके डीएनएस रिकॉर्ड पर हस्ताक्षर करने की आवश्यकता है।

यदि आप अपने DNS प्रश्नों को IPsec के माध्यम से बनाते हैं, तो आपके पास एक एन्क्रिप्टेड अनुरोध और प्रतिक्रिया है, इसलिए कोई भी यह नहीं बता सकता है कि आप किन साइटों की तलाश कर रहे हैं (हालांकि, जाहिर है, आपका प्रदाता जानता है कि आप किस आईपी पते से जुड़े हैं)। SSL के विपरीत, IPsec UDP सहित सभी प्रकार के कनेक्शनों के लिए काम करता है, इसलिए वीओआईपी जैसी चीजों को IPv6 का उपयोग करने से महत्वपूर्ण लाभ मिल सकता है। एनएपी की आवश्यकता के बिना एंडपॉइंट सीधे जुड़ा जा सकता है, और सभी कनेक्शन एन्क्रिप्ट किए जा सकते हैं।

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

स्विच किए गए नेटवर्क के लिए, यह मामला नहीं है। प्रत्येक कंप्यूटर एक निश्चित मात्रा में डेटा भेज और प्राप्त कर सकता है, और स्विच इन पैकेटों को मशीनों के बीच वितरित करेगा। तो, 100 एमबी / एस नेटवर्क पर 4 कंप्यूटरों में प्रति 100 एमबी / एस 2 स्वतंत्र स्थानान्तरण हो सकते हैं। यदि आप एक पैकेट को एक प्रसारण पते पर भेजते हैं, तो यह सभी को भेजा जाता है, यहां तक ​​कि जो लोग इसे प्राप्त नहीं करना चाहते हैं।

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

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

प्रसारण का उपयोग तब भी किया जाता है जब आपको पता नहीं होता है, उदाहरण के लिए, सेवाओं का पता लगाने के लिए आपको किस कंप्यूटर का उपयोग करना चाहिए। IPv6 इस विधि को किसी भी प्रकार से बदलता है एनास्टैस्ट किसी भी पते के पते के साथ जुड़े पते के समूह में मल्टीकास्ट के समान है, लेकिन मल्टीकास्ट के विपरीत, इस पते पर भेजे गए पैकेट केवल एक मशीन पर वितरित किए जाते हैं। यह उदाहरण के लिए, ऑटोकॉनफिगरेशन जैसी चीजों के लिए उपयोगी है।

सॉकेट और प्रोटोकॉल


आशा है कि अब आप देख सकते हैं कि IPv6 समर्थन उपयोगी है। फिर सवाल उठता है - कैसे? अधिकांश नेटवर्क कोड या तो बर्कले सॉकेट या उन पर निर्मित उच्च-स्तरीय एपीआई का उपयोग करते हैं। यदि आप एक उच्च-स्तरीय एपीआई का उपयोग करते हैं, तो आपके पास संभवतः पहले से ही किसी और द्वारा प्रदान किया गया आईपीवी 6 समर्थन है। यदि आप सॉकेट्स का उपयोग करते हैं, तो आपको कोड में छोटे बदलाव करने की आवश्यकता है।

बर्कले सॉकेट्स एपीआई UNIX के विचार पर आधारित था कि सब कुछ एक फाइल है। आप कुछ अतिरिक्त सुविधाओं के साथ वर्णनकर्ताओं का उपयोग करके दूरस्थ मशीनों के साथ संवाद करते हैं। यदि आपके पास एक सॉकेट है, तो एपीआई पूरी तरह से स्वतंत्र प्रोटोकॉल है। चाहे आप IPv4, IPv6, AppleTalk, या कुछ अन्य प्रोटोकॉल का उपयोग करें, कोड समान होगा।

दुर्भाग्य से, सॉकेट बनाना वह जगह है जहां समस्याएं शुरू होती हैं। आप इस फ़ंक्शन का उपयोग करके एक सॉकेट बनाते हैं:

int socket(int domain, int type, int protocol);

तीन पैरामीटर प्रोटोकॉल के कुछ पहलुओं को पूरी तरह से परिभाषित करते हैं। ज्यादातर मामलों में, आप IPv4 को लागू करते हुए, PF_INET को कठोरता से डोमेन सेट करते हैं। जब आप एक स्थानीय पते के साथ सॉकेट को जोड़ते हैं तो चीजें और भी बदतर हो जाती हैं, और फिर कनेक्शन कनेक्ट या स्वीकार करते हैं। सभी प्रासंगिक कार्य एक तर्क के रूप में सॉकड्रा संरचना के लिए एक संकेतक को स्वीकार करते हैं।

यह संरचना बहुत सरल है, लेकिन आप इसे सीधे उपयोग नहीं करते हैं। इसके बजाय, आप एक sockaddr_in संरचना की तरह कुछ का उपयोग करते हैं, जो उसी तरह से शुरू होता है जैसे कि sockaddr संरचना (आकार और पता परिवार के साथ) लेकिन इसमें IPv4 पता और पोर्ट संख्या शामिल होती है। आप आमतौर पर इन मापदंडों को निर्धारित करने के लिए gethostbyname () का उपयोग करते हैं।

यदि आप किसी अन्य प्रोटोकॉल का समर्थन करना चाहते हैं, तो आपको एक अलग पहचान तंत्र के साथ कोड की एक और शाखा जोड़ने की आवश्यकता है। 2004 POSIX संस्करण के लिए नवीनतम संवर्द्धन में से एक getaddrinfo () फ़ंक्शन की परिभाषा है। यह पता और सेवा के स्ट्रिंग विवरण द्वारा निर्दिष्ट सर्वर को परिभाषित करता है। इसका मतलब है कि आपको हार्ड-कोड पोर्ट संख्याओं के लिए नहीं है। इसका उपयोग करना बहुत सरल है। यह कोड किसी भी उपलब्ध कनेक्शन का उपयोग करके HTTP के माध्यम से InformIT सर्वर से जुड़ जाएगा:

struct addrinfo hints, *results;
memset(&hints, 0, sizeof (hints));
hints.ai_family = PF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
int error = getaddrinfo( "informit.com" , "http" , &hints, &results);
if (error) { /* fail */ return -1; }
int s = -1;
for ( struct addrinfo *res = results;
res != NULL && s < 0 ;
res = res->ai_next)
{
s = socket(res->ai_family, res->ai_socktype,
res->ai_protocol);
//If the socket failed, try the next address
if (s < 0) { continue ; }
//If the connection failed, try the next address
if (connect(s, res->ai_addr, res->ai_addrlen) < 0)
{
close(s);
s = -1;
continue ;
}
}
freeaddrinfo(results);
return s;


* This source code was highlighted with Source Code Highlighter .

Getaddrinfo () के पहले दो तर्क सर्वर नाम और प्रोटोकॉल नाम हैं। कन्वर्टर को सर्वर एड्रेस और सर्विस का संयोजन मिलेगा। कुछ प्लेटफार्मों पर, जैसे कि OS X, इसमें DNS SRV रिकॉर्ड की परिभाषा भी शामिल है, इसलिए यह ऑपरेशन पोर्ट को सही ढंग से कॉन्फ़िगर करेगा भले ही सर्वर गैर-मानक पोर्ट पर चल रहा हो, जबकि DNS रिकॉर्ड में यह तथ्य हो। संकेत संरचना का उपयोग लौटे पते की जानकारी पर कुछ प्रतिबंध लगाने के लिए किया जाता है। इस मामले में, हम केवल स्ट्रीमिंग सॉकेट चाहते हैं, और हम नेटवर्क स्टैक द्वारा समर्थित किसी भी प्रोटोकॉल में उन्हें स्वीकार करने के लिए तैयार हैं। अंतिम तर्क एक संकेतक है जिसका उपयोग पता सूचना संरचनाओं की एक सरणी को वापस करने के लिए किया जाता है।

ध्यान दें कि सॉकेट () और कनेक्ट करने के लिए सभी तर्क पूरी तरह से पता डेटा हैं जिन्हें गेटड्रीनोफो () से कॉल करके लौटाया गया है। इस कोड में से कोई भी बिल्कुल भी नहीं कहता है कि आप IPv4, IPv6, या कुछ अन्य नए प्रोटोकॉल का उपयोग कर रहे हैं। जब तक आपका ऑपरेटिंग सिस्टम प्रोटोकॉल का समर्थन करता है, तब तक इस कोड का उपयोग किया जा सकता है।

IPv6: वर्तमान प्रोटोकॉल


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

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

नि: शुल्क IPv4 पते कम से कम होते जा रहे हैं, और ऐसा लगता है कि अधिक से अधिक प्रदाता एनएटी का उपयोग अपने सभी ग्राहकों के लिए कर रहे हैं। कुछ बिंदु पर, केवल वे लोग जो एप्लिकेशन का उपयोग करते हैं, जो बॉक्स से बाहर IPv6 का समर्थन करते हैं, एक दूसरे से सीधे-से-अंत कनेक्शन स्थापित करने में सक्षम होंगे। यदि आपका कोड अभी भी ऐसा नहीं कर सकता है, तो अब इसे ठीक करने का समय है।

Source: https://habr.com/ru/post/In105059/


All Articles