| TC(8) | Linux | TC(8) |
نام (NAME)
tc - نمایش و مدیریت کنترل ترافیک لینوکس
خلاصه دستور (SYNOPSIS)
tc [ OPTIONS ] qdisc [ add | change | replace | link | delete ] dev DEV [ parent qdisc-id | root ] [ handle qdisc-id ] [ ingress_block BLOCK_INDEX ] [ egress_block BLOCK_INDEX ] qdisc [ qdisc specific parameters ]
tc [ OPTIONS ] class [ add | change | replace | delete | show ] dev DEV parent qdisc-id [ classid class-id ] qdisc [ qdisc specific parameters ]
tc [ OPTIONS ] filter [ add | change | replace | delete | get ] dev DEV [ parent qdisc-id | root ] [ handle filter-id ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id
tc [ OPTIONS ] filter [ add | change | replace | delete | get ] block BLOCK_INDEX [ handle filter-id ] protocol protocol prio priority filtertype [ filtertype specific parameters ] flowid flow-id
tc [ OPTIONS ] chain [ add | delete | get ] dev DEV [ parent qdisc-id | root ] filtertype [ filtertype specific parameters ]
tc [ OPTIONS ] chain [ add | delete | get ] block BLOCK_INDEX filtertype [ filtertype specific parameters ]
tc [ OPTIONS ] [ FORMAT ] qdisc { show | list } [ dev DEV ] [ root | ingress | handle QHANDLE | parent CLASSID ] [ invisible ]
tc [ OPTIONS ] [ FORMAT ] class show dev DEV
tc [ OPTIONS ] filter show dev DEV
tc [ OPTIONS ] filter show block BLOCK_INDEX
tc [ OPTIONS ] chain show dev DEV
tc [ OPTIONS ] chain show block BLOCK_INDEX
tc [ OPTIONS ] monitor [ file FILENAME ]
OPTIONS := { [ -force ] -b[atch] [ filename ] | [ -n[etns] name ] | [ -N[umeric] ] | [ -nm | -nam[es] ] | [ { -cf | -c[onf] } [ filename ] ] [ -t[imestamp] ] | [ -t[short] | [ -o[neline] ] | [ -echo ] }
FORMAT := { -s[tatistics] | -d[etails] | -r[aw] | -i[ec] | -g[raph] | -j[json] | -p[retty] | -col[or] }
توضیحات (DESCRIPTION)
دستور tc برای پیکربندی کنترل ترافیک (Traffic Control) در هسته لینوکس استفاده میشود. کنترل ترافیک از موارد زیر تشکیل شده است:
- شکلدهی (SHAPING)
- هنگامی که ترافیک شکلدهی میشود، نرخ ارسال آن تحت کنترل قرار میگیرد. شکلدهی میتواند فراتر از کاهش پهنای باند موجود باشد - همچنین برای هموار کردن جهشهای ناگهانی ترافیک جهت رفتار بهتر شبکه استفاده میشود. شکلدهی روی ترافیک خروجی (egress) رخ میدهد.
- زمانبندی (SCHEDULING)
- با زمانبندی ارسال بستهها، میتوان پاسخدهی را برای ترافیکی که به آن نیاز دارد بهبود بخشید، در حالی که همچنان پهنای باند برای انتقالهای حجیم داده تضمین میگردد. بازآرایی بسته، اولویتبندی نیز نامیده میشود و تنها بر روی ترافیک خروجی رخ میدهد.
- پالایش و نظارت (POLICING)
- در حالی که شکلدهی با ارسال ترافیک سر و کار دارد، پالایش به ترافیک ورودی مربوط میشود. بنابراین پالایش روی ترافیک ورودی (ingress) رخ میدهد.
- دور انداختن (DROPPING)
- ترافیکی که از پهنای باند تعیینشده فراتر رود میتواند بلافاصله دور انداخته شود، هم روی ترافیک ورودی و هم خروجی.
پردازش ترافیک توسط سه نوع شیء کنترل میشود: qdiscها، کلاسها و فیلترها.
انضباطهای صف (QDISCS)
qdisc کوتاهشدهی «queueing discipline» (انضباط صفبندی) است و مفهومی بنیادین برای درک کنترل ترافیک محسوب میشود. هر زمان هسته نیاز به ارسال بستهای به یک رابط داشته باشد، آن را در qdisc پیکربندیشده برای آن رابط صفبندی (enqueue) میکند. بلافاصله پس از آن، هسته تلاش میکند تا جای ممکن بستهها را از qdisc خارج کند (dequeue) تا به راهانداز کارت شبکه تحویل دهد.
یک QDISC ساده، نمونهی «pfifo» است که هیچ پردازشی انجام نمیدهد و یک صف خالص ورود به ترتیب (First In, First Out) است. با این حال، هنگامی که رابط شبکه موقتاً توان مدیریت ترافیک را ندارد، ترافیک را ذخیره میکند.
کلاسها (CLASSES)
برخی qdiscها میتوانند شامل کلاسهایی باشند که خود شامل qdiscهای بیشتری هستند - در این صورت ترافیک ممکن است در هر یک از qdiscهای درونی که داخل کلاسها هستند صفبندی شود. هنگامی که هسته تلاش میکند بستهای را از چنین qdisc دارای کلاس (classful) خارج کند، آن بسته میتواند از هر یک از کلاسها بیاید. یک qdisc برای نمونه میتواند با تلاش برای خارج کردن بسته از کلاسهایی خاص پیش از دیگران، برخی از انواع ترافیک را اولویتبندی کند.
فیلترها (FILTERS)
یک فیلتر توسط یک qdisc دارای کلاس استفاده میشود تا تعیین کند یک بسته در کدام کلاس صفبندی خواهد شد. هرگاه ترافیک به کلاسی با زیرکلاسها برسد، باید دستهبندی شود. روشهای گوناگونی را میتوان برای این کار به کار گرفت که فیلترها یکی از آنها هستند. تمام فیلترهای متصل به کلاس فراخوانی میشوند تا زمانی که یکی از آنها حکمی صادر کند. اگر هیچ حکمی صادر نشود، ممکن است معیارهای دیگری در دسترس باشند. این موضوع برای هر qdisc متفاوت است.
توجه به این نکته مهم است که فیلترها درون qdiscها قرار دارند - آنها تصمیمگیرنده نهایی رویدادها نیستند.
فیلترهای موجود عبارتند از:
- basic
- فیلتر کردن بستهها بر اساس یک عبارت ematch. برای جزئیات به tc-ematch(8) مراجعه کنید.
- bpf
- فیلتر کردن بستهها با استفاده از (e)BPF. برای جزئیات به tc-bpf(8) مراجعه کنید.
- cgroup
- فیلتر کردن بستهها بر اساس گروه کنترل (cgroup) فرآیند آنها. برای جزئیات به tc-cgroup(8) مراجعه کنید.
- flow, flower
- دستهبندیکنندههای مبتنی بر جریان، که بستهها را بر اساس جریان آنها (شناساییشده با کلیدهای قابل انتخاب) فیلتر میکنند. برای جزئیات به tc-flow(8) و tc-flower(8) مراجعه کنید.
- fw
- فیلتر کردن بر اساس fwmark. مستقیماً مقدار fwmark را به کلاس ترافیک نگاشت میکند. به tc-fw(8) مراجعه کنید.
- route
- فیلتر کردن بستهها بر اساس جدول مسیریابی. برای جزئیات به tc-route(8) مراجعه کنید.
- u32
- فیلتر کردن عمومی بر روی دادههای دلخواه بسته، به کمک نحو دستوری جهت انتزاع عملیات رایج. برای جزئیات به tc-u32(8) مراجعه کنید.
- matchall
- فیلتر کنترل ترافیک که با هر بستهای مطابقت دارد. برای جزئیات به tc-matchall(8) مراجعه کنید.
رویدادهای صف (QEVENTS)
انضباطهای صف (Qdiscs) ممکن است هنگام وقوع رویدادهای خاص در qdisc، اقدامات پیکربندیشده توسط کاربر را فراخوانی کنند. هر qevent میتواند بلااستفاده باشد، یا یک بلوک به آن متصل باشد. سپس فیلترها با استفاده از نحو "tc block BLOCK_IDX" به این بلوک متصل میشوند. هنگامی که qevent مرتبط با نقطه اتصال رخ میدهد، بلوک اجرا میشود. برای مثال، بسته ممکن است بسته به qdisc و qevent مورد نظر، دور انداخته شود یا به تأخیر بیفتد، و غیره.
برای مثال:
tc qdisc add dev eth0 root handle 1: red limit 500K avpkt 1K \ qevent early_drop block 10
tc filter add block 10 matchall action mirred egress mirror dev eth1
انضباطهای صف بدون کلاس (CLASSLESS QDISCS)
انضباطهای صف بدون کلاس عبارتند از:
- choke
- مکانیزم CHOKe (مخفف CHOose and Keep برای جریانهای پاسخگو، و CHOose and Kill برای جریانهای غیرپاسخگو) یک qdisc بدون کلاس است که هم برای شناسایی و هم برای جریمه کردن جریانهایی که صف را به انحصار درمیآورند طراحی شده است. CHOKe گونهای از RED است و پیکربندی آن شبیه به RED میباشد.
- codel
- الگوریتم CoDel (با تلفظ «کادِل») یک طرح الگوریتم مدیریت صف فعال تطبیقی بدون پیچیدگی پیکربندی ("no-knobs" AQM) است که برای برطرف کردن کاستیهای RED و گونههای آن توسعه یافته است.
- [p|b]fifo
- سادهترین qdisc قابل استفاده، با رفتار خالص ورود به ترتیب (First In, First Out). محدود بر حسب تعداد بسته یا بر حسب بایت.
- fq
- زمانبند صف منصفانه (Fair Queue Scheduler) که گامبندی TCP (یا TCP pacing) را پیادهسازی میکند و تا میلیونها جریان همزمان برای هر qdisc مقیاسپذیر است.
- fq_codel
- تأخیر کنترلشده با صفبندی منصفانه (Fair Queuing Controlled Delay) یک انضباط صف است که صفبندی منصفانه را با طرح CoDel AQM ترکیب میکند. FQ_Codel از یک مدل تصادفی برای دستهبندی بستههای ورودی به جریانهای مختلف استفاده میکند و برای فراهم آوردن سهم منصفانه پهنای باند برای تمام جریانهای مصرفکننده صف به کار میرود. هر یک از این جریانها توسط انضباط صف CoDel مدیریت میشود. به دلیل استفاده داخلی Codel از صف FIFO، بازآرایی درون یک جریان رخ نمیدهد.
- fq_pie
- مکانیزم FQ-PIE (مخفف Flow Queuing with Proportional Integral controller Enhanced) یک انضباط صفبندی است که صفبندی جریان را با طرح PIE AQM ترکیب میکند. FQ-PIE از تابع هش جنکینز برای دستهبندی بستههای ورودی به جریانهای گوناگون استفاده میکند و جهت تخصیص سهم منصفانه پهنای باند به تمام جریانهای استفادهکننده از qdisc به کار میرود. هر یک از این جریانها توسط الگوریتم PIE مدیریت میشود.
- gred
- مکانیزم Generalized Random Early Detection چندین صف RED را ترکیب میکند تا به اولویتهای مختلف دور انداختن دست یابد. این کار برای پیادهسازی هدایت تضمینشده (Assured Forwarding در RFC 2597) الزامی است.
- hhf
- فیلتر ضربهزن سنگین (Heavy-Hitter Filter) میان جریانهای کوچک و متضاد آن، یعنی جریانهای سنگین (heavy-hitters) تمایز قائل میشود. هدف شناسایی جریانهای سنگین و انتقال آنها به یک صف جداگانه با اولویت کمتر است تا ترافیک حجیم بر تأخیر ترافیک حساس تأثیری نگذارد.
- ingress
- این یک qdisc ویژه است زیرا بر ترافیک ورودی به یک رابط اعمال میشود و امکان فیلتر و پالایش (policing) آن را فراهم میسازد.
- mqprio
- انضباط صف Multiqueue Priority Qdisc یک انضباط صف ساده است که نگاشت جریانهای ترافیک به محدودههای صف سختافزاری را با استفاده از اولویتها و یک نگاشت قابل پیکربندی اولویت به کلاس ترافیک امکانپذیر میکند. یک کلاس ترافیک در این زمینه، مجموعهای از کلاسهای پیوسته qdisc است که به صورت ۱:۱ به مجموعهای از صفهای نمایانشده در سختافزار نگاشت میشوند.
- multiq
- مکانیزم Multiqueue یک qdisc بهینهسازیشده برای دستگاههایی با چندین صف ارسال (Tx) است. این مکانیزم برای سختافزارهایی افزوده شده که تمایل به جلوگیری از مسدودسازی سر خط (head-of-line blocking) دارند. این مکانیزم باندهای مختلف را پیمایش میکند و پیش از خارج کردن بسته از صف بررسی میکند که صف سختافزاری مرتبط با آن باند متوقف نشده باشد.
- netem
- شبیهساز شبکه (Network Emulator) افزونهای برای امکانات کنترل ترافیک لینوکس است که امکان اضافه کردن تأخیر، اتلاف بسته، تکرار و سایر ویژگیها را به بستههای خروجی از یک رابط شبکه انتخابی فراهم میسازد.
- pfifo_fast
- یک qdisc استاندارد برای هستههای فعال با 'Advanced Router'. شامل یک صف سه باندی است که به فلگهای Type of Service و همچنین اولویت اختصاصیافته به یک بسته احترام میگذارد.
- pie
- کنترلکننده تناسبی-انتگرالی بهبودیافته (PIE) یک طرح مدیریت صف فعال مبتنی بر نظریه کنترل است. این طرح بر مبنای کنترلکننده تناسبی انتگرالی ساخته شده اما هدف آن کنترل تأخیر است.
- red
- تشخیص زودهنگام تصادفی (Random Early Detection) ازدحام فیزیکی را با دور انداختن تصادفی بستهها در هنگام نزدیک شدن به تخصیص پهنای باند پیکربندیشده شبیهسازی میکند. برای برنامههای با پهنای باند بسیار بالا بسیار مناسب است.
- sfb
- مکانیزم Stochastic Fair Blue یک qdisc بدون کلاس برای مدیریت ازدحام بر اساس سابقه اتلاف بسته و میزان بهرهبرداری از پیوند است، ضمن این که سعی میکند مانع از تأثیر جریانهای غیرپاسخگو (یعنی جریانهایی که به علامتگذاری ازدحام یا بستههای دور ریختهشده واکنش نشان نمیدهند) بر کارایی جریانهای پاسخگو شود. بر خلاف RED که احتمال علامتگذاری باید در آن پیکربندی شود، BLUE تلاش میکند احتمال ایدهآل علامتگذاری را به صورت خودکار تعیین کند.
- sfq
- صفبندی منصفانه تصادفی (Stochastic Fairness Queueing) ترافیک صفبندیشده را بازآرایی میکند تا هر «نشست» به نوبت بتواند یک بسته ارسال کند.
- tbf
- فیلتر سطل توکن (Token Bucket Filter) برای کند کردن ترافیک تا یک نرخ دقیقاً تنظیمشده مناسب است. برای پهنای باندهای بزرگ مقیاسپذیری خوبی دارد.
پیکربندی انضباطهای صف بدون کلاس (CONFIGURING CLASSLESS QDISCS)
در غیاب qdiscهای دارای کلاس، qdiscهای بدون کلاس تنها میتوانند به ریشه (root) یک دستگاه متصل شوند. نحو کامل:
tc qdisc add dev DEV root QDISC QDISC-PARAMETERS
برای حذف، این دستور را صادر کنید:
tc qdisc del dev DEV root
انضباط صف pfifo_fast در غیاب یک qdisc پیکربندیشده، پیشفرض خودکار سیستم است.
انضباطهای صف دارای کلاس (CLASSFUL QDISCS)
انضباطهای صف دارای کلاس عبارتند از:
- ATM
- نگاشت جریانها به مدارهای مجازی یک دستگاه مبتنی بر asynchronous transfer mode.
- DRR
- زمانبند کسری چرخشی (Deficit Round Robin Scheduler) جایگزینی انعطافپذیرتر برای Stochastic Fairness Queuing است. بر خلاف SFQ، هیچ صف توکاری وجود ندارد -- شما باید کلاسها را اضافه کرده و سپس فیلترها را تنظیم کنید تا بستهها بر این اساس دستهبندی شوند. این امر میتواند برای نمونه جهت استفاده از qdiscهای RED با تنظیمات مختلف برای ترافیک خاص مفید باشد. هیچ کلاس پیشفرضی وجود ندارد -- اگر بستهای نتواند دستهبندی شود، دور انداخته میشود.
- ETS
- انضباط صف ETS قابلیتی است که عملکردهای qdiscهای PRIO و DRR را در یک زمانبند ادغام میکند. ETS پیکربندی مجموعهای از باندهای اشتراک پهنای باند و اولویت سختگیرانه را جهت پیادهسازی انتخاب ارسال شرحدادهشده در 802.1Qaz آسان میکند.
- HFSC
- منحنی سرویس منصفانه سلسلهمراتبی (Hierarchical Fair Service Curve) تخصیص دقیق پهنای باند و تأخیر را برای کلاسهای برگ تضمین کرده و پهنای باند مازاد را به طور منصفانه تخصیص میدهد. بر خلاف HTB، از دور انداختن بستهها برای دستیابی به تأخیرهای پایین استفاده میکند که نشستهای تعاملی از آن بهرهمند میشوند.
- HTB
- سطل توکن سلسلهمراتبی (Hierarchy Token Bucket) سلسلهمراتب غنی از کلاسهای اشتراک پیوند را با تأکید بر انطباق با شیوههای موجود پیادهسازی میکند. HTB تضمین پهنای باند برای کلاسها را تسهیل میکند، ضمن اینکه امکان تعیین محدودیتهای بالایی را برای اشتراک بین کلاسی نیز فراهم میسازد. این ابزار شامل عناصر شکلدهی بر پایه TBF است و میتواند کلاسها را اولویتبندی کند.
- PRIO
- انضباط صف PRIO یک ظرف بدون شکلدهی برای تعداد قابل تنظیمی از کلاسها است که بستههای آنها به ترتیب از صف خارج میشوند. این امر امکان اولویتبندی آسان ترافیک را فراهم میسازد، به طوری که کلاسهای پایینتر تنها در صورتی قادر به ارسال هستند که کلاسهای بالاتر بستهای در دسترس نداشته باشند. برای تسهیل پیکربندی، بیتهای Type Of Service به طور پیشفرض رعایت میشوند.
- QFQ
- صفبندی منصفانه سریع (Quick Fair Queueing) یک زمانبند با پیچیدگی O(1) است که تضمینهای نزدیک به بهینه ارائه میدهد، و نخستین الگوریتمی است که با هزینه ثابت و مستقل از تعداد گروهها و طول بسته به این هدف دست یافته است. الگوریتم QFQ فاقد هرگونه حلقه است و از دستورالعملها و ساختارهای داده بسیار ساده بهره میبرد که برای پیادهسازی سختافزاری بسیار مناسب هستند.
اصول عملکرد (THEORY OF OPERATION)
کلاسها یک درخت تشکیل میدهند که در آن هر کلاس یک والد منفرد دارد. یک کلاس میتواند چندین فرزند داشته باشد. برخی qdiscها امکان افزودن کلاسها در زمان اجرا را میدهند (مانند HTB)، در حالی که برخی دیگر (مانند PRIO) با تعداد فرزندان ثابتی ایجاد میشوند.
انضباطهای صفی که امکان افزودن پویای کلاسها را میدهند میتوانند صفر یا چند زیرکلاس داشته باشند که ترافیک ممکن است در آنها صفبندی شود.
علاوه بر این، هر کلاس شامل یک qdisc برگ (leaf qdisc) است که به طور پیشفرض دارای رفتار pfifo میباشد، هرچند میتوان qdisc دیگری را به جای آن متصل کرد. این qdisc نیز میتواند مجدداً شامل کلاسها باشد، اما هر کلاس تنها میتواند یک qdisc برگ داشته باشد.
هنگامی که یک بسته وارد یک qdisc دارای کلاس میشود، میتواند در یکی از کلاسهای درون آن دستهبندی شود. سه معیار در دسترس است، هرچند همه qdiscها از هر سه مورد استفاده نمیکنند:
- فیلترهای tc
- اگر فیلترهای tc به یک کلاس متصل باشند، ابتدا برای دستورالعملهای مربوطه بررسی میشوند. فیلترها میتوانند بر روی تمامی فیلدهای هدر یک بسته، و همچنین نشان فایروال (firewall mark) اعمالشده توسط iptables تطبیق داده شوند.
- Type of Service (نوع سرویس)
- برخی qdiscها دارای قواعد توکاری برای دستهبندی بستهها بر اساس فیلد TOS هستند.
- skb->priority
- برنامههای فضای کاربری میتوانند یک class-id را در فیلد 'skb->priority' با استفاده از گزینه SO_PRIORITY کدگذاری کنند.
هر گره درون درخت میتواند فیلترهای مختص به خود را داشته باشد، اما فیلترهای سطح بالاتر نیز ممکن است مستقیماً به کلاسهای پایینتر اشاره کنند.
اگر دستهبندی با موفقیت انجام نشود، بستهها در qdisc برگ متصل به آن کلاس صفبندی میشوند. با این حال، صفحات راهنمای اختصاصی هر qdisc را برای جزئیات بررسی فرمایید.
نامگذاری (NAMING)
تمامی qdiscها، کلاسها و فیلترها دارای شناسههایی (IDs) هستند که میتوانند صراحتاً تعیین شوند یا به طور خودکار اختصاص یابند.
شناسهها شامل یک شماره اصلی (major) و یک شماره فرعی (minor) هستند که با علامت دو نقطه از یکدیگر جدا میشوند - major:minor. هر دوی شمارههای major و minor اعدادی در مبنای ۱۶ (هگزادسیمال) بوده و به ۱۶ بیت محدود هستند. دو مقدار خاص وجود دارد: ریشه (root) با شمارههای major و minor تماماً یک (همه بیتها ۱) نشان داده میشود، و مقدار نامشخص (unspecified) تماماً صفر است.
- انضباطهای صف (QDISCS)
- به یک qdisc که پتانسیل داشتن فرزندان را دارد، یک شماره major اختصاص مییابد که 'handle' (دستگیره) نام دارد و فضای نام شماره minor را برای کلاسها در دسترس باقی میگذارد. دستگیره به صورت '10:' نشان داده میشود. مرسوم است که برای qdiscهایی که انتظار میرود فرزندانی داشته باشند، صراحتاً یک دستگیره تعیین گردد.
- کلاسها (CLASSES)
- کلاسهایی که زیر یک qdisc قرار دارند، شماره major آن qdisc را به اشتراک میگذارند، اما هر یک دارای یک شماره minor جداگانه به نام 'classid' هستند که هیچ ارتباطی با کلاسهای والد خود ندارد و تنها به qdisc والد آنها وابسته است. همان رسم نامگذاری که برای qdiscها وجود دارد، در اینجا نیز اعمال میشود.
- فیلترها (FILTERS)
- فیلترها دارای شناسهای سه بخشی هستند که تنها هنگام استفاده از سلسلهمراتب فیلترهای هششده مورد نیاز است.
پارامترها (PARAMETERS)
پارامترهای زیر به طور گسترده در TC استفاده میشوند. برای سایر پارامترها به صفحات راهنمای انضباطهای صف مجزا مراجعه کنید.
- نرخها (RATES)
- پهنای باند یا نرخهای انتقال. این پارامترها یک عدد اعشاری را میپذیرند که احتمالاً با یک واحد (هر دو واحدهای SI و IEC پشتیبانی میشوند) یا یک عدد اعشاری همراه با نویسهی '%' برای مشخص کردن نرخ به صورت درصدی از سرعت دستگاه (مانند 5% یا 99.5%) همراه است. هشدار: تعیین نرخ به صورت درصد به معنای کسری از سرعت فعلی است؛ در صورت تغییر سرعت، مقدار مجدداً محاسبه نخواهد شد.
- bit یا یک عدد ساده
- بیت بر ثانیه
- kbit
- کیلوبیت بر ثانیه
- mbit
- مگابیت بر ثانیه
- gbit
- گیگابیت بر ثانیه
- tbit
- ترابیت بر ثانیه
- bps
- بایت بر ثانیه
- kbps
- کیلوبایت بر ثانیه
- mbps
- مگابایت بر ثانیه
- gbps
- گیگابایت بر ثانیه
- tbps
- ترابایت بر ثانیه
برای تعیین مقادیر در واحدهای IEC، پیشوند SI (یعنی k-، m-، g-، t-) را به ترتیب با پیشوندهای IEC (یعنی ki-، mi-، gi- و ti-) جایگزین کنید.
ابزار TC نرخها را در داخل به صورت یک عدد صحیح بدون علامت ۳۲ بیتی بر حسب bps ذخیره میکند، بنابراین میتوان حداکثر نرخ 4294967295 bps را تعیین کرد.
- زمانها (TIMES)
- طول مدت زمان. میتواند به صورت یک عدد اعشاری همراه با یک واحد اختیاری مشخص شود:
- s، sec یا secs
- ثانیه کامل
- ms، msec یا msecs
- میلیثانیه
- us، usec، usecs یا یک عدد ساده
- میکروثانیه.
ابزار TC واحد زمانی اختصاصی خود را تعریف کرده است (برابر با میکروثانیه) و مقادیر زمانی را به صورت عدد صحیح بدون علامت ۳۲ بیتی ذخیره میکند، بنابراین میتوان حداکثر مقدار زمانی 4294967295 usecs را تعیین نمود.
- اندازهها (SIZES)
- میزان داده. میتواند به صورت یک عدد اعشاری همراه با یک واحد اختیاری مشخص شود:
- b یا یک عدد ساده
- بایت.
- kbit
- کیلوبیت
- kb یا k
- کیلوبایت
- mbit
- مگابیت
- mb یا m
- مگابایت
- gbit
- گیگابیت
- gb یا g
- گیگابایت
ابزار TC اندازهها را در داخل به صورت عدد صحیح بدون علامت ۳۲ بیتی بر حسب بایت ذخیره میکند، بنابراین میتوان حداکثر اندازه 4294967295 بایت را تعیین کرد.
- مقادیر (VALUES)
- سایر مقادیر بدون واحد. این پارامترها به طور پیشفرض به صورت دهدهی تفسیر میشوند، اما میتوانید با افزودن پیشوند '0' یا '0x' به ترتیب به TC اعلام کنید که آنها را به صورت هشتهشتی یا شانزدهشانزدهی تفسیر نماید.
دستورات TC (TC COMMANDS)
دستورات زیر برای qdiscها، کلاسها و فیلتر در دسترس هستند:
- add
- افزودن یک qdisc، کلاس یا فیلتر به یک گره. برای تمامی موجودیتها، باید یک parent ارسال شود، چه با ارسال شناسه آن و چه با اتصال مستقیم به ریشه یک دستگاه. هنگام ایجاد یک qdisc یا فیلتر، میتوان آن را با پارامتر handle نامگذاری کرد. یک کلاس با پارامتر classid نامگذاری میشود.
- delete
- یک qdisc را میتوان با مشخص کردن دستگیره آن حذف کرد، که همچنین میتواند 'root' باشد. تمامی زیرکلاسها و qdiscهای برگ آنها به طور خودکار حذف میشوند، و همچنین هر فیلتری که به آنها متصل باشد.
- change
- برخی از موجودیتها را میتوان به صورت «درجا» (in place) اصلاح کرد. از نحو دستور 'add' استفاده میکند، با این استثنا که دستگیره و والد را نمیتوان تغییر داد. به عبارت دیگر، دستور change نمیتواند یک گره را جابجا کند.
- replace
- یک عملیات حذف/افزودن تقریباً اتمیک را روی شناسه یک گره موجود انجام میدهد. اگر گره هنوز وجود نداشته باشد، ایجاد میشود.
- get
- یک فیلتر منفرد را با توجه به رابط DEV، qdisc-id، priority، protocol و filter-id نمایش میدهد.
- show
- تمامی فیلترهای متصل به رابط ارائهشده را نمایش میدهد. یک شناسه والد معتبر باید ارسال شود.
- link
- تنها برای qdiscها در دسترس است و عملیات جایگزینی (replace) را در شرایطی انجام میدهد که گره باید از قبل وجود داشته باشد.
نظارت (MONITOR)
ابزار tc میتواند رویدادهای تولیدشده توسط هسته مانند افزودن/حذف qdiscها، فیلترها یا اقدامات، یا تغییر موارد موجود را نظارت کند.
دستور زیر برای monitor در دسترس است:
- file
- اگر گزینه file مشخص شود، ابزار tc به رویدادهای هسته گوش نمیدهد، بلکه فایل ارائهشده را باز کرده و محتویات آن را استخراج میکند. این فایل باید با فرمت باینری بوده و حاوی پیامهای netlink باشد.
گزینهها (OPTIONS)
- -b, -b filename, -batch, -batch filename
- خواندن دستورات از فایل ارائهشده یا ورودی استاندارد و اجرای آنها. نخستین شکست باعث توقف tc خواهد شد.
- -force
- در حالت دستهای با بروز خطا tc متوقف نشود. در صورت بروز هرگونه خطا در طول اجرای دستورات، کد خروج برنامه غیر صفر خواهد بود.
- -o, -oneline
- خروجی دادن هر رکورد در یک خط منفرد، با جایگزینی نویسههای سرخط (newline) با نویسه '\' این گزینه زمانی مناسب است که بخواهید رکوردها را با wc(1) بشمارید یا بر روی خروجی grep(1) بگیرید.
- -n, -net, -netns <NETNS>
- تغییر دادن فضای نام شبکه به NETNS مشخصشده برای tc در واقع این گزینه اجرای دستور زیر را:
ip netns exec
NETNS
tc
[ OPTIONS ] OBJECT { COMMAND |
help }
به این دستور ساده میکند:
tc
-n[etns] NETNS [ OPTIONS ] OBJECT { COMMAND |
help }
- -N, -Numeric
- چاپ مستقیم شماره پروتکل، حوزه (scope)، dsfield و غیره به جای تبدیل آن به نام خوانا برای انسان.
- -cf, -conf <FILENAME>
- مسیر فایل پیکربندی را مشخص میکند. این گزینه در ارتباط با سایر گزینهها (مانند -nm) استفاده میشود.
- -t, -timestamp
- هنگام
اجرای tc
monitor ، برچسب
زمانی را
قبل از پیام
رویداد با
فرمت زیر
چاپ میکند:
Timestamp: <Day> <Month> <DD> <hh:mm:ss> <YYYY> <usecs> usec
- -ts, -tshort
- هنگام
اجرای tc
monitor ، برچسب
زمانی
کوتاه را
قبل از پیام
رویداد با
فرمت زیر
چاپ میکند:
[<YYYY>-<MM>-<DD>T<hh:mm:ss>.<ms>]
- -echo
- درخواست از هسته برای بازگرداندن پیکربندی اعمالشده.
قالببندی (FORMAT)
دستور show گزینههای قالببندی اضافهای دارد:
- -s, -stats, -statistics
- چاپ آمارهای بیشتر درباره مصرف بستهها.
- -d, -details
- چاپ اطلاعات با جزئیات بیشتر درباره نرخها و اندازههای سلول.
- -r, -raw
- چاپ مقادیر هگزادسیمال خام برای دستگیرهها.
- -p, -pretty
- برای فیلتر u32، مقادیر offset و mask را به دستورات معادل فیلتر بر اساس TCP/IP رمزگشایی میکند. در خروجی JSON، فاصلههای خالی برای بهبود خوانایی اضافه میشود.
- -iec
- چاپ نرخها در واحدهای IEC (به عنوان مثال 1K = 1024).
- -g, -graph
- نمایش کلاسها به عنوان نمودار اسکی (ASCII). در صورتی که گزینه -s مشخص شده باشد، اطلاعات آماری عمومی را زیر هر کلاس چاپ میکند. کلاسها تنها با گزینه dev قابل فیلتر شدن هستند.
- -c[color][={always|auto|never}
- پیکربندی خروجی رنگی. اگر پارامتر حذف شود یا برابر always باشد، خروجی رنگی بدون در نظر گرفتن وضعیت stdout فعال میشود. اگر پارامتر برابر auto باشد، وضعیت stdout بررسی میشود تا پیش از فعالسازی خروجی رنگی، یک ترمینال باشد. اگر پارامتر برابر never باشد، خروجی رنگی غیرفعال میشود. در صورت تعیین چندباره، آخرین مورد اولویت دارد. در صورت تعیین -json این فلگ نادیده گرفته میشود.
- -j, -json
- نمایش نتایج در قالب JSON.
- -nm, -name
- تشخیص نام کلاس از فایل /etc/iproute2/tc_cls یا از فایل مشخصشده توسط گزینه -cf این فایل صرفاً یک نگاشت از classid به نام کلاس است:
# Here is comment
1:40 voip # Here is another comment
1:50 web
1:60 ftp
1:2 home
- -br, -brief
- تنها چاپ دادههای ضروری مورد نیاز برای شناسایی فیلتر و اقدام (دستگیره، کوکی و غیره) و آمارها. این گزینه در حال حاضر تنها توسط دستورات tc filter show و tc actions ls پشتیبانی میشود.
مثالها (EXAMPLES)
tc -g class show dev eth0
tc -g -s class show dev eth0
تاریخچه (HISTORY)
دستور tc توسط Alexey N. Kuznetsov نوشته شد و در لینوکس 2.2 اضافه گردید.
همچنین ببینید (SEE ALSO)
tc-basic(8), tc-bfifo(8), tc-bpf(8),
tc-cake(8), tc-cgroup(8), tc-choke(8),
tc-codel(8), tc-drr(8), tc-ematch(8), tc-ets(8),
tc-flow(8), tc-flower(8), tc-fq(8),
tc-fq_codel(8), tc-fq_pie(8), tc-fw(8),
tc-gact(8), tc-hfsc(7), tc-hfsc(8), tc-htb(8),
tc-mqprio(8), tc-pfifo(8), tc-pfifo_fast(8),
tc-pie(8), tc-red(8), tc-route(8), tc-sfb(8),
tc-sfq(8), tc-stab(8), tc-tbf(8), tc-u32(8)
مستندات
کاربری در
http://lartc.org موجود
است، اما
لطفاً
گزارشهای
اشکال و
وصلهها را
به نشانی
زیر ارسال
کنید: <netdev@vger.kernel.org>
نویسنده (AUTHOR)
صفحه راهنما توسط bert hubert (ahu@ds9a.nl) نگهداری میشود.
| 16 December 2001 | iproute2 |