Queue و محدود کردن پهنای باند در میکروتیک
محدود کردن پهنای باند در RouterOS 7 با Simple Queue و Queue Tree؛ max-limit و limit-at، burst با مثال عددی، تقسیم مساوی با PCQ، اولویت و تداخل با FastTrack.
در این صفحه
برای محدود کردن پهنای باند یک کاربر یا یک subnet در RouterOS 7، یک Simple Queue با target و max-limit کافی است. اگر میخواهید پهنای باند بین همهی کاربران یک شبکه مساوی تقسیم شود، همان Simple Queue را با نوع صف PCQ بسازید. برای اولویت دادن به یک نوع ترافیک، مثلاً تماس VoIP در برابر دانلود، به Queue Tree و علامت گذاری در mangle نیاز دارید. پیش از همه یک نکته را بدانید: ترافیکی که FastTrack میشود از Queueها عبور نمیکند و محدود نمیشود.
مثالهای این راهنما شبکهی داخلی 192.168.88.0/24 روی bridge-lan و اینترنت روی ether1 را فرض میکنند، با خطی که ۱۰۰ مگابیت دانلود و ۲۰ مگابیت آپلود دارد. روش ساخت این پایه در کانفیگ اولیهی روتر میکروتیک آمده و نمای کلی همهی موضوعها در راهنمای جامع میکروتیک.
Simple Queue یا Queue Tree
| Simple Queue | Queue Tree | |
|---|---|---|
| انتخاب ترافیک | با target: آدرس، subnet یا اینترفیس |
با packet mark از mangle |
| جهت | آپلود و دانلود در یک قانون | هر queue فقط یک جهت |
| ترتیب | ترتیب دار؛ بسته از بالا بررسی میشود تا به اولین queue منطبق برسد | بدون ترتیب؛ همهی ترافیک با هم از درخت عبور میکند |
| queue روی یک اینترفیس مشخص | ندارد | دارد (تنها راه همین است) |
| مناسب برای | محدود کردن کاربر، subnet یا VLAN مهمان | اولویت بندی بر اساس نوع ترافیک |
قاعدهی ساده: اگر معیار شما «چه کسی» است، Simple Queue. اگر «چه نوع ترافیکی» است، Queue Tree.
محدود کردن یک کاربر
/queue simple
add name=pc-50 target=192.168.88.50/32 max-limit=5M/20M comment="PC 50"مقدارها همیشه به ترتیب آپلود/دانلود و از دید target هستند؛ این کاربر حداکثر ۵ مگابیت آپلود و ۲۰ مگابیت دانلود دارد. target میتواند چند آدرس، یک subnet یا یک اینترفیس باشد. برای محدود کردن کل VLAN مهمان کافی است target=10.10.20.0/24 بدهید (ساخت VLAN مهمان در VLAN در میکروتیک با bridge VLAN filtering).
limit-at و max-limit
max-limit(MIR): سقف سرعت؛ بهترین حالت، وقتی خط خالی است.limit-at(CIR): سرعت تضمین شده؛ بدترین حالت، وقتی همه برای پهنای باند رقابت میکنند.
limit-at وقتی معنی پیدا میکند که چند queue فرزند زیر یک queue والد باشند. مثال: وب سرور 192.168.88.20 همیشه دست کم ۵ مگابیت در هر جهت داشته باشد و بقیهی شبکه از باقی مانده استفاده کند:
/queue simple
add name=total target=192.168.88.0/24 max-limit=18M/90M
add name=server parent=total target=192.168.88.20/32 limit-at=5M/5M max-limit=18M/90M
add name=others parent=total target=192.168.88.0/24 max-limit=18M/90Mtotalفقط پهنای باند را تقسیم میکند؛ ترافیک واقعی از queueهای فرزند عبور میکند.serverبالاتر ازothersاست، چونothersآدرس سرور را هم پوشش میدهد.- مجموع
limit-atفرزندها نباید ازmax-limitوالد بیشتر شود. max-limitوالد کمی پایینتر از سرعت واقعی خط است (۹۰ به جای ۱۰۰). HTB فقط پهنای باندی را تقسیم میکند که واقعاً در اختیار دارد؛ اگر سقف والد بالاتر از سرعت خط باشد، صف پشت خط سرویس دهنده تشکیل میشود و تضمینlimit-atعملاً از دست میرود.
burst: سرعت بیشتر برای چند ثانیه
burst به کاربر اجازه میدهد برای مدت کوتاهی سریعتر از max-limit کار کند. نتیجه این است که باز شدن صفحهها و دانلودهای کوچک سریع حس میشود، ولی دانلود طولانی به max-limit برمیگردد.
| پارامتر | معنی |
|---|---|
burst-limit |
بیشترین سرعت در زمان burst؛ باید از max-limit بیشتر باشد |
burst-threshold |
کلید روشن و خاموش burst: تا وقتی میانگین سرعت کمتر از این مقدار است، burst مجاز است |
burst-time |
بازهای که میانگین سرعت روی آن حساب میشود؛ مدت خود burst نیست |
مستندات میکروتیک پیشنهاد میکند burst-threshold بالاتر از limit-at و پایینتر از max-limit باشد. نمونه:
/queue simple
add name=pc-60 target=192.168.88.60/32 limit-at=1M/5M max-limit=2M/10M burst-limit=4M/20M burst-threshold=1500k/7500k burst-time=16s/16sرفتار این queue در جهت دانلود:
- کاربر مدتی کاری نکرده و میانگین سرعتش صفر است. صفر کمتر از
7500kاست، پس burst مجاز است و دانلود با20Mشروع میشود. - روتر هر یک شانزدهم
burst-time(اینجا هر ۱ ثانیه) میانگین ۱۶ ثانیهی اخیر را دوباره حساب میکند. - بعد از ۶ ثانیه میانگین به آستانه میرسد:
20M × 6 ÷ 16 = 7.5M. burst قطع میشود و سرعت بهmax-limitیعنی10Mبرمیگردد. - تا وقتی کاربر با
10Mدانلود میکند، میانگین بالای آستانه میماند و burst برنمی گردد. بعد از مدتی بیکاری، میانگین زیر آستانه میرود و burst دوباره در دسترس است.
طولانیترین burst از رابطهی burst-threshold × burst-time ÷ burst-limit به دست میآید. عددهای جهت آپلود همان مثال مستندات میکروتیک است و آن هم به ۶ ثانیه میرسد: 1500k × 16 ÷ 4M = 6s.
تقسیم مساوی بین کاربران با PCQ
یک Simple Queue معمولی روی 192.168.88.0/24 کل subnet را با هم محدود میکند؛ یک کاربر با دانلود سنگین میتواند بیشتر این سهم را بگیرد. PCQ ترافیک یک queue را بر اساس pcq-classifier به زیر جریانهایی تقسیم میکند. با dst-address هر کاربر در جهت دانلود یک زیر جریان دارد و با src-address در جهت آپلود. pcq-rate=0 یعنی پهنای باند موجود بین زیر جریانها مساوی تقسیم شود.
/queue type
add name=pcq-down kind=pcq pcq-classifier=dst-address pcq-rate=0
add name=pcq-up kind=pcq pcq-classifier=src-address pcq-rate=0
/queue simple
add name=lan-fair target=192.168.88.0/24 max-limit=18M/90M queue=pcq-up/pcq-downاگر سه کاربر همزمان دانلود کنند، هر کدام حدود ۳۰ مگابیت میگیرند. اگر فقط یک نفر فعال باشد، تا ۹۰ مگابیت میرود.
برای این که هیچ کاربری حتی روی خط خالی بیشتر از ۱۰ مگابیت دانلود نگیرد، به زیر جریانها سقف بدهید:
/queue type set pcq-down pcq-rate=10Mبرای شبکهای با صدها کاربر، یک queue با PCQ به جای یک queue برای هر کاربر بسازید. Simple Queueها ترتیب دارند و هر بسته باید از queueهای بالاتر بگذرد تا به queue خودش برسد.
اولویت (priority)
priority عددی بین ۱ تا ۸ است: ۱ بالاترین و ۸ پایینترین. چهار قاعده رفتار آن را مشخص میکند:
- فقط روی queueهای بدون فرزند (leaf) کار میکند؛ روی queue والد اثری ندارد.
- فقط وقتی اثر دارد که برای آن queue مقدار
max-limitتعیین شده باشد. - اول
limit-atهمهی queueها تأمین میشود. بعد، باقی مانده به queue با اولویت بالاتر میرسد تا بهmax-limitخودش برسد. - ربطی به burst ندارد.
مثال مستندات HTB: زیر والدی با سقف ۱۰ مگابیت، سه queue فرزند هر کدام با limit-at برابر ۲ مگابیت و اولویتهای ۱، ۳ و ۵. وقتی هر سه پر کار باشند، queue با اولویت ۱ شش مگابیت میگیرد (۲ تضمینی و ۴ باقی مانده) و دو queue دیگر هر کدام همان ۲ مگابیت تضمینی.
Queue Tree با mangle
Queue Tree ترافیک را با packet mark انتخاب میکند. نمونهی زیر ترافیک سرور VoIP (192.168.88.30) را بر بقیهی ترافیک مقدم میکند. اول علامت گذاری:
/ip firewall mangle
add chain=forward src-address=192.168.88.30 connection-mark=no-mark action=mark-connection new-connection-mark=voip-conn passthrough=yes comment="QoS: VoIP out"
add chain=forward dst-address=192.168.88.30 connection-mark=no-mark action=mark-connection new-connection-mark=voip-conn passthrough=yes comment="QoS: VoIP in"
add chain=forward connection-mark=voip-conn action=mark-packet new-packet-mark=voip passthrough=no
add chain=forward action=mark-packet new-packet-mark=other passthrough=noبعد دو درخت، یکی برای هر جهت:
/queue tree
add name=down parent=bridge-lan max-limit=90M
add name=down-voip parent=down packet-mark=voip priority=1 limit-at=2M max-limit=90M
add name=down-other parent=down packet-mark=other priority=8 max-limit=90M
add name=up parent=ether1 max-limit=18M
add name=up-voip parent=up packet-mark=voip priority=1 limit-at=2M max-limit=18M
add name=up-other parent=up packet-mark=other priority=8 max-limit=18M- هر دو جهت از یک packet mark استفاده میکنند؛
parentجهت را مشخص میکند. ترافیکی که ازbridge-lanخارج میشود دانلود کاربران است و ترافیکی که ازether1خارج میشود آپلود آنها. - اگر اینترنت PPPoE است، به جای
ether1بنویسیدparent=pppoe-out1. - هر ارتباط فقط یک connection mark دارد. اگر load balancing با PCC دارید، ارتباطها قبلاً علامت خوردهاند و قانونهای
connection-mark=no-markبالا اجرا نمیشوند. در این حالت packet mark را مستقیم با شرط آدرس بزنید.
FastTrack و Queue
دو راه دارید. اگر Queueها همهی شبکه را پوشش میدهند، قانون fasttrack را غیرفعال کنید:
/ip firewall filter disable [find action=fasttrack-connection]اگر فقط بخشی از شبکه (مثلاً VLAN مهمان) محدود میشود، همان subnet را از fasttrack بیرون بگذارید و بقیهی شبکه سریع بماند:
/ip firewall filter set [find action=fasttrack-connection] src-address=!10.10.20.0/24 dst-address=!10.10.20.0/24شرط دوگانه لازم است: بستههای آپلود مهمان با src-address و بستههای دانلود با dst-address کنار گذاشته میشوند. قانون accept established زیر قانون fasttrack سر جایش میماند. ترتیب این قوانین در فایروال میکروتیک توضیح داده شده.
خاموش کردن fasttrack یعنی این ترافیک مسیر کامل پردازش را طی میکند و بار CPU بالا میرود. روی روتر کم توان با خط پرسرعت، بعد از این تغییر /system resource print را زیر بار ببینید.
CAKE و fq_codel در RouterOS 7
از RouterOS 7.1beta3 سه نوع صف جدید اضافه شده است: codel، fq-codel و cake. هدف اینها کم کردن تأخیر زیر بار (bufferbloat) است، نه تقسیم پهنای باند بین کاربران:
- fq-codel: صف عادلانه بین جریانها (به صورت پیش فرض ۱۰۲۴ جریان) و CoDel برای هر جریان.
- CAKE: شکل دهی پهنای باند، دسته بندی بر اساس DSCP با
cake-diffserv(پیش فرضdiffserv3با سه دسته) و جدا کردن جریانها یا میزبانها باcake-flowmode.
این نوعها مثل PCQ در پارامتر queue یک Simple Queue یا Queue Tree به کار میروند:
/queue type add name=cake-wan kind=cake
/queue simple add name=wan-cake target=192.168.88.0/24 max-limit=18M/90M queue=cake-wan/cake-wanاگر هدف سهم مساوی برای هر کاربر است، PCQ راه مستقیمتری است و مستندات میکروتیک مثال کامل آن را دارد.
بررسی و تست
/queue simple print stats
/queue tree print stats
/tool torch interface=bridge-lan src-address=0.0.0.0/0در خروجی print stats:
| فیلد | معنی |
|---|---|
rate |
میانگین سرعت عبور از queue |
dropped |
بستههایی که به خاطر محدودیت دور ریخته شدهاند |
queued-bytes |
دادهای که در صف منتظر است |
lends / borrows |
بستههایی که زیر limit-at یا بالای آن عبور کردهاند |
pcq-queues |
تعداد زیر جریانهای PCQ؛ تقریباً تعداد کاربران فعال |
Torch سرعت زندهی هر آدرس را روی یک اینترفیس نشان میدهد (در Winbox از منوی Tools؛ راهنمای Winbox).
مشکلات رایج
- Queue هیچ محدودیتی اعمال نمیکند: اول قانون fasttrack را بررسی کنید. اگر شمارندهی
bytesدرprint statsبالا نمیرود، queue دیگری بالاتر در فهرست همین ترافیک را زودتر گرفته است. - آپلود و دانلود جا به جا شدهاند: ترتیب همیشه آپلود/دانلود از دید
targetاست؛5M/20Mیعنی ۵ مگابیت آپلود. - یک کاربر همهی پهنای باند subnet را میگیرد: queue را با
queue=pcq-up/pcq-downبسازید. - priority اثری ندارد: priority را روی queue والد گذاشتهاید، فرزندها
max-limitندارند، یاmax-limitوالد بالاتر از سرعت واقعی خط است. - burst فقط چند ثانیه طول میکشد: رفتار درست همین است. مدت آن را با رابطهی بالا حساب کنید؛ برای burst طولانیتر
burst-timeیاburst-thresholdرا بیشتر کنید. - CPU با تعداد زیادی Simple Queue بالا رفته: به جای یک queue برای هر کاربر، یک queue با PCQ بسازید.
- rate-limit کاربران Hotspot اعمال نمیشود: Hotspot برای هر کاربر یک Simple Queue پویا میسازد و همان مشکل fasttrack را دارد؛ جزئیات در Hotspot در میکروتیک.
منابع
- MikroTik Documentation — Queues help.mikrotik.com
- MikroTik Documentation — Queue Burst help.mikrotik.com
- MikroTik Documentation — PCQ example help.mikrotik.com
- MikroTik Documentation — HTB (Hierarchical Token Bucket) help.mikrotik.com
- MikroTik Documentation — Packet Flow in RouterOS help.mikrotik.com
- MikroTik Documentation — CAKE help.mikrotik.com
- MikroTik Documentation — Torch help.mikrotik.com