9.1. Настройка QoS

Назначение

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

Используя QoS, можно присваивать определенному сетевому трафику приоритет, чтобы он получал преимущественное обслуживание. В этом случае сеть работает более предсказуемо и эффективнее использует пропускную способность.

Описание

Информация о классификации может содержаться в заголовке IP-пакета или L2-кадра. Заголовки IP-пакетов несут информацию, используя 6 бит или 3 бита из устаревшего поля IP Type of Service (TOS). L2-кадры 802.1Q несут информацию с помощью 2-байтового поля Tag Control Information.

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

Информация о классе может быть присвоена пакету следующим образом:

  • Конечные узлы или коммутаторы на пути следования, на основе настроенной политики.

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

  • Комбинация двух вышеуказанных методов.

Информация о классах может использоваться коммутаторами и маршрутизаторами на пути следования для ограничения количества выделяемых ресурсов для каждого класса трафика.

Настройка

Классификация и полисинг

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

  • Полисинг QoS не может быть настроен на агрегированном канале.

  • Классифицирован может быть только входящий трафик.

  • В одном классе может быть несколько ACL. Каждый ACL может иметь несколько ACE.

  • Полисинг нельзя выполнять на виртуальном интерфейсе.

Для настройки политики QoS требуется следующее:

  • Разделить трафик на классы.

  • Настроить политики для привязки к классам трафика.

  • Применить политики на портах.

Классификация трафика с помощью ACL

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

Шаг 1: Вход в режим “Global config”
Switch# configure terminal
Шаг 2: Создание ACL и ACE
Switch(config)# ip access-list ip-acl
Switch(config-ip-acl)# permit any 128.88.12.0 0.0.0.255 any
Switch(config-ip-acl)# permit any 28.88.0.0 0.0.255.255 any
Switch(config-ip-acl)# permit any 11.0.0.0 0.255.255.255 any
Switch(config-ip-acl)# exit

Подсказка

Для удаления ACL используется команда no ip access-list в режиме “Global config”.

Для удаления ACE используется команда no sequence-num в режиме настройки ACL.

Шаг 3: Выход из режима “Global config”
Switch(config)# end
Шаг 4: Проверка
Switch# show access-list ip ip-acl
ip access-list ip-acl
  10 permit any 128.88.12.0 0.0.0.255 any 
  20 permit any 28.88.0.0 0.0.255.255 any 
  30 permit any 11.0.0.0 0.255.255.255 any

Создание классов

Ниже показана классификация IP-трафика на порте с помощью классов. Для этого необходимо создать класс и определить критерии соответствия. В данном случае настраивается класс “Cmap1” с одним критерием соответствия: IP-ACL, который разрешает трафик из любого источника в любой пункт назначения.

Шаг 1: Вход в режим “Global config”
Switch# configure terminal
Шаг 2: Создание ACL и ACE
Switch(config)# ip access-list ip-acl
Switch(config-ip-acl)# permit any any any
Switch(config-ip-acl)# quit
Шаг 3: Создание класса и привязка ACL
Switch(config)# class-map cmap1
Switch(config-cmap)# match access-group ip-acl
Switch(config-cmap)# quit

Подсказка

Команда match-any используется для выполнения логического OR всех условий класса. Должно совпасть хотя бы одно из заданных условий. Значение по умолчанию - Match-any any.

Команда match-all используется для выполнения логического AND всех условий класса. Должны совпасть все заданные условия.

Шаг 4: Выход из режима “Global config”
Switch(config)# end
Шаг 5: Проверка
Switch# show class-map cmap1
    CLASS-MAP-NAME: cmap1 (match-any)
      match access-group: ip-acl

Настройка политик

Ниже показана настройка политик для классификации, ограничения и маркировки трафика. В данном примере создается политика и применяется к порту. IP ACL разрешает трафик из сети 10.1.0.0. Если сопоставленный трафик превышает среднюю скорость 48000 Кбит/с, он отбрасывается.

Шаг 1: Вход в режим “Global config”
Switch# configure terminal
Шаг 2: Создание ACL и ACE
Switch(config)# ip access-list ip-acl
Switch(config-ip-acl)# permit any 10.1.0.0 0.0.255.255 any
Switch(config-ip-acl)# quit
Шаг 3: Создание класса и привязка ACL
Switch(config)# class-map type qos cmap1
Switch(config-cmap)# match access-group ip-acl
Switch(config-cmap)# quit
Шаг 4: Настройка политики

Создание политики и привязка класса, установка действия в режиме конфигурации политики:

switch(config)# policy-map type qos pmap1
switch(config-pmap)# class type qos cmap1
Switch(config-pmap-c)# policer color-blind cir 48000 cbs 10000 ebs 16000 violate drop
Switch(config-pmap-qos-c)# set traffic-class 5 
Switch(config-pmap-qos-c)# set color yellow 
Switch(config-pmap-c)# quit
Switch(config-pmap)# quit

Подсказка

Для удаления политики используется команда no policy-map в режиме “Global config”.

Для удаления ограничений используется команда no policer в режиме конфигурации политики.

Для сброса в значение по умолчанию приоритета или цвета используется команда no set. (По умолчанию приоритет равен 0, а цвет - зеленый).

Шаг 5: Применение политики на порте
Switch(config)# interface eth-0-1
Switch(config-if)# service-policy type qos input pmap1
Switch(config-if)# exit

Примечание

На каждом порте поддерживается только одна политика для каждого направления.

Подсказка

Команды no service-policy input, no service-policy output используются для отмены политики на соответствующем направлении.

Шаг 6: Выход из режима “Global config”
Switch(config)# end
Шаг 7: Проверка
Switch# show policy-map pmap1

  POLICY-MAP-NAME: pmap1 ( type qos)
    State: detached

    CLASS-MAP-NAME: cmap1
      match access-group: ip-acl
        set traffic-class       : 5
        set color               : yellow
        policer color-blind cir 48000 cbs 10000 ebs 16000 violate drop

Cоздание агрегированного полисера

Ниже показано создание агрегированного полисера для классификации, контроля и маркировки трафика.

Создается агрегированный полисер и привязывается к политике с несколькими классами. IP ACL разрешает трафик из сети 10.1.0.0 и узла 11.3.1.1. Скорость трафика из сети 10.1.0.0 и узла 11.3.1.1 ограничивается: если трафик превышает среднюю скорость 48000 кбит/с и нормальный размер burst 8000 байт, он считается не соответствующим профилю и отбрасывается.

Шаг 1: Вход в режим “Global config”
Switch# configure terminal
Шаг 2: Создание ACL и ACE
Switch(config)# ip access-list ip-acl1
Switch(config-ip-acl)# permit any 10.1.0.0 0.0.255.255 any
Switch(config-ip-acl)# exit
Switch(config)# ip access-list ip-acl2
Switch(config-ip-acl)# permit any host 11.3.1.1 any
Switch(config-ip-acl)# exit
Шаг 3: Создание агрегированного полисера
Switch(config)# qos aggregate-policer transmit1 color-blind cir 48000 cbs 8000 ebs 10000 violate drop

Подсказка

Для удаления агрегированного полисера используется команда no qos aggregate-policer.

Шаг 4: Создание классов и привязка ACL
Switch(config)# class-map type qos cmap1
Switch(config-cmap)# match access-group ip-acl1
Switch(config-cmap)# exit
Switch(config)# class-map type qos cmap2
Switch(config-cmap)# match access-group ip-acl2
Switch(config-cmap)# exit
Шаг 5: Создание политики и привязка класса, привязка агрегированного полисера
Switch(config)# policy-map type qos aggflow1
Switch(config-pmap)# class type qos cmap1
Switch(config-pmap-c)# aggregate-policer transmit1
Switch(config-pmap-c)# exit
Switch(config-pmap)# class type qos cmap2
Switch(config-pmap-c)# aggregate-policer transmit1
Switch(config-pmap-c)# exit
Switch(config-pmap)# exit

Подсказка

Для удаления агрегированного полисера используется команда no policer-aggregate.

Шаг 6: Применение политики на порте
Switch(config)# interface eth-0-1
Switch(config-if)# service-policy type qos input aggflow1
Switch(config-if)# exit
Switch(config)# exit
Шаг 7: Выход из режима “Global config”
Switch(config)# end
Шаг 8: Проверка
Switch# show qos aggregate-policer
Aggreate policer: transmit1
  color blind
  CIR 48000 kbps, CBS 8000 bytes, EBS 10000 bytes
  drop violate packets

Настройка очереди

Настройка распределения

Трафик с различными классами распределяется по времени механизмом SP, а различные очереди одного класса - механизмом WDRR.

В примере ниже показана настройка приоритизации. Для классов “Traffic-class 5” и “Traffic-class 6” настраивается приоритет 6. Для класса “Traffic-class 2” настраивается приоритет 0, его пропускная способность устанавливается в значение 20%.

Шаг 1: Вход в режим “Global config”
Switch# configure terminal
Шаг 2: Создание классов для трафика
Switch(config)# class-map type traffic-class tc5
Switch(config-cmap-tc)# match traffic-class 5
Switch(config-cmap-tc)# exit
Switch(config)# class-map type traffic-class tc6
Switch(config-cmap-tc)# match traffic-class 6
Switch(config-cmap-tc)# exit
Switch(config)# class-map type traffic-class tc2
Switch(config-cmap-tc)# match traffic-class 2
Switch(config-cmap-tc)# exit
Шаг 3: Создание политики и привязка класса, установка приоритета
Switch(config)# policy-map type traffic-class tc
Switch(config-pmap-tc)# class type traffic-class tc5
Switch(config-pmap-tc-c)# priority level 6
Switch(config-pmap-tc-c)# exit
Switch(config-pmap-tc)# class type traffic-class tc6
Switch(config-pmap-tc-c)# priority level 6
Switch(config-pmap-tc-c)# exit
Switch(config-pmap-tc)# class type traffic-class tc2
Switch(config-pmap-tc-c)# bandwidth percentage 20
Switch(config-pmap-tc-c)# exit
Switch(config-pmap-tc)# exit
Шаг 4: Применение политики на порте
Switch(config)# interface eth-0-1
Switch(config-if)# service-policy type traffic-class tc
Switch(config-if)# exit
Шаг 5: Выход из режима “Global config”
Switch(config)# end
Шаг 6: Проверка
Switch# show qos interface eth-0-1 egress
TC Priority Bandwidth Shaping(kbps) Drop-Mode   Max-Queue-Limit(Cell)   ECN
0  0        -         -             dynamic     level 10                 -
1  0        -         -             random-drop 596                     Disable
2  0        20        -             dynamic     level 10                 -
3  0        -         -             tail-drop   2000                    2000
4  0        -         -             dynamic     level 10                 -
5  6        -         -             dynamic     level 10                 -
6  6        -         -             dynamic     level 10                 -
7  7        -         -             tail-drop   64                      -

Настройка Tail Drop

Tail drop - это техника предотвращения перегрузок для очереди на выходе. При использовании Tail drop пакеты ставятся в очередь до тех пор, пока не будет превышено пороговое значение размера очереди. Пакеты, выходящие за пороговое значение, будут отброшены.

Ниже показана настройка порога Tail drop для различных случаев. Настройка должна выполняться в режиме “Privileged Exec”.

В данном примере настраивается порог Tail drop для класса трафика 3. Порог отброса пакетов равен 2000.

Шаг 1: Вход в режим “Global config”
Switch# configure terminal
Шаг 2: Создание класса для трафика
Switch(config)# class-map type traffic-class tc3
Switch(config-cmap-tc)# match traffic-class 3
Switch(config-cmap-tc)# exit
Шаг 3: Создание политики и привязка класса
Switch(config)# policy-map type traffic-class tc
Switch(config-pmap-tc)# class type traffic-class tc3
Шаг 4: Установка порога Tail drop
Switch(config-pmap-tc-c)# queue-limit 2000
Switch(config-pmap-tc-c)# exit
Switch(config-pmap-tc)# exit
Шаг 5: Применение политик на порте
Switch(config)# interface eth-0-1
Switch(config-if)# service-policy type traffic-class tc
Switch(config-if)# exit
Шаг 6: Выход из режима “Global config”
Switch(config)# end
Шаг 7: Проверка
Switch# show qos interface eth-0-1 egress
TC Priority Bandwidth Shaping(kbps) Drop-Mode   Max-Queue-Limit(Cell)   ECN
0  0        -         -             dynamic     level 10                 -
1  0        -         -             dynamic     level 10                 -
2  0        -         -             dynamic     level 10                 -
3  0        -         -             tail-drop   2000                    2000
4  0        -         -             dynamic     level 10                 -
5  0        -         -             dynamic     level 10                 -
6  0        -         -             dynamic     level 10                 -
7  7        -         -             tail-drop   64                      -

Настройка WRED

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

В примере ниже показана настройка порога WRED для класса трафика 1. В этом примере максимальный порог равен 596, а минимальный - 596/8=71. Если буферизованные пакеты превышают минимальный порог, последующие пакеты будут отбрасываться случайным образом.

Шаг 1: Вход в режим “Global config”
Switch# configure terminal
Шаг 2: Создание класса для трафика
Switch(config)# class-map type traffic-class tc1
Switch(config-cmap-tc)# match traffic-class 1
Switch(config-cmap-tc)# exit
Шаг 3: Создание политики и привязка класса
Switch(config)# policy-map type traffic-class tc
Switch(config-pmap-tc)# class type traffic-class tc1
Шаг 4: Установка порога для WRED
Switch(config-pmap-tc-c)# random-detect maximum-threshold 596
Switch(config-pmap-tc-c)# exit
Switch(config-pmap-tc)# exit
Шаг 5: Применение политики на порте
Switch(config)# interface eth-0-1
Switch(config-if)# service-policy type traffic-class tc
Switch(config-if)# exit
Шаг 6: Выход из режима “Global config”
Switch(config)# end
Шаг 7: Проверка
Switch# show qos interface eth-0-1 egress
TC Priority Bandwidth Shaping(kbps) Drop-Mode   Max-Queue-Limit(Cell)   ECN
0  0        -         -             dynamic     level 10                 -
1  0        -         -             random-drop 596                     Disable
2  0        -         -             dynamic     level 10                 -
3  0        -         -             tail-drop   2000                    2000
4  0        -         -             dynamic     level 10                 -
5  0        -         -             dynamic     level 10                 -
6  0        -         -             dynamic     level 10                 -
7  7        -         -             tail-drop   64                      -

Формирование очереди (шейпинг)

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

В примере ниже показан шейпинг класса “tc3”. Если трафик в “tc3” превышает 1000 Мбит/с, он буферизируется.

Шаг 1: Вход в режим “Global config”
Switch# configure terminal
Шаг 2: Создание класса для трафика
Switch(config)# class-map type traffic-class tc3
Switch(config-cmap-tc)# match traffic-class 3
Switch(config-cmap-tc)# exit
Шаг 3: Создание политики и привязка класса
Switch(config)# policy-map type traffic-class tc
Switch(config-pmap-tc)# class type traffic-class tc3
Шаг 4: Установка лимит скорости (шейпинг)
Switch(config-pmap-tc-c)# shape rate pir 1000000
Switch(config-pmap-tc-c)# exit
Switch(config-pmap-tc)# exit

Подсказка

Для отключения лимита скорости используется команду no shape rate.

Шаг 5: Применение политики на порте
Switch(config)# interface eth-0-1
Switch(config-if)# service-policy type traffic-class tc
Switch(config-if)# exit
Шаг 6: Выход из режима “Global config”
Switch(config)# end
Шаг 7: Проверка
Switch# show qos interface eth-0-1 egress
TC Priority Bandwidth Shaping(kbps) Drop-Mode   Max-Queue-Limit(Cell)   ECN
0  0        -         -             dynamic     level 10                 -
1  0        -         -             random-drop 596                     Disable
2  0        20        -             dynamic     level 10                 -
3  0        -         1000000       tail-drop   2000                    2000
4  0        -         -             dynamic     level 10                 -
5  6        -         -             dynamic     level 10                 -
6  6        -         -             dynamic     level 10                 -
7  7        -         -             tail-drop   64                      -

Настройка формирования очереди (шейпинга) и полисинга порта

Настройка полисинга порта

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

В следующем примере показано создание полисера для входящего порта. Если принимаемый трафик превышает среднюю скорость 48000 кбит/с, он будет отброшен.

Шаг 1: Вход в режим “Global config”
Switch# configure terminal
Шаг 2: Настройка полисера на порте

Установка максимальных CIR, CBS и EBS:

Switch(config)# interface eth-0-1
Switch(config-if)# qos policer input color-blind cir 48000 cbs 10000 ebs 20000 violate drop
Switch(config-if)# exit

Подсказка

Для удаления конфигурации полисера, используются команды no port-policier input, no port-policier output.

Шаг 3: Выход из режима “Global config”
Switch(config)# end
Шаг 4: Проверка
Switch# show qos interface eth-0-1 statistics policer port input
Interface: eth-0-1
  input port policer: 
   color blind
    CIR 48000 kbps, CBS 10000 bytes, EBS 20000 bytes
    drop violate packets

Настройка формирования очереди (шейпинга) на порте

В примере ниже весь трафик, передаваемый на порте, будет сформирован в очередь, а весь трафик, превышающий установленный лимит в 1000 Мбит/с, будет буферизован. При отсутствии буфера трафик будет отброшен.

Шаг 1: Вход в режим “Global config”
Switch# configure terminal
Шаг 2: Установка лимита скорости для порта
Switch(config)# interface eth-0-1
Switch(config-if)# qos shape rate pir 1000000
Switch(config-if)# exit

Подсказка

Для удаления конфигурации используется команду no shape.

Шаг 3: Выход из режима “Global config”
Switch(config)# end
Шаг 4: Проверка
Switch# show running-config interface eth-0-1
Building configuration...
!
interface eth-0-1
 service-policy type traffic-class tc
 qos policer input color-blind cir 48000 cbs 10000 ebs 20000 violate drop 
 qos shape rate pir 1000000 
!