2013-12-18 11 views
5

के लिए सॉकेट श्रोता मैंने लोकप्रिय ट्यूटोरियल का उपयोग करके आईपीवी 6 का समर्थन करने के लिए एक आवेदन पोर्ट किया। मैंने दोनों प्रोटोकॉल के लिए केवल एक सॉकेट श्रोता का उपयोग करने का फैसला किया। अब मुझे एहसास हुआ कि मुझे IPV6_V6ONLY ठीक से सेट करना है (यह केवल बॉक्स के बाहर मेरे x86 लिनक्स पर काम कर रहा है, लेकिन मेरे एआरएम पर नहीं)।आईपीवी 6 और आईपीवी 4

क्या यह वास्तव में जाने का तरीका है? कुछ कहते हैं कि IPV6_V6ONLY का उपयोग नहीं किया जाना चाहिए (स्पष्ट रूप से यह पुराना है, तार पर आईपीवी 4 मैपिंग के कारण), कुछ कहते हैं कि दोनों प्रोटोकॉल के लिए एक सॉकेट का उपयोग ठीक है।

तो, मैं उलझन में हूं। इस समस्या के बारे में वर्तमान स्थिति क्या है? क्या मैंने समस्या को गलत समझा?

+0

स्पष्टीकरण की बिट: V6ONLY यह दर्शाता है कि सॉफ़्टवेयर पैकेट को कैसे संभालता है। यह तार पर बिट्स को प्रभावित नहीं करता है। सॉफ्टवेयर पक्ष पर सब कुछ एक आईपीवी 6 पैकेट की तरह दिखता है। यदि तार पर यह वास्तव में एक आईपीवी 4 पैकेट है तो सॉफ़्टवेयर पक्ष इसे आईपीवी 6 पैकेट की तरह दिखता है और आईपीवी 4 पते को आईपीवी 6 पते पर मानचित्र करता है जो आईपीवी 4 पते के 32 बिट्स के बाद ':: एफएफएफ: 'हैं। V6ONLY केवल सॉफ्टवेयर में इसे बदलता है। तार पर वे सामान्य आईपीवी 4 और आईपीवी 6 पैकेट हैं। ':: एफएफएफ: 'पते तार पर कभी नहीं देखा जाता है। –

+0

आह अधिकार, स्पष्टीकरण के लिए thx। तो यह केवल तार पर बहिष्कृत है और 'IPV6_V6ONLY' का उपयोग कर संभव है। अगर इसे समर्थित किया गया है या नहीं, तो इसे कैसे संभालें :) – duedl0r

उत्तर

4

तुम हमेशा दोनों सॉकेट स्पष्ट रूप से बाध्य करना चाहिए, IPv6 सॉकेट IPV6_V6ONLY से बंधे के साथ।

क्यों? क्रॉस-प्लेटफार्म संगतता।

डिफ़ॉल्ट रूप से विंडोज़ की आवश्यकता है कि आप स्पष्ट रूप से आईपीवी 4 और आईपीवी 6 पर बाध्य हों। केवल आईपीवी 6 के लिए बाध्यकारी आईपीवी 4 के साथ भी बाध्य नहीं होगा।

डिफ़ॉल्ट रूप से लिनक्स आईपीवी 4 पर बाध्य होगा जब आप आईपीवी 6 पर बाध्य होंगे, केवल तभी net.ipv6.bindv6only sysctl 0 पर सेट हो। डेबियन जैसे वितरण इस धारणा को 1 पर बदलते हैं, जो आपकी धारणा को तोड़ते हैं।

मुझे याद नहीं आ मैक ओएस एक्स यहां क्या करता है (किसी टिप्पणी में चहचहाते कृपया?), लेकिन मुद्दा यह है कि स्पष्ट रूप से दोनों प्रोटोकॉल के लिए बाध्य कोई आश्चर्य छोड़ देता है।

+0

'net.ipv6.bindv6only' डिफ़ॉल्ट मान को परिभाषित करता है, अगर मैं इसे सेटकेट के साथ सेट नहीं करता हूं। यदि आप सॉकेट पर IPV6_V6ONLY सेट करते हैं, तो आप इसे ओवरराइट कर सकते हैं, है ना? मैं सोच रहा हूं कि यह बुरा है या नहीं :) चलिए इस पल के लिए मान लें कि मैं केवल लिनक्स को लक्षित करता हूं। – duedl0r

+1

@ duedl0r डिफ़ॉल्ट मानना ​​सर्वोत्तम नहीं है; यह बदल सकता है, या सिस्टम प्रशासक इसे बदल सकता है। हमेशा स्पष्ट रूप से बाध्य होना सर्वोत्तम है, या आपके उपयोगकर्ता द्वारा सेट की जा सकने वाली कॉन्फ़िगर करने योग्य सेटिंग होनी चाहिए। –

2

यह किसी भी तरह से ठीक है।

आप v4 बाँध और वी 6 स्पष्ट रूप से, आप IPV6_V6ONLY स्थापित करने के लिए की जरूरत है, अन्यथा, आप इसे स्पष्ट करने के लिए की जरूरत है। डिफ़ॉल्ट सेटिंग प्लेटफार्मों के बीच बदलती है।

कुछ प्लेटफार्मों तो अधिकतम संगतता के लिए मैं "दो सॉकेट" दृष्टिकोण के साथ जाना चाहते हैं v6 सॉकेट पर v4 कनेक्शन को स्वीकार करने का समर्थन नहीं करते।

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