Qos Mikrotik.pdf

(524 KB) Pobierz
Делим Интернет или QoS на Mikrotik
Делим Интернет или QoS на Mikrotik
Автор: Кузьмицкий Алесандр
09/19/06 02 2006 ?., 21:02
Страница 1 из 3
Принцип делить все и вся существует столько, сколько миллиардов лет
существует Вселенная. Чаще всего объекты делятся в одинаковых пропорциях и
неравный отхваченный кусок кем или чем-либо вызывает недовольство
поделенных. Подобные ситуации часто возникают тогда, когда объект деления
имеет весомое значение в системе. Перенесемся в 21 век. Наблюдая процессы в обществе и, в первую
очередь в информационной сфере, можно заметить, что разумно делить все-таки научились. И, порой
алгоритмы настолько неподдельны и устойчивы, что не оставляют никакой возможности взять больше
или меньше дозволенного. Применив все вышеизложенное к передаче данных можно понять о чем идет
речь.
Современное общество и каждый человек в нем требует к себе одинакового отношения во всех сферах,
что зачастую становится головной болью для тех, кто предоставляет услуги. В частности касаясь
предоставления услуг доступа к Интернету за последние несколько лет произошел огромный прорыв,
позволивший решить ряд проблем, порожденных появлением всемирной паутины у нас в домах и на
работе, превратив ее из некого деликатеса в фаст-фуд для сотен тысяч людей.
Несколько раньше на нашем сайте мы опубликовали статью о RouterOS Mikrotik, в которой говорилось
о возможностях, установке и первоначальной настройке этой операционной системы. Судя по
количеству вопросов и ответов на нашем форуме стало ясно, что в Интернет тема настройки и
управления системой раскрыта плохо и не полно.
Не секрет, что зачастую администраторам, в особенности начинающим, сложно разобраться во всех
приведенных алгоритмах и принципах работы шейпера, вынуждая учиться методом проб и зачастую не
безобидных ошибок. Так сложилось, что для этой категории пользователей очень мало простой и
доступной русскоязычной документации, одним из первых начинаний которой и станет эта статья.
Теория
Для начала рассмотрим несколько понятий, которыми мы будем пользоваться в дальнейшем.
Технология, которая позволяет ограничивать скорость и качество доступа в Интернет, называется
шейпинг (от англ. Shape - форма). Образно говоря - это технология придания некой формы графику
загрузки канала.
Шейпер - это алгоритм, который помимо управления очередностью пакетов позволяет отбрасывать не
удовлетворяющие условиям. К таковым относятся алгоритмы PCQ и HTB (о них поговорим несколько
позже).
Существует ещё один тип алгоритмов, используемых для управления движением пакетов внутри
шейпера Schedulers . Их задача состоит только в формировании очередей согласно приоритетам
пакетов, адресу источника, получателя и другим параметрам. К этому типу алгоритмов относятся
PFIFO, BFIFO,SFQ, PCQ, RED.
Под-очередь - очередь, сформированная из пакетов по тому или иному признаку.
Queuing discipline (qdisc - дисциплина очереди) - алгоритм, который захватывает пакеты и точно
определяет в каком порядке и каким образом они будут двигаться.
HTB
91715748.004.png
В основе шейпинга, используемого в 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. В этом случае
пакеты не двигаются вверх по иерархии, а перемещаются сразу в выходной поток своего уровня
91715748.005.png
согласно приоритетам.
Желтый - пропускная способность правила больше 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 не работает.
91715748.006.png
Как видим, пакеты с данными от 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.
91715748.007.png 91715748.001.png
Это весьма интересный случай. В данной ситуации видно, что ClassA перегружен данными из Leaf1,
поэтому ClassB не получит разрешения на передачу.В результате работоспособным окажется только
клиент leaf3, подключенный в локальную очередь на нулевом уровне.
4. Теперь рассмотрим пример, когда данные будут одновременно передавать leaf1, leaf2, leaf3, ClassB
будет желтым, а ClassA зеленым.
В результате этого на втором уровне leaf2 попадет в очередь первым (так как имеет больший
приоритет), а leaf1 и leaf3 подвергнутся случайному выбору для определения порядка следования.
Как видим алгоритм работы HTB весьма логичен и не так уж сложен, как могло показаться сразу. Он
был принят многими производителями программного и аппаратного обеспечения за свою гибкость,
надежность и отсутствие свойственных его предшественникам недостатков. Благодаря огромной
универсальности с помощью него можно строить практически любые возможные иерархии правил, в
точности разграничивая и давая возможность управлять потоками данных на достаточно низком
уровне.
91715748.002.png 91715748.003.png
Zgłoś jeśli naruszono regulamin