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

Принцип делить все и вся существует столько, сколько миллиардов лет существует Вселенная. Чаще всего объекты делятся  в одинаковых пропорциях и неравный отхваченный кусок кем или чем-либо вызывает недовольство поделенных. Подобные ситуации часто возникают тогда, когда объект деления имеет весомое значение в системе. Перенесемся в 21 век. Наблюдая процессы в обществе и, в первую очередь в информационной сфере, можно заметить, что разумно делить все-таки научились. И, порой алгоритмы настолько неподдельны и устойчивы, что не оставляют никакой возможности взять больше или меньше дозволенного. Применив все вышеизложенное к передаче данных можно понять о чем идет речь.

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

Несколько раньше на нашем сайте мы опубликовали статью о RouterOS 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

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

 

[admin@MikroTik] queue tree> add name=ClassA parent=Local max-limit=2048000
[admin@MikroTik] queue tree> add name=ClassB parent=ClassA max-limit=1024000
[admin@MikroTik] queue tree> add name=Leaf1 parent=ClassA max-limit=2048000
... limit-at=1024000 packet-mark=packet_mark1 priority=8
[admin@MikroTik] queue tree> add name=Leaf2 parent=ClassB max-limit=1024000
... limit-at=256000 packet-mark=packet_mark2 priority=7
[admin@MikroTik] queue tree> add name=Leaf3 parent=ClassB max-limit=1024000
... limit-at=768000 packet-mark=packet_mark3 priority=8
[admin@MikroTik] 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
[admin@MikroTik] 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 весьма логичен и не так уж сложен, как могло показаться сразу. Он был принят многими производителями программного и аппаратного обеспечения за свою гибкость, надежность и отсутствие свойственных его предшественникам недостатков. Благодаря огромной универсальности с помощью него можно строить практически любые возможные иерархии правил, в точности разграничивая и давая возможность управлять потоками данных на достаточно низком уровне.

Содержание Далее
Одной страницей
Стр. 1. Теория
Стр. 2. Bursts, Schedulers
Стр. 3. Вывод, примеры
Комментарии
Добавить комментарий

Введите имя:
Войти от:
или
Ваш комментарий:


Введите код:

E-mail (не обязательно)
Адрес электронной почты не предназначен к показу и будет использован только для уведомлений об ответах


Зин#11 2
Скрипт для динамического деления скорости http://www.youtube.com/watch?v=fmnzyIDa-Z4
Ответить 
 
Fallman#20 0
Реализация трафик-шейпера (Traffic Shaper) на Mikrotik - http://forum.x-drivers.ru/index.php?showtopic=3286

Запрятали на форуме ребята чего-то.

Ответить 

Смартфоны со съемными аккумуляторами 2018-2019 годов
14 смартфонов со съемным аккумулятором и один телефон
15 июля 2019 / 3
Смартфон с каплевидным вырезом - Samsung Galaxy A30
Недорогой современный смартфон без моноброви
22 апреля 2019 / 3
Android 10. Первый взгляд
Что будет в «юбилейной» ОС Google, которая выйдет в 2019 года
29 июля 2018 / 1
Смартфон Huawei с хорошей камерой - Huawei P20
Эффектный флагман со своим лицом
22 июля 2018 / 4
 
 
Анонс Windows 11 состоится 24 июня
Продажи iPhone 12 mini не оправдали ожидания
Будущий iPad Pro получит стеклянный корпус
Sun Valley может выйти уже осенью 2021 года
Samsung приступила к лицензированию Ultra Thin Glass (UTG)
Компания фокусируется на бытовой технике и электромобилях
 
 

Опрос

Какими картами вы пользуетесь?
или оставить собственный вариант в комментариях (14)





Статистика