कर्नेल ड्रॉप पैकेट क्यों होगा?


50

मैंने + को बाधित tcpdumpकिया और इसे कुल सारांश मिला:CtrlC

579204 packets captured
579346 packets received by filter
142 packets dropped by kernel

"कर्नेल द्वारा गिराए गए पैकेट" क्या हैं? ऐसा क्यों होता है?


मेरे मामले में मैं विकल्प -s0 का उपयोग कर रहा था, इसे -s1600 (MTU के ठीक ऊपर) में बदलकर इसे मेरे लिए हल कर दिया।
लातिनसुद

जवाबों:


49

Tcpdump के मैनुअल से:

पैकेट `` कर्नेल द्वारा गिराए गए '' (यह उन पैकेटों की संख्या है जो ओएस में पैकेट कैप्चर तंत्र द्वारा बफर स्पेस की कमी के कारण, जिस पर tcpdump चल रहा है, अगर OS ​​अनुप्रयोगों की जानकारी देता है; यदि नहीं, तो इसे 0 के रूप में रिपोर्ट किया जाएगा।

थोड़ा सा स्पष्टीकरण:

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

आप इस तरह -B( --buffer-size) विकल्प के साथ बफर आकार बढ़ा सकते हैं :

tcpdump -B 4096 ....

ध्यान दें कि आकार किलोबाइट में निर्दिष्ट है, इसलिए ऊपर की रेखा बफर आकार को 4MB पर सेट करती है।


1
इसके अलावा, मैंने जानबूझकर किबी- / mebi- को किलो-/ - मेगा में बदल दिया और लोगों को भ्रमित न करने के लिए libpcap के बारे में एक शब्द छोड़ा।
दिमित्री वासिलीनोव

4
ध्यान दें कि tcpdump में "लंबे विकल्प" के लिए समर्थन अपेक्षाकृत नया है; पुराने संस्करणों में (बहुत पुराने संस्करणों को छोड़कर, जो बफर आकार की स्थापना का समर्थन नहीं करते हैं) आप कर सकते हैं tcpdump -B 4096

एक और नोट, बड़े बफ़र्स को सेटअप करने में समय लगता है। यदि आप बफ़र्स को कुछ पागल करने के लिए सेट करते हैं, तो आप उस प्रारंभिक समय के दौरान पैकेट (tcpdump उन्हें "कर्नेल द्वारा गिराए गए पैकेट") के रूप में रिपोर्ट कर सकते हैं।
dgreene

27

विचार / प्रयास करने के लिए एक और बात यह है कि tcpdumpआईपी ​​को डोमेन नाम के लिए हल करने के लिए DNS प्रश्नों को करने में बहुत समय खर्च हो सकता है। यदि आपको उन लोगों की आवश्यकता नहीं है, तो -n(कोई भी लुकअप नहीं) ध्वज को फेंकने का प्रयास करें । उदाहरण के लिए:

tcpdump -n port 80

2
यह एक तारणहार था। पता नहीं tcpdump ने रिवर्स रिज़ॉल्यूशन किया था जब एक फ़ाइल को डंपिंग !! का उपयोग कर -nn -B 4096मुझे पाने के लिए अनुमति दी0 packets dropped by kernel
ब्लेंका

11

के अनुसार man tcpdump:

कर्नेल द्वारा गिराए गए पैकेट (यह उन पैकेटों की संख्या है जो OS में पैकेट कैप्चर मैकेनिज्म द्वारा बफर स्पेस की कमी के कारण, जिस पर tcpdump चल रहा है, यदि OS अनुप्रयोगों की जानकारी देता है; यदि नहीं, तो यह; रिपोर्ट की जाएगी 0)।

कर्नेल एक निश्चित आकार के कैप्चर बफर में कैप्चर किए गए पैकेट डालता है । यदि tcpdumpवह बफर जल्दी से खाली नहीं होता है, तो कर्नेल बफर में पुराने पैकेटों को ओवरराइट करना शुरू कर देगा और बाद में गिराए गए काउंटर को बढ़ाएगा। उस काउंटर का मूल्य वह है जिसे आप "कर्नेल द्वारा हटाए गए" के रूप में देखते हैं।

वैसे, आप कैप्चर बफर का आकार बदल सकते हैं : विकल्प को KiB आकार के साथ पास tcpdumpकरें -B


2

मैन पेज क्या कहता है इसके अलावा, कुछ अतिरिक्त कारण प्रतीत होते हैं कि कर्नेल द्वारा पैकेट क्यों गिराए जा सकते हैं। मैं 100% पैकेट ड्रॉप का अनुभव कर रहा था, tcpdumpजहां से नेटवर्क पर केवल 512 एमबी प्रति सेकंड का एक पैकेट पैकेट था। स्पष्ट रूप से बफर स्पेस की व्याख्या से कोई मतलब नहीं है - मुझे लगता है कि कर्नेल 0.5kiB / s को संभाल सकता है।

मेरे डिस्ट्रो (उबंटू 14.04) के साथ आने वाली कुछ चीजें लिंक लेयर पर किसी प्रकार की स्मार्ट फ़िल्टरिंग कर रही होंगी जो मेरे टेस्ट पैकेट को पसंद नहीं करती थीं। मेरा वर्कअराउंड एक नया नेटवर्क नेमस्पेस बनाने के लिए था:

sudo -i
ip netns add debug
ip link set dev eth0 netns debug
ip netns exec debug bash
ifconfig eth0 1.2.3.4 up

आंतरिक netnsशेल में, जो भी OS प्रक्रियाएँ पहले समस्याएँ पैदा कर रही थीं, वे चित्र से बाहर हैं और tcpdumpमुझे उन सभी पैकेटों को दिखाती हैं जिनकी मुझे उम्मीद है।


1

मैं tcpdump -cविकल्प का उपयोग करके उपयोगी पाता हूं । इस तरह आप पैकेट की संख्या निर्धारित कर सकते हैं और फिर रुक सकते हैं और आप बफर को नहीं भर सकते।

उदाहरण के लिए, यह लोकलहोस्ट पर tcp अनुरोधों को कैप्चर करेगा।

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