2008-12-09 12 views
8

मुझे यह जानकर उत्सुकता है कि आईपी ध्वज के "डीएफ फ्रैगमेंट" [डीएफ] बिट का उपयोग किया जाता है। चूंकि विखंडन उच्च परतों के लिए अदृश्य है और उन्हें भी परवाह नहीं है।आईपी फ्लैग का डू फ्रैगमेंट बिट क्यों उपयोग किया जाता है?

मैं भी एक उदाहरण की तलाश में हूं।

बहुत पहले से धन्यवाद।

उत्तर

14

फ्रैगमेंटेशन सभी ऊपरी परतों के लिए हमेशा अदृश्य नहीं होता है। कुछ शुरुआती (और शायद यहां तक ​​कि वर्तमान) माइक्रो नियंत्रक टीसीपी/आईपी स्टैक्स ने पूर्ण क्षमताओं जैसे कि विखंडन हैंडलिंग को लागू नहीं किया। उस स्थिति में ध्वज का उपयोग यह सुनिश्चित करेगा कि पैकेट अपने मूल रूप में कई टुकड़ों की बजाय पहुंचेगा, जो दूसरे छोर को संभाल नहीं सके।

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

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

12

@Pax's answer (या शायद उसके द्वारा वर्णित परीक्षण के हिस्से के रूप में) के अलावा, डीपी ध्वज का उपयोग में भी किया जाता है। यह तब होता है जब आप यह पता लगाने की कोशिश करते हैं कि किसी दिए गए लिंक के लिए खंडित किए बिना सबसे बड़ा पैकेट भेजा जा सकता है।

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

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

+2

यह जानना बहुत आसान है। +1। – paxdiablo

5

सी में डीएफ स्थापित करने के लिए लिनक्स पर कोई मानक तरीका है कि वहाँ ध्यान दें करो, इस कोड काम करता है:

result = setsockopt(mysocket, IPPROTO_IP, 
       IP_MTU_DISCOVER, IP_PMTUDISC_DO, sizeof(int)); 

लेकिन यह FreeBSD पर नहीं है 6

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

कारण है कि IETF अब MTU परीक्षण करने के लिए एक नया तरीका का सुझाव है कि, पर पथ MTU डिस्कवरी निर्भर रहे बिना: आरएफसी 4821: "packetization परत पथ MTU खोज"