Главная » Простые сети » Сложные сети » Теория » Практические приемы » Технология » ПО » Работа в сети » Прочее

Cisco QoS для начинающих.

Автор статьи Эдуард Афонцев

В настоящее время вместе с планомерным увеличением скоростей передачи данных в телекоммуникациях увеличивается доля интерактивного трафика, крайне чувствительного к параметрам среды транспортировки. Поэтому задача обеспечения качества обслуживания (Quality of Service - QoS) становится все более актуальной.

Рассмотрение вопроса подобной сложности лучше всего начинать с простых и понятных примеров настройки оборудования, например, фирмы Cisco. Представленный здесь материал, безусловно, не может конкурировать с www.cisco.com. Наша задача – начальная классификация огромного объема сведений в компактном виде с целью облегчения понимания и дальнейшего изучения.

1. Определения и термины.

Определений термина QoS настолько много, что мы выберем единственно верное - правильно, от Cisco : "QoS – QoS refers to the ability of a network to provide better service to selected network traffic over various underlying technologies…". Что можно литературно перевести как: "QoS – способность сети обеспечить необходимый сервис заданному трафику в определенных технологических рамках".

Необходимый сервис описывается многими параметрами, отметим среди них самые важные.

Bandwidth (BW) - полоса пропускания, описывает номинальную пропускную способность среды передачи информации, определяет ширину канала. Измеряется в bit/s (bps), kbit/s (kbps), mbit/s (mbps).

Delay - задержка при передаче пакета.

Jitter - колебание (вариация) задержки при передаче пакетов.

Packet Loss – потери пакетов. Определяет количество пакетов, отбрасываемых сетью во время передачи.

Чаще всего для описания пропускной способности канала проводят аналогию с водопроводной трубой. В ее рамках Bandwidth – это ширина трубы, а Delay – длина.

Время передачи пакета через канал Transmit time [s] = packet size [bytes] / bw [bytes/s].

Например, найдем время передачи пакета размером 64 байта по каналу шириной 64 килобита/c:

Packet size = 64*8=512 (bit) Transmit Time = 512/64000 = 0.008 (c)

2. Сервисные модели QoS.

2.1. Best Effort Service.

Негарантированная доставка. Абсолютное отсутствие механизмов QoS. Используются все доступные ресурсы сети без какого-либо выделения отдельных классов трафика и регулирования. Считается, что лучшим механизмом обеспечения QoS является увеличение пропускной способности . Это в принципе правильно, однако некоторые виды трафика (например, голосовой) очень чувствительны к задержкам пакетов и вариации скорости их прохождения. Модель Best Effort Service даже при наличии больших резервов допускает возникновение перегрузок в случае резких всплесков трафика. Поэтому были разработаны и другие подходы к обеспечению QoS.

2.2. Integrated Service (IntServ).

Integrated Service (IntServ, RFC 1633) - модель интегрированного обслуживания. Может обеспечить сквозное (End-to-End) качество обслуживания, гарантируя необходимую пропускную способность. IntServ использует для своих целей протокол сигнализации RSVP. Позволяет приложениям выражать сквозные требования к ресурсам и содержит механизмы обеспечения данных требований. IntServ можно кратко охарактеризовать как резервирование ресурсов (Resource reservation).

2.3. Differentiated Service (DiffServ).

Differentiated Service (DiffServ, RFC 2474/2475) - Модель дифференцированного обслуживания. Определяет обеспечение QoS на основе четко определенных компонентов, комбинируемых с целью предоставления требуемых услуг. Архитектура DiffServ предполагает наличие классификаторов и формирователей трафика на границе сети, а также поддержку функции распределения ресурсов в ядре сети в целях обеспечения требуемой политики пошагового обслуживания (Per-Hop Behavior - PHB). Разделяет трафик на классы, вводя несколько уровней QoS. DiffServ состоит из следующих функциональных блоков: граничные формирователи трафика (классификация пакетов, маркировка, управление интенсивностью) и реализаторы PHB политики (распределение ресурсов, политика отбрасывания пакетов). DiffServ можно кратко охарактеризовать как приоритезацию трафика (Prioritization).

3. Базовые функции QoS.

Базовые функции QoS заключаются в обеспечении необходимых параметров сервиса и определяются по отношению к трафику как: классификация, разметка, управление перегрузками, предотвращение перегрузок и регулирование. Функционально классификация и разметка чаще всего обеспечиваются на входных портах оборудования, а управление и предотвращение перегрузок – на выходных.

3.1. Классификация и разметка (Classification and Marking).

Классификация пакетов (Packet Classification) представляет собой механизм соотнесения пакета к определенному классу трафика.

Другой не менее важной задачей при обработке пакетов является маркировка пакетов (Packet Marking) - назначение соответствующего приоритета (метки).

В зависимости от уровня рассмотрения (имеется в виду OSI) эти задачи решаются по-разному.

3.1.1. Layer 2 Classification and Marking.

Коммутаторы Ethernet (Layer 2) используют протоколы канального уровня. Протокол Ethernet в чистом виде не поддерживает поле приоритета. Поэтому на Ethernet портах (Access Port) возможна лишь внутренняя (по отношению к коммутатору) классификация по номеру входящего порта и отсутствует какая-либо маркировка.

Более гибким решением является использование стандарта IEEE 802.1P, который разрабатывался совместно с 802.1Q. Иерархия отношений здесь следующая: 802.1D описывает технологию мостов и является базовой для 802.1Q и 802.1P. 802.1Q описывает технологию виртуальных сетей (VLAN), а 802.1P обеспечение качества обслуживания. В целом, включение поддержки 802.1Q (транк с виланами), автоматически дает возможность использования 802.1P. Согласно стандарту используются 3 бита в заголовке второго уровня, которые называются Class of Service (CoS). Таким образом, CoS может принимать значения от 0 до 7.

3.1.2. Layer 3 Classification and Marking.

Маршрутизирующее оборудование (Layer 3) оперирует IP пакетами, в которых под цели маркировки предусмотрено соответствующее поле в заголовке - IP Type of Service (ToS) размером один байт. ToS может быть заполнен классификатором IP Precedence или DSCP в зависимости от задачи. IP precedence (IPP) имеет размерность 3 бита (принимает значения 0-7). DSCP относится к модели DiffServ и состоит из 6 бит (значения 0-63).

Кроме цифровой формы, значения DSCP могут быть выражены с использованием специальных ключевых слов: доставка по возможности BE – Best Effort, гарантированная доставка AF – Assured Forwarding и срочная доставка EF – Expedited Forwarding. В дополнение к этим трем классам существуют коды селектора классов, которые добавляются к обозначению класса и обратно совместимы с IPP. Например, значение DSCP равное 26 можно записать как AF31, что полностью равнозначно.

MPLS содержит индикатор QoS внутри метки в соответствующих битах MPLS EXP (3 бита).

Промаркировать IP пакеты значением QoS можно разными способами: PBR, CAR, BGP.

Пример 1. Маркировка PBR

Policy Based Route (PBR) можно использовать с целью маркировки, производя ее в соответствующей подпрограмме (Route-map может содержать параметр set ip precedence):

!
interface FastEthernet0/0
ip address 192.168.0.2 255.255.255.0
ip policy route-map MARK
speed 100
full-duplex
no cdp enable
!
access-list 1 permit 192.168.0.0 0.0.0.255
!
route-map MARK permit 10
match ip address 1
set ip precedence priority
!

На выходе интерфейса можно увидеть результат (например, программой tcpdump под unix):

# tcpdump -vv -n -i em0
... IP (tos 0x20 ...)

Пример 2. Маркировка CAR.

Механизм Committed Access Rate (CAR) разработан для ограничения скорости, однако дополнительно может и маркировать пакеты (параметр set-prec-transmit в rate-limit):

!
interface FastEthernet0/0
ip address 192.168.0.2 255.255.255.252
rate-limit input access-group 1 1000000 10000 10000 conform-action set-prec-transmit 3 exceed-action set-prec-transmit 3
no cdp enable
!
access-list 1 permit 192.168.0.0 0.0.0.255
!

#sh interface FastEthernet0/0 rate-limit

3.2. Управление перегрузками (Congestion Management). Механизм очередей.

3.2.1. Перегрузки (Congestions).

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

Управление пропускной способностью в случае перегрузок (узких мест) осуществляется с помощью механизма очередей. Пакеты помещаются в очереди, которые упорядоченно обрабатываются по определенному алгоритму. Фактически, управление перегрузками – это определение порядка, в котором пакеты выходят из интерфейса (очередей) на основе приоритетов. Если перегрузок нет – очереди не работают (и не нужны). Перечислим методы обработки очередей.

3.2.2. Layer 2 Queuing.

Физическое устройство классического коммутатора можно упрощенно представить следующим образом: пакет приходит на входной порт, обрабатывается механизмом коммутации, который решает, куда направить пакет, и попадает в аппаратные очереди выходного порта. Аппаратные очереди представляет собой быструю память, хранящую пакеты перед тем, как они попадут непосредственно на выходной порт. Далее, согласно определенному механизму обработки, пакеты извлекаются из очередей и покидают коммутатор. Изначально очереди равноправны и именно механизм обработки очередей (Scheduling) определяет приоритезацию. Обычно каждый порт коммутатора содержит ограниченное число очередей: 2, 4, 8 и так далее.

В общих чертах настройка приоритезации заключается в следующем:

1. Изначально очереди равноправны. Поэтому предварительно необходимо их настроить, то есть определить очередность (или пропорциональность объема) их обработки. Чаще всего это делается привязкой приоритетов 802.1P к очередям.

2. Необходимо сконфигурировать обработчик очередей (Scheduler). Чаще всего используются взвешенный циклический алгоритм (Weighted Round Robin WRR) или строгая очередь приоритетов (Strict Priority Queuing).

3. Назначение приоритета поступающим пакетам: по входному порту, по CoS или, в случае дополнительных возможностей (Layer 3 switch), по каким-то полям IP.

Работает все это следующим образом:

1. Пакет попадает в коммутатор. Если это обычный Ethernet пакет (клиентский Access Port), то он не имеет меток приоритета и таковая может выставляться коммутатором, например, по номеру входного порта, если это нужно. Если входной порт транковый (802.1Q или ISL), то пакет может нести метку приоритета и коммутатор может ее принять или заменить на необходимую. В любом случае пакет на данном этапе попал в коммутатор и имеет необходимую разметку CoS.

2. После обработки процессом коммутации пакет в соответствии с меткой приоритета CoS направляется классификатором (Classify) в соответствующую очередь выходного порта. Например, критический трафик попадает в высокоприоритетную, а менее важный в низкоприоритетную очереди.

3. Механизм обработки (Scheduling) извлекает пакеты из очередей согласно их приоритетам. Из высокоприоритетной очереди за единицу времени будет выдано на выходной порт больше пакетов, чем из низкоприоритетной.

3.2.3. Layer 3 Queuing.

Маршрутизирующие устройства оперируют пакетами на третьем уровне OSI (Layer 3). Чаще всего поддержка очередей обеспечивается программно. Это означает в большинстве случаев отсутствие аппаратных ограничений на их число и более гибкое конфигурирование механизмов обработки. Общая парадигма QoS Layer 3 включает маркировку и классификацию пакетов на входе (Marking & Classification), распределение по очередям и их обработку (Scheduling) по определенным алгоритмам.

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

Проведем классификацию Layer 3 QoS по методам обработки очередей.

3.2.3.1. FIFO.

Элементарная очередь с последовательным прохождением пакетов, работающая по принципу первый пришел – первый ушел (First In First Out - FIFO), имеющему русский эквивалент кто первый встал того и тапки . По сути, здесь нет никакой приоритезации. Включается по умолчанию на интерфейсах со скоростью больше 2 мбит/с.

3.2.3.2. PQ. Очереди приоритетов.

Priority Queuing (PQ) обеспечивает безусловный приоритет одних пакетов над другими. Всего 4 очереди: high, medium, normal и low. Обработка ведется последовательно (от high до low), начинается с высокоприоритетной очереди и до ее полной очистки не переходит к менее приоритетным очередям. Таким образом, возможна монополизация канала высокоприоритетными очередями. Трафик, приоритет которого явно не указан, попадет в очередь по умолчанию (default).

Параметры команды.
распределение протоколов по очередям:
priority-list LIST_NUMBER protocol PROTOCOL {high|medium|normal|low} list ACCESS_LIST_NUMBER
определение очереди по умолчанию:
priority-list LIST_NUMBER default {high|medium|normal|low}
определение размеров очередей (в пакетах):
priority-list LIST_NUMBER queue-limit HIGH_QUEUE_SIZE MEDIUM_QUEUE_SIZE NORMAL_QUEUE_SIZE LOW_QUEUE_SIZE

обозначения:
LIST_NUMBER – номер обработчика PQ (листа)
PROTOCOL - протокол
ACCESS_LIST_NUMBER – номер аксесс листа
HIGH_QUEUE_SIZE – размер очереди HIGH
MEDIUM_QUEUE_SIZE - размер очереди MEDIUM
NORMAL_QUEUE_SIZE - размер очереди NORMAL
LOW_QUEUE_SIZE - размер очереди LOW

Алгоритм настройки.

1. Определяем 4 очереди
access-list 110 permit ip any any precedence network
access-list 120 permit ip any any precedence critical
access-list 130 permit ip any any precedence internet
access-list 140 permit ip any any precedence routine

priority-list 1 protocol ip high list 110
priority-list 1 protocol ip medium list 120
priority-list 1 protocol ip normal list 130
priority-list 1 protocol ip low list 140
priority-list 1 default low

Дополнительно можно установить размеры очередей в пакетах
priority-list 1 queue-limit 30 60 90 120

2. Привязываем к интерфейсу

!
interface FastEthernet0/0
ip address 192.168.0.2 255.255.255.0
speed 100
full-duplex
priority-group 1
no cdp enable
!

3. Просмотр результата
# sh queueing priority

Current priority queue configuration:

List Queue Args - -
1 low default -
1 high protocol ip list 110
1 medium protocol ip list 120
1 normal protocol ip list 130
1 low protocol ip list 140

#sh interfaces fastEthernet 0/0

Queueing strategy: priority-list 1

#sh queueing interface fastEthernet 0/0
Interface FastEthernet0/0 queueing strategy: priority

Output queue utilization (queue/count)
high/19 medium/0 normal/363 low/0

3.2.3.3. CQ. Произвольные очереди.

Custom Queuing (CQ) обеспечивает настраиваемые очереди. Предусматириваетмя управление долей полосы пропускания канала для каждой очереди. Поддерживается 17 очередей. Системная 0 очередь зарезервирована для управляющих высокоприоритетных пакетов (маршрутизация и т.п.) и пользователю недоступна.

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

Параметры команды.
определение полосы пропускания очередей:
queue-list LIST-NUMBER queue QUEUE_NUMBER byte-count
BYTE_COUT

определение размеров очередей:
queue-list LIST-NUMBER queue QUEUE_NUMBER limit QUEUE_SIZE

обозначения:
LIST-NUMBER – номер обработчика
QUEUE_NUMBER – номер очереди
BYTE_COUT – размер очереди в пакетах

Алгоритм настройки.

1. Определяем очереди
access-list 110 permit ip host 192.168.0.100 any
access-list 120 permit ip host 192.168.0.200 any

queue-list 1 protocol ip 1 list 110
queue-list 1 protocol ip 2 list 120
queue-list 1 default 3

queue-list 1 queue 1 byte-count 3000
queue-list 1 queue 2 byte-count 1500
queue-list 1 queue 3 byte-count 1000

Дополнительно можно установить размеры очередей в пакетах
queue-list 1 queue 1 limit 50
queue-list 1 queue 2 limit 50
queue-list 1 queue 3 limit 50

2. Привязываем к интерфейсу
!
interface FastEthernet0/0
ip address 192.168.0.2 255.255.255.0
speed 100
full-duplex
custom-queue-list 1
no cdp enable
!

3. Просмотр результата
#sh queueing custom

Current custom queue configuration:

List Queue Args -
1 3 default -
1 1 protocol ip list 110
1 2 protocol ip list 120
1 1 byte-count 1000 -
1 2 byte-count 1000 -
1 3 byte-count 2000 -

#sh interface FastEthernet0/0

Queueing strategy: custom-list 1

#sh queueing interface fastEthernet 0/0
Interface FastEthernet0/0 queueing strategy: custom

Output queue utilization (queue/count)
0/90 1/0 2/364 3/0 4/0 5/0 6/0 7/0 8/0
9/0 10/0 11/0 12/0 13/0 14/0 15/0 16/0

3.2.3.4. WFQ. Взвешенные справедливые очереди.

Weighted Fair Queuing (WFQ) автоматически разбивает трафик на потоки (flows). По умолчанию их число равно 256, но может быть изменено (параметр dynamic-queues в команде fair-queue). Если потоков больше, чем очередей, то в одну очередь помещается несколько потоков. Принадлежность пакета к потоку (классификация) определяется на основе TOS, протокола, IP адреса источника, IP адреса назначения, порта источника и порта назначения. Каждый поток использует отдельную очередь.

Обработчик WFQ (scheduler) обеспечивает равномерное (fair - честное) разделение полосы между существующими потоками. Для этого доступная полоса делится на число потоков и каждый получает равную часть. Кроме того, каждый поток получает свой вес (weight), с некоторым коэффициентом обратно пропорциональный IP приоритету (TOS). Вес потока также учитывается обработчиком.

В итоге WFQ а втоматически справедливо распределяет доступную пропускную способность, дополнительно учитывая TOS. Потоки с одинаковыми IP приоритетами TOS получат равные доли полосы пропускания; потоки с большим IP приоритетом – большую долю полосы. В случае перегрузок ненагруженные высокоприоритетные потоки функционируют без изменений, а низкоприоритетные высоконагруженные – ограничиваются.

Вместе с WFQ работает RSVP. По умолчанию WFQ включается на низкоскоростных интерфейсах.

Алгоритм настройки.
1. Помечаем трафик каким-либо способом (устанавливаем IP приоритет - TOS) или получаем его помеченным

2. Включаем WFQ на интерфейсе
interface FastEthernet0/0
fair-queue

interface FastEthernet0/0
fair-queue CONGESTIVE_DISCARD_THRESHOLD DYNAMIC_QUEUES

Параметры:
CONGESTIVE_DISCARD_THRESHOLD – число пакетов в каждой очереди, при превышении которого пакеты игнорируются (по умолчанию - 64)
DYNAMIC_QUEUES – число подочередей, по которым классифицируется трафик (по умолчанию - 256)

3. Просмотр результата
# sh queueing fair
# sh queueing interface FastEthernet0/0

3.2.3.5. CBWFQ.

Class Based Weighted Fair Queuing (CBWFQ) соответствует механизму обслуживания очередей на основе классов. Весь трафик разбивается на 64 класса на основании следующих параметров: входной интерфейс, аксесс лист (access list), протокол, значение DSCP, метка MPLS QoS.

Общая пропускная способность выходного интерфейса распределяется по классам. Выделяемую каждому классу полосу пропускания можно определять как в абсолютное значение (bandwidth в kbit/s) или в процентах (bandwidth percent) относительно установленного значения на интерфейсе.

Пакеты, не попадающие в сконфигурированные классы, попадают в класс по умолчанию, который можно дополнительно настроить и который получает оставшуюся свободной полосу пропускания канала. При переполнении очереди любого класса пакеты данного класса игнорируются. Алгоритм отклонения пакетов внутри каждого класса можно выбирать: включенное по умолчанию обычное отбрасывание (tail-drop, параметр queue-limit) или WRED (параметр random-detect). Только для класса по умолчанию можно включить равномерное ( честное ) деление полосы (параметр fair-queue).

CBWFQ поддерживает взаимодействие с RSVP.

Параметры команды.

критерии отбора пакетов классом:
class-map match-all CLASS
match access-group
match input-interface
match protocol
match ip dscp
match ip rtp
match mpls experimental

определение класса:

class CLASS
bandwidth BANDWIDTH
bandwidth percent BANDWIDTH_PERCENT
queue-limit QUEUE-LIMIT
random-detect

определение класса по умолчанию (default):

class class-default
bandwidth BANDWIDTH
bandwidth percent BANDWIDTH_PERCENT
queue-limit QUEUE-LIMIT
random-detect
fair-queue

обозначения:
CLASS – название класса.
BANDWIDTH – минимальная полоса kbit/s, значение независимо от bandwidth на интерфейсе.
BANDWIDTH_PERCENT - процентное соотношение от bandwidth на интерфейсе.
QUEUE-LIMIT – максимальное количество пакетов в очереди.
random-detect – использование WRED.
fair-queue – равномерное деление полосы, только для класса по умолчанию

По умолчанию абсолютное значение Bandwidth в классе CBWFQ не может превышать 75% значение Bandwidth на интерфейсе. Это можно изменить командой max-reserved-bandwidth на интерфейсе.

Алгоритм настройки.

1. Распределение пакетов по классам - class-map
access-list 101 permit ip any any precedence critical

class-map match-all Class1
match access-group 101

2. Описание правил для каждого класса - policy-map
policy-map Policy1
class Class1
bandwidth 100
queue-limit 20
class class-default
bandwidth 50
random-detect

3. Запуск заданной политики на интерфейсе - service-policy
interface FastEthernet0/0
bandwidth 256
service-policy output Policy1

4. Просмотр результата
#sh class Class1
#sh policy Policy1
#sh policy interface FastEthernet0/0

Пример 1.

Деление общей полосы по классам в процентном соотношении (40, 30, 20).
access-list 101 permit ip host 192.168.0.10 any
access-list 102 permit ip host 192.168.0.20 any
access-list 103 permit ip host 192.168.0.30 any

class-map match-all Platinum
match access-group 101
class-map match-all Gold
match access-group 102
class-map match-all Silver
match access-group 103

policy-map Isp
class Platinum
bandwidth percent 40
class Gold
bandwidth percent 30
class Silver
bandwidth percent 20

interface FastEthernet0/0
bandwidth 256
service-policy output Isp

3.2.3.6. LLQ.

Low Latency Queuing (LLQ) – очередность с низкой задержкой. LLQ можно рассматривать как механизм CBWFQ с приоритетной очередью PQ (LLQ = PQ + CBWFQ).
PQ в LLQ позволяет обеспечить обслуживание чувствительного к задержке трафика. LLQ рекомендуется в случае наличия голосового (VoIP) трафика. Кроме того, он хорошо работает с видеоконференциями.

Алгоритм настройки.

1. Распределение пакетов по классам - Class-map
access-list 101 permit ip any any precedence critical

class-map match-all Voice
match ip precedence 6
class-map match-all Class1
match access-group 101

2. Описание правил для каждого класса - Policy-map

Аналогично CBWFQ, только для приоритетного класса (он один) указывается параметр priority.
policy-map Policy1
class Voice
priority 1000
class Class1
bandwidth 100
queue-limit 20
class class-default
bandwidth 50
random-detect

3. Запуск заданной политики на интерфейсе - Service-policy
interface FastEthernet0/0
bandwidth 256
service-policy output Policy1

Пример 1.
Относим класс Voice к PQ, а все остальное к CQWFQ.
!
class-map match-any Voice
match ip precedence 5
!
policy-map Voice
class Voice
priority 1000
class VPN
bandwidth percent 50
class class-default
fair-queue 16
!
interface X
Sevice-policy output Voice
!

Пример 2.
Дополнительно ограничиваем общую скорость для PQ в LLQ, чтобы он не монополизировал весь канал в случае неправильной работы.
!
class-map match-any Voice
match ip precedence 5
!
policy-map Voice
class Voice
priority 1000
police 1024000 32000 32000 conform-action transmit exceed-action drop
class Vpn
bandwidth percent 50
class class-default
fair-queue 16
!
interface FastEthernet0/0
service-policy output Voice
!

Далее

Спасибо за внимание!


/ Обмен ссылками / Неизвестные сети /