आमतौर पर, पथ अधिकतम संचरण इकाई की खोज (PMTUD) तब होती है जब एक मेजबान को लगता है कि एक पैकेट बहुत बड़ा होने के कारण गिरा दिया गया था।
यह आवश्यक हो सकता है ICMP विखंडन के जवाब में (टाइप 3, कोड 4) प्रतिक्रिया स्पष्ट रूप से इंगित करती है कि पैकेट गिरा दिया गया था। विशिष्ट अभ्यास में सभी IPv4 पैकेट "डोन्ट फ़्रेग्मेंट" (DF) ध्वज सेट के साथ सेट किए जाते हैं, इसलिए MTU से अधिक का कोई भी पैकेट इस तरह की प्रतिक्रिया को हटा देगा। IPv6 विखंडन का समर्थन नहीं करता है।
कुछ राउटर या होस्ट फायरवॉल सभी ICMP को अक्सर गिरा देते हैं क्योंकि एक भोले प्रशासक का मानना है कि ICMP एक सुरक्षा जोखिम है । या, कुछ लिंक एकत्रीकरण योजनाएं ICMP डिलीवरी को तोड़ सकती हैं । MTU की खोज के लिए एक वैकल्पिक तंत्र को पार कर लिया गया है जो RFC4821 में प्रस्तावित ICMP पर निर्भर नहीं करता है ।
tracepath
MTU जांच के लिए मेरा पसंदीदा लिनक्स उपकरण है। यहां LAN पर एक 9001 MTU के साथ एक मेजबान से एक उदाहरण है, लेकिन जिसे IPsec VPN को 10.33.32.157 तक पहुंचाने के लिए पार करना होगा:
$ tracepath -n 10.33.32.157
1?: [LOCALHOST] pmtu 9001
1: 10.1.22.1 0.122ms pmtu 1500
1: 169.254.3.1 1.343ms pmtu 1422
1: 10.255.254.61 23.790ms
2: no reply
^C [this host won't return an ICMP port unreachable, so tracepath won't terminate]
ICMP त्रुटियों के साथ देखा जा सकता है tcpdump
:
$ sudo tcpdump -p -ni eth0 'icmp and icmp[0] == 3 and icmp[1] == 4'
14:46:57.313690 IP 10.1.22.1 > 10.1.22.194: ICMP 10.33.32.157 unreachable - need to frag (mtu 1500), length 36
14:46:57.315080 IP 169.254.3.1 > 10.1.22.194: ICMP 10.33.32.157 unreachable - need to frag (mtu 1422), length 556
MTU खोजों को कैश किया जाता है। लिनक्स में इसे देखा जा सकता है और इसके साथ फ्लश किया जा सकता है ip
( लिनक्स 3.6 के बाद से परिवर्तनों से सावधान रहें ):
$ ip route get 10.33.32.157
10.33.32.157 via 10.1.22.1 dev eth0 src 10.1.22.194
cache expires 591sec mtu 1422
$ sudo ip route flush cache
$ ip route get 10.33.32.157
10.33.32.157 via 10.1.22.1 dev eth0 src 10.1.22.194
cache
टीसीपी के लिए, कनेक्शन सेटअप के भाग के रूप में MTU से अधिक बचा जा सकता है। प्रत्येक छोर से भेजे गए SYN में शामिल एक अधिकतम खंड आकार (MSS) है। टीसीपी हेडर ( विकल्प को छोड़कर 20 बाइट्स ) और आईपी हेडर (20 बाइट्स) का मतलब है कि एमएसएस और एमटीयू 40 बाइट्स के अंतर से संबंधित हैं।
यहाँ एक बड़ी फ़ाइल को स्थानांतरित करते समय इन दोनों मेजबानों के बीच कनेक्शन सेटअप का एक उदाहरण दिया गया है scp
:
$ sudo tcpdump -p -ni eth0 'host 10.33.32.157 and tcp[13]&2 == 2'
IP 10.1.22.194.45853 > 10.33.32.157.22: Flags [S], seq 634040018, win 26883, options [mss 8961,sackOK,TS val 10952240 ecr 0,nop,wscale 7], length 0
IP 10.33.32.157.22 > 10.1.22.194.45853: Flags [S.], seq 1371736848, ack 634040019, win 26847, options [mss 1379,sackOK,TS val 10824267 ecr 10952240,nop,wscale 7], length 0
पहले पैकेट में, स्थानीय होस्ट 8961 का एमएसएस प्रस्तावित करता है। यह कॉन्फ़िगर किया गया 9001 MTU, 40 बाइट्स से कम है। लौटे SYN / ACK में 1379 का एक MSS है, जो 1419 के MTU से मिलता है। मुझे पता है कि इस नेटवर्क में रिमोट होस्ट भी 8961 भेजा गया था, लेकिन मूल्य को राउटर द्वारा संशोधित किया गया है क्योंकि यह रास्ता जानता है जिसमें एक इंटरनेट पथ शामिल है। MTU 1500) IPsec सुरंग से एक ओवरहेड। इस राउटर ने हमारे भेजे गए MSS को दूसरे होस्ट में 1419 के रूप में प्रदर्शित करने के लिए संशोधित किया। इसे MSS क्लैम्पिंग कहा जाता है ।
तो एक मायने में, PMTUD हर समय हो रहा है। व्यवहार में, यह वास्तव में कभी नहीं हो सकता है, अगर एमएसएस क्लैम्पिंग की जगह है और सभी ट्रैफ़िक टीसीपी पर हो रहे हैं, या यदि राउटर में से कोई भी एमटीयू से छोटा नहीं है जो एंडपॉइंट पर कॉन्फ़िगर किया गया है। एमएसएस क्लैंपिंग के बिना भी यह शायद ही कभी हो सकता है, जब कैश समाप्त हो जाता है।