IPv6 पते में एक प्रतिशत चिह्न '%' क्यों है?


125

मैं .NET Frameworkअपनी मशीन के लिए आईपी पते प्राप्त करने के लिए कक्षाओं का उपयोग कर रहा हूं।

Dns.GetHostAddresses(Dns.GetHostName())

मेरे पास एक वर्चुअलबॉक्स एडॉप्टर है जिसमें IPv4 और IPv6 एड्रेस दोनों हैं। .NET कोड का उपयोग करके मुझे IPv6 एड्रेस के रूप में मिल रहा हैfe80::71a3:2b00:ddd3:753f%16

% 16 को अंत में देखें?

हालाँकि, यदि मैं उसी का उपयोग करते हुए क्वेरी करता हूं, तो मुझे WMI'fe80 :: 71a3: 2b00: ddd3: 753f' के रूप में पता मिल रहा है

तो, क्या% 16 का कोई विशेष महत्व है?

संपादित करें:

मेरे पास इसके बारे में कुछ और टिप्पणियां थीं। और वे अपने जवाब में स्टीफन जेनिंग्स के साथ बहुत अच्छी तरह से मेल खाते हैं।

मैंने यह देखने के लिए Vmware स्थापित किया कि यह IPv6 पता क्या जारी करता है। पते थे: fe80 :: 3dd0: 7f8e: 57b7: 34d5% 19

fe80 :: b059: 65f4: e877: C40% 20

स्पष्ट रूप से,% के बाद की संख्या कुछ हेक्स प्रतिनिधित्व नहीं है। मैंने Wmi का उपयोग करते हुए एक नेटवर्क एडेप्टर के लिए उपलब्ध सभी गुणों की जाँच की और पाया कि संख्याएं प्रत्येक नेटवर्क एडेप्टर के InterfaceIndex गुण के समान हैं। MSDN के अनुसार , यह विशिष्ट रूप से प्रत्येक नेटवर्क एडेप्टर की पहचान करता है और यह गुण विस्टा में पेश किया गया था।

अभी भी मुझे उलझन में था कि IPAddress वर्ग आपको उस प्रारूप में एक IP पता बनाने की अनुमति क्यों देगा जब तक कि यह मान्य नहीं था। जवाब स्टीफन द्वारा प्रदान किया गया था। नंबर स्कोप आईडी है। IPAddress में एक कंस्ट्रक्टर होता है जो एड्रेस और स्कोप आईडी को स्वीकार करता है।

ओह, और ये सभी तीन नेटवर्क एडेप्टर स्थानीय लिंक थे। IPconfig के माध्यम से इसकी पुष्टि की

ठंडा। यह दिलचस्प था !!


2
मुझे पता नहीं था कि आपके पूछने से पहले यह क्या था। मैंने आईपीवी 6 के बारे में आज भी कुछ साफ-सुथरा सीखा है (हम क्या करते हैं)।
स्टीफन जेनिंग्स

@ स्टीफन, तो क्या आपने पहले ipv6 के साथ काम किया है? मैं जल्दी से आप इसे nailed पर हैरान था। यहां प्रश्न पोस्ट करने से पहले मैं कुछ समय के लिए गुगली कर चुका था। अच्छा काम!
आमिथ जॉर्ज

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

एक वैकल्पिक संकेतन fe80:10( 0x0010जा रहा है 16) हो सकता है । मैं लिंक-स्थानीय IPv6 पतों के साथ काम करते समय अपने ब्राउज़र में इसका उपयोग करता हूं , लेकिन मैं 100% सुनिश्चित नहीं हूं कि यह मानकों के अनुसार है। (URLs में प्रतिशत का उपयोग करना ब्राउज़रों में गड़बड़ है; वास्तव में मुझे यह काम करने के लिए नहीं मिला।)
Arjan

जवाबों:


134

'%' के बाद का नंबर स्कोप आईडी है।

IPv6 पतों के लिए कम से कम तीन रीचबिलिटी स्कोप को परिभाषित करता है:

  1. विश्व स्तर पर पता करने योग्य। यह आपके ISP द्वारा आपको दिया गया एक IPv6 पता है। यह सार्वजनिक इंटरनेट पर उपयोग करने के लिए उपलब्ध है।

  2. स्थानीय लिंक। यह 169.254.XX रेंज के समान है। यह एक पता है कि एक कंप्यूटर खुद को स्थानीय संचार की सुविधा के लिए असाइन करता है। ये पते सार्वजनिक इंटरनेट पर नहीं मिलते हैं क्योंकि वे विश्व स्तर पर अद्वितीय नहीं हैं।

  3. नोड-स्थानीय। यह एक पता है जो 127.0.0.1 के समान स्थानीय इंटरफ़ेस की पहचान करता है। मूल रूप से, यह पता है :: 1।

Microsoft ने इस लेख को IPv6 संबोधन का वर्णन करते हुए प्रकाशित किया है , जो मुझे मिला सबसे कम-भ्रमित करने वाला लेख है। लेख इंगित करता है कि आपके पते में एक गुंजाइश आईडी की उपस्थिति का मतलब है कि यह एक लिंक-स्थानीय पता है । आप यह भी बता सकते हैं कि यह लिंक-लोकल है क्योंकि एड्रेस की शुरुआत होती है fe80

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

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


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

अच्छा जवाब। मुझे देखने दो अगर मैं पूरी तरह से समझ गया कि। तो दो एनआईसी के साथ एक डिवाइस दो अलग-अलग राउटर से कनेक्ट हो सकता है, और बहुत ही डीएचसीपी पता सौंपा जा सकता है fe80::42। साथ ही, राउटर का एक ही पता होता है fe80::1। अब fe80::1%Xराउटर के बीच अंतर करने के लिए इस्तेमाल किया जा सकता है, लेकिन fe80::42%Xग्राहक के लिए मामूली उपयोग है, है ना?
user123444555621

2
@ Pumbaa80 क्लाइंट fe80::1%1NIC # 1 से जुड़े राउटर तक पहुंचने के लिए संदेश भेजेगा, और यह fe80::1%2NIC # 2 से जुड़े राउटर तक पहुंचने के लिए संदेश भेजेगा । एक तरफ के रूप में, लिंक-स्थानीय पते होस्ट कंप्यूटर द्वारा स्वचालित रूप से कॉन्फ़िगर किए जाते हैं, डीएचसीपी के माध्यम से नहीं, इसलिए यह संभवतः अपने दो एनआईसी को एक ही आईपी आवंटित नहीं करेगा। यह भी ध्यान रखें कि लिंक-स्थानीय पते नियमित नहीं हैं, इसलिए आमतौर पर आप राउटर को संदेश नहीं भेजेंगे, आप दो मेजबानों के बीच संदेश भेज रहे होंगे।
स्टीफन जेनिंग्स

प्रयोगों के द्वारा, यह अनुगामी लगता है %nnकम से कम कुछ आदेश, उदाहरण के लिए छोड़ा जा सकता है ping, tracert
मैट विल्की

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

21

उपसर्ग fe80 :: / 64 के साथ IPv6 पते लिंक-स्थानीय पते हैं जो नेटवर्क डिवाइस के हार्डवेयर पते के साथ उस उपसर्ग को जोड़कर बनाए जाते हैं, 71a3: 2b00: ddd3: 753f आपके उदाहरण में। (IPv4 में एनालॉग 169.254.0.0/16 है।) चूंकि किसी मशीन पर सभी लिंक-स्थानीय पते के लिए उपसर्ग समान है, इसलिए रूटिंग को कभी-कभी यह जानने की आवश्यकता हो सकती है कि आप किस इंटरफ़ेस का उल्लेख कर रहे हैं। और यही प्रतिशत के बाद की संख्या, जिसे क्षेत्र सूचकांक कहा जाता है, निर्दिष्ट करता है। प्रजाति ऑपरेटिंग सिस्टम पर निर्भर करती है: विंडोज पर, %16इंटरफ़ेस नंबर 16 है; उदाहरण के लिए लिनक्स पर आप कुछ ऐसा देख सकते हैं %eth0

कुछ उपकरण या एपीआई इस ज़ोन इंडेक्स को महत्वहीन या अपने उद्देश्यों के लिए निहित मानेंगे। उदाहरण के लिए, लिनक्स पर ifconfigटूल इसे प्रदर्शित नहीं करता है क्योंकि यह स्पष्ट है कि पता किस इंटरफ़ेस का है। लेकिन सामान्य तौर पर इसे ध्यान में रखा जाना चाहिए।


18

% के बाद के अक्षर (जो आपके उदाहरण में संख्याएँ होते हैं) इंटरफ़ेस पहचानकर्ता हैं। उन पात्रों का उपयोग "नेटवर्क इंटरफ़ेस" की पहचान करने के लिए किया जाता है, जिन्हें लोग अक्सर "नेटवर्क कार्ड" कहते हैं। उदाहरण के लिए, यह निर्धारित करने में मदद कर सकता है कि क्या पैकेट वायर्ड ईथरनेट कार्ड या वायरलेस वाई-फाई अडैप्टर का उपयोग करेगा।

मैं अनुमान लगा रहा हूँ कि आप Microsoft Windows का उपयोग कर रहे हैं। यह इंटरफ़ेस आइडेंटिफ़ायर के रूप में संख्याओं का उपयोग करता है।

तुलना में एक बिंदु के रूप में, यूनिक्स जैसी प्रणाली% संकेत के बाद अक्षरों का उपयोग कर सकती है। उदाहरण के लिए:fe80::71a3:2b00:ddd3:753f%eth0

उस स्थिति में, इंटरफ़ेस पहचानकर्ता, eth0नेटवर्क कार्ड के नाम से मेल खाता है।

Microsoft Windows में, आप राउटिंग टेबल की जांच करने वाली कमांड लाइनों में से एक का उपयोग करके (संख्यात्मक) इंटरफ़ेस पहचानकर्ताओं की एक सूची प्राप्त कर सकते हैं। मैं " netstat -nr" पसंद करता हूं क्योंकि यह अन्य ऑपरेटिंग सिस्टम पर भी काम करता है, लेकिन Microsoft विंडोज भी " route print" का समर्थन करता है । परिणामी आउटपुट, जो रिपोर्ट किया जाता है, संभवतः स्क्रीन के ऊपर होगा, इसलिए जब तक आप अधिक पाइप नहीं करते, तब तक स्क्रॉल करने के लिए तैयार रहें।

जैसे, मेरे सिस्टम पर:

=========================================================================== Interface List 14...5c f9 dd 6d 98 b8 ......Realtek PCIe GBE Family Controller 12...e0 06 e6 7e fc 4e ......Bluetooth Device (Personal Area Network) 1...........................Software Loopback Interface 1 13...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter 15...00 00 00 00 00 00 00 e0 Microsoft ISATAP Adapter #2 ===========================================================================

इस स्थिति में, एक पते जैसे fe80 :: 71a3: 2b00: ddd3: 753f% 14 मेरे Realtek PCIe GBE फैमिली कंट्रोलर को संदर्भित करेगा। "GBE" गिगाबिट ईथरनेट को संदर्भित करता है।

अब, यहाँ मुश्किल हिस्सा है: यदि आप एक दूरस्थ पते को पिंग करना चाहते हैं, तो आपको दूरस्थ प्रणाली के IPv6 पते का उपयोग करने की आवश्यकता हो सकती है, लेकिन स्थानीय सिस्टम का इंटरफ़ेस पहचानकर्ता। इसलिए, उदाहरण के लिए, यदि मैं कंप्यूटर ए का उपयोग कर रहा हूं और मेरे पास fe80 का स्थानीय IPv6 पता है :: 1 इंटरफ़ेस नंबर 14 से जुड़ा हुआ है, और मैं कंप्यूटर B को पिंग करना चाहता हूं और इसमें fe80 का स्थानीय IPv6 पता :: 2 संलग्न है इसका इंटरफ़ेस नंबर 16, फिर यही मैं उपयोग करूंगा:

ping fe80::2%14

तो pingकमांड ICMPv6 पैकेट को दूरस्थ IPv6 पते (fd80 :: 2) पर भेजेगा, जो दूरस्थ कंप्यूटर से संबंधित है, और इसे करने के लिए पहचानकर्ता 14 के साथ इंटरफ़ेस का उपयोग करेगा। इंटरफ़ेस आइडेंटिफ़ायर 14 मेरे द्वारा उपयोग किए जा रहे सिस्टम से एक नंबर है, रिमोट सिस्टम से नहीं।

अब, आइए देखें कि यह क्यों आवश्यक हो सकता है।

अगर मैं Google के IPv6 पते (जो 2607: f8b0: 400a: 802 :: 200e पर उस समय मैंने यह उत्तर लिखा है) को पिंग करना चाहता हूं, तो रूटिंग टेबल यह जांच करेगा कि कौन सा नेटवर्क कार्ड उन पते को जांचेगा जो 2607 से शुरू होते हैं: f8b0: 400a: 802। राउटिंग टेबल इंगित करेगा कि मेरा कोई भी नेटवर्क कार्ड सीधे उन नेटवर्क से नहीं जुड़ा हुआ है जो 2607: f8b0: 400a: 802 से शुरू होने वाले पतों का उपयोग कर रहे हैं, इसलिए मेरा कंप्यूटर "गेटवे" पते का उपयोग करके समाप्त हो जाएगा। अगर मैं दूसरे नेटवर्क से जुड़ रहा था जो उस संगठन का हिस्सा है जिसके लिए मैं काम कर रहा हूं, तो मेरे पास एक विशेष "गेटवे" पता हो सकता है जो निजी नेटवर्क पर ट्रैफ़िक को रूट करता है। इस मामले में, मेरे पास अधिक विशिष्ट गेटवे नहीं है, इसलिए मैं IPv6 "डिफ़ॉल्ट गेटवे" का उपयोग करूंगा। लिंक-स्थानीय पते को छोड़कर, IPv6 इस तरह से अधिकांश समय काम करता है। यह भी है कि ज्यादातर समय IPv4 कैसे काम करता है।

RFC 4291 खंड 2.8 के अनुसार , IPv6 का उपयोग करने वाले प्रत्येक कंप्यूटर को प्रत्येक नेटवर्क इंटरफ़ेस के लिए एक लिंक-स्थानीय पता असाइन करना चाहिए। RFC 4291 खंड 2.5.6 बिट्स को दिखाता है कि लिंक-स्थानीय पते के साथ शुरू होना चाहिए, जो लिंक-स्थानीय पते को "fe80: 0000: 0000: 0000:" से शुरू करने का कारण बनता है (हालांकि उनमें से कई शून्य डबल कॉलन तक ढह जाते हैं )। तथ्य यह है कि उन पते "fe80:" के साथ आरएफसी 4291 खंड 2.4 द्वारा वर्णित हैं ।

यदि आप किसी दूरस्थ प्रणाली (उदाहरण के लिए, "2607: f8b0: 400a: 802") को पिंग करने का प्रयास करते हैं, तो सामान्य प्रक्रिया आमतौर पर नेटवर्क या सबनेट का पता लगाने के लिए होती है जो पता का एक हिस्सा है, जो बिट्स को देखकर किया जाता है। पते की शुरुआत में। फिर, उन बिट्स का उपयोग यह निर्धारित करने के लिए किया जाता है कि ट्रैफ़िक को कैसे रूट किया जाए।

हालाँकि, यह प्रक्रिया IPv6 लिंक-स्थानीय पते के लिए काम नहीं करती है, क्योंकि प्रत्येक एकल (परिचालन, सक्रिय) नेटवर्क इंटरफ़ेस में एक लिंक-स्थानीय पता है, जो सबनेट प्रीफ़िक्स / साइज़ "/" का उपयोग करके सबनेट पर "fe80:" से शुरू होता है। 64 "। यदि आप लैपटॉप पर हैं, तो आपको यह पता लगने की संभावना है कि आपके इथरनेट कार्ड और वाई-फाई अडैप्टर दोनों में इस तरह के आईपीओ 6 एड्रेस होने की उम्मीद है।

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

समाधान यह है कि आप निर्दिष्ट करें कि आप किस नेटवर्क डिवाइस का उपयोग करना चाहते हैं। तो, यह नेटवर्क पहचानकर्ता का उद्देश्य है।


2
ठीक है, पीटर एसेन्ट्रौट के उत्तर को फिर से पढ़ने पर , ऐसा लगता है कि उनका तकनीकी रूप से सही है। उम्मीद है कि मेरा विवरण कुछ और स्पष्टता प्रदान करता है। मैं स्टीफन जेनिंग्स के जवाब से असहमत हूं , क्योंकि यह जवाब "गुंजाइश आईडी" की तरह दिखता है "स्कोप लोकल" को स्कोप के रूप में पहचानता है। हालांकि, दो अलग-अलग नेटवर्क इंटरफेस "लिंक लोकल" हो सकते हैं, लेकिन वे समान "स्कोप" (उनकी क्रमांकित सूची में दिखाए गए उदाहरणों के अनुसार) का उपयोग नहीं करेंगे। इसके बजाय, मैं कहता हूं कि वे नंबर नेटवर्क "इंटरफ़ेस" की पहचान करते हैं।
TOOGAM
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.