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, принимает одно из следующих значений:

  • dscp – режим доверия значениям кодов DSCP в IP-заголовке. Не IP-пакеты будут направлены в очередь по умолчанию.
  • cos – режим доверия значениям кодов 802.1p в теге 802.1q. Нетегированные пакеты будут направлены в очередь по умолчанию.
  • cos - dscp – режим доверия значениям кодов DSCP для IP-пакетов и значениям кодов 802.1p для остальных пакетов.

3

Установить соответствие между значениями кодов DSCP входящих пакетов и исходящими очередями

Данное соответствие работает на входящие пакеты интерфейса/туннеля/моста, на котором включен QOS (не обязательно).

esr(config)# qos map dscp-queue <DSCP> to <QUEUE>

<DSCP> – классификатор обслуживания в IP-заголовке пакета, принимает значения [0..63];

<QUEUE> – идентификатор очереди, принимает значения [1..8].

Значения по умолчанию:

  • DSCP: (0-7), очередь 1
  • DSCP: (8-15), очередь 2
  • DSCP: (16-23), очередь 3
  • DSCP: (24-31), очередь 4
  • DSCP: (32-39), очередь 5
  • DSCP: (40-47), очередь 6
  • DSCP: (48-55), очередь 7
  • DSCP: (56-63), очередь 8

4

Установить соответствие между значениями кодов 802.1p входящих пакетов и исходящими очередями.

Данное соответствие работает на входящие пакеты интерфейса/туннеля/моста, на котором включен QOS. (не обязательно)

esr(config)# qos map cos-queue <COS> to <QUEUE>

<COS> – классификатор обслуживания в теге 802.1q пакета, принимает значения [0..7];

<QUEUE> – идентификатор очереди, принимает значения [1..8].

Значения по умолчанию:

  • CoS: (0), очередь 1
  • CoS: (1), очередь 2
  • CoS: (2), очередь 3
  • CoS: (3), очередь 4
  • CoS: (4), очередь 5
  • CoS: (5), очередь 6
  • CoS: (6), очередь 7
  • CoS: (7), очередь 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], где:

  • 0 – все очереди участвуют в WRR (WRR – механизм обработки очередей на основе веса);
  • 8 – все очереди обслуживаются как «strictpriority» (strictpriority – приоритетная очередь обслуживается сразу, как только появляются пакеты).

Приоритетные очереди выделяются, начиная с 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 <QUEUE><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
CODE

Перенаправим трафик с DSCP 22 в первую приоритетную очередь:

esr(config)# qos map dscp-queue 22 to 8
CODE

Перенаправим трафик с DSCP 14 в седьмую взвешенную очередь:

esr(config)# qos map dscp-queue 14 to 7
CODE

Включим QoS на входящем интерфейсе для корректной классификации трафика и направления в соответствующую очередь со стороны LAN:

esr(config)# interface gigabitethernet 1/0/5
esr(config-if-gi)# qos enable
esr(config-if-gi)# exit
CODE

Включим QoS на интерфейсе со стороны WAN для правильной обработки очередей и ограничения полосы пропускания:

esr(config)# interface gigabitethernet 1/0/8
esr(config-if-gi)# qos enable
CODE

Установим ограничение по скорости в 60Мбит/с для седьмой очереди:

esr(config-if)# traffic-shape queue 7 60000
esr(config-if)# exit
CODE

Просмотреть статистику по QoS можно командой:

esr# show qos statistics gigabitethernet 1/0/8
CODE

Расширенный 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>

esr(config-class-policy-map)#

<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 – режим FIFO (First In, First Out);
  • gred – режим GRED (Generalized RED);
  • red – режим RED (Random Early Detection);
  • sfq – режим SFQ (очередь SFQ распределяет передачу пакетов на базе потоков).

Значение по умолчанию: 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>
<MAX> <MIN> <PROBABILITY>

<LIMIT> – предельный размер очереди в байтах, принимает значения в диапазоне [1..1000000];

<MAX> – максимальный размер очереди в байтах, принимает значения в диапазоне [1..1000000];

<MIN> – минимальный размер очереди в байтах, принимает значения в диапазоне [1..1000000];

<PROBABILITY> – вероятность отбрасывания пакетов, принимает значения [0..100].

При указании значений должны выполняться следующие правила:

  • <MAX>> 2 * <MIN>
  • <LIMIT>> 3 * <MAX>

22

Определить параметры GRED (Generalized Random Early Detection) (при необходимости).

esr(config-class-policy-map)# random-detect precedence
<PRECEDENCE><LIMIT><MAX><MIN><PROBABILITY>

<PRECEDENCE> – значение IPPrecendence [0..7];

<LIMIT> – предельный размер очереди в байтах, принимает значения в диапазоне [1..1000000];

<MAX> – максимальный размер очереди в байтах, принимает значения в диапазоне [1..1000000];

<MIN> – минимальный размер очереди в байтах, принимает значения в диапазоне [1..1000000];

<PROBABILITY> – вероятность отбрасывания пакетов, принимает значения [0..100].

При указании значений должны выполняться следующие правила:

  • <MAX>> 2 * <MIN>
  • <LIMIT>> 3 * <MAX>

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
CODE

Создаем классы 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
CODE

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

esr(config)# policy-map fl
esr(config-policy-map)# shape average 250000
CODE

Осуществляем привязку класса к политике, настраиваем ограничение полосы пропускания и выходим:

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
CODE

Для другого трафика настраиваем класс с режимом 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
CODE

Включаем 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
CODE

Для просмотра статистики используется команда:

esr# do show qos policy statistics gigabitethernet 1/0/20
CODE