سیستم عامل لینوکس ابزارهای قدرتمندی در زمینه مدیریت انتقال Packet ها ارائه می دهد که از جمله آن می توان به, packet mangling   packet filteringو… اشاره کرد که مستقیما توسط Kernel و بدون نرم افزار جانبی انجام می شود. از دیگر ابزارهای این دسته که در این بحث به آن اشاره می کنیم کنترل ترافیک (Traffic Control)  یا کنترل پهنای باند است.

در محیط های سیستم عامل کلیه Interface های شبکه دارای یک بافرهستند، بافری که صف گونه (Queue) رفتار می کند.
در این مبحث در ارتباط با هر Interface مفهومی با عنوان Queue Discipline   مطرح می شود، الگوریتمهایی که نحوه رفتار با بسته های (Packet) صف شده را معرفی می کند. که حالت ساده و البته پیش فرض Queue Discipline در لینوکس برای کلیه Interface  ها مدل (FIFO (First in-First out  است. بدین معنی که در حالت پیش فرض یک روتر لینوکس هیچگونه کنترل و تاخیر در پهنای باند و دریافت و ارسال بسته ها اعمال نمی کند.
Kernel لینوکس از روش بسیار دقیق برای کنترل پهنای باند استفاده می کند و علت آن استفاده از الگوریتم Token – Bucket است که بر جریان عبور بسته ها بصورت بایت به بایت نظارت می کند. در این الگوریتم در کنار صف Packet ها از صف دیگری بنام Bucket استفاده می شود که به ازاء ورود هر Token  به این صف اجازه خروج داده های ارسالی  از صف  Packet داده می شود.

فرمان لینوکس برای اعمال محدودیت پهنای باند بر روی یک Interface شبکه “tc” می باشد.

فرمان لینوکس برای مشاهده وضعیت جاری پهنای باند Interface ها:

#tc qdisc show

فرمان لینوکس برای اضافه نمودن محدودیت پهنای باند بر روی یک Interface خاص که در این آموزش از مدل tbf استفاده می کنیم:

#tc qdisc add dev DEV root tbf PARAMETERS

فرمان حذف نمودن محدودیت پهنای باند:

#tc qdisc del dev DEV root
مثال:

#tc qdisc del dev eth0 root

توضیح اضافه نمودن محدودیت پهنای باند با ذکر مثال:

#tc qdisc add dev eth0 root tbf rate 0.5mbit burst 5kb limit 10kb peakrate 1mbit mtu 1540
qdisc   مخفف Queue Discipline
dev   تعیین Interface مورد نظر جهت اعمال محدودیت پهنای باند
root  در حالت های خاص یک Interface می تواند شامل چندین Class باشد که هر Class شامل Flow یا جریان های وابسته به آن Class است. به عنوان مثال تعریف یک Class با Flow عبور بسته های ssh. ولی در حالت معمول در صورت عدم تعریف Class باید از حالت root  استفاده کرد که نشان دهنده تمامی بسته های دریافتی است.
tbf  یکی از انواع مدل های که از الگوریتم Token – Bucket استفاده می کند.
rate  نرخ ارسال Token به داخل Bucket
burst  اندازه صف Bucket بر حسب بایت برای نگهدای Token. اندازه Rate بالاتر نیاز به بافر بزرگتری برای Token ها دارد.
limit   اندازه صف Packet ها بر حسب بایت.
peakrate  در صورت عدم استفاده صحیح از این پارامتر مدل  tbf از دقت لازم برخوردار نخواهد بود.دلیل: در حالت پیش فرض زمانی که Token اضافه در Bucket موجود باشد یا بعبارتی زمانی که نسبت نرخ ارسال Token به نرخ ارسال Packet بالاتر میرود Packet  های موجود با حداکثر سرعت از بافر Interface خارج می شوند و بنابراین در این گونه زمان ها پهنای باند برابر با مقدار تعیین شده در پارامتر rate نخواهد بود. استفاده از پارامتر peakrate مشکل فوق را حل می کند.

در بخش پیشرفته تر کنترل ترافیک امکان پیاده سازی مکانیزم QoS مطرح می شود که مبنای آن اعمال محدودیت پهنای باند بر روی Flow های است که از یک Interface خاص میگذرند. این Flow ها میتوانند شامل مجموعه Packet ها با IP خاص یا شماره پورت خاص باشند. جهت ایجاد Flow های گفته شده در لینوکس ابزاری بنام iptables  وجود دارد با قابلیت اعمال QoS  که اصطلاحا با عنوان mangling شناخته میشود.
در مباحث آینده به توضیح در خصوص iptables  و ارتباط آن با tc خواهیم پرداخت.