কার্নেল কেন প্যাকেট ড্রপ করবে?


49

আমি + এর tcpdumpসাথে বাধা পেয়েছি এবং এই মোট সংক্ষিপ্তসার পেয়েছি:CtrlC

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

"কার্নেল দ্বারা প্যাকেটগুলি ফেলে দেওয়া" কী কী? কেন এমন হয়?


আমার ক্ষেত্রে আমি বিকল্প -s0 বিকল্পটি ব্যবহার করছিলাম, এটিকে -s1600 (এমটিইউয়ের ঠিক উপরে) -তে পরিবর্তন করা আমার জন্য এটি সমাধান করেছে।
ল্যাটিনসুড

উত্তর:


48

Tcpdump এর ম্যানুয়াল থেকে:

প্যাকেটগুলি ker ker কার্নেল দ্বারা ফেলে দেওয়া হয়েছে '' (ওএসের প্যাকেট ক্যাপচার পদ্ধতিতে যে টিসিপিডাম্প চলছে সেগুলি দ্বারা, বাফারের জায়গার অভাবে এই প্যাকেটগুলি ফেলে দেওয়া হয়েছিল), যদি ওএস অ্যাপ্লিকেশনগুলিতে সেই তথ্যটি রিপোর্ট করে; যদি তা না হয় তবে এটি 0 হিসাবে প্রতিবেদন করা হবে।

কিছুটা ব্যাখ্যা:

tcpdumpএকটি নেটওয়ার্ক ইন্টারফেসের মাধ্যমে ক্ষণস্থায়ী কাঁচা প্যাকেট ধারন করে না। কমান্ড লাইনে আপনার দ্বারা নির্ধারিত নিয়ম অনুসারে প্যাকেটগুলি পার্স এবং ফিল্টার করতে হবে এবং এতে কিছুটা সময় লাগে, সুতরাং আগত প্যাকেটগুলি প্রসেসিংয়ের জন্য বাফার করতে হবে (সারিযুক্ত)। কখনও কখনও অনেকগুলি প্যাকেট থাকে, সেগুলি একটি বাফারে সংরক্ষণ করা হয়, তবে তারা প্রক্রিয়াজাতকরণের চেয়ে দ্রুত সংরক্ষণ করা হয়, সুতরাং অবশেষে বাফারটি স্থানের বাইরে চলে যায়, সুতরাং বাফারে কিছু খালি জায়গা না পাওয়া পর্যন্ত কার্নেল আরও সমস্ত প্যাকেট ফেলে দেয়।

আপনি -B( --buffer-size) বিকল্পের সাহায্যে বাফার আকারটি বাড়িয়ে তুলতে পারেন :

tcpdump -B 4096 ....

নোট করুন যে আকারটি কিলোবাইটে নির্দিষ্ট করা আছে, সুতরাং উপরের লাইনটি বাফার আকারটি 4MB তে সেট করে।


1
এছাড়াও আমি ইচ্ছাকৃতভাবে কিবি- / মেবি-কে কিলো- / মেগা- তে পরিবর্তন করেছি এবং লোককে বিভ্রান্ত না করার জন্য লিপপ্যাক্যাপ সম্পর্কিত একটি শব্দ বাদ দিয়েছি।
দিমিত্রি ভ্যাসিল্যানভ

4
আরও মনে রাখবেন যে tcpdump এ "দীর্ঘ বিকল্পগুলির" জন্য সমর্থন তুলনামূলকভাবে নতুন; পুরানো সংস্করণগুলিতে (অনেক পুরানো সংস্করণ বাদে, যা বাফার আকার নির্ধারণে সমর্থন করে না) আপনি করতে পারেন tcpdump -B 4096

অন্য দ্রষ্টব্য, বড় বাফার সেটআপ করতে সময় লাগে। যদি আপনি বাফারগুলিকে ক্রেজি কিছুতে সেট করেন তবে আপনি প্যাকেটগুলি মিস করতে পারেন (tcpdump এগুলি "কর্নেল দ্বারা প্যাকেটগুলি" হিসাবে আটকানো হিসাবে রিপোর্ট করে)) আরম্ভের সময়।
dgreene

26

আরও একটি বিষয় বিবেচনা করার / চেষ্টা করা হ'ল এটি হ'ল tcpdumpআইপিগুলি ডোমেন নামগুলিতে সমাধান করতে ডিএনএস অনুসন্ধানগুলি করতে অনেক সময় ব্যয় করতে পারে। আপনার যদি এগুলির দরকার না হয় তবে -n(কোনও অনুসন্ধানের জন্য) পতাকাটি ছোঁড়ার চেষ্টা করুন । উদাহরণ:

tcpdump -n port 80

1
এই ছিল একজন ত্রাণকর্তা। কোনও ফাইলের সাথে ডাম্প করার সময় tcpdump বিপরীত রেজোলিউশনটি বুঝতে পারেনি !! ব্যবহার করা -nn -B 4096আমাকে পেতে অনুমতি দেওয়া0 packets dropped by kernel
Blanka

11

মতে man tcpdump:

কার্নেলের দ্বারা প্যাকেটগুলি ফেলে দেওয়া হয়েছে (ওএসের যে প্যাকেট ক্যাপচার পদ্ধতিতে টিসিপিডাম্প চলছে সেগুলি দ্বারা বাফার স্পেসের অভাবে এই প্যাকেটগুলি ফেলে দেওয়া হয়েছিল , যদি ওএস অ্যাপ্লিকেশনগুলিতে সেই তথ্যটি রিপোর্ট করে; যদি তা না হয় তবে) 0 হিসাবে রিপোর্ট করা হবে)।

কার্নেল একটি স্থির আকারের ক্যাপচার বাফারে ক্যাপচারিত প্যাকেটগুলি রাখে । যদি tcpdumpসেই বাফারটি দ্রুত খালি না করে, কার্নেলটি বাফারে পুরানো প্যাকেটগুলি ওভাররাইট করা এবং একইভাবে বাদ দেওয়া কাউন্টারকে বাড়িয়ে তোলা শুরু করবে । এই কাউন্টারটির মান হ'ল "কার্নেল দ্বারা নামানো" হিসাবে আপনি যা দেখছেন।

যাইহোক, আপনি ক্যাপচার বাফারকে আকার পরিবর্তন করতে পারেন : কিবি আকার দিয়ে বিকল্পটি পাস tcpdumpকরুন Pass-B


2

ম্যান পৃষ্ঠাটি যা বলেছে তা ছাড়াও কার্নেলের দ্বারা প্যাকেটগুলি ফেলে দেওয়ার কিছু অতিরিক্ত কারণ রয়েছে বলে মনে হয়। আমি 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আমার কাছে যে প্যাকেটগুলি দেখার প্রত্যাশা রয়েছে সেগুলি আমাকে প্রদর্শন করে।


1

আমি tcpdump -cবিকল্পটি ব্যবহার করে দরকারী মনে করি । এইভাবে আপনি প্যাকেটের সংখ্যা নির্ধারণ করতে পারেন এবং তারপরে থামাতে পারবেন এবং আপনি বাফারটি পূরণ করতে পারবেন না।

উদাহরণস্বরূপ, এটি লোকালহোস্টে টিসিপি অনুরোধগুলি ক্যাপচার করবে।

tcpdump -ni lo tcp -c 20
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.