লিনাক্সে বিলম্বিত এবং ফেলে দেওয়া প্যাকেটগুলি অনুকরণ করুন


246

আমি কোনও অ্যাপ্লিকেশনটির কার্যকারিতা পরিমাপ করতে লিনাক্সের জন্য UDPএবং প্যাকেট বিলম্ব এবং ক্ষতির অনুকরণ করতে চাই TCP। এটি করার কোন সহজ পথ আছে কি?



1
ওএস এক্সের জন্য দেখুন: superuser.com
জিজ্ঞাসা

উত্তর:


323

নেটওয়ার্ক সিমুলেট করার জন্য ইতিমধ্যে লিনাক্স এবং ইউজারস্পেস ইউটিলিটিতে অন্তর্নিযুক্ত নেটিম লিভারেজ কার্যকারিতা। এটিই মার্কের উত্তরটিকে ভিন্ন নামে বোঝায়।

তাদের হোমপেজের উদাহরণগুলি ইতিমধ্যে দেখিয়েছে যে আপনি যা চেয়েছিলেন তা কীভাবে অর্জন করতে পারেন:

উদাহরণ

প্রশস্ত অঞ্চল নেটওয়ার্ক বিলম্ব অনুকরণ

এটি সবচেয়ে সহজ উদাহরণ, এটি স্থানীয় ইথারনেট থেকে বেরিয়ে আসা সমস্ত প্যাকেটের জন্য একটি নির্দিষ্ট পরিমাণ বিলম্ব যুক্ত করে।

# tc qdisc add dev eth0 root netem delay 100ms

স্থানীয় নেটওয়ার্কে হোস্ট করার জন্য এখন একটি সাধারণ পিং পরীক্ষায় 100 মিলিসেকেন্ডের বৃদ্ধি দেখানো উচিত। বিলম্বটি কার্নেলের (Hz) ঘড়ির রেজুলেশন দ্বারা সীমাবদ্ধ। বেশিরভাগ 2.4 সিস্টেমে, সিস্টেমের ঘড়িটি 100 হার্জেডে চলে যা 10 এমএসের ইনক্রিমেন্টে বিলম্ব করতে দেয়। ২.6-তে, মানটি 1000 থেকে 100 হার্জেডের কনফিগারেশন প্যারামিটার।

পরবর্তী উদাহরণগুলি কিউডিস্ক পুনরায় লোড না করে প্যারামিটারগুলি পরিবর্তন করে

রিয়েল ওয়াইড এরিয়া নেটওয়ার্কগুলি পরিবর্তনশীলতা দেখায় যাতে এলোমেলো প্রকরণটি যুক্ত করা সম্ভব।

# tc qdisc change dev eth0 root netem delay 100ms 10ms

এর ফলে অতিরিক্ত দেরি 100 ± 10 এমএস হতে পারে। নেটওয়ার্ক বিলম্বের প্রকরণটি নিখুঁতভাবে এলোমেলো নয়, তাই অনুকরণ করার জন্য যে কোনও সংযোগের মানও রয়েছে।

# tc qdisc change dev eth0 root netem delay 100ms 10ms 25%

এটি শেষের উপর 25% নির্ভর করে পরবর্তী এলোমেলো উপাদানগুলির সাথে যুক্ত বিলম্বের কারণ 100 ± 10 এমএস করে। এটি সত্য পরিসংখ্যানের সম্পর্ক নয়, তবে প্রায় x

বিলম্ব বিতরণ

সাধারণত, কোনও নেটওয়ার্কের বিলম্ব সমান নয়। বিলম্বের তারতম্যটি বর্ণনা করতে সাধারণ বিতরণের মতো কিছু ব্যবহার করা বেশি সাধারণ। নিমটম শৃঙ্খলা অ-ইউনিফর্ম বিতরণ নির্দিষ্ট করার জন্য একটি টেবিল নিতে পারে।

# tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal

আসল সারণীগুলি (সাধারণ, পেরেটো, প্যারেটোনোরমাল) আইপ্রউট 2 সংকলনের অংশ হিসাবে তৈরি করা হয় এবং / usr / lib / tc এ স্থাপন করা হয়; সুতরাং পরীক্ষামূলক ডেটার উপর ভিত্তি করে আপনার নিজস্ব বিতরণ করার কিছু প্রচেষ্টা দিয়ে এটি সম্ভব।

প্যাকেটের ক্ষয়ক্ষতি

'টিসি' কমান্ডে শতাংশে র্যান্ডম প্যাকেটের ক্ষতি নির্দিষ্ট করা হয়। ক্ষুদ্রতম সম্ভব শূন্যের মানটি হ'ল:

2 −32 = 0.0000000232%

# tc qdisc change dev eth0 root netem loss 0.1%

এর ফলে শতাংশের 1/10 তম (অর্থাত্ 1000 এর মধ্যে 1) প্যাকেটগুলি এলোমেলোভাবে বাদ দেওয়া হয়।

একটি alচ্ছিক সম্পর্কও যুক্ত হতে পারে। এটি এলোমেলো সংখ্যা জেনারেটরটি কম এলোমেলো করে তোলে এবং প্যাকেট ফাটিয়ে ক্ষতির অনুকরণ করতে ব্যবহৃত হতে পারে।

# tc qdisc change dev eth0 root netem loss 0.3% 25%

এটি প্যাকেটের 0.3% হারিয়ে যাবে এবং প্রতিটি ক্রমান্বয়ে সম্ভাবনা শেষের এক চতুর্থাংশের উপর নির্ভর করে।

প্রোব n = 0.25 b প্রোব n-1 + 0.75 × র্যান্ডম

মনে রাখবেন যে আপনার tc qdisc addযদি সেই ইন্টারফেসের জন্য কোনও বিধি না tc qdisc changeথাকে বা যদি আপনার ইতিমধ্যে সেই ইন্টারফেসের জন্য বিধি থাকে তবে আপনার ব্যবহার করা উচিত । tc qdisc changeকোনও নিয়ম ছাড়াই একটি ইন্টারফেসে ব্যবহার করার চেষ্টা করা ত্রুটিটি দেবে RTNETLINK answers: No such file or directory


2
আসল ওয়েবসাইটটিতে ত্রুটি রয়েছে, আমি কেবল সেই লেখাটি সরাসরি অনুলিপি করেছি। তবে হ্যাঁ, 2 ^ (- 32) = 2.33e -10
ephemient

34
নোট যা tc -p qdisc ls dev eth0বর্তমান সংজ্ঞায়িত বিধিগুলি তালিকাভুক্ত করবে এবং tc qdisc del dev eth0 rootসেগুলি মুছে
ফেলবে

1
অস্তিত্বহীন এন্ট্রি পরিবর্তন করার চেষ্টা করার সময় ত্রুটি নির্দেশ করার জন্য উন্নীত হয়েছে
নিও

আমি জানিনা কেন আমি এই ত্রুটিগুলি পাই? ubuntu @ anmol-vm1-new: / home / hadoop / yarnpp / workloads / RESULTS $ sudo tc qdisc dev eth0 root netem বিলম্ব 100ms আরটিএনটিএল উত্তরগুলি উত্তর: ফাইলটি উবুন্টু @ আনমোল-ভিএম 1-নতুন: / হোম / হ্যাডোপ / ইয়ার্ন্প / ওয়ার্কলোড / ফলাফল $ sudo tc qdisc change dev eth0 root netem বিলম্ব 100ms RTNETLINK উত্তর: অবৈধ আর্গুমেন্ট সার্ভারফল্ট
মোনা জালাল

কম গতির লিঙ্কগুলি অনুকরণ করতে কীভাবে পুরো ইন্টারফেসের মধ্য দিয়ে আউটপুট সীমাবদ্ধ করা যায় তার বিশদ অন্তর্ভুক্ত করা সম্ভবত একটি ভাল ধারণা হবে
পাভেল পি

91

বাদ দেওয়া প্যাকেটের জন্য আমি কেবল iptables এবং পরিসংখ্যান মডিউলটি ব্যবহার করব ।

iptables -A INPUT -m statistic --mode random --probability 0.01 -j DROP

উপরে 1% সম্ভাব্যতা সহ আগত প্যাকেটটি নামবে। সতর্কতা অবলম্বন করুন, প্রায় 0.14 এর উপরে কিছু এবং আপনার বেশিরভাগ টিসিপি সংযোগগুলি সম্ভবত পুরোপুরি স্টল হয়ে যাবে।

ম্যান আইপটেবলগুলি একবার দেখুন এবং আরও তথ্যের জন্য "পরিসংখ্যান" অনুসন্ধান করুন।


6
কেন টিসিপি সংযোগগুলি 14% এরও বেশি কিছুতে স্টল করবে?
ডেভিড ওলবার

2
@ ডেভিডওয়েভার: যেভাবে টিসিপি স্লাইডিং উইন্ডোজ আকারটি সামঞ্জস্য করা হয়েছে। তবে ১৪% নিখুঁতভাবে অভিজ্ঞতা থেকে এসেছে, নিজে চেষ্টা করে দেখুন এবং আপনি দেখতে পাবেন যে এসএসআই বেশিরভাগ ক্ষেত্রে অকার্যকর হয়ে পড়েছে ১৪% বা তারও উপরে, তবে প্যাকেট ড্রপ রেটের নিম্ন স্তরে বেশ কার্যকরভাবে কাজ করে।
বজার্ক ফ্রুন্ড-হ্যানসেন

12
সুরক্ষার জন্য, সম্ভবত আপনি যে পোর্টটি পরীক্ষা করতে চান সেটি কেবলমাত্র বন্দরটিতে প্রয়োগ করার নিয়ম সীমাবদ্ধ করা সবচেয়ে ভাল: iptables -A INPUT --dport FOO -m পরিসংখ্যান .... এইভাবে, আপনার এসএসএস এবং অন্যান্য সংযোগগুলি হবে নিরবচ্ছিন্ন থাকুন এবং এর সাথে যে কোনও সমস্যা দ্রুত প্রজনন করতে সক্ষম হবার জন্য আগ্রহের সেবার জন্য আপনি ড্রপ-রেটটি ঘাটতে পারেন।
মিখাইল টি।

5
লক্ষ্য করুন DROPউপর বিদেশগামী সংযোগ বরং হাস্যকর কারণ send()অপারেশন রিটার্ন EPERM, বরং তারপর প্যাকেট ড্রপ (যেমন এটি করা উচিত)।
ভুয়া নাম

2
এই আদেশটি পূর্বাবস্থায় ফেরাতে প্রয়োজনীয় সমস্ত কি? iptables -D INPUT -m statistic --mode random --probability 0.01 -j DROP
jcalfi314

6

আমার এক সহকর্মী এটি করতে টিসি ব্যবহার করে। আরও তথ্যের জন্য ম্যান পৃষ্ঠাটি দেখুন। আপনি এর ব্যবহারের উদাহরণ এখানে দেখতে পারেন ।


আমি মনে করি ব্যবহারের iptables- র :) আরো সহজ
c4f4t0r

নিশ্চিত, তবে টিসি
আইপটিবলের

5

iptables (8) এর একটি পরিসংখ্যান ম্যাচ মডিউল রয়েছে যা প্রতিটি nth প্যাকেটটি মেলাতে ব্যবহার করা যেতে পারে। এই প্যাকেটটি ফেলে দিতে, কেবল -j DROP যুক্ত করুন


3

নেটওয়ার্কিং ফিজিক্স সিমুলেশনগুলির এই টিউটোরিয়ালটিতে UDP সংযোগে লেটেন্সি এবং প্যাকেট ক্ষতির অনুকরণের জন্য নমুনা কোডে একটি সি ++ শ্রেণি রয়েছে এবং এটি গাইডেন্স হতে পারে। প্রকাশ্য দেখুন লেটেন্সি এবং packetLoss এর ভেরিয়েবল সংযোগ বর্গ পাওয়া Connection.h ফাইল ডাউনলোডযোগ্য সোর্স কোড


1

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



1

নেটওয়ার্ক ফল্ট ইঞ্জেকশন সরঞ্জামটি সহজেই ব্যবহারযোগ্য হ'ল সাবোটিউর । এটি অনুকরণ করতে পারে:

  • মোট নেটওয়ার্ক পার্টিশন
  • রিমোট পরিষেবা শেষ (প্রত্যাশিত বন্দরে শোনা যাচ্ছে না)
  • বিলম্ব
  • প্যাকেটের ক্ষতি - টিসিপি সংযোগের সময়সীমা (প্রায়শই ঘটে যখন দুটি সিস্টেমকে রাষ্ট্রীয় ফায়ারওয়াল দ্বারা পৃথক করা হয়)

1
দুঃখের বিষয়, এই প্রকল্পের শেষ প্রতিশ্রুতি ছিল ২৮ আগস্ট, ২০১৫, প্রায় ৪ বছর আগে। মুক্ত বিষয়গুলি এখন 5 বছরের পুরানো old
আলী

1

সেই উদ্দেশ্যে বৈজ্ঞানিক সম্প্রদায়ের অন্যতম ব্যবহৃত সরঞ্জাম হ'ল ডামিনেট । একবার আপনি ipfwকার্নেল মডিউল ইনস্টল করার পরে 2 মেশিনের মধ্যে 50 মিমি প্রচারের বিলম্ব প্রবর্তন করতে কেবল এই কমান্ডগুলি চালান:

./ipfw pipe 1 config delay 50ms
./ipfw add 1000 pipe 1 ip from $IP_MACHINE_1 to $IP_MACHINE_2

প্যাকেট ক্ষতির 50% প্রবর্তন করতে আপনাকে চালাতে হবে:

./ipfw pipe 1 config plr 0.5

এখানে আরও বিশদ।

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