PDA

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : کنترل پهنای باند در لینوکس



ShahreServer
August 19th, 2010, 16:54
سيستم عامل لينوكس ابزارهاي قدرتمندي در زمينه مديريت انتقال 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 خواهيم پرداخت.

نگارش یافته توسط محمدرضا فخري