पथ के MTU पर IPerf, स्कैपर और पथ MTU खोज पैकेट कैप्चर सहमत क्यों नहीं होते?


11

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

स्कैपर का उपयोग करना :

root@kitandara:/home/jm# scamper -I "trace -M 10.64.0.2"
traceroute from 10.1.0.5 to 10.64.0.2
 1  10.1.0.1  0.180 ms [mtu: 6128]
 2  10.64.0.2  0.243 ms [mtu: 6128]

अच्छा: 6128 बाइट्स अपेक्षित परिणाम है (सस्ते Realtek ईथरनेट एडेप्टर एक सभ्य आकार के जंबो फ्रेम को संभाल नहीं सकते हैं)।

अब, iperf एक थ्रूपुट परीक्षण करें और हमें MTU के बारे में बताएं:

root@kitandara:/home/jm# iperf -c 10.64.0.2 -N -m
------------------------------------------------------------
Client connecting to 10.64.0.2, TCP port 5001
TCP window size: 66.2 KByte (default)
------------------------------------------------------------
[  3] local 10.1.0.5 port 59828 connected with 10.64.0.2 port 5001
[ ID] Interval       Transfer     Bandwidth
[  3]  0.0-10.0 sec  1011 MBytes   848 Mbits/sec
[  3] MSS size 6076 bytes (MTU 6116 bytes, unknown interface)

6116 बाइट्स? क्यों ?

और अब पूरी तरह से अलग कुछ के लिए, आइए देखें कि इस सत्र का ट्रैफ़िक वास्तव में क्या था:

root@kitandara:/home/jm# tshark -i eth0 -R "(ip.dst == 10.64.0.2) || (ip.src == 10.64.0.2)" | head
Capturing on eth0
  1.308557     10.1.0.5 -> 10.64.0.2    TCP 74 60310 > 5001 [SYN] Seq=0 Win=5340 Len=0 MSS=534 SACK_PERM=1 TSval=101928961 TSecr=0 WS=16
  1.308801    10.64.0.2 -> 10.1.0.5     TCP 74 5001 > 60310 [SYN, ACK] Seq=0 Ack=1 Win=18328 Len=0 MSS=6088 SACK_PERM=1 TSval=3764064056 TSecr=101928961 WS=64

6088 बाइट्स MSS, जिसका अर्थ है एक 6128 MTU ... अच्छा है। लेकिन फिर iperf 6116 बाइट MTU की घोषणा क्यों करता है?

उस बिंदु पर पूरी तरह से कॉल स्कैपर ट्रेस सत्र के दौरान क्या होता है, इस पर करीबी नज़र रखने के लिए कहता है:

root@kitandara:/home/jm# tshark -i eth0 -R "(ip.dst == 10.64.0.2) || (ip.src == 10.64.0.2)"
Capturing on eth0
  0.000000     10.1.0.5 -> 10.64.0.2    UDP 58 Source port: 43870  Destination port: 33435
  0.000175     10.1.0.1 -> 10.1.0.5     ICMP 86 Time-to-live exceeded (Time to live exceeded in transit)
  0.050358     10.1.0.5 -> 10.64.0.2    UDP 58 Source port: 43870  Destination port: 33436
  0.050592    10.64.0.2 -> 10.1.0.5     ICMP 86 Destination unreachable (Port unreachable)
  0.099790     10.1.0.5 -> 10.64.0.2    UDP 6142 Source port: 43870  Destination port: 33437
  0.100912    10.64.0.2 -> 10.1.0.5     ICMP 590 Destination unreachable (Port unreachable)

उन सभी पैकेटों में दो के अलावा 24 का एक udp.length है, जिसमें 6108 का udp.length है ... लेकिन फिर कैसे स्कैपर हमें बताता है कि MTU 6128 पथ है?

6108, 6116, 6128 ... इतने एमटीयू से चुनने के लिए!


क्या किसी उत्तर ने आपकी मदद की? यदि हां, तो आपको उत्तर स्वीकार करना चाहिए ताकि प्रश्न हमेशा के लिए पॉपिंग न हो जाए, उत्तर की तलाश में है। वैकल्पिक रूप से, आप अपना स्वयं का उत्तर प्रदान कर सकते हैं और स्वीकार कर सकते हैं।
रॉन Maupin

जवाबों:


4

बहुत ही रोचक।

एमएसएस (अधिकतम खंड आकार) = एमटीयू - आईपी हेडर = 6076।

6076 + 40 = 6116।

यह हो सकता है डेबियन आईपी हेडर में आईपी विकल्प फ़ील्ड का उपयोग कर रहा है? यह अतिरिक्त 12 बाइट्स हो सकता है ...


क्या यह संभव है कि टीसीपी हैंडशेक एक 6128 बाइट्स MTU स्थापित करता है और फिर iperf को पता चलता है कि वह एक समय में 6116 से अधिक बाइट्स प्रसारित करने में विफल रहा - जो "आधिकारिक" एक से संबंधित अनुभवजन्य एमटीयू का एक प्रकार होगा?
जीन-मार्क लिओटियर

IP विकल्प जो भी हो, क्या कोई पैडिंग नहीं है जो उस लंबाई (IP विकल्प + गद्दी) = 32 बिट्स को सुनिश्चित करता है?
जीन-मार्क लिओटियर

12 बाइट्स ... क्या आपके पास "आईपी विकल्प" के बजाय "टीसीपी विकल्प" का मतलब नहीं था?
जीन-मार्क लिओटियर

मैंने iperf सत्र के TCP विकल्पों का नमूना लिया: जाहिरा तौर पर हमेशा 12 बाइट्स (केवल टाइमस्टैम्प)
जीन-मार्क लिओटियर

2
Github.com/jasonrm/iperf/blob/… में एक टिप्पणी कहती है "// पढ़े आकारों का ध्यान रखें -> MTU आकार के कुछ संकेत देता है" और github.com/jasonrm/iperf/blob- "में एक और कहता है" रिपोर्ट MSS और MTU, MSS (या एक अनुमान) दिया गया - "यह देखते हुए कि iperf वास्तविक पथ MTU डिस्कवरी का समर्थन करने वाला है।
जीन-मार्क लिओटियर

3

tshark ईथरनेट फ्रेम आकार की रिपोर्ट कर रहा है: 6142 - 14 (ईथरनेट हेडर) = 6128 आईपी बाइट्स।

घोटालेबाज MTU खोज के लिए बड़े पैकेट के साथ जांच करने से पहले छोटे पैकेट के साथ एक अनुरेखक करता है (यही कारण है कि आप छोटे पैकेट देखते हैं जिसके बाद बड़े होते हैं)। यह सभी पैकेटों को छोड़ने / गैर-जिम्मेदार और केवल बड़े लोगों के बीच अंतर करने के लिए उपयोगी है।

https://www.usenix.org/conference/imc-05/inferring-and-debugging-path-mtu-discovery-failures

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