2010-04-22 7 views
22

आईपीवी 6 नेटवर्किंग में, IPV6_V6ONLY ध्वज का उपयोग यह सुनिश्चित करने के लिए किया जाता है कि एक सॉकेट केवल आईपीवी 6 का उपयोग करेगी, और विशेष रूप से आईपीवी 4-टू-आईपीवी 6 मैपिंग का उपयोग उस सॉकेट के लिए नहीं किया जाएगा। कई ओएस पर, IPV6_V6ONLY डिफ़ॉल्ट रूप से सेट नहीं होता है, लेकिन कुछ ओएस (जैसे विंडोज 7) पर, यह डिफ़ॉल्ट रूप से सेट होता है।IPV6_V6ONLY ध्वज जोड़ने के लिए प्रेरणा क्या थी?

मेरा प्रश्न है: इस ध्वज को शुरू करने के लिए प्रेरणा क्या थी? क्या आईपीवी 4-टू-आईपीवी 6 मैपिंग के बारे में कुछ है जो समस्याएं पैदा कर रहा था, और इस प्रकार लोगों को इसे अक्षम करने के लिए एक तरीका चाहिए? मुझे ऐसा लगता है कि अगर कोई आईपीवी 4-टू-आईपीवी 6 मैपिंग का उपयोग नहीं करना चाहता था, तो वे बस आईपीवी 4 मैप किए गए आईपीवी 6 पते को निर्दिष्ट नहीं कर सकते थे। मुझे यहां क्या समझ नहीं आ रहा है?

+5

@Eric Eijkelenboom: नहीं, यह चूंकि यह एक नेटवर्किंग सवाल है और यह नहीं प्रोग्रामिंग से संबंधित है – Javier

+0

नहीं है, मैंने किया ग्रहण किया। –

+5

ये ध्वज सिस्टम सॉकेट को सॉकेट खोलने के लिए दिए गए पैरामीटर हैं। प्रोग्रामिंग करते समय इस्तेमाल किया जाता है, कॉन्फ़िगर या बनाए रखने पर नहीं। IOW: यह डेवलपर है, न कि व्यवस्थापक जो इसका उपयोग करता है। – Javier

उत्तर

3

मुझे नहीं पता कि यह डिफ़ॉल्ट क्यों होगा; लेकिन यह झंडे की तरह है कि मैं हमेशा स्पष्ट रखता हूं, इससे कोई फर्क नहीं पड़ता कि डिफ़ॉल्ट क्या है।

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

0

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

4

सबसे अधिक बार उल्लिखित कारण उस मामले के लिए है जहां सर्वर के पास एसीएल (एक्सेस कंट्रोल लिस्ट) का कुछ रूप है। उदाहरण के लिए, नियमों के साथ एक सर्वर की कल्पना करें:

Allow 192.0.2.4 
Deny all 

यह आईपीवी 4 पर चलता है। अब, कोई इसे आईपीवी 6 के साथ मशीन पर चलाता है और कुछ पैरामीटर के आधार पर, आईपीवी 6 अनुरोध आईपीवी 6 सॉकेट पर स्वीकार किए जाते हैं, मैप किए गए :: 1 9 2.0.2.4 के रूप में मैप किए जाते हैं और फिर पहले एसीएल से मेल नहीं खाते हैं। अचानक, पहुंच से इनकार किया जाएगा।

आपके आवेदन में स्पष्ट होने के नाते (IPV6_V6ONLY का उपयोग करके) समस्या को हल करेगा, जो भी ऑपरेटिंग सिस्टम में डिफ़ॉल्ट है।

+0

सर्वर को मैप किए गए पतों के साथ दोहरी-स्टैक सॉकेट का उपयोग नहीं करना चाहिए यदि यह मैप किए गए फॉर्म में आईपीवी 4 पते पर आईपीवी 4 एसीएल लागू नहीं कर सकता है। –

10

सभी आईपीवी 6 सक्षम प्लेटफ़ॉर्म ड्यूलस्टैक सॉकेट का समर्थन नहीं करते हैं, इसलिए प्रश्न यह है कि आईपीवी 6 संगतता को अधिकतम करने के लिए एप्लिकेशन को कैसे आवश्यकता होती है या तो पता है कि ड्यूलस्टैक समर्थित है या अलग नहीं है जब यह नहीं है? एकमात्र सार्वभौमिक उत्तर IPV6_V6ONLY है।

IPV6_V6ONLY को अनदेखा करने या दोहरी स्टैक सक्षम आईपी स्टैक्स से पहले लिखे गए एक एप्लिकेशन को दोहरी स्टैक वातावरण में विफल होने पर V4 को अलग-अलग बाध्यकारी मिल सकता है क्योंकि आईपीवी 6 ड्यूलस्टैक सॉकेट आईपीवी 4 सॉकेट बाइंडिंग को रोककर आईपीवी 4 से बांधता है। प्रोटोकॉल या एप्लिकेशन स्तर को चिंताओं या आईपी एक्सेस कंट्रोल को संबोधित करने के कारण एप्लिकेशन आईपीवी 6 पर आईपीवी 6 की अपेक्षा नहीं कर सकता है।

यह या इसी तरह की स्थितियों में एमएस एट अल को डिफ़ॉल्ट रूप से 1 तक डिफ़ॉल्ट करने के लिए प्रेरित किया गया था, आरएफसी 34 9 3 डिफ़ॉल्ट होने के लिए घोषित करता है। 1 सैद्धांतिक रूप से पीछे की संगतता को अधिकतम करता है। विशेष रूप से विंडोज एक्सपी/2003 ड्यूलस्टैक सॉकेट का समर्थन नहीं करता है।

ऐसे अनुप्रयोगों की कोई कमी नहीं है जो दुर्भाग्यवश कम परत की जानकारी को सही तरीके से संचालित करने की आवश्यकता है और इसलिए यह विकल्प आईपीवी 4/आईपीवी 6 संगतता रणनीति की योजना बनाने के लिए काफी उपयोगी हो सकता है जो सर्वोत्तम आवश्यकताओं और मौजूदा कोडबेस फिट बैठता है।

1

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

देखें: http://ipv6samurais.com/ipv6samurais/openbsd-audit/draft-cmetz-v6ops-v4mapped-api-harmful-01.txt

2

लिनक्स के लिए, जब एक सेवा है जो ही सेवा बंदरगाह पर दोनों IPv4 और IPv6 सॉकेट पर सुनता है, उदाहरण के लिए लेखन पोर्ट 2001, आपको सेटॉकॉपट (एस, एसओएल_आईपीवी 6, आईपीवी 6_वी 6ONLY, & एक, आकार (एक)) पर कॉल करना होगा; आईपीवी 6 सॉकेट पर। यदि आप नहीं करते हैं, तो IPv4 सॉकेट के लिए बाध्य() ऑपरेशन "पता पहले से उपयोग में" विफल रहता है।

0

एक बहुत ही आम उदाहरण है जहां व्यवहार की द्वंद्व एक समस्या है। AI_PASSIVE ध्वज के साथ मानक getaddrinfo() कॉल एक nodename पैरामीटर पारित करने के लिए संभावना प्रदान करता है और पर सुनने के लिए पतों की एक सूची देता है। nodename के लिए एक नल स्ट्रिंग के रूप में एक विशेष मान स्वीकार किया जाता है और यह वाइल्डकार्ड पते पर सुनना दर्शाता है।

कुछ सिस्टम 0.0.0.0 और :: इस क्रम में लौटा दिए गए हैं। दोहरे ढेर सॉकेट डिफ़ॉल्ट रूप से सक्षम है और आप सॉकेट IPV6_V6ONLY सेट नहीं करते हैं, सर्वर 0.0.0.0 को जोड़ता है और उसके बाद दोहरे ढेर :: और इसलिए (1) केवल IPv4 पर काम करता है और (2) त्रुटि की रिपोर्ट से कनेक्ट करने में विफल रहता है।

मैं आदेश गलत मानता हूं क्योंकि आईपीवी 6 को प्राथमिकता दी जाने की उम्मीद है। लेकिन जब भी आप पहली बार दोहरी-स्टैक :: और फिर आईपीवी 4-केवल 0.0.0.0 का प्रयास करते हैं, तो सर्वर अभी भी दूसरी कॉल के लिए एक त्रुटि रिपोर्ट करता है।

मैं व्यक्तिगत रूप से एक गलती एक दोहरे ढेर सॉकेट के पूरे विचार पर विचार करें। मेरी परियोजना में मैं इससे बचने के लिए हमेशा स्पष्ट रूप से IPV6_V6ONLY सेट करता हूं। कुछ लोगों को जाहिरा तौर पर एक अच्छा विचार के रूप में यह देखा था, लेकिन उस मामले में मैं शायद स्पष्ट रूप से सेट नहीं IPV6_V6ONLY होगा और 0.0.0.0 के लिए सीधे NULL का अनुवाद getaddrinfo() तंत्र को दरकिनार।

संबंधित मुद्दे