मैंने + को बाधित tcpdump
किया और इसे कुल सारांश मिला:CtrlC
579204 packets captured
579346 packets received by filter
142 packets dropped by kernel
"कर्नेल द्वारा गिराए गए पैकेट" क्या हैं? ऐसा क्यों होता है?
मैंने + को बाधित tcpdump
किया और इसे कुल सारांश मिला:CtrlC
579204 packets captured
579346 packets received by filter
142 packets dropped by kernel
"कर्नेल द्वारा गिराए गए पैकेट" क्या हैं? ऐसा क्यों होता है?
जवाबों:
Tcpdump के मैनुअल से:
पैकेट `` कर्नेल द्वारा गिराए गए '' (यह उन पैकेटों की संख्या है जो ओएस में पैकेट कैप्चर तंत्र द्वारा बफर स्पेस की कमी के कारण, जिस पर tcpdump चल रहा है, अगर OS अनुप्रयोगों की जानकारी देता है; यदि नहीं, तो इसे 0 के रूप में रिपोर्ट किया जाएगा।
थोड़ा सा स्पष्टीकरण:
tcpdump
एक नेटवर्क इंटरफेस के माध्यम से गुजर कच्चे पैकेट कैप्चर करता है। पैकेट्स को कमांड लाइन में आपके द्वारा निर्दिष्ट नियमों के अनुसार पार्स और फ़िल्टर किया जाना है, और इसमें कुछ समय लगता है, इसलिए आने वाले पैकेटों को प्रसंस्करण के लिए बफर (कतारबद्ध) करना होगा। कभी-कभी बहुत अधिक पैकेट होते हैं, वे एक बफर में सहेजे जाते हैं, लेकिन वे संसाधित होने से अधिक तेज़ी से सहेजे जाते हैं, इसलिए अंततः बफर अंतरिक्ष से बाहर चला जाता है, इसलिए कर्नेल सभी आगे के पैकेट को तब तक छोड़ देता है जब तक कि बफर में कुछ खाली स्थान न हो।
आप इस तरह -B
( --buffer-size
) विकल्प के साथ बफर आकार बढ़ा सकते हैं :
tcpdump -B 4096 ....
ध्यान दें कि आकार किलोबाइट में निर्दिष्ट है, इसलिए ऊपर की रेखा बफर आकार को 4MB पर सेट करती है।
tcpdump -B 4096
।
विचार / प्रयास करने के लिए एक और बात यह है कि tcpdump
आईपी को डोमेन नाम के लिए हल करने के लिए DNS प्रश्नों को करने में बहुत समय खर्च हो सकता है। यदि आपको उन लोगों की आवश्यकता नहीं है, तो -n
(कोई भी लुकअप नहीं) ध्वज को फेंकने का प्रयास करें । उदाहरण के लिए:
tcpdump -n port 80
-nn -B 4096
मुझे पाने के लिए अनुमति दी0 packets dropped by kernel
के अनुसार man tcpdump
:
कर्नेल द्वारा गिराए गए पैकेट (यह उन पैकेटों की संख्या है जो OS में पैकेट कैप्चर मैकेनिज्म द्वारा बफर स्पेस की कमी के कारण, जिस पर tcpdump चल रहा है, यदि OS अनुप्रयोगों की जानकारी देता है; यदि नहीं, तो यह; रिपोर्ट की जाएगी 0)।
कर्नेल एक निश्चित आकार के कैप्चर बफर में कैप्चर किए गए पैकेट डालता है । यदि tcpdump
वह बफर जल्दी से खाली नहीं होता है, तो कर्नेल बफर में पुराने पैकेटों को ओवरराइट करना शुरू कर देगा और बाद में गिराए गए काउंटर को बढ़ाएगा। उस काउंटर का मूल्य वह है जिसे आप "कर्नेल द्वारा हटाए गए" के रूप में देखते हैं।
वैसे, आप कैप्चर बफर का आकार बदल सकते हैं : विकल्प को KiB आकार के साथ पास tcpdump
करें -B
।
मैन पेज क्या कहता है इसके अलावा, कुछ अतिरिक्त कारण प्रतीत होते हैं कि कर्नेल द्वारा पैकेट क्यों गिराए जा सकते हैं। मैं 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
मुझे उन सभी पैकेटों को दिखाती हैं जिनकी मुझे उम्मीद है।