شبکه / میکروتیک

Queue و محدود کردن پهنای باند در میکروتیک

محدود کردن پهنای باند در RouterOS 7 با Simple Queue و Queue Tree؛ max-limit و limit-at، burst با مثال عددی، تقسیم مساوی با PCQ، اولویت و تداخل با FastTrack.

نوشته‌ی تیم پیکوگاید آخرین بازبینی فنی: ۱۰ دقیقه مطالعه
در این صفحه
  1. Simple Queue یا Queue Tree
  2. محدود کردن یک کاربر
  3. limit-at و max-limit
  4. burst: سرعت بیشتر برای چند ثانیه
  5. تقسیم مساوی بین کاربران با PCQ
  6. اولویت (priority)
  7. Queue Tree با mangle
  8. FastTrack و Queue
  9. CAKE و fq_codel در RouterOS 7
  10. بررسی و تست
  11. مشکلات رایج

برای محدود کردن پهنای باند یک کاربر یا یک 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/90M
  • total فقط پهنای باند را تقسیم می‌کند؛ ترافیک واقعی از 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 در جهت دانلود:

  1. کاربر مدتی کاری نکرده و میانگین سرعتش صفر است. صفر کمتر از 7500k است، پس burst مجاز است و دانلود با 20M شروع می‌شود.
  2. روتر هر یک شانزدهم burst-time (اینجا هر ۱ ثانیه) میانگین ۱۶ ثانیه‌ی اخیر را دوباره حساب می‌کند.
  3. بعد از ۶ ثانیه میانگین به آستانه می‌رسد: 20M × 6 ÷ 16 = 7.5M. burst قطع می‌شود و سرعت به max-limit یعنی 10M برمی‌گردد.
  4. تا وقتی کاربر با 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 در میکروتیک.

منابع

  1. MikroTik Documentation — Queues help.mikrotik.com
  2. MikroTik Documentation — Queue Burst help.mikrotik.com
  3. MikroTik Documentation — PCQ example help.mikrotik.com
  4. MikroTik Documentation — HTB (Hierarchical Token Bucket) help.mikrotik.com
  5. MikroTik Documentation — Packet Flow in RouterOS help.mikrotik.com
  6. MikroTik Documentation — CAKE help.mikrotik.com
  7. MikroTik Documentation — Torch help.mikrotik.com