.TH NETEM 8 "25 November 2011" "iproute2" "Linux" .SH "نام (NAME)" tc-netem \- شبیه‌ساز شبکه .SH "خلاصه دستور (SYNOPSIS)" .B "tc qdisc ... dev" .IR DEVICE " ] " .BR "add netem" .I OPTIONS .IR OPTIONS " := [ " LIMIT " ] [ " DELAY " ] [ " LOSS \ " ] [ " CORRUPT " ] [ " DUPLICATION " ] [ " REORDERING " ] [ " RATE \ " ] [ " SLOT " ] [ " SEED " ]" .IR LIMIT " := " .B limit .I packets .IR DELAY " := " .BI delay .IR TIME " [ " JITTER " [ " CORRELATION " ]]]" .br [ .BR distribution " { "uniform " | " normal " | " pareto " | " paretonormal " } ]" .IR LOSS " := " .BR loss " { " .BI random .IR PERCENT " [ " CORRELATION " ] |" .br .RB " " state .IR p13 " [ " p31 " [ " p32 " [ " p23 " [ " p14 "]]]] |" .br .RB " " gemodel .IR p " [ " r " [ " 1-h " [ " 1-k " ]]] } " .RB " [ " ecn " ] " .IR CORRUPT " := " .B corrupt .IR PERCENT " [ " CORRELATION " ]]" .IR DUPLICATION " := " .B duplicate .IR PERCENT " [ " CORRELATION " ]]" .IR REORDERING " := " .B reorder .IR PERCENT " [ " CORRELATION " ] [ " .B gap .IR DISTANCE " ]" .IR RATE " := " .B rate .IR RATE " [ " PACKETOVERHEAD " [ " CELLSIZE " [ " CELLOVERHEAD " ]]]]" .IR SLOT " := " .BR slot " { " .IR MIN_DELAY " [ " MAX_DELAY " ] |" .br .RB " " distribution " { "uniform " | " normal " | " pareto " | " paretonormal " | " .IR FILE " } " DELAY " " JITTER " } " .br .RB " [ " packets .IR PACKETS " ] [ " .BR bytes .IR BYTES " ]" .IR SEED " := " .B seed .I VALUE .SH "توضیحات (DESCRIPTION)" انضباط صف (qdisc) .B netem قابلیت شبیه‌سازی شبکه (Network Emulation) را برای آزمودن پروتکل‌ها از طریق شبیه‌سازی ویژگی‌های شبکه‌های واقعی فراهم می‌کند. این انضباط صف یک یا چند اختلال شبکه‌ای را روی بسته‌ها اعمال می‌کند؛ از جمله: تأخیر (delay)، اتلاف یا از دست رفتن بسته (loss)، تکثیر بسته (duplication) و خرابی بسته (corruption). .SH "گزینه‌ها (OPTIONS)" .TP .BI limit " COUNT" حداکثر تعداد بسته‌هایی را که qdisc می‌تواند هنگام اعمال تأخیر در خود نگه دارد، محدود می‌کند. .TP .B delay .IR TIME " [ " JITTER " [ " CORRELATION " ]]]" .br بسته‌ها را پیش از ارسال به تأخیر می‌اندازد. پارامترهای اختیاری امکان معرفی تغییرات تأخیر (jitter) و همبستگی (correlation) را فراهم می‌کنند. مقادیر تأخیر و جیتر بر حسب میلی‌ثانیه بیان می‌شوند؛ همبستگی با تعیین درصدی مشخص می‌شود که نشان می‌دهد تأخیر قبلی تا چه میزان بر مقدار تصادفی فعلی تأثیر خواهد گذاشت. .TP .BI distribution " TYPE" الگویی را برای توزیع تأخیر مشخص می‌کند. .RS .TP .B uniform استفاده از توزیع یکنواخت با وزن برابر برای تأخیر بسته‌ها. .TP .B normal استفاده از توزیع گاوسی برای تأخیرها. گاهی منحنی زنگوله‌ای (Bell Curve) نامیده می‌شود. .TP .B pareto استفاده از توزیع پارتو برای تأخیر بسته‌ها. این توزیع برای شبیه‌سازی توزیع‌های با دنباله بلند (long-tail) مفید است. .TP .B paretonormal این گزینه ترکیبی از توزیع‌های .B pareto و .B normal است که ویژگی‌های هر دو منحنی زنگوله‌ای و دنباله بلند را در بر دارد. .RE .TP .BI loss " MODEL" بسته‌ها را بر اساس یک مدل اتلاف دور می‌اندازد. .I MODEL می‌تواند یکی از موارد زیر باشد: .RS .TP .BI random " PERCENT" اتلاف هر بسته مستقل از سایر بسته‌ها است. .TP .BI state " P13 [ P31 [ P32 [ P23 P14 ]]]" از یک زنجیره مارکوف ۴-حالته برای توصیف اتلاف بسته استفاده می‌کند. .br پارامتر .I P13 بیانگر اتلاف بسته است. پارامترهای اختیاری مدل را به ۲-حالته .IR P31 ، ۳-حالته .IR P23 ، .I P32 و ۴-حالته .IR P14 گسترش می‌دهند. حالت‌های زنجیره مارکوف عبارتند از: .RS .TP .B 1 دریافت مناسب بسته (بدون اتلاف). .TP .B 2 دریافت مناسب در یک رگبار (burst). .TP .B 3 اتلاف‌های رگباری (burst losses). .TP .B 4 اتلاف‌های مستقل. .RE .TP .BI gemodel " PERCENT [ R [ 1-H [ 1-K ]]]" استفاده از مدل گیلبرت-الیوت (اتلاف رگباری) بر پایه: .RS .TP .I PERCENT احتمال شروع حالت بد (همراه با اتلاف). .TP .I R احتمال خروج از حالت بد. .TP .I "1-H" احتمال اتلاف در حالت بد. .TP .I "1-K" احتمال اتلاف در حالت خوب. .RE .RE .TP .B ecn استفاده از اعلان صریح ازدحام (ECN یا Explicit Congestion Notification) برای علامت‌گذاری بسته‌ها به جای دور انداختن آن‌ها. برای فعال شدن این قابلیت، باید از یک مدل اتلاف استفاده شده باشد. .TP .BI corrupt " PERCENT" محتوای بسته را در یک موقعیت تصادفی بر اساس .I PERCENT دچار تغییر و خرابی می‌کند. .TP .BI duplicate " PERCENT" پیش از قرار دادن در صف، یک نسخه تکراری از بسته ایجاد می‌کند. .TP .BI reorder " PERCENT" ترتیب بسته‌ها را در صف تغییر می‌دهد. .TP .BI gap " DISTANCE" برخی بسته‌ها را بلافاصله ارسال می‌کند. تعداد .I "(DISTANCE - 1)" بسته اول با تأخیر فرستاده شده و بسته بعدی بلافاصله ارسال می‌گردد. .TP .BI rate " RATE [ PACKETOVERHEAD [ CELLSIZE [ CELLOVERHEAD ]]]" بسته‌ها را بر اساس اندازه آن‌ها به تأخیر می‌اندازد تا یک سرعت لینک ثابت را شبیه‌سازی کند. پارامترهای اختیاری: .RS .TP .I PACKETOVERHEAD سربار به ازای هر بسته را بر حسب بایت مشخص می‌کند. برای شبیه‌سازی هدرهای اضافی لایه پیوند به کار می‌رود. یک مقدار منفی می‌تواند برای شبیه‌سازی حالتی به کار رود که هدر اترنت برداشته شده است (مثلاً \-14) یا از فشرده‌سازی هدر استفاده می‌شود. .TP .I CELLSIZE طرح‌های لایه پیوند مانند ATM را شبیه‌سازی می‌کند. .TP .I CELLOVERHEAD سربار به ازای هر سلول را مشخص می‌کند. .RE محدودسازی نرخ تحت تأثیر عوامل متعددی از جمله دانه‌بندی و دقت ساعت هسته قرار دارد. این امر خود را به شکل فشرده‌سازی ساختگی بسته (رگبارها یا bursts) نشان می‌دهد. .TP .BI slot " MIN_DELAY [ MAX_DELAY ]" امکان شبیه‌سازی شبکه‌های شکاف‌دار (slotted) را فراهم می‌کند. تحویل بسته‌های انباشته‌شده را به درون یک شکاف زمانی موکول می‌کند. هر شکاف زمانی در دسترس، با یک حداقل تأخیر برای دستیابی و یک حداکثر تأخیر اختیاری پیکربندی می‌شود. .TP .B slot distribution امکان پیکربندی بر اساس توزیع را، مشابه با گزینه .B distribution برای تأخیر بسته‌ها، فراهم می‌سازد. این گزینه‌های slot می‌توانند تقریب اولیه‌ای از پروتکل‌های MAC با ترافیک رگباری نظیر DOCSIS، وای‌فای (WiFi) و LTE فراهم کنند. شبیه‌سازی شکاف زمانی به چند عامل محدود می‌شود: دانه‌بندی ساعت هسته، همانند نرخ، و تلاش برای تحویل بسته‌های متعدد درون یک شکاف زمانی که بر اثر تفکیک‌پذیری تایمر و همچنین پهنای‌باند بومی زیرساخت دچار کشیدگی و اعوجاج می‌شود. امکان ترکیب ساختار شکاف‌دار (slotting) با نرخ (rate) وجود دارد، که در این صورت رفتارهای پیچیده‌ای رخ می‌دهد که طی آن یا نرخ و یا محدودیت‌های بایت یا بسته در هر شکاف زمانی، بر نرخ واقعی تحویل حاکم می‌شوند. .TP .BI seed " VALUE" یک مقدار بذر (seed) را برای هدایت و بازتولید رویدادهای تصادفی تولیدشده اتلاف یا خرابی مشخص می‌کند. .SH "محدودیت‌ها (LIMITATIONS)" ابزار Netem توسط دانه‌بندی تایمر در هسته محدود می‌شود. نرخ و تأخیر ممکن است تحت تأثیر وقفه‌های ساعت قرار گیرند. .PP ترکیب شکل‌های گوناگون تغییر ترتیب ممکن است به نتایج غیرمنتظره منجر شود. برای کارکرد هر روش تغییر ترتیب، وجود مقداری تأخیر ضروری است. اگر تأخیر کمتر از زمان رسیدن بین‌بسته‌ای (inter-packet arrival time) باشد، هیچ تغییر ترتیبی مشاهده نخواهد شد. به دلیل سازوکارهایی نظیر TSQ (صف‌های کوچک TCP)، برای واقع‌گرایانه بودن نتایج آزمایش کارایی TCP، باید netem را در بخش ورودی (ingress) میزبان گیرنده قرار داد. .PP ترکیب netem با سایر qdiscها امکان‌پذیر است، اما ممکن است همیشه کار نکند زیرا netem از بلوک کنترل skb برای تنظیم تأخیرها استفاده می‌کند. .SH "مثال‌ها (EXAMPLES)" .PP .EX # tc qdisc add dev eth0 root netem delay 100ms .EE .RS 4 افزودن مقدار ثابتی تأخیر به تمام بسته‌های خروجی روی دستگاه eth0. به هر بسته 100ms ± 10ms تأخیر اضافه خواهد شد. .RE .PP .EX # tc qdisc change dev eth0 root netem delay 100ms 10ms 25% .EE .RS 4 این دستور باعث اعمال تأخیر اضافه 100ms ± 10ms می‌شود و مقدار تأخیر بسته بعدی به میزان ۲۵٪ وابسته به جدیدترین تأخیر خواهد بود. این یک همبستگی آماری واقعی نیست، بلکه یک تقریب است. .RE .PP .EX # tc qdisc change dev eth0 root netem delay 100ms 20ms distribution normal .EE .RS 4 این دستور بسته‌ها را بر اساس توزیع نرمال (منحنی زنگوله‌ای) در بازه 100ms ± 20ms به تأخیر می‌اندازد. .RE .PP .EX # tc qdisc change dev eth0 root netem loss 0.1% .EE .RS 4 این دستور باعث می‌شود یک‌دهم درصد (یعنی ۱ از هر ۱۰۰۰ بسته) به طور تصادفی دور انداخته شوند. همچنین می‌توان یک همبستگی اختیاری اضافه کرد. این کار باعث می‌شود مولد اعداد تصادفی کمتر تصادفی عمل کند و می‌توان از آن برای شبیه‌سازی اتلاف‌های رگباری بسته‌ها استفاده کرد. .RE .PP .EX # tc qdisc change dev eth0 root netem duplicate 1% .EE .RS 4 این دستور باعث می‌شود یک درصد از بسته‌های ارسال‌شده روی eth0 تکثیر شوند (کپی شوند). .RE .PP .EX # tc qdisc change dev eth0 root netem loss 0.3% 25% .EE .RS 4 این دستور باعث می‌شود ۰.۳٪ از بسته‌ها از دست بروند، و احتمال هر یک وابسته به ۲۵٪ از احتمال قبلی خواهد بود. .RE .PP دو روش مختلف برای مشخص کردن تغییر ترتیب (reordering) وجود دارد. روش gap از یک توالی ثابت استفاده کرده و ترتیب هر N‌امین بسته را تغییر می‌دهد. .EX # tc qdisc change dev eth0 root netem gap 5 delay 10ms .EE .RS 4 این دستور باعث می‌شود هر پنجمین (دهمین، پانزدهمین و ...) بسته بلافاصله ارسال شود و هر بسته دیگر به مدت 10ms با تأخیر فرستاده شود. این روش قابل پیش‌بینی است و برای آزمایش‌های پروتکل پایه نظیر سرهم‌بندی مجدد (reassembly) مفید است. .RE .PP روش reorder از درصدی از بسته‌ها برای به هم ریختن ترتیب استفاده می‌کند. .EX # tc qdisc change dev eth0 root netem delay 10ms reorder 25% 50% .EE در این مثال، ۲۵٪ از بسته‌ها (با همبستگی ۵۰٪) بلافاصله ارسال می‌شوند، بقیه به مدت 10ms به تأخیر می‌افتند. .PP اگر جیتر به اندازه کافی بزرگ باشد نیز ترتیب بسته‌ها تغییر خواهد کرد. .EX # tc qdisc change dev eth0 root netem delay 100ms 75ms .EE .RS 4 اگر بسته اول تأخیر تصادفی 100ms دریافت کند (100ms پایه - 0ms جیتر) و بسته دوم 1ms بعد ارسال شده و تأخیر 50ms دریافت کند (100ms پایه - 50ms جیتر)؛ بسته دوم زودتر ارسال خواهد شد. این امر به این دلیل است که انضباط صف tfifo درون netem، بسته‌ها را به ترتیب زمان ارسال در صف نگاه می‌دارد. .RE .PP اگر خواهان این رفتار نیستید، انضباط صف داخلی tfifo را با یک انضباط صف ساده FIFO جایگزین کنید. .EX # tc qdisc add dev eth0 root handle 1: netem delay 10ms 100ms # tc qdisc add dev eth0 parent 1:1 pfifo limit 1000 .EE .PP نمونه‌ای از استفاده از کنترل نرخ و اندازه سلول‌ها: .EX # tc qdisc add dev eth0 root netem rate 5kbit 20 100 5 .EE .RS 4 تمام بسته‌های خروجی روی دستگاه eth0 را با نرخ 5kbit، سربار به ازای هر بسته ۲۰ بایت، اندازه سلول ۱۰۰ بایت و سربار به ازای هر سلول ۵ بایت به تأخیر می‌اندازد. .RE .PP امکان اعمال انتخابی اختلال با استفاده از دسته‌بندی ترافیک وجود دارد. .EX # tc qdisc add dev eth0 root handle 1: prio # tc qdisc add dev eth0 parent 1:3 handle 30: \ tbf rate 20kbit buffer 1600 limit 3000 # tc qdisc add dev eth0 parent 30:1 handle 31: \ netem delay 200ms 10ms distribution normal # tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 \ match ip dst 65.172.181.4/32 flowid 1:3 .EE .RS 4 این مثال از یک انضباط صف‌بندی اولویت‌دار استفاده می‌کند؛ یک TBF برای انجام کنترل نرخ اضافه شده است؛ به همراه یک تأخیر ساده netem. یک فیلتر تمام بسته‌های ارسالی به 65.172.181.4 را در اولویت ۳ دسته‌بندی می‌کند. .RE .SH "منابع (SOURCES)" .IP " 1. " 4 Hemminger S. , "Network Emulation with NetEm", Open Source Development Lab, April 2005 .UR http://devresources.linux-foundation.org/shemminger/netem/LCA2005_paper.pdf .UE .IP " 2. " 4 Salsano S., Ludovici F., Ordine A., "Definition of a general and intuitive loss model for packet networks and its implementation in the Netem module in the Linux kernel", available at .UR http://netgroup.uniroma2.it/NetemCLG .UE .SH "همچنین ببینید (SEE ALSO)" .BR tc (8) .SH "نویسندگان (AUTHORS)" ابزار Netem توسط Stephen Hemminger در Linux foundation نوشته شده و از NISTnet الهام گرفته شده است. صفحه راهنمای اصلی توسط Fabio Ludovici و Hagen Paul Pfeifer نوشته شده است.