আমি কোনও অ্যাপ্লিকেশনটির কার্যকারিতা পরিমাপ করতে লিনাক্সের জন্য UDP
এবং প্যাকেট বিলম্ব এবং ক্ষতির অনুকরণ করতে চাই TCP
। এটি করার কোন সহজ পথ আছে কি?
আমি কোনও অ্যাপ্লিকেশনটির কার্যকারিতা পরিমাপ করতে লিনাক্সের জন্য UDP
এবং প্যাকেট বিলম্ব এবং ক্ষতির অনুকরণ করতে চাই TCP
। এটি করার কোন সহজ পথ আছে কি?
উত্তর:
নেটওয়ার্ক সিমুলেট করার জন্য ইতিমধ্যে লিনাক্স এবং ইউজারস্পেস ইউটিলিটিতে অন্তর্নিযুক্ত নেটিম লিভারেজ কার্যকারিতা। এটিই মার্কের উত্তরটিকে ভিন্ন নামে বোঝায়।
তাদের হোমপেজের উদাহরণগুলি ইতিমধ্যে দেখিয়েছে যে আপনি যা চেয়েছিলেন তা কীভাবে অর্জন করতে পারেন:
উদাহরণ
প্রশস্ত অঞ্চল নেটওয়ার্ক বিলম্ব অনুকরণ
এটি সবচেয়ে সহজ উদাহরণ, এটি স্থানীয় ইথারনেট থেকে বেরিয়ে আসা সমস্ত প্যাকেটের জন্য একটি নির্দিষ্ট পরিমাণ বিলম্ব যুক্ত করে।
# 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
।
tc -p qdisc ls dev eth0
বর্তমান সংজ্ঞায়িত বিধিগুলি তালিকাভুক্ত করবে এবং tc qdisc del dev eth0 root
সেগুলি মুছে
বাদ দেওয়া প্যাকেটের জন্য আমি কেবল iptables এবং পরিসংখ্যান মডিউলটি ব্যবহার করব ।
iptables -A INPUT -m statistic --mode random --probability 0.01 -j DROP
উপরে 1% সম্ভাব্যতা সহ আগত প্যাকেটটি নামবে। সতর্কতা অবলম্বন করুন, প্রায় 0.14 এর উপরে কিছু এবং আপনার বেশিরভাগ টিসিপি সংযোগগুলি সম্ভবত পুরোপুরি স্টল হয়ে যাবে।
ম্যান আইপটেবলগুলি একবার দেখুন এবং আরও তথ্যের জন্য "পরিসংখ্যান" অনুসন্ধান করুন।
DROP
উপর বিদেশগামী সংযোগ বরং হাস্যকর কারণ send()
অপারেশন রিটার্ন EPERM
, বরং তারপর প্যাকেট ড্রপ (যেমন এটি করা উচিত)।
iptables -D INPUT -m statistic --mode random --probability 0.01 -j DROP
নেটওয়ার্কিং ফিজিক্স সিমুলেশনগুলির এই টিউটোরিয়ালটিতে UDP সংযোগে লেটেন্সি এবং প্যাকেট ক্ষতির অনুকরণের জন্য নমুনা কোডে একটি সি ++ শ্রেণি রয়েছে এবং এটি গাইডেন্স হতে পারে। প্রকাশ্য দেখুন লেটেন্সি এবং packetLoss এর ভেরিয়েবল সংযোগ বর্গ পাওয়া Connection.h ফাইল ডাউনলোডযোগ্য সোর্স কোড ।
এটি নিজে চেষ্টা করে দেখেনি, তবে এই পৃষ্ঠায় প্লাগইন মডিউলগুলির একটি তালিকা রয়েছে যা লিনাক্সে চালিত হয় 'iptables আইপি ফিল্টারিং সিস্টেমে অন্তর্নির্মিত। মডিউলগুলির মধ্যে একটিকে "এনথ" বলা হয় এবং আপনাকে একটি নিয়ম সেট করতে দেয় যা প্যাকেটের কনফিগারযোগ্য হারকে ছাড়বে। কমপক্ষে শুরু করার জন্য ভাল জায়গা হতে পারে।
আপনি http://snad.ncsl.nist.gov/nistnet/ চেষ্টা করতে পারেন এটি বেশ পুরানো এনআইএসটি প্রকল্প (শেষ প্রকাশ 2005), তবে এটি আমার জন্য কার্যকর।
নেটওয়ার্ক ফল্ট ইঞ্জেকশন সরঞ্জামটি সহজেই ব্যবহারযোগ্য হ'ল সাবোটিউর । এটি অনুকরণ করতে পারে:
- মোট নেটওয়ার্ক পার্টিশন
- রিমোট পরিষেবা শেষ (প্রত্যাশিত বন্দরে শোনা যাচ্ছে না)
- বিলম্ব
- প্যাকেটের ক্ষতি - টিসিপি সংযোগের সময়সীমা (প্রায়শই ঘটে যখন দুটি সিস্টেমকে রাষ্ট্রীয় ফায়ারওয়াল দ্বারা পৃথক করা হয়)
সেই উদ্দেশ্যে বৈজ্ঞানিক সম্প্রদায়ের অন্যতম ব্যবহৃত সরঞ্জাম হ'ল ডামিনেট । একবার আপনি 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
এখানে আরও বিশদ।