Burst limit mikrotik

Ограничение скорости интернета на все ip адреса в подсети.

Предположим, провайдер предоставляет нам интернет канал 50 Мбит/сек. Стоит задача: для каждого пользователя ограничить канал до 3 Мбит.

Создадим новый тип. Для этого заходим в меню Queue вкладка Queue Types. И нажимаем на кнопку «+» добавить.

Type Name – имя нового типа

Kind – тип, принимает следующие значения
bfifo – тип основанный на алгоритме First-In First-Out, Первый-пришел первый ушел, размер очереди определяется в байтах параметром queue size, если очередь переполнена, то остальные пакеты отбрасываются.
pfifo – то же самое что и bfifo, только размер не в байтах, а в пакетах
mq pfifo – тот же pfifo с поддержкой нескольких очередей
red — Random Early Drop — это механизм очередей, который пытается избежать перегрузки сети, контролируя средний размер очереди. Средний размер сравнивается с двумя порогами: минимальным (минимальным) и максимальным (максимальным) порогом. Если средний размер (avgq) меньше минимального порога, пакеты не отбрасываются. Когда средний размер очереди больше максимального порога, все входящие пакеты удаляются.
sfq — Stochastic Fairness Queuing (SFQ) обеспечивается хешированием и циклическими алгоритмами. Трафик может быть однозначно идентифицирован с помощью 4 параметров (src-адрес, dst-адрес, src-порт и dst-порт), поэтому эти параметры используются алгоритмом хэширования SFQ для классификации пакетов в один из 1024 возможных подпотоков. Затем алгоритм round-robin начнет распространять доступную пропускную

способность для всех подпотоков, причем каждый раунд дает байты трафика sfq-allot. Вся очередь SFQ может содержать 128 пакетов и доступно 1024 подпотока.
pcq – то же что sfq, но с возможностью ограничить скорость потоков

Более подробно о типах можно прочитать здесь https://wiki.mikrotik.com/wiki/Manual:Queue#Kinds

Для ограничения ширины канала выбираем тип pcq, в поле Rate указываем значение скорости. В нашем случае 3M. Нам нужно ограничить 3 Мбит/c на вход и на выход, поэтому ставим галочки напротив Dst. Address и Src.Address. Если нам нужно не симметрично ограничить канал, скажем на загрузку 3Мбит/c, а на отдачу 5Мбит/c, то нужно создать два типа, на загрузку и на отдачу с соответствующими параметрами. Остальные поля оставляем как есть.

Остальные поля pcq типа

Limit — размер одного подпотока
Total limit — максимальное количество данных в во всех подпотоках
Burst Rate, Burst Threshold, Burst Time — довольно интересные параметры, рассмотрим их более подробно.
Burst Rate – дословно «взрыв скорости» если мы сделаем настройки как показаны на рисунке.

То это будет работать так: если пользователь допустим начнет закачку файла, то сначала канал у него будут 10Мбит/c, параметр Burst Rate, и такая скорость будет в течении 3-х минут, параметр Burst Time, далее скорость вернется к значению Rate. Если пользователь не будет некоторое время скачивать и у него использование интернет канала опустится меньше 512 Кбит/c, значение Burst Threshold , то при следующем использовании интернета, первые 3 минуты пользователь будет пользоваться каналом со значением Burst Rate. Это бывает очень полезно, скажем когда пользователи просто ходят по страницам в интернете, то скорость загрузки страниц у них будет 10 Мбит, а если они начнут качать большие файлы, то через три минуты скачивание будет всего 5 Мбит/c.
Поля раздела Classifer думаю понятны без объяснений, это адрес, порт источника и назначения, а также маски адресов. Более подробно о типе pcq читайте здесь https://wiki.mikrotik.com/wiki/Manual:Queues_-_PCQ.

Следующим шагом применим наши созданные правила. Заходим на вкладку Simple Queues и добавляем очередь.

Name – имя нашей очереди

Target – цель. Здесь прописываем нашу подсеть

Остальные поля не заполняем, если вы встречали статьи где нужно прописывать Max Limit, то могу сказать что это не обязательно, работать будет и с параметром unlimited. Далее переходим на вкладку advanced и выбираем в качестве Queue type. Созданные выше типы.

Нажимаем кнопку ОК. На этом настройки закончены. Теперь любой компьютер c ip адресом из подсети 192.168.7.0/24 будет ограничен шириной канала в 3Мбит/с.

Ограничение скорости с помощью маркировки пакетов и Queues Tree на всю сеть

Если нужно ограничить ширину канала на одну или несколько сетей, а также на отдельные ip адреса то этот можно сделать с помощью маркировки пакетов .

Заходим в меню IP-Firewall, вкладка Address Lists создаем новый адрес лист с нашей сетью.

Также в этот лист можно добавить и отдельные ip адреса, а не сеть, скажем если они идут не по порядку, допустим 192.168.7.11, 192.168.7.87, 192.168.7.199.

Далее переходим на вкладку Mangle , здесь добавляем два правила. На вкладке General, поле Chain выбираем forward

Переходим в advanced и в поле Src. Address List выбираем лист созданный на первом шаге

Идем на вкладку Action. Здесь в поле action выбираем маркировку пакетов mark packet и пишем как будем маркировать, например upload.

Аналогично создаем еще одно правило на download. Только уже будет Dst. Address List и маркировка download.

Нажимаем Ок. Теперь все пакеты идущие из сети 192.168.7.0/24 будут маркироваться как upload, а пакеты идущие в эту сеть как download.

Теперь идем в меню Queues, вкладка Queues tree и добавляем правило.

Name – имя

Parent – выбираем global

Packet Marks – выбираем маркировку созданную ранее upload

Limit AT – гарантированная скорость, т.е если у нас скажем общий канал 10 Мбит/c и мы создаем две очереди с максимальной шириной канала по 10 Мбит. То если вторая очередь заняла скажем канал на 8 Мбит, то нашей остается всего 2 Мбит, параметром Limit AT мы указываем, что гарантируем канал в 5 Мбит. т.е если в нашей очереди начнут интенсивно использовать интернет, то приоритет у нашей очереди увеличится, а у второй очереди уменьшится и скорость поделится по 5 Мбит

Max Limit – максимальная скорость. Это и есть наше ограничение скорости.

Нажимаем ОК и аналогично создаем очередь на загрузку

Если все сделали правильно, то мы увидим наши созданные queue и загрузку по ним.

Этот способ удобно использовать когда список сетей или адресов на ограничение часто меняется, тогда их просто можно добавлять или удалять в адресных листах. Если же адреса для ограничения меняются не часто, то удобнее использовать simple queus.

Приоритезация трафика на Mikrotik

Если нужно настроить приоритизацию трафика на Mikrotik то это делается через параметр Priority в настройка Queues tree.

Или на вкладке Advanced в Simple Queues.

Приоритет принимает значение от 1 до 8. Чем меньше значение, тем выше приоритет, т.е очередь с priority 1 будет обрабатываться самой первой, а с 8 последней. Например если у вас есть сервер ip телефонии asterisk с ip 192.168.7.10, то для него лучше сделать настройки такие.

Если нам нужно настроить приоритет определенного типа трафика, например SIP, VoIP или IpTV не привязываясь к ip адресам. То сделать это можно с помощью Mangle и Queues Tree, как это сделать я писал выше, только маркируем пакеты не по ip а по протоколу и порту. Например для маркировки пакетов на порт 5060 будет выглядеть так.

Комбинируя выше указные способы можно очень гибко настроить шейпинг скорости и приоритет трафика. Также надо отметить что настройки в Queue Tree имеют больший приоритет чем в simple Queues.

Обучающий курс по настройке MikroTik

Нужно разобраться с MikroTik, но не определились с чего начать? В курсе «Настройка оборудования MikroTik» все по порядку. Подойдет и для начала работы с этим оборудованием, и для того, чтобы систематизировать знания. Это видеокурс из 162 уроков и 45 лабораторных работ, построен на официальной программе MTCNA. Проходить можно, когда удобно и пересматривать по необходимости – материалы курса выдаются бессрочно. Также есть 30 дней на личные консультации с автором. На пробу выдают 25 уроков бесплатно, заказать их можно на странице курса.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Динамический шейпинг для MikroTik

Рейтинг Оценка: 4.8Голосов: 25Комментарии: 39

Роутеры MikroTik идеальны для небольших сетей. Они стоят недорого (относительно Cisco), настраивать их просто (относительно FreeBSD), кроме того, они ещё и обладают отличным функционалом (относительно обычных SOHO роутеров).

Итак, наша сеть доросла до состояния в котором D-link не справляется, но к установке FreeBSD мы не готовы морально.

Идем в магазин, покупаем что-то вроде RB450G, RB750 или подобную железку. Включаем ее в сеть и диву даёмся. Для человека привыкшего к суровой простоте DIR’ов обилие кнопок Win-Box`а вызывает мысль «А что тут можно нажать, чтоб ничего не сломать?».

Ну да ладно, к счастью, данные девайсы идут преднастроенными на работу в режиме роутера. Если их подключить в сеть и прописать адрес, то он даже заработает.

Однако есть одно но: работать то он работает, но по выполняемым функциям недалеко ушел от DIR-a.

Что я хочу от роутера? – Счастья всем, поровну, и пусть никто не уйдет обиженным (с).

Я хочу, чтобы каждый пользователь сети получал скорость полной ширины канала. И чтобы при этом, если несколько человек одновременно качают фильмы, скорость поделилась между ними поровну. И чтобы при этом третий мог спокойно искать информацию в сети. И чтобы четвёртый мог играть в линейку и у него были нормальные пинги. В общем, такой себе победивший коммунизм в маленькой локалке. Детальное изучение возможностей показывает, что данную задачу можно решить при помощи PCQ очередей

Рис.1. Принцип деления скорости.

Задача простая: нужно промаркировать пакеты и загнать их в PCQ очередь. Для начала разберёмся, что маркировать.

Итак, включаем получение адресов через DHCP, подключаем патч в порт 2-5 нового роутера. Запускаем WinBox. Идём в IP -> DHCP Server -> Leases.

Рис.2. WinBox.

Вверху списка будет наша единственная запись с выданным адресом. Открываем её, нажимаем «Make static» и закрываем. Открываем еще раз. У нас появилась закладка General на которой можно поменять IP-адрес, можно назначить пользователю Adress List Вот Adress List сейчас нам больше всего и нужен, здесь запишем, как мы хотим назвать эту группу пользователей.

Рис.3. Назначаем пользователю Adress List.

После этого повторяем действия для всех новых компьютеров. Получил адрес – сделал его статическим – прописал Address List. После первого раза можно не писать, а воспользоваться выпадающим меню. Можно конечно не использовать DHCP, а указывать диапазоны вручную, но это не наш метод.

Теперь, когда у нас есть адреса «от кого маркировать», можно приступить к маркировке.

Маркировка – это небольшое текстовое поле, которое добавляется к пакету по нужному нам правилу и позволяет поймать этот пакет в Query Tree.

Итак, в IP Firewall Mangle.

Рис.4. IP Firewall Mangle.

Создаём два правила.

Первое маркирует все входящие пакеты.

Рис.5. Маркируем входящие пакеты.

Заполняем: Chain – forward, Dist address list – наш список пользователей, выбираем по стрелочке вниз. Action – mark packet, New packet mark – наше имя пакета.

Dist address list – это адрес назначения. Т.е. это те пакеты, которые уходят из роутера и в которых назначен адрес получателя в нашем Adress List.

Рис.6. Действия для исходящего трафика.

Для исходящего трафика все точно так же, только наоборот. Dist Address у нас пустой, а Src address – наш список.

Пакеты промаркировали, теперь их нужно запихнуть в очередь.

Для начала создадим два PCQ

Рис.7. Создаём два PCQ.

Из того, что здесь важно. Rate – ограничение скорости на каждого пользователя. Можно использовать буквы k (килобиты) и М (мегабиты). У исходящих пакетов (для нас исходящие, а для пользователя входящие – download) классификатор dist address. Т.е. пакеты уходят, а мы делим между ними скорость, классифицируя их по адресу пользователя. Другими словами, доступная скорость будет делится между всеми активными в данным момент адресами.

У входящих пакетов (а для пользователя это 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.

Вас может заинтересовать

1932 2456 грн грн 70 у.е. Купить
(Снят с производства)

Если Вы нашли ошибку в тексте, то выделите ее мышкой и нажмите Ctrl + Enter или .

Большое спасибо за Вашу помощь! Мы скоро исправим ошибку!

Сообщение не было отправлено. Пожалуйста, попробуйте еще раз.

Сообщение об ошибке

Ошибка:

>Как устроен шейпер RouterOS> Задание уровней качества связи.

Задание уровней качества связи — это предоставление каждому клиенту оговоренного уровня качества связи.

Делим Интернет или QoS на Mikrotik

Теория

Для начала рассмотрим несколько понятий, которыми мы будем пользоваться в дальнейшем.

Технология, которая позволяет ограничивать скорость и качество доступа в Интернет, называется шейпинг (от англ. Shape — форма). Образно говоря — это технология придания некой формы графику загрузки канала.

Шейпер — это алгоритм, который помимо управления очередностью пакетов позволяет отбрасывать не удовлетворяющие условиям. К таковым относятся алгоритмы PCQ и HTB (о них поговорим несколько позже).

Существует ещё один тип алгоритмов, используемых для управления движением пакетов внутри шейпера Schedulers. Их задача состоит только в формировании очередей согласно приоритетам пакетов, адресу источника, получателя и другим параметрам. К этому типу алгоритмов относятся PFIFO, BFIFO,SFQ, PCQ, RED.

Под-очередь — очередь, сформированная из пакетов по тому или иному признаку.

Queuing discipline (qdisc — дисциплина очереди) — алгоритм, который захватывает пакеты и точно определяет в каком порядке и каким образом они будут двигаться.

HTB

В основе шейпинга, используемого в Mikrotik, лежит дисциплина очереди HTB, реализованная во многих Linux-системах. Ее изучение является достаточно сложной, однако необходимой задачей для новичка, потому как без этих знаний дальше неудачных попыток и копирования правил из документации мало кто заходит.

Список основных возможностей по управлению трафиком в Mikrotik выглядит следующим образом:

  • ограничение скорости по IP-адресам, подсетям, протоколам, портам, времени суток и другим параметрам;
  • ограничение P2P-трафика (BitTorrent, eMule);приоритизация одних потоков пакетов над другими;
  • использование пиковых скоростей для быстрого WEB-браузинга;
  • разделение канала между пользователями поровну или в других пропорциях;
  • возможность задания гарантированной скорости.

Ключевым понятием для HTB является класс. Приставка Hierarhical в аббревиатуре HTB означает, что дисциплина позволяет строить иерархию классов.

Схематически иерархию классов (для упрощения будем называть классы правилами) HTB можно представить в виде некого гибридного разделенного уровнями дерева, конечными вершинами которого являются клиенты. Классы, которые не имеют дочерних, будем называть клиентами или листьями. Обычно они находятся на нулевом уровне иерархии и первыми захватывают относящийся к ним трафик, передавая его родителям. Два или более класса, имеющие одного прямого родителя находятся на одном уровне и подсоединены к одной локальной выходной очереди.

Схематическое изображение структуры HTB

На схеме выше изображена иерархия классов, в которую из файервола (Filter) поступают пакеты с данными. В зависимости от приоритета, параметров классов и загрузки канала они попадают или в локальные очереди (Self Feed), или передаются в очереди родительских классов (Inner Feed).

Класс характеризуют следующие параметры:

  • limit-at – гарантированная скорость;
  • max-limit – ограничение скорости;
  • priority – приоритет класса.

Класс может находиться в одном из трех состояний:

  • Зеленый — пропускная способность правила не превышает параметр limit-at. В этом случае пакеты не двигаются вверх по иерархии, а перемещаются сразу в выходной поток своего уровня согласно приоритетам.
  • Желтый — пропускная способность правила больше limit-at, но меньше max-limit. В этом случае класс отключается от выходного потока своего уровня и подключается к родительскому классу.
  • Красный — пропускная способность правила больше max-limit. В этом состоянии класс отключается от родительского и подключается к локальной очереди.

Пользуясь уже даже этими данными, можно составлять правила, однако на практике некоторые вещи могут выглядеть несколько иначе.

В Mikrotik предусмотрены два типа правил, разнесенные на разные закладки в графической утилите Winbox (с ее помощью можно конфигурировать Mikrotik из-под Windows):

  • Simple Queues;
  • Queue Trees.

О них мы поговорим несколько позже, а сейчас рассмотрим несколько примеров работы HTB

Создадим несколько правил

queue tree> add name=ClassA parent=Local max-limit=2048000 queue tree> add name=ClassB parent=ClassA max-limit=1024000 queue tree> add name=Leaf1 parent=ClassA max-limit=2048000 … limit-at=1024000 packet-mark=packet_mark1 priority=8 queue tree> add name=Leaf2 parent=ClassB max-limit=1024000 … limit-at=256000 packet-mark=packet_mark2 priority=7 queue tree> add name=Leaf3 parent=ClassB max-limit=1024000 … limit-at=768000 packet-mark=packet_mark3 priority=8 queue tree> print Flags: X — disabled, I — invalid 0 name=»ClassA» parent=Local packet-mark=»» limit-at=0 queue=default priority=8 max-limit=2048000 burst-limit=0 burst-threshold=0 burst-time=0s 1 name=»ClassB» parent=ClassA packet-mark=»» limit-at=0 queue=default priority=8 max-limit=1024000 burst-limit=0 burst-threshold=0 burst-time=0s 2 name=»Leaf1″ parent=ClassA packet-mark=packet_mark1 limit-at=1024000 queue=default priority=8 max-limit=2048000 burst-limit=0 burst-threshold=0 burst-time=0s 3 name=»Leaf2″ parent=ClassB packet-mark=packet_mark2 limit-at=256000 queue=default priority=7 max-limit=1024000 burst-limit=0 burst-threshold=0 burst-time=0s 4 name=»Leaf3″ parent=ClassB packet-mark=packet_mark3 limit-at=768000 queue=default priority=8 max-limit=1024000 burst-limit=0 burst-threshold=0 burst-time=0s queue tree>

1. Рассмотрим первый случай, когда клиенты 1 и 2 передают данные со скоростью меньше, чем указано в параметре limit-at, а клиент 3 не работает.

Как видим, пакеты с данными от leaf1 и leaf2 (клиенты) не передаются в родительские классы, а выстраиваются в локальную очередь в соответствии со своими приоритетами

2. Сейчас посмотрим что будет, в случае если клиент leaf2 будет передавать данные со скоростью больше limit-at, но меньше max-limit указанных в его параметрах и меньше limit-at в параметрах ClassB, к которому он прикреплен. Одновременно с ним leaf1 будет передавать данные со скоростью не превышающей limit-at.

В данном случае получается интересная ситуация: клиент leaf1 будет иметь больший приоритет, чем leaf2, хотя в параметрах последнего указан больший приоритет. Это связано с тем, что передавая данные со скоростью более limit-at leaf2 подключился к родительскому классу, имеющему приоритет 8. При этом существует правило, что на нижних уровнях приоритет пакетов при одинаковых условиях больше, чем на верхних.

3. Рассмотрим следующий пример: скорости передачи данных для leaf1 превысила допустимое max-limit, клиент leaf2 передает данные на скорости больше limit-at и меньше max-limit, клиент leaf3 работает на скорости меньше limit-at.

Это весьма интересный случай. В данной ситуации видно, что ClassA перегружен данными из Leaf1, поэтому ClassB не получит разрешения на передачу.В результате работоспособным окажется только клиент leaf3, подключенный в локальную очередь на нулевом уровне.

4. Теперь рассмотрим пример, когда данные будут одновременно передавать leaf1, leaf2, leaf3, ClassB будет желтым, а ClassA зеленым.

В результате этого на втором уровне leaf2 попадет в очередь первым (так как имеет больший приоритет), а leaf1 и leaf3 подвергнутся случайному выбору для определения порядка следования.

Как видим алгоритм работы HTB весьма логичен и не так уж сложен, как могло показаться сразу. Он был принят многими производителями программного и аппаратного обеспечения за свою гибкость, надежность и отсутствие свойственных его предшественникам недостатков. Благодаря огромной универсальности с помощью него можно строить практически любые возможные иерархии правил, в точности разграничивая и давая возможность управлять потоками данных на достаточно низком уровне.

Bursts

Часто возникает необходимость выдать так называемую пиковую скорость клиенту на определенный промежуток времени. К примеру, иногда требуется ускорить загрузку страниц, оставив при этом среднюю скорость на закачку файлов не выше отведенной. Или нужно редко посылать запросы и принимать данные, но делать это с максимальной скоростью. Глупо было бы в таком случае выдавать клиенту большую скорость, так как в один прекрасный момент из-за неосторожности или злого умысла остальные пользователи могут остаться или вовсе без Интернета, или получать его не таким, каких хотелось и за сколько заплачено.

Разработчики Mikrotik предоставили в распоряжение все необходимые инструменты для управления описанной выше пиковой скоростью. Следующие параметры характеризуют ее поведение:

  • burst-limit — скорость, которая будет доступна сразу при подключении;
  • burst-threshold – средняя скорость за последние burst-time секунд;
  • burst-time — время для подсчета burst-threshold.

Момент, когда клиенту или классу нужно выдать максимальную скорость, определяется следующим образом. Раз в 1/16 времени burst-time вычисляется загрузка канала на указанное число секунд. Если средняя загрузка составила менее burst-threshold, то клиенту или классу выделяется указанная в burst-limit скорость до тех пор, пока она не превысит burst-threshold. После этого действует ограничение max-limit до тех пор, пока снова не случится понижение скорости менее burst-threshold.

Установим следующие параметры limit-at=128000/128000, max-limit=256000/256000, burst-limit=512000/512000, burst-treshold=192000/192000, burst-time=8, и понаблюдаем что случится с графиком загрузки канала от одного клиента:

Данный график характерен для случая с закачкой большого файла по протоколу http. После первой секунды средняя загрузка канала будет равна (0+0+0+0+0+0+0+512)/8=64 kbps, что менее установленного нами параметра burst-threshold. После второй секунды средняя скорость будет равна (0+0+0+0+0+0+512+512)/8=128kbps. После третьей секунды средняя скорость превысит показатель burst-threshold. В этот момент скорость резко упадет до значения параметра max-limit и будет держаться на этом уровне до тех пор, пока средняя загрузка канала не станет меньше burst-threshold и снова не произойдет выдача burst скорости.

Schedulers

Рассмотрим алгоритмы так называемых Schedulers, о которых упоминалось выше. Обычно они применяются вкупе с шейперами, однако некоторые из них так же обладают функциями ограничения скорости. Физически Scheduler предшествует шейперу и представляет ему уже подготовленные очереди пакетов, к которым следует применять ограниения.

PFIFO/BFIFO

Packet/Bytes (FIFO) алгоритм, основанный на принципе первый пришел-первый ушел. Используется для ethernet-интерфейсов. Единственный параметр, используемвый для конфигурирования данного алгоритма, — это pfifo-limit (bfifo-limit). Он указывает на количество байт, которые могут храниться в выходном буфере. Не попавшие в буфер пакеты будут разрушаться. Графически алгоритм можно изобразить с помощью следующей схемы. По сути дела PFIFO/BFIFO ничего особенного из себя не представляет и никаких приемуществ не дает. Он просто есть и используется там, где его использовать целесообразно…

SFQ

SFQ (Stochastic Fairness Queuing) – этот алгоритм можно назвать «случайно-честным». Он применятся тогда, когда требуется предоставить всем TCP/UDP-подключениям одинаковую возможность по передаче данных. Для конфигурирования SFQ используется два параметра:

  • sfq-perturb – указывает через какое время нужно менять хэширующий алгоритм, который определяет как будут формироваться под-очередь запросов;
  • pcq-allot – определяет количество байт в под-очереди.

SFQ работает по следующему принципу: алгоритм изымания пакетов из под-очередей одновременно выпускает в выходной интерфейс pcq-allot количество байт, а хэширующий алгоритм добавляет к каждый под-очереди pcq-allot байт, сохраняя при этом равновесие и одинаковую длину всех подочередей. Схему работы SFQ можно сравнить с мясорубкой, в которой через выходную решетку одновременно изо всех дырок в одинаковом количестве выходит фарш :).

Алгоритм SFQ рекомендуется использовать в случаях, когда канал сильно загружен и необходимо предоставить приложениям одинаковую возможность по передаче данных. Единственным его недостатком является то, что одно приложение, открыв много потоков, может заглушить остальные подключения.

PCQ

PCQ (Per Connection Queuing) является частным случаем SFQ за тем исключением, что формирование потоков в под-очереди будет происходить в соответствии с неким правилом. Это может быть адрес источника/получателя и порт источника/получателя. Таким образом можно равномерно распределить скорость между участниками вне зависимости от количества открытых подключений. Алгоритм предоставляет следующие параметры для конфигурирования:

  • pcq-classifier – параметр для формирования очередей. Может принимать следующие значения:

1. src-address – параметром для группировки в субочереди служит адрес источника; 2. src-port – параметром для группировки в субочереди служит порт источника; 3. dst-address – параметром для группировки в субочереди является адрес назначения; 4. dst-port – параметром для группировки в субочереди служит порт получателя.

  • pcq-rate – число, которое указывает в какой пропорции разделять трафик по очередям. По-умолчанию 0.
  • pcq-limit – длина под-очереди;
  • pcq-total-limit — общее количество пакетов во всех очередях.

Данный алгоритм является основным при необходимости разделить пропускную способность поровну между классами или клиентами. С его помощью можно организовать динамический шейпинг, о котором много где говорят, но толковая реализация автору ещё не встречалась ни в одном продукте.

Классифицировав под-очереди по адресу источника мы получим отдельную очередь для каждого адреса, соответственно количество потоков с одного адреса не будет играть роли при доступе к выходному интерфейсу. Стоит отметить гибкость такой классификации. Применив ее по источнику к внешнему интерфейсу, в под-очереди будут попадать внешние адреса, так как в этом случае параметр src-address будет все равно содержать адрес, являющийся источником передачи данных. Применив эту же классификацию к внутреннему интерфейсу, в очереди попадут адреса клиентов или классов. Таким образом задав два правила, отличающиеся одним параметром, можно разделить поровну как входящий так и исходящий каналы.

RED

RED (Random Early Detection) – алгоритм, призванный выравнивать пропускную способность и сглаживать скачки, контролируя средний размер очереди. Когда ее размер достигает значения red-min-threshold алгоритм удаляет случайно выбранный пакет. Число удаленных пакетов растет с увеличением среднегого размера очереди. Если размер достигает значения red-max-threshold все пакеты удаляются. Однако случаются ситуации, когда реальный размер очереди (не средний) значительно больше red-max-threshold. В таком случае все пакеты, выходящие за рамки предела red-limit, удаляются.

Использование алгоритма крайне не желательно при присутствии UDP-трафика, так как в связи с неразборчивостью алгоритма при удалении пакетов из очереди и принципом работы UDP-протокола, данные могут не дойти до получателя.

От теории к практике

Сейчас мы знаем все необходимое для того, чтобы построить необходимые нам правила. Так как на практике применение алгоритмов SFQ и RED используется крайне редко, то на примерах их работы мы останавливаться не будем.

Queue Trees

Queue Trees — особый тип очередей, который прямо отражает устройство шейпера HTB. Он позволяет строить деревья правил (классов) и на самом низком уровне управлять пакетами.

Вкратце объясним значение основных элементов управления, присутствующих в Queue Trees:

  • burst-limit (целое) – максимальная burst-скорость;
  • burst-threshold (целое) – средняя загрузка канала, при которой разрешено выдать burst-limit;
  • burst-time (время) – используется для подсчета средней загрузки канала;
  • flow (text) – поток, маркированный в /ip firewall mangle;
  • limit-at (целое) – гарантированная скорость;
  • max-limit (целое) – максимальная скорость;
  • name (text) – имя очереди;
  • parent (text) – родитель в иерархии классов HTB;
  • priority (целое: 1..8) – приоритет очереди;
  • queue (text) – тип очереди. Задается в /queue type.

Примеры

I. Итак, создадим правило, которое позволит получить клиентам локальной или виртуальной сети максимальную скорость и минимальное время отклика при обращении к сайту www.drivermania.ru , однако разделит скорость между всеми поровну.

1. Пометим все пакеты идущие от пользователей на адрес 66.148.73.54 и обратно. Для этого нужно создать 4 правила, два из которых пометят подключения в прямом и обратом направлении, а другие два пометят пакеты в этих подключениях. Необходимо обратить внимание, что очереди работают именно с пакетами, а не помеченными подключениями. Зачастую это создает у новичков вопросы плана: «Я пишу все правильно, а оно не работает. Может это глюки?» Для таких шаманов ниже приведен пример, как нужно делать, чтобы ОНО работало.

/ip firewall mangle add chain=forward src-address=192.168.11.0/24 dst-address=66.148.73.54/32 action=mark-connection new-connection-mark=users-con-up /ip firewall mangle add connection-mark=users-con-up action=mark-packet new-packet-mark=users-up chain=forward /ip firewall mangle add chain=forward src-address=66.148.73.54/32 action=mark-connection new-connection-mark=users-con-down /ip firewall mangle add connection-mark=users-con-down action=mark-packet new-packet-mark=users-down chain=forward

2. Создадим два типа PCQ очереди, подключения в одной из которых мы будем классифицировать по входящему, а другие по исходящему адресу.

/queue type add name=pcq-download kind=pcq pcq-classifier=dst-address /queue type add name=pcq-upload kind=pcq pcq-classifier=src-address

3. Создадим очереди для входящего и исходящего трафика

/queue tree add name=Download parent=Local max-limit=10240000 burst-limit=200000 burst-time=10 /queue tree add parent=Download queue=pcq-download packet-mark=users-down /queue tree add name=Upload parent=Public max-limit=160000 burst-limit=200000 burst-time=10 /queue tree add parent=Upload queue=pcq-upload packet-mark=users-up

Как видим, пара правил и такая сложная задача, как динамический шейпинг на определенные адреса с предоставлением пиковой скорости была реализована. На практике обычно приходится применять более сложные правила в сочетании друг с другом, однако для демонстрации возможностей этот очень хорошо подошел.

Практически в Queue Trees мы можем оперировать только ограничением скорости. Остальные параметры, такие как адрес источника, получателя, время суток, протокол, порты и т.д. указываются в разделе Mangle-файервола.

Подобным способом также можно сделать хороший пинг на определенные адреса, даже во время серьезной загрузки канала. Приведем пример таких правил для сервера www.cybernet.by.

Для этого нужно создать четыре правила в Firewall:

  • в первом пометим все подключения, у которых адрес получателя 195.222.70.250 именем cybernet-connection-up;
  • пакеты в подключениях cybernet-connection-up именем cybernet-packet-u;
  • в первом пометим все подключения у которых адрес источника 195.222.70.250 именем cybernet-connection-from;
  • пакеты в подключениях cybernet-connection-from именем cybernet-packet-from.

/ip firewall mangle add chain=prerouting dst-address=195.222.70.250 action=mark-connection new-connection-mark=cybernet-connection-up passthrough=yes /ip firewall mangle add chain=forward connection-mark=cybernet-connection-up action=mark-packet new-packet-mark=cybernet-packet-up passthrough=yes /ip firewall mangle add chain=prerouting src-address=195.222.70.250 action=mark-connection new-connection-mark=cybernet-connection-from passthrough=yes /ip firewall mangle add chain=forward connection-mark=cybernet-connection-from action=mark-packet new-packet-mark=cybernet-packet-from passthrough=yes

Следующим шагом создадим два правила в Queue Trees: одно для входящего потока, другое для исходящего.

/queue tree add name=»queue1″ parent=global-out packet-mark=cybernet-packet limit-at=0 queue=default priority=1 max-limit=50000 burst-limit=0 burst-threshold=0 burst-time=0s /queue tree add name=»queue2″ parent=global-in packet-mark=cybernet-packet-from limit-at=0 queue=default priority=1 max-limit=50000 burst-limit=0 burst-threshold=0 burst-time=0s

Вышеописанные действия позволят пакетам, приходящим и уходящим с адреса 195.222.70.250, попадать в приоритетные очереди и всегда иметь гарантированные 50 Kbit/s.

Пользуясь вышеописанным примером можно выделить для всех онлайн игр фиксированную гарантированную скорость и создать иерархию классов (правил), распределив таким образом пропускную способность между всеми поровну.

Simple Queues

Рассмотрим тип очередей Simple Queues. Эти очереди являются простыми, а если быть точнее, то упрощенными. В самом деле для их использования не нужно применять промаркированные пакеты из Firewall, однако при этом теряется некоторая гибкость. Здесь в качестве основных параметров, к которым следует применять правило, относятся адреса источника и получателя. На вкладке Advanced утилиты Winbox можно обнаружить и некоторые другие параметры, однако они не относятся к списку обязательных к заполнению.

Список текущих возможностей простых очередей выглядит следующим образом:

  • работа с P2P-трафиком;
  • применение очередей в определенных интервалах времени;
  • приоритезация потоков;
  • использование в качестве параметров несколько цепочек пакетов, маркированных в /ip firewall mangle;
  • шейпинг бидеракционного трафика (одно правило для входящего и исходящего потока).

Стоит отметить, что начиная с версии Mikrotik 2.9 в Simple Queues стало возможным указывать параметр Parent для простых очередей. Таким образом можно строить практически аналогичные деревья классов, как и для Queue Trees за тем исключением, что здесь оперировать будем не пакетами и потоками, а адресами.

Стоит так же помнить, что Simple Queues не что иное, как частный случай Queue Trees. Поэтому создавая новые правила стоит обращать внимание не существует ли уже что-то подобное, оперирующее с теми же адресами, портами или другими параметрами. В случае сходства, приоритет окажется на стороне Queue Trees и ваши простые очереди просто не будут работать.

Перед началом составления правил в Simple Queues необходимо понять что есть входящий и исходящий трафик для нашего провайдера, нашего роутера и наших клиентов. На рисунке выше изображена стандартная схема направления потоков трафика от провайдера к нашему роутеру и от роутера к клиенту. Стоит обратить внимание, что исходящий трафик клиента для нашего роутера будет являться входящим и наоборот. То же самое можно сказать про нашего провайдера-исходящий трафик для него-это входящий для нас.

Список параметров для конфигурирования простых очередей в Mikrototik 2.9.x выглядит следующим образом:

  • burst-limit (целое) – максимальная burst-скорость;
  • burst-threshold (целое) – средняя загрузка канала при которой разрешено выдать burst-limit;
  • burst-time (время) – используется для подсчета средней загрузки канала;
  • dst-address (IP адрес/маска) – адрес назначения;
  • dst-netmask (netmask) – маска подсети для dst-address;
  • interface (text) – интерфейс, для которого предназначается правило;
  • limit-at (целое/целое) – гарантированный канал;
  • max-limit (целое/целое) – максимальная величина канала;
  • name (text) – имя правила;
  • p2p (any | all-p2p | bit-torrent | blubster | direct-connect | edonkey | fasttrack | gnutella | soulseek | winmx) – тип P2P-трафика;
  • packet-marks (name; по умолчанию: «») — цепочка пакетов, промаркированных в /ip firewall mangle;
  • parent (name) – имя родительской очереди;
  • priority (целое: 1..8) – приоритет. 1- больший, 8-самый маленький;
  • queue (name/name; default: default/default) – имя очереди из /queue type;
  • target-addresses (IP address/netmask) – исходный адрес;
  • time (time-time,sat | fri | thu | wed | tue | mon | sun{+}; по умолчанию: «») — применить очередь к временному интервалу;
  • total-burst-limit (целое) – максимальная burst скорость в очереди global-total;• total-burst-threshold (целое) – средняя скорость в очереди global-total;
  • total-burst-time (time) — используется для подсчета средней загрузки канала в очереди global-total;
  • total-limit-at (целое) – гарантированная скорость в очереди global-total (входящий+исходящий каналы);
  • total-max-limit (целое) – максимальная скорость передачи данных в очереди global-total.

Весьма интересной является возможность управлять входящим и исходящим трафиком вместе. Это позволяет клиентам максимально использовать проплаченный канал.

Сэмулируем для нашего клиента канал с 64/42 kbit/s с гарантированной скоростью 32/32 kbit/s в будние дни и 256/128 kbit/s с гарантированной скоростью 64/64 kbit/s в выходные.

Результатом нашей работы будет два правила:

/queue simple add target-addresses=192.168.11.1/32 limit-at=32000/32000 max-limit=64000/42000 time=00:00:00-00:00:00,mon,tue,wed,thu,fri /queue simple add target-addresses=192.168.11.1/32 limit-at=64000/64000 max-limit=256000/128000 time=00:00:00-00:00:00,sat,sun

В нашем случае первая цифра в паре 32000/32000 означает входящий канал для клиента, а вторая — исходящий. Воспользовавшись нижеприведенной схемой можно инвертировать параметры относительно нашего роутера.

При желании можно позаботиться о быстром открытии страниц, добавив параметры burst-limit и burst-time.

Данное правило можно было бы несколько видоизменить, разделив указанную скорость между всей сетью 192.168.11.0.24. В этом случае для параметра queue нужно указать тип очереди pcq-download, приведенный выше в примере с Queue Trees.

Простые очереди позволяют достаточно просто реализовать возможность предоставления на определенные адреса неограниченной скорости.

Добавим к вышеприведенным правилам ещё одно, которое будет выглядеть следующим образом:

/queue simple add target-addresses==192.168.11.1/32 dst-address=84.201.225.124 limit-at=1024000/1024000 max-limit=2048000/2048000

В результате чего клиент с адресом 192.168.11.1 получит доступ к адресу 84.201.225.124 со скоростью от 1 до 2 мегабит.

При выделении гарантированной пропускной способности нужно помнить, что сумма limit-at всех клиентов должна быть меньше или равна общей пропускной способности канала. Только в этом случае можно говорить о какой-то гарантированной скорости.

Если у вашего сервера неправильно установлены часы или, к примеру, села батарейка на материнской плате, то можно воспользоваться встроенной в Mikrotik возможностью синхронизации времени с внешним источником.

Ещё одно замечание связанно с тем, что напрямую вписать URI-адрес в поле ввода IP-адреса не представляется возможным, но иногда необходимо, так как многие сайты имеют динамические адреса. Данную проблему можно решить, прописав необходимый адрес ресурса в разделе /ip firewall address-list и дав ему имя, по которому в последствии можно обратиться.

Ограничение скорости и равномерное распределение канала между потребителями

Задача

всем пользователям ограничить скорость выгрузки на 5 Мб/с, а скорость загрузки на 10 Мб/с. В этом условии подразумевается, что ограничение общее на всех, а не на каждого пользователя в отдельности.

Первым делом может возникнуть вопрос: а зачем нам делать ограничение, если вдруг можно получать больше? Например, по договору с провайдером скорость 10 Мбит/с на загрузку и выгрузку, но провайдер дает немного больше. Ответ простой. Для того, что бы мы могли настроить QoS (равномерное распределение ширины канала между потребителями, приоритезация для IP-телефонии и др.) маршрутизатор должен знать относительно какой скорости ему делать выделение скоростей. Это условие является обязательным. Если ограничение максимальной скорости не указать или указать скорость выше реальной, то QoS не сможет работать корректно.

Вариант с одним Интернет-каналом

Для идентификации интерфейсов можно указать их имена:
/queue simple
add max-limit=5M/10M name=»Internet download/upload limit» target=bridge-LAN

или IP-адреса:
/queue simple
add max-limit=5M/10M name=»Internet download/upload limit» target=10.1.100.0/24

Распространенная ошибка

У этого варианта есть распространенная ошибка в которой не указывают значение параметра «target» и вместо него используют значение параметра «dst»:

/queue simple
add dst=ether1-WAN1 max-limit=5M/10M name=»Internet download/upload limit» target=»»

В качестве аргумента корректности такой настройки озвучивают, что все работает. И действительно, если в качестве значения максимальных скоростей будут указаны максимальные скорости (например так:max-limit=10M/10M), то при проверка выяснить, что ограничение работает. Но если скорости на загрузку и выгрузку будут различаться, как в нашем примере (max-limit=5M/10M), при проверке выясниться, что значение приведенное для загрузки срабатывает для выгрузки и наоборот.

Вариант с двумя Интернет-каналами

Если используется два Интернет-канала, то надо создать два отдельных правила (по одному для каждого WAN-канала):

Если не сделать отдельное правило для каждого внешнего канала, то ограничение будет применяться суммарно к обоим каналам. Т. е. можно будет загружать не со скоростью 10 Мб/с с одного и 10 Мб/с с другого одновременно, а 10 с обоих суммарно. Разумеется это касается ситуации, когда оба внешних канала работают одновременно. Если внешние каналы настроены в режиме резервирования, то чаще всего Интернет-провайдер предоставляет разные скорости и поэтому надо делать два разных канала, что бы указать актуальное значение скорости.

Равномерное распределение ширины канала между потребителями

В предыдущих примерах мы настроили ограничение верхней границы скорости загрузки и выгрузки. Но при этом может сложиться ситуация в которой кому-то из потребителей достается большая скорость чем другим. В этом разделе мы настроим возможность делить скорость между потребителями равномерно, т. е. 1 пользователь сможет делать загрузку со скоростью 10 Мбит/с, 2 пользователя — со скоростью 5 Мбит/с, 4 пользователя — со скоростью 2,5 Мбит/с и т. д. При этом, если одному пользователю будет нужно только 2 Мбит/с, а еще двоим по 20 Мбит/с, то первому достанется достанется именно 2 Мбит/с (т. к. это больше чем 1/3 от 10 Мбит/с), а двум другим достанется оставшийся канал поровну, т. е. по 4 Мбит/с.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *