НОУ ІНТУІТ, Лекція, Обмеження смуги пропускання трафіку
Розглянути можливі способи обмеження смуги пропускання для вхідного та вихідного трафіку.
- Обмежити смугу пропускання для вхідного трафіку до 2 Мбіт/с незалежно від типу трафіку.
- Обмежити смугу пропускання обох напрямках до 2 Мбіт/с незалежно від типу трафіку.
Опис практичної роботи
Обмеження смуги пропускання для вхідного трафіку
Необхідно створити канал, який обмежує весь трафік, що проходить через нього, до 2 Мбіт/с, незалежно від типу трафіку.
Traffic Management -> Traffic Shaping -> Pipes -> Add -> Pipe


add Pipe total_in LimitKbpsTotal=2000
Правила каналів (Pipe Rules)
Який трафік повинен проходити через канал, вказується в Правилі каналу.
Будемо використовувати створений канал для обмеження вхідного трафіку. Це обмеження застосовується до пакетів, а не до з'єднань. При виконанні шейпінгу трафіку важливим є напрям, в якому передаються дані, а не сторона, що ініціювала з'єднання.
Слід створити правило, що дозволяє проходження будь-якого вихідного трафіку. Додаємо створений канал у зворотний ланцюжок (return chain). Це означає, що пакети, що йдуть у зворотному напрямку цієї сполуки, повинні проходити через канал total-in.
Traffic Management -> Traffic Shaping -> Pipe Rules -> Add -> Pipe Rule


add PipeRule SourceInterface=lan SourceNetwork=lan/lan_net DestinationInterface=wan1 DestinationNetwork=all-nets Service=all_services ReturnChain=total_in Name=Inbound
Обмеження смуги пропускання в обох напрямках
Використання одного і тогож каналу для обох напрямків не вирішує проблему.
Напрямок трафіку, що проходить через канал, не має значення, оскільки враховується лише сумарна кількість трафіку. Один і той же канал може використовуватися як для вхідного, так і для трафіку, що виходить, при цьому не буде окремого підрахунку трафіку в кожному напрямку.
У попередньому прикладі смуга пропускання обмежена тільки для вхідного напрямку. У більшості випадків необхідно обмежувати саме трафік, що входить. Але що робити, якщо необхідно обмежити вихідний трафік так само?
Приміщення std-in у прямий ланцюжок (forward chain) не принесе результату, якщо потрібно отримати обмеження до 2 Мбіт/с для вихідного трафіку окремо від обмеження до 2 Мбіт/с для вхідного. Якщо крім вихідного трафіку (2 Мбіт/с) через канал проходить вхідний трафік (2 Мбіт/с), загальний потік трафіку складе 4 Мбіт/с. Оскільки обмеження каналу становить 2 Мбіт/с фактична величина потоку буде близька до значення 1 Мбіт/с у кожному напрямку.
Збільшення загального обмеження до 4 Мбіт/с не вирішить проблему, оскільки для одного каналу це не означає обмеження 2 Мбіт/с для вхідного та 2 Мбіт/с для вихідного трафіку. В результаті може бути 3 Мбіт/с вихідного та 1 Мбіт/с вхідного трафіку, оскільки це також становить 4 Мбіт/с.
Для керування смугою пропускання в обох напрямках рекомендується використовувати два окремі канали: один для вхідного, а інший для вихідного трафіку. В даному сценарії для досягнення оптимального результату для кожного каналу встановлено обмеження 2 Мбіт/с.
Необхідно створити два канали, кожен з яких обмежують весь трафік, що проходить через нього, до 2 Мбіт/с, незалежно від типу трафіку. Додатково до каналуствореному раніше, додаємо канал для вихідного трафіку.
Traffic Management -> Traffic Shaping -> Pipes -> Add -> Pipe


add Pipe total_out LimitKbpsTotal=2000
Правила каналів (Pipe Rules)
Traffic Management -> Traffic Shaping -> Pipe Rules -> Add -> Pipe Rule


add PipeRule SourceInterface=lan SourceNetwork=lan/lan_net DestinationInterface=wan1 DestinationNetwork=all-nets Service=all_services ReturnChain=total_in ForwardChain=total_out Name=in_out
Обмеження смуги пропускання залежно від типу трафіку
Для простоти будемо розглядати обмеження лише вхідного трафіку, оскільки в клієнт-серверних додатках зазвичай вхідний трафік більше, ніж вихідний.
У попередніх прикладах здійснювалося обмеження трафіку всім вихідних сполук. Що робити, якщо потрібно обмежити навігацію по веб-сторінках більше, ніж решта трафіку? Припустимо, що ширина загальної смуги пропускання – 250 кбіт/с, з яких 125 кбіт/с мають бути виділені для веб-трафіку.
Якщо створити два канали, один http -in для обмеження вхідного веб-трафіку з обмеженням в 125 кбіт/с, а інший канал all-in для решти трафіку з обмеженням в 250 кбіт/с, то бажаний результат досягнутий не буде, оскільки результуючий обсяг трафіку дорівнюватиме сумі обмежень у кожному каналі, тобто. 375 кбіт/с.
Для вирішення подібного завдання слід створити ланцюжок, що складається з каналу all-in і http-in для веб-трафіку. Вхідний веб-трафік спочатку проходить через http-in, максимальне обмеження в якому 125 кбіт/с. Далі трафік проходить через канал all-in разом з рештою вхідного трафіка. Для другого каналувстановлено обмеження 250 кбіт/с.
Якщо веб-трафік повністю споживає 125 кбіт/с, ці 125 кбіт/с займуть половину каналу http-in, 125 кбіт/с, що залишилися, буде використовуватися для решти трафіку. Якщо веб-трафік відсутній, всі 250 кбіт/с, відведені для http -in, можуть використовуватися для іншого трафіку.
Це не забезпечує смугу пропускання, що гарантується для веб-трафіку, але встановлює обмеження для нього до 125 кбіт/с і гарантує смугу пропускання 125 кбіт/с для решти трафіку. Для веб-трафіку в каналі http-in застосовуються стандартні правила: трафік проходитиме на загальних підставах нарівні з іншим трафіком. Це означає обмеження 125 кбіт/с, при цьому можлива нижча швидкість, якщо канал завантажений.
Подібний спосіб завдання каналів визначає обмеження на максимальні значення для деяких типів трафіку і не визначає пріоритети для різних типів конкуруючого трафіку.
Traffic Management -> Traffic Shaping -> Pipes -> Add -> Pipe

add Pipe http_in LimitKbpsTotal=125
add Pipe all_in LimitKbpsTotal=250
Правила каналів (Pipe Rules)
Traffic Management -> Traffic Shaping -> Pipe Rules -> Add -> Pipe Rule





add PipeRule SourceInterface=lan SourceNetwork=lan/lan_net DestinationInterface=wan1 DestinationNetwork=all-nets Service=http-all ReturnChain=http_in,all_in Name=http_shaping
add PipeRule SourceInterface=lan SourceNetwork=lan/lan_net DestinationInterface=wan1 DestinationNetwork=all-nets Service=all_services ReturnChain=all_in Name=all_shaping
Додамо до попереднього прикладу вимогу, що трафік SSH повинен мати вищийпріоритет у порівнянні з рештою трафіку. Для цього додамо Правило каналу спеціально для SSH і встановимо у правилі більший пріоритет – наприклад, 2. У цьому новому правилі ми вказуємо канали, які використовуються для решти трафіку.
Результатом цього буде призначення вищого пріоритету SSH-пакетів, при цьому відправлення цих пакетів виконується через той же канал, що й решта трафіку. Механізм каналів гарантує, що при перевищенні обмеження смуги пропускання, зазначеного в налаштуваннях каналу, пакети з вищим пріоритетом будуть надіслані насамперед. Пакети з більш низьким пріоритетом будуть поміщені в буфер і відправлені, якщо пропускна здатність, що використовується, менша, ніж максимальна величина, вказана для каналу. Процес буферизації іноді призводить до зворотного ефекту, оскільки зменшується швидкість потоку.
Вказівка обмеження пріоритету гарантує мінімальну кількість смуги пропускання для цього пріоритету. Трафік, що проходить через канал, отримає гарантовану смугу пропускання, вказану для пріоритету за рахунок урізання трафіку з нижчим пріоритетом.
Якщо вихідний трафік із пріоритетом 2 перевищує 100 кбіт/с, то пріоритет тієї частини трафіку, яка перевищує дане обмеження, знижується до пріоритету негарантованої доставки (best effort). Весь трафік із пріоритетом негарантованої доставки (best effort) буде відправлено в порядку надходження.
Traffic Management -> Traffic Shaping -> Pipes -> Add -> Pipe