Управление QoS
QoS (Quality of Service) – технология предоставления различным классам трафика различных приоритетов в обслуживании. Использование службы QoS позволяет сетевым приложениям сосуществовать в одной сети, не уменьшая при этом пропускную способность других приложений.
Базовый QoS
В базовом режиме на маршрутизаторах ESR классификация (направление трафика в очередь) и перемаркировка работает только на входе (на интерфейсе через который поступает трафик должен быть включен QoS)
Алгоритм настройки
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Включить сервис QoS на интерфейсе/туннеле/сетевом мосту. Если на интерфейсе не назначена политика QoS, то интерфейс работает в режиме BasicQoS. | esr(config-if-gi)# qos enable | |
2 | Установить режим доверия к значениям кодов 802.1p и DSCP во входящих пакетах. (не обязательно) | esr(config)# qos trust <MODE> | <MODE> – режим доверия к значениям кодов 802.1p и DSCP, принимает одно из следующих значений:
|
3 | Установить соответствие между значениями кодов DSCP входящих пакетов и исходящими очередями Данное соответствие работает на входящие пакеты интерфейса/туннеля/моста, на котором включен QOS (не обязательно). | esr(config)# qos map dscp-queue <DSCP> to <QUEUE> | <DSCP> – классификатор обслуживания в IP-заголовке пакета, принимает значения [0..63]; <QUEUE> – идентификатор очереди, принимает значения [1..8]. Значения по умолчанию:
|
4 | Установить соответствие между значениями кодов 802.1p входящих пакетов и исходящими очередями. Данное соответствие работает на входящие пакеты интерфейса/туннеля/моста, на котором включен QOS. (не обязательно) | esr(config)# qos map cos-queue <COS> to <QUEUE> | <COS> – классификатор обслуживания в теге 802.1q пакета, принимает значения [0..7]; <QUEUE> – идентификатор очереди, принимает значения [1..8]. Значения по умолчанию:
|
5 | Установить соответствие между значениями кодов DSCP входящих пакетов и кодов DSCP на выходе из устройства. (в случае необходимости перемаркировки) Данное соответствие работает на входящие пакеты интерфейса/туннеля/моста, на котором включен QoS. | esr(config)# qos map dscp-queue <DSCP> to <DSCP> | <DSCP> – классификатор обслуживания в IP-заголовке пакета, принимает значения [0..63]. |
6 | Включить изменения кодов DSCP в соответствии с таблицей DSCP-Mutation. (в случае необходимости перемаркировки) | esr(config)# qos dscp mutation | |
7 | Установить номер очереди по умолчанию, в которую попадает весь трафик кроме IP в режиме доверия DSCP-приоритетам. | esr(config)# qos queue default <QUEUE> | <QUEUE> – идентификатор очереди, принимает значения [1..8]. |
8 | Задать количество приоритетных очередей. Оставшиеся очереди являются взвешенными. (не обязательно) | esr(config)# priority-queue out num-of-queues <VALUE> | <VALUE> – количество очередей, принимает значение [0..8], где:
Приоритетные очереди выделяются, начиная с 8-й, в сторону уменьшения номера очереди. Значение по умолчанию: 8 |
9 | Определить веса для соответствующих взвешенных очередей. | esr(config)# qos wrr-queue <QUEUE> bandwidth <WEIGHT> | <QUEUE> – идентификатор очереди, принимает значение [1..8]; <WEIGHT> – значение веса, принимает значение [1..255]. Значение по умолчанию: вес 1 для всех очередей. |
10 | Установить ограничение скорости исходящего трафика для определенной очереди или интерфейса в целом. Команда актуальна только для BasicQoS-режима интерфейса. Ели трафик на входе был классифицирован при помощи расширенного QoS, ограничение не сработает. (в случае необходимости ограничения скорости входящего потока) | esr(config-if-gi)# traffic-shape { <BANDWIDTH> [BURST] | | <QUEUE> – идентификатор очереди, принимает значение [1..8]; <BANDWIDTH> – средняя скорость трафика в Кбит/с, принимает значение [3000..10000000] для TengigabitEthernet интерфейсов и [64..1000000] для прочих интерфейсов и туннелей; <BURST> – размер сдерживающего порога в КБайт, принимает значение [4..16000]. По умолчанию 128 КБайт. Значение по умолчанию: Отключено. |
11 | Установить ограничение скорости входящего трафика. (в случае необходимости ограничения скорости исходящего потока) | esr(config-if-gi)# rate-limit <BANDWIDTH> [BURST] | <BANDWIDTH> – средняя скорость трафика в Кбит/с, принимает значение [3000..10000000] для TengigabitEthernet интерфейсов и [64..1000000] для прочих интерфейсов и туннелей; <BURST> – размер сдерживающего порога в КБайт, принимает значение [4..16000]. По умолчанию 128 КБайт. Значение по умолчанию: Отключено. |
Пример настройки
Задача:
Настроить следующие ограничения на интерфейсе gigabitethernet 1/0/8: передавать трафик с DSCP 22 в восьмую приоритетную очередь, трафик с DSCP 14 в седьмую взвешенную очередь, установить ограничение по скорости в 60 Мбит/с для седьмой очереди.
Решение:
Для того чтобы восьмая очередь осталась приоритетной, а очереди с первой по седьмую стали взвешенными, ограничим количество приоритетных очередей до 1:
esr(config)# priority-queue out num-of-queues 1
Перенаправим трафик с DSCP 22 в первую приоритетную очередь:
esr(config)# qos map dscp-queue 22 to 8
Перенаправим трафик с DSCP 14 в седьмую взвешенную очередь:
esr(config)# qos map dscp-queue 14 to 7
Включим QoS на входящем интерфейсе для корректной классификации трафика и направления в соответствующую очередь со стороны LAN:
esr(config)# interface gigabitethernet 1/0/5
esr(config-if-gi)# qos enable
esr(config-if-gi)# exit
Включим QoS на интерфейсе со стороны WAN для правильной обработки очередей и ограничения полосы пропускания:
esr(config)# interface gigabitethernet 1/0/8
esr(config-if-gi)# qos enable
Установим ограничение по скорости в 60Мбит/с для седьмой очереди:
esr(config-if)# traffic-shape queue 7 60000
esr(config-if)# exit
Просмотреть статистику по QoS можно командой:
esr# show qos statistics gigabitethernet 1/0/8
Расширенный QoS
Алгоритм настройки
В расширенном режиме на маршрутизаторах ESR классификация поступающего трафика возможна как на входящем так и на исходящем интерфейсах.
Шаг | Описание | Команда | Ключи |
---|---|---|---|
1 | Создать списки доступа для определения трафика, к которому должен быть применен расширенный QoS. | См. Раздел Настройка списков доступа (ACL). | |
2 | Создать класс QoS и перейти в режим настройки параметров класса. | esr(config)# class-map <NAME> | <NAME> – имя создаваемого класса, задается строкой до 31 символа. |
3 | Задать описание класса QoS (не обязательно). | esr(config-class-map)# description <description> | <description> – до 255 символов. |
4 | Определить трафик относящийся к конфигурируемому классу по списку контроля доступа (ACL). | esr(config-class-map)# match access-group <NAME> | <NAME> – имя списка контроля доступа, задаётся строкой до 31 символа. |
5 | Задать значение кода DSCP, которое будет установлено в IP-пакетах, соответствующих конфигурируемому классу (невозможно назначать одновременно с полями IP Precedence и CoS). (при необходимости перемаркировки) | esr(config-class-map)# set dscp <DSCP> | <DSCP> – значение кода DSCP, принимает значения [0..63]. |
6 | Задать значение кода IP Precedence, которое будет установлено в IP-пакетах, соответствующих конфигурируемому классу (невозможно назначать одновременно с полями DSCP и CoS). (при необходимости перемаркировки) | esr(config-class-map)# set ip-precedence <IPP> | <IPP> – значение кода IP Precedence, принимает значения [0..7]. |
7 | Задать значение 802.1p приоритета, которое будет установлено в пакетах, соответствующих конфигурируемому классу (невозможно назначать одновременно с полями DSCP и IP Precedence). (при необходимости перемаркировки) | esr(config-class-map)# set сos <COS> | <COS> – значение 802.1p приоритета, принимает значения [0..7]. |
8 | Создать политику QoS и осуществить переход в режим настройки параметров политики. | esr(config)# policy-map <NAME> esr(config-policy-map)# | <NAME> – имя создаваемой политики, задается строкой до 31 символа. |
9 | Задать описание политики QoS (не обязательно). | esr(config-policy-map)# description <description> | <description> – до 255 символов. |
10 | Установить гарантированную полосу пропускания исходящего трафика для политики в целом. | esr(config-policy-map)# shape average <BANDWIDTH> [BURST] | <BANDWIDTH> – гарантированная полоса трафика в Кбит/с, принимает значение [64..10000000]; <BURST> – размер сдерживающего порога в КБайт, принимает значение [128..16000]. По умолчанию 128 КБайт. |
11 | Включить автоматическое распределение полосы пропускания между классами, в которых нет настройки полосы пропускания, включая класс по умолчанию (в случае необходимости). | esr(config-policy-map)# shape auto-distribution | |
12 | Включить указанный QoS-класс в политику и осуществить переход в режим настройки параметров класса в рамках политики. | esr(config-policy-map)# class <NAME> | <NAME> – имя привязываемого класса, задается строкой до 31 символа. При указании значения «class-default» в данный класс попадает трафик неклассифицированный на входе. |
13 | Включить политику QoS в класс QoS для создания иерархического QoS. | esr(config-class-policy-map)# service-policy <NAME> | <NAME> – имя политики, задается строкой до 31 символа. Вкладываемая политика должна быть уже создана. |
14 | Установить гарантированную полосу пропускания исходящего трафика для класса в рамках политики.(при необходимости). | esr(config-class-policy-map)# shape average <BANDWIDTH> [BURST] | <BANDWIDTH> – гарантированная полоса трафика в Кбит/с, принимает значение [64..10000000]; <BURST> – размер сдерживающего порога в КБайт, принимает значение [4..16000]. По умолчанию 128 КБайт. |
15 | Установить разделяемую полосу пропускания исходящего трафика для определенного класса. Данную полосу класс может занять, если менее приоритетный класс не занял свою гарантированную полосу (при необходимости). | esr(config-class-policy-map)# shape peak <BANDWIDTH> [BURST] | |
16 | Определить режим работы класса (не обязательно). | esr(config-class-policy-map)# mode <MODE> | <MODE> – режим класса:
Значение по умолчанию: FIFO. |
17 | Задать приоритет класса в WRR-процессе (при необходимости). | esr(config-class-policy-map)# priority class <PRIORITY> | <PRIORITY> – приоритет класса в WRR-процессе, принимает значения [1..8]. Классы с наибольшим приоритетом обрабатываются в первую очередь. |
18 | Перевести класс в режим StrictPriority и задать приоритет класса (при необходимости). | esr(config-class-policy-map)# priority level <PRIORITY> | <PRIORITY> – уровень приоритета в StrictPriority-процессе, принимает значения [1..8]. Классы с наибольшим приоритетом обрабатываются в первую очередь. Значение по умолчанию: класс работает в режиме WRR, приоритет не задан. |
19 | Определить предельное количество виртуальных очередей (не обязательно). | esr(config-class-policy-map)# fair-queue <QUEUE-LIMIT> | <QUEUE-LIMIT> – предельное количество виртуальных очередей, принимает значения в диапазоне [16..4096]. Значение по умолчанию: 16. |
20 | Определить предельное количество пакетов для виртуальной очереди (не обязательно). | esr(config-class-policy-map)# queue-limit <QUEUE-LIMIT> | <QUEUE-LIMIT> – предельное количество пакетов в виртуальной очереди, принимает значения в диапазоне [2..4096]. Значение по умолчанию: 127. |
21 | Определить параметры RED (Random Early Detection) (при необходимости). | esr(config-class-policy-map)# random-detect <LIMIT> | <LIMIT> – предельный размер очереди в байтах, принимает значения в диапазоне [1..1000000]; <MAX> – максимальный размер очереди в байтах, принимает значения в диапазоне [1..1000000]; <MIN> – минимальный размер очереди в байтах, принимает значения в диапазоне [1..1000000]; <PROBABILITY> – вероятность отбрасывания пакетов, принимает значения [0..100]. При указании значений должны выполняться следующие правила:
|
22 | Определить параметры GRED (Generalized Random Early Detection) (при необходимости). | esr(config-class-policy-map)# random-detect precedence | <PRECEDENCE> – значение IPPrecendence [0..7]; <LIMIT> – предельный размер очереди в байтах, принимает значения в диапазоне [1..1000000]; <MAX> – максимальный размер очереди в байтах, принимает значения в диапазоне [1..1000000]; <MIN> – минимальный размер очереди в байтах, принимает значения в диапазоне [1..1000000]; <PROBABILITY> – вероятность отбрасывания пакетов, принимает значения [0..100]. При указании значений должны выполняться следующие правила:
|
23 | Включить протокол компрессии tcp заголовков для трафика отдельного класса (при необходимости). | esr(config-class-policy-map)# compression header ip tcp | |
24 | Включить сервис QoS на интерфейсе/туннеле/сетевом мосту. | esr(config-if-gi)# qos enable | |
25 | Назначить политику QoS на сконфигурируемом интерфейсе/туннеле/сетевом мосту для классификации входящего (input) или приоритезации исходящего (output) трафика. | esr(config-if-gi)# service-policy { input | output } <NAME> | <NAME> – имя QoS-политики, задаётся строкой до 31 символа. |
Пример настройки
Задача:
Классифицировать приходящий трафик по подсетям (10.0.11.0/24, 10.0.12.0/24), произвести маркировку по DSCP (38 и 42) и произвести разграничение по подсетям (40 Мбит/с и
60 Мбит/с), ограничить общую полосу до 250 Мбит/с, остальной трафик обрабатывать через механизм SFQ.
Решение:
Настроим списки доступа для фильтрации по подсетям, выходим в глобальный режим конфигурации:
esr(config)# ip access-list extended fl1
esr(config-acl)# rule 1
esr(config-acl-rule)# action permit
esr(config-acl-rule)# match protocol any
esr(config-acl-rule)# match source-address 10.0.11.0 255.255.255.0
esr(config-acl-rule)# match destination-address any
esr(config-acl-rule)# enable
esr(config-acl-rule)# exit
esr(config-acl)# exit
esr(config)# ip access-list extended fl2
esr(config-acl)# rule 1
esr(config-acl-rule)# action permit
esr(config-acl-rule)# match protocol any
esr(config-acl-rule)# match source-address 10.0.12.0 255.255.255.0
esr(config-acl-rule)# match destination-address any
esr(config-acl-rule)# enable
esr(config-acl-rule)# exit
esr(config-acl)# exit
Создаем классы fl1 и fl2, указываем соответствующие списки доступа, настраиваем маркировку:
esr(config)# class-map fl1
esr(config-class-map)# set dscp 38
esr(config-class-map)# match access-group fl1
esr(config-class-map)# exit
esr(config)# class-map fl2
esr(config-class-map)# set dscp 42
esr(config-class-map)# match access-group fl2
esr(config-class-map)# exit
Создаём политику и определяем ограничение общей полосы пропускания:
esr(config)# policy-map fl
esr(config-policy-map)# shape average 250000
Осуществляем привязку класса к политике, настраиваем ограничение полосы пропускания и выходим:
esr(config-policy-map)# class fl1
esr(config-class-policy-map)# shape average 40000
esr(config-class-policy-map)# exit
esr(config-policy-map)# class fl2
esr(config-class-policy-map)# shape average 60000
esr(config-class-policy-map)# exit
Для другого трафика настраиваем класс с режимом SFQ:
esr(config-policy-map)# class class-default
esr(config-class-policy-map)# mode sfq
esr(config-class-policy-map)# fair-queue 800
esr(config-class-policy-map)# exit
esr(config-policy-map)# exit
Включаем QoS на интерфейсах, политику на входе интерфейса gi 1/0/19 для классификации и на выходе gi1/0/20 для применения ограничений и режима SFQ для класса по умолчанию:
esr(config)# interface gigabitethernet 1/0/19
esr(config-if-gi)# qos enable
esr(config-if-gi)# service-policy input fl
esr(config-if-gi)# exit
esr(config)# interface gigabitethernet 1/0/20
esr(config-if-gi)# qos enable
esr(config-if-gi)# service-policy output fl
esr(config-if-gi)# exit
Для просмотра статистики используется команда:
esr# do show qos policy statistics gigabitethernet 1/0/20