Роутери MikroTik ідеальні для невеликих мереж. Вони коштують недорого (щодо Cisco), налаштовувати їх просто (щодо FreeBSD), крім того, вони ще й мають відмінним функціоналом (щодо звичайних SOHO роутерів).
Отже, наша мережа доросла до стану в якому D-link не справляється, але до установки FreeBSD ми не готові морально.
Йдемо в магазин, купуємо щось на зразок RB450G. RB750 або подібну залізяку. Включаємо її в мережу і диву даємо. Для людини звиклого до суворої простоті DIR'ов велика кількість кнопок Win-Box`а викликає думка «А що тут можна натиснути, щоб нічого не зламати?».
Однак є одне але: працювати то він працює, але по виконуваних функцій недалеко пішов від DIR-a.
Що я хочу від роутера? - Щастя всім, порівну, і нехай ніхто не піде скривдженим (с).
Я хочу, щоб кожен користувач мережі отримував швидкість повної ширини каналу. І щоб при цьому, якщо кілька людей одночасно качають фільми, швидкість поділилася між ними порівну. І щоб при цьому третій міг спокійно шукати інформацію в мережі. І щоб четвертий міг грати в лінійку і у нього були нормальні пінг. Загалом, такий собі переміг комунізм в маленькій локалке. Детальне вивчення можливостей показує, що це завдання можна вирішити за допомогою PCQ черг.

Рис.1. Принцип поділу швидкості.
Завдання просте: потрібно промаркувати пакети і загнати їх в PCQ чергу. Для початку розберемося, що маркувати.


Рис.3. Призначаємо користувачеві Adress List.
Маркування - це невелике текстове поле, яке додається до пакету по потрібному нам правилом і дозволяє зловити цей пакет в Query Tree.
Отже, в IP Firewall Mangle.

Створюємо два правила.
Перше маркує всі вхідні пакети.

Рис.5. Маркуємо вхідні пакети.
Заповнюємо: Chain - forward, Dist address list - наш список користувачів, вибираємо по стрілочки вниз. Action - mark packet, New packet mark - наше ім'я пакета.

Рис.6. Дії для вихідного трафіку.
Для вихідного трафіку все точно так же, тільки навпаки. Dist Address у нас порожній, а Src address - наш список.
Пакети промарковані, тепер їх потрібно запхати в чергу.
Для початку створимо два PCQ.

У вхідних пакетів (а для користувача це upload) ми ставимо класифікатор SRC. Тобто джерело.
Тепер створимо саме дерево. Дерево можна робити по різному, в залежності від необхідного завдання.
Для початку створимо один кореневий елемент. Назвемо його Global. parent виберемо global-out.
Додамо ще два елементи. Один - Download. другий - Upload. Parent у них буде спільний - наш Global.
Така схема зручна, якщо входить канал у нас напівдуплексний, наприклад, wi-fi канал. У Global потрібно виставити обмеження сумарної швидкості каналу. Наприклад у нас канал 25 Мбіт. Ми хочемо дозволити завантажувати з максимальною швидкістю, а закачувати не більше 3м.
Ми в гілку Global ставимо max limit 50m. а в гілку Download не ставимо обмеження (тобто, ставимо 0), в гілку Upload ставимо 10m.

Рис.8. Створюємо саме дерево.
Ось власне і все. З цього моменту швидкість буде динамічно розподілятися між усіма користувачами. Між усіма, кому ми призначили Adress list.
Контроль над помилками. Мало де пишуть, але правильність роботи PCQ черг потрібно перевірити.

Рис.9. Контроль над помилками.
Схоже, що зараз 6 чоловік в мережі. Схоже на правду
У три кліка мишкою ми включаємо відображення колонки PCQ queries. Число в цій колонці має показувати реальне число клієнтів. Якщо це число явно велике, то швидше за все ми наплутали з класифікаторами.

Рис.10. Приклад неправильно обраного класифікатора.
Як приклад неправильно обраного класифікатора. У мене немає 150 комп'ютерів, а в рядку k38 150 pcq черг.
Ключовим правилом для роботи Шейпера є правильна установка обмеження в global.
MikroTik виділять швидкість черг до тих пір, поки не упреться в обмеження. Як тільки обмеження досягнуто (іконки на скронях зараз зелені, при обмеженні вони стають червоними), MikroTik починає ділити швидкість.
Розглянемо такий приклад: у нас насправді канал прокачує 50 Мбіт, а ми виставимо ліміт в 60 Мбіт. Тоді вийде так, що перший користувач запустив торрент і зайняв всі 50 Мбіт. MikroTik йому швидкість не обмежує, він качає і задоволений. Другий користувач вирішив пограти. Запустив собі BF3. З точки зору MikroTik а канал ще не забитий, він нічого не робить. Але зовнішній канал забитий і другий користувач побачить пінг під 1000 і отримати задоволення від гри не зможе.
Ця ж ситуація, тільки ми виставимо ліміт в 40 Мбіт. Перший клієнт поставив фільми на закачування. Торрент качає. Швидкість піднімається до 40 Мбіт, мікротік кричить: «Ага, попався!» І затримує пакети понад норму.
Другий користувач запускає BF3. MikroTik бачить, що їх двоє, що один качає багато, а другий - мало. Всі пакети другого користувача йдуть без черги, а перший відпочиває.
І виходить: перший качає 39 Мбіт, а другий спокійно грає з нормальними пінг.
Тому ключовим моментом є установка ліміту, який може гарантовано видати зовнішній канал.
Спеціально для ASP24.