আমি + এর 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 এর ম্যানুয়াল থেকে:
প্যাকেটগুলি ker ker কার্নেল দ্বারা ফেলে দেওয়া হয়েছে '' (ওএসের প্যাকেট ক্যাপচার পদ্ধতিতে যে টিসিপিডাম্প চলছে সেগুলি দ্বারা, বাফারের জায়গার অভাবে এই প্যাকেটগুলি ফেলে দেওয়া হয়েছিল), যদি ওএস অ্যাপ্লিকেশনগুলিতে সেই তথ্যটি রিপোর্ট করে; যদি তা না হয় তবে এটি 0 হিসাবে প্রতিবেদন করা হবে।
কিছুটা ব্যাখ্যা:
tcpdumpএকটি নেটওয়ার্ক ইন্টারফেসের মাধ্যমে ক্ষণস্থায়ী কাঁচা প্যাকেট ধারন করে না। কমান্ড লাইনে আপনার দ্বারা নির্ধারিত নিয়ম অনুসারে প্যাকেটগুলি পার্স এবং ফিল্টার করতে হবে এবং এতে কিছুটা সময় লাগে, সুতরাং আগত প্যাকেটগুলি প্রসেসিংয়ের জন্য বাফার করতে হবে (সারিযুক্ত)। কখনও কখনও অনেকগুলি প্যাকেট থাকে, সেগুলি একটি বাফারে সংরক্ষণ করা হয়, তবে তারা প্রক্রিয়াজাতকরণের চেয়ে দ্রুত সংরক্ষণ করা হয়, সুতরাং অবশেষে বাফারটি স্থানের বাইরে চলে যায়, সুতরাং বাফারে কিছু খালি জায়গা না পাওয়া পর্যন্ত কার্নেল আরও সমস্ত প্যাকেট ফেলে দেয়।
আপনি -B( --buffer-size) বিকল্পের সাহায্যে বাফার আকারটি বাড়িয়ে তুলতে পারেন :
tcpdump -B 4096 ....
নোট করুন যে আকারটি কিলোবাইটে নির্দিষ্ট করা আছে, সুতরাং উপরের লাইনটি বাফার আকারটি 4MB তে সেট করে।
tcpdump -B 4096।
আরও একটি বিষয় বিবেচনা করার / চেষ্টা করা হ'ল এটি হ'ল tcpdumpআইপিগুলি ডোমেন নামগুলিতে সমাধান করতে ডিএনএস অনুসন্ধানগুলি করতে অনেক সময় ব্যয় করতে পারে। আপনার যদি এগুলির দরকার না হয় তবে -n(কোনও অনুসন্ধানের জন্য) পতাকাটি ছোঁড়ার চেষ্টা করুন । উদাহরণ:
tcpdump -n port 80
-nn -B 4096আমাকে পেতে অনুমতি দেওয়া0 packets dropped by kernel
মতে man tcpdump:
কার্নেলের দ্বারা প্যাকেটগুলি ফেলে দেওয়া হয়েছে (ওএসের যে প্যাকেট ক্যাপচার পদ্ধতিতে টিসিপিডাম্প চলছে সেগুলি দ্বারা বাফার স্পেসের অভাবে এই প্যাকেটগুলি ফেলে দেওয়া হয়েছিল , যদি ওএস অ্যাপ্লিকেশনগুলিতে সেই তথ্যটি রিপোর্ট করে; যদি তা না হয় তবে) 0 হিসাবে রিপোর্ট করা হবে)।
কার্নেল একটি স্থির আকারের ক্যাপচার বাফারে ক্যাপচারিত প্যাকেটগুলি রাখে । যদি tcpdumpসেই বাফারটি দ্রুত খালি না করে, কার্নেলটি বাফারে পুরানো প্যাকেটগুলি ওভাররাইট করা এবং একইভাবে বাদ দেওয়া কাউন্টারকে বাড়িয়ে তোলা শুরু করবে । এই কাউন্টারটির মান হ'ল "কার্নেল দ্বারা নামানো" হিসাবে আপনি যা দেখছেন।
যাইহোক, আপনি ক্যাপচার বাফারকে আকার পরিবর্তন করতে পারেন : কিবি আকার দিয়ে বিকল্পটি পাস tcpdumpকরুন Pass-B
ম্যান পৃষ্ঠাটি যা বলেছে তা ছাড়াও কার্নেলের দ্বারা প্যাকেটগুলি ফেলে দেওয়ার কিছু অতিরিক্ত কারণ রয়েছে বলে মনে হয়। আমি 100% প্যাকেট ড্রপ অনুভব করছিলাম tcpdumpযেখান থেকে নেটওয়ার্কে কেবলমাত্র ট্র্যাফিকই ছিল প্রতি সেকেন্ডে পিআরবিএসের এক 512 বি প্যাকেট। স্পষ্টত বাফার স্পেসের ব্যাখ্যাটি এখানে অর্থবোধ করে না - আমি মনে করি কার্নেলটি 0.5kiB / গুলি পরিচালনা করতে পারে।
আমার ডিসট্রো (উবুন্টু ১৪.০৪) সহ কিছু এসেছে যা লিঙ্ক স্তরটিতে কিছু ধরণের স্মার্ট ফিল্টারিং করছিল যা আমার পরীক্ষার প্যাকেটগুলি পছন্দ করে না। আমার কাজের ভিত্তিটি ছিল নীচে একটি নতুন নেটওয়ার্ক নেমস্পেস তৈরি করা:
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শেলটিতে, যে কোনও ওএস প্রক্রিয়া যা আগে সমস্যা তৈরি করেছিল তা চিত্রের বাইরে এবং tcpdumpআমার কাছে যে প্যাকেটগুলি দেখার প্রত্যাশা রয়েছে সেগুলি আমাকে প্রদর্শন করে।
আমি tcpdump -cবিকল্পটি ব্যবহার করে দরকারী মনে করি । এইভাবে আপনি প্যাকেটের সংখ্যা নির্ধারণ করতে পারেন এবং তারপরে থামাতে পারবেন এবং আপনি বাফারটি পূরণ করতে পারবেন না।
উদাহরণস্বরূপ, এটি লোকালহোস্টে টিসিপি অনুরোধগুলি ক্যাপচার করবে।
tcpdump -ni lo tcp -c 20