अज्ञात एक्सटेंशन वाले IPv6 एक्सटेंशन हेडर को पार्स करना


113

मैं एक बहुत ही सरल शुद्ध फिल्टर लिख रहा हूं, और जहां मैं IPv6 हेडर को ICMPv6 प्रकार, टीसीपी / यूडीपी पोर्ट नंबर, आदि जैसी चीजों से मिलान करना चाहता हूं, वहां पहुंच रहा हूं।

इसलिए मैं गहराई में IPv6 पैकेट प्रारूप के बारे में पढ़ रहा हूं , और मैं इस तरह का हूं ... अच्छी तरह से ... मुझे यह सुनिश्चित करने के लिए बार-बार पढ़ना पड़ा कि मैं वास्तव में इसे सही पढ़ रहा हूं। यह मुझे दिखता है कि आपको 40-बाइट तय हेडर से शुरू करना है और इसके अगले हेडर फ़ील्ड को देखना है। फिर आपको अगले हेडर के अगले हेडर फ़ील्ड को देखना होगा, और इसी तरह, एक लिंक्ड सूची की तरह, जब तक आप अंत तक नहीं पहुंचते। यदि पेलोड है, तो यह अनुसरण करेगा।

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

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

तो अगर मैं उन एक्सटेंशनों का पता नहीं लगाता, जिन्हें वे उपयोग कर रहे हैं, तो मैं आईपीवी 6 हेडर्स को पार्स कैसे कर सकता हूं? मैं किसी अज्ञात एक्सटेंशन के लिए हेडर कैसे छोड़ सकता हूं, क्योंकि मुझे इसकी लंबाई नहीं पता है?


10
इस प्रश्न के आधार पर ऐसा लगता है कि मैं बेवकूफ नहीं हूं और हां मैं यह सही पढ़ रहा हूं: यह (वास्तविक दुनिया में) आईपीवी 6 में एक नया एक्सटेंशन हेडर जोड़ना असंभव है। stackoverflow.com/questions/9847923/…
AdamIerymenko

10
और हाँ, यह भी प्रतीत होता है कि हेडर की लंबाई की गणना के लिए एक लिंक की गई सूची ट्रैवेलर की आवश्यकता होती है: stackoverflow.com/questions/14762193/… मुझे गलत मत समझिए । IPv6 भयानक और बहुत जरूरी है। लेकिन यह अभी भी अस्थि-पंजर लगता है।
एडमरिमेनको

3
युक्ति (शीर्ष टिप्पणी में जुड़ी हुई) कहती है कि रूटर्स को हेडर को देखने के लिए नहीं माना जाता है, इसलिए ध्यान नहीं देना चाहिए कि आप क्या हेडर जोड़ते हैं। केवल डेस्टिनेशन नोड को हेडर को देखना चाहिए।
एंडर्स ई। एंडरसन

2
बस एक नोट: "बाल-दिमाग" एक काफी भ्रमित करने वाली वर्तनी है, और "हरे-दिमाग वाले" को प्राथमिकता दी जानी चाहिए (स्रोत: tfd )
pzkpfw

2
Insofar के रूप में वहाँ केवल एक सही वर्तनी है, जो 'hare-brained' है।
एलन बी

जवाबों:


33

यदि आप किसी ऐसी चीज में भाग लेते हैं जिसे आप पार्स नहीं कर सकते हैं, तो आपको अपना निर्णय लेना होगा या पहले से ही पार्स की गई चीज़ों के आधार पर अपनी कार्रवाई करनी होगी।

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

राउटर ऐसे पैकेटों को रूट कर सकते हैं, क्योंकि उन्हें बस जरूरत है रूटिंग हेडर की। दीप पैकेट निरीक्षण गैजेट्स और इस तरह के एक बहुत कुछ जानने की जरूरत है, लेकिन फिर वैसे भी उनकी किस्मत है।

जोड़ने के लिए संपादित: इस डिज़ाइन का अर्थ है कि मिडिलबॉक्स केवल वही बदल सकता है जो वे जानते हैं। यदि कोई मिडबॉक्स किसी हेडर को देखता है तो उसे नहीं पता है, तो उसके पास केवल दो विकल्प हैं: अस्वीकार या पास। IPv4 में यह अज्ञात एक्सटेंशन को भी हटा सकता है और बाकी को पास कर सकता है। IMO यह संपत्ति डिज़ाइन को कम एक्स्टेंसिबल के बजाय अधिक बनाता है।


97

क्या होगा अगर मैं एक गैर-मान्यता प्राप्त एक्सटेंशन हेडर प्रकार का सामना करूं?

से आरएफसी 2460 :

यदि, हेडर को संसाधित करने के परिणामस्वरूप, अगले हेडर के लिए नोड की आवश्यकता होती है, लेकिन वर्तमान हेडर में अगला हेडर मान नोड द्वारा पहचाना नहीं जाता है, तो इसे पैकेट को छोड़ देना चाहिए और स्रोत को एक ICMP पैरामीटर समस्या संदेश भेजना चाहिए। पैकेट , ICMP कोड मान के साथ 1 ("अपरिचित अगला हैडर प्रकार का सामना करना पड़ा") और मूल पैकेट के भीतर अपरिचित मूल्य की भरपाई वाले ICMP सूचक क्षेत्र। यदि नोड नोड IPv6 हेडर के अलावा किसी भी हेडर में शून्य का अगला हैडर मान का सामना करता है, तो वही कार्रवाई की जानी चाहिए।


15
अच्छा। मुझे लगा कि मैं अपना दिमाग खो रहा हूं। तो हाँ, यह वास्तव में एक पूरी तरह से अन-एक्सेसेबल डिज़ाइन है ... कम से कम इन-बैंड सिग्नलिंग और अन्य हैक के बिना। यह एक एप्लिकेशन प्रोटोकॉल में एक्सक्लूसिव है जहां आप दोनों सिरों को नियंत्रित करते हैं और केवल अपने ऐप के नए संस्करणों के लिए खाते में है, लेकिन सैकड़ों वर्षों तक टिके रहने के लिए नहीं?
एडमरिमेनको

8
अज्ञात हेडर को अनदेखा करने की क्षमता होने से बहुत अधिक जटिल मुद्दों का सामना करना पड़ेगा। (क्या होगा अगर एक मध्यवर्ती प्रॉक्सी ने एक एनसिपुलेटिंग ईएसपी हेडर के ज्ञान के बिना टीसीपी हेडर्स को संशोधित किया?) इस मामले में सादगी "एक्स्टेंसिबल" धड़कता है!
जमान

4
@Max IPv6 में पृथ्वी पर हर एक परमाणु को असाइन करने के लिए काफी शाब्दिक पते हैं। इंटरनेट-कनेक्टेड टोस्टर्स की कोई संख्या नहीं है जो इस स्थान को समाप्त कर देगा।
टायलर मैकहेनरी

8
@ मोम मैं यह नहीं कहूंगा कि हमें कभी भी IPv7 की आवश्यकता नहीं होगी, लेकिन IPv6 के साथ हमारे पास पृथ्वी के वायुमंडल में प्रत्येक घन मिलीमीटर (130,000km ऊपर) को एक अद्वितीय पता देने के लिए पर्याप्त पता स्थान है ... 100,000 बार से अधिक। तो मेरा मतलब है, एक बार जब हम अन्य आकाशगंगाओं का उपनिवेश करना शुरू करते हैं तो हमें चिंता करने के लिए कुछ हो सकता है, लेकिन तब तक हमें बहुत अच्छा होना चाहिए।
सिनकोडेनडा

4
कुछ संदर्भ याद आ रहे हैं:With one exception, extension headers are not examined or processed by any node along a packet's delivery path, until the packet reaches the node (or each of the set of nodes, in the case of multicast) identified in the Destination Address field of the IPv6 header.
टोबू

28

IPv6 में एक नया एक्सटेंशन हेडर जोड़ना असंभव है।

गलत, क्योंकि:

  1. केवल गैर-मान्यता प्राप्त एक्सटेंशन हेडर के आधार पर गंतव्य होस्ट को अस्वीकार करने की अनुमति है (इसके साथ आपके द्वारा जुड़े प्रश्न में उल्लिखित एक अपवाद )

  2. यदि आपका नया एक्सटेंशन हेडर किसी तरह से वैकल्पिक है (यह बेहतर था), तो आपको उस बारे में ICMP त्रुटि प्राप्त होगी और इसके बिना फिर से प्रयास कर सकते हैं।


1
और आप निश्चित हैं कि आईसीएमपी पैकेट एनएटी के माध्यम से वास्तविक प्रेषक को बना देगा?
डेक्सटर

5
@Dexter ipv6 NAT को मार देगा ... उम्मीद है
Janus Troelsen

2
@Dexter: उन ICMP पैकेटों को कई कारणों से आने की जरूरत है। उदाहरण के लिए, यदि पाइप का एमटीयू सिकुड़ गया है (शायद पीपीपीओई या वीपीएन की वजह से पैकेट एनकैप्सुलेशन हुआ है), और भेजा जा रहा पैकेट बहुत बड़ा है, तो एक आईसीएमपी पैकेट यह कहते हुए लौटा दिया जाएगा कि पैकेट बहुत बड़ा है।
बिल लिंच

4
@JanusTroelsen हर कोई आपकी आशाओं को साझा नहीं करता है।
Dexter

4

अद्यतन RFC 6564 इस मामले को कवर करता है। यह वास्तव में आपके द्वारा वर्णित परिदृश्य का वर्णन करता है और किसी भी नए एक्सटेंशन हेडर (यदि कोई भी परिभाषित किया गया है) के लिए एक प्रारूप प्रस्तुत करता है, जो कि आपके जैसे मिडबॉक्स में कम से कम कुछ समय के साथ काम करने में सक्षम होगा।

ध्यान रखें कि नए एक्सटेंशन हेडर बनाकर, लेकिन नए डेस्टिनेशन ऑप्शंस को जोड़कर IPv6 का विस्तार करने का इरादा नहीं है। आपके लिए अज्ञात गंतव्य विकल्पों से निपटने के लिए यह तुच्छ या कम से कम बहुत आसान होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.