Глава 2. Packet classification: различия между версиями
м |
|||
(не показано 13 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
= | {{#description2:Основы классификации пакетов. Дефолтные классы. Packet loss priority (PLP). Типы классификации: fixed (interface based), MF (multifield), BA (behavior aggregate), mixed. Классификаторы. Информация для подготовки к экзаменам Juniper.}} | ||
'''Цель классификации пакетов''': исследовать трафик | =Основы классификации пакетов= | ||
'''Цель классификации пакетов''': исследовать трафик и ассоциировать пакеты с конкретным cos service level (c forwarding class и loss priority). И уже на основании forw class пакет обрабатывается по правилам конкретной очереди (queue). | |||
Т.е.: определение и назначение forwarding class = помещение пакета в нужную очередь. | Т.е.: определение и назначение forwarding class = помещение пакета в нужную очередь. | ||
'''Forwarding class''' - не возникает | Ассоциирование трафика происходит по code-point меткам любого типа: DSCP (ip) / EXP (mpls) и другим. | ||
'''Forwarding class''' - не возникает извне сети. Но при назначении FW class конкретному типу трафика на начальном узле, может быть опознан и обработай корректно на других узлах сети. | |||
Пакеты определенного класса могут быть перекласифицированы дальше в сети. | Пакеты определенного класса могут быть перекласифицированы дальше в сети. | ||
== | ==Дефолтные классы== | ||
* BF (Best effort) = 0 queue - default for PHB. | На всех роутерах есть уже предустановленные F-classes и queues для них: | ||
* EF (Expedited forwarding) = 1 - low loss, low delay, low jitter - voice. | * BF (Best effort) = 0 queue - default for PHB - по умолчанию пакеты в этой очереди при заторах - дропаются. | ||
* AF (assured forwarding) = 2 - концентрация в основном на packet loss. | * EF (Expedited forwarding) = 1 - гарантированная полоса, low loss, low delay, low jitter - хорош для voice. Избыточный трафик принимается но при отправке его дальше часть трафика может быть дроппнута, часть переслана в неверном порядке. | ||
* NC (network control) = 3 | * AF (assured forwarding) = 2 - концентрация в основном на packet loss - хорошо для типа трафика, чувствительного к потерям. Избыточный трафик принимается, но к нему применяется: RED drop profile. 4 drop probabilities для этого класса: low, medium-low, medium-high, and high. | ||
* NC (network control) = 3 - low priority. Но в условиях заторов - трафик не дропается, т.к. передает служебную инфу для протоколов. | |||
Можно создавать свои: | Можно создавать свои или менять для существующих классов названия, например: | ||
blair> show class-of-service forwarding-class | blair> show class-of-service forwarding-class | ||
Forwarding class ID Queue Policing priority | Forwarding class ID Queue Policing priority | ||
Строка 21: | Строка 25: | ||
tv-data 3 3 normal | tv-data 3 3 normal | ||
blair# show class-of-service forwarding-classes | blair# show class-of-service forwarding-classes | ||
class be queue-num 0; | class be queue-num 0; | ||
Строка 29: | Строка 32: | ||
MX, T, M7i/M10i с CFEB-E: до 16 классов, до 8 очередей. | MX, T, M7i/M10i с CFEB-E: до 16 классов, до 8 очередей. | ||
Назначение очереди происходит по следующим правилам: | |||
*Если классификатор не занес пакет в какой-то класс, то умолчанию ему назначают BE forwardong-class, queue 0. | |||
*Конфигурация CoS по умолчанию основана на номере очереди. Имя класса пересылки, которое появляется при отображении конфигурации по умолчанию - это класс пересылки, связанный в данный момент с этой очередью. | |||
*Конфиг, где в QoS определено больше очередей, чем поддерживает роутер - не сможет быть закоммичен. | |||
Только для BE и NC по дефолту определены и forwarding classes и schedulers. Для EF, AF требуется их (schedulers) настраивать. | |||
Только IP precedence classifiers работают на интерфейсах. | |||
==Packet loss priority (PLP)== | ==Packet loss priority (PLP)== | ||
Строка 59: | Строка 71: | ||
Каждый Ingress interface должен выбрать для себя способ классификации. | Каждый Ingress interface должен выбрать для себя способ классификации. | ||
== Fixed classification ( | == Fixed classification (interface based)== | ||
Один forwarding class назначается на unit (vlan) и применяется ко всем входящим пакетам. | Один forwarding class назначается на unit (vlan) и применяется ко всем входящим пакетам. | ||
Строка 68: | Строка 80: | ||
Или если upstream узел ненадежный и нужно ''перекрасить'' весь трафик, приходящий на этот порт (обычно BE в подобных ситуациях). | Или если upstream узел ненадежный и нужно ''перекрасить'' весь трафик, приходящий на этот порт (обычно BE в подобных ситуациях). | ||
При использовании такого метода нельзя сделать исключения для какого-то трафика, поэтому | При использовании такого метода нельзя сделать исключения для какого-то трафика, поэтому такой метод считается не очень "гибким" для использования. | ||
Config | '''Config''' | ||
blair# show class-of-service interfaces | blair# show class-of-service interfaces | ||
ge-0/0/0 { | ge-0/0/0 { | ||
Строка 80: | Строка 92: | ||
Классификация основана на 1 или более полей в заголовке пакета: port, IP, prefix, mac. | Классификация основана на 1 или более полей в заголовке пакета: port, IP, prefix, mac. | ||
Для выделения нужного трафика по определенным полям используется обычный firewall-filter. | Для выделения нужного трафика по определенным полям используется обычный '''stateless''' firewall-filter. (использует не только source/dest ip). | ||
MF лучше применять на ingress (в самом начале попадания пакета в сеть). | MF лучше применять на ingress (в самом начале попадания пакета в сеть). | ||
Строка 87: | Строка 99: | ||
Config (можно писать несколько term, определяя по разным параметрам трафик и запихивая его в разные очереди) | Config (можно писать несколько term, определяя по разным параметрам трафик и запихивая его в разные очереди) | ||
set interfaces ge-0/0/0 unit 80 family inet filter input qos-tv-data | |||
== BA classification == | set firewall family inet filter qos-tv-data term 1 from source-address 239.30.30.0/24 | ||
set firewall family inet filter qos-tv-data term 1 then '''forwarding-class tv-data''' | |||
set firewall family inet filter qos-tv-data term 1 then '''accept''' | |||
set firewall family inet filter qos-tv-data term all-accept '''then accept''' | |||
== BA (behavior aggregate) classification == | |||
BA классификация основана по уже заданному у пакета значении QoS, т.е. пакет уже был ранее классифицирован другим устройством и присвоил конкретную QoS метку. На основании этой метки пакет будет обработан устройством. | BA классификация основана по уже заданному у пакета значении QoS, т.е. пакет уже был ранее классифицирован другим устройством и присвоил конкретную QoS метку. На основании этой метки пакет будет обработан устройством. | ||
Строка 123: | Строка 125: | ||
BA классификатор лучше применять внутри сети (не на входе в сеть). | BA классификатор лучше применять внутри сети (не на входе в сеть). | ||
==Mixed== | set class-of-service interfaces ge-0/0/0 unit * classifiers dscp dscp-classifier | ||
set class-of-service interfaces ge-0/0/0 unit * classifiers exp exp-classifier | |||
set class-of-service classifiers dscp dscp-classifier forwarding-class best-effort loss-priority low code-points be | |||
set class-of-service classifiers dscp dscp-classifier forwarding-class vpn loss-priority low code-points vpn-low | |||
set class-of-service classifiers dscp dscp-classifier forwarding-class vpn loss-priority high code-points vpn-high | |||
set class-of-service classifiers dscp dscp-classifier forwarding-class vpn-priority loss-priority low code-points vpn-priority | |||
set class-of-service classifiers dscp dscp-classifier forwarding-class nc loss-priority low code-points nc | |||
set class-of-service classifiers exp exp-classifier forwarding-class best-effort loss-priority low code-points be | |||
set class-of-service classifiers exp exp-classifier forwarding-class vpn loss-priority low code-points vpn-low | |||
set class-of-service classifiers exp exp-classifier forwarding-class vpn loss-priority high code-points vpn-high | |||
set class-of-service classifiers exp exp-classifier forwarding-class vpn-priority loss-priority low code-points vpn-priority | |||
set class-of-service code-point-aliases dscp be 000000 | |||
set class-of-service code-point-aliases dscp vpn-low 001010 | |||
set class-of-service code-point-aliases dscp vpn-high 001100 | |||
set class-of-service code-point-aliases dscp vpn-priority 101110 | |||
set class-of-service code-point-aliases dscp nc 110000 | |||
set class-of-service code-point-aliases exp be 000 | |||
set class-of-service code-point-aliases exp vpn-low 010 | |||
set class-of-service code-point-aliases exp vpn-high 011 | |||
set class-of-service code-point-aliases exp vpn-priority 101 | |||
p.s. code-points можно использовать и дефолтные, а можно прописать свои user-friendly. Посмотреть существующие: ''show class-of-service code-point-aliases'' | |||
==Mixed classification== | |||
На интерфейс можно применить как MF, так и BA классификатор. | На интерфейс можно применить как MF, так и BA классификатор. | ||
*Сначала производится классификация по BA, потом по MF. | *Сначала производится классификация по BA, потом по MF. | ||
Строка 132: | Строка 159: | ||
Logical interface: ge-0/0/0.100, Index: 72 ('''IPv4 + MPLS interface''') | Logical interface: ge-0/0/0.100, Index: 72 ('''IPv4 + MPLS interface''') | ||
Object Name Type Index | Object Name Type Index | ||
Rewrite exp-default exp (mpls-any) 33 | Rewrite '''exp-default''' exp (mpls-any) 33 | ||
Classifier exp-default exp 10 | Classifier '''exp-default''' exp 10 | ||
Classifier ipprec-compatibility ip 13 | Classifier '''ipprec-compatibility''' ip 13 | ||
Logical interface: ge-0/0/1.0, Index: 75 ('''only IPv4 interface''') | Logical interface: ge-0/0/1.0, Index: 75 ('''only IPv4 interface''') | ||
Object Name Type Index | Object Name Type Index | ||
Classifier ipprec-compatibility ip 13 | Classifier '''ipprec-compatibility''' ip 13 | ||
Остальные дефолтные классификаторы: | Остальные дефолтные классификаторы: | ||
Строка 170: | Строка 197: | ||
classifiers { | classifiers { | ||
dscp voice;}} | dscp voice;}} | ||
=Дополнительная информация= | |||
*[[Глава 1. QoS]] | |||
*[[Глава 4. Scheduling]] | |||
*[[Глава 6. Rewrite rules]] |
Текущая версия на 18:18, 15 июля 2021
Основы классификации пакетов
Цель классификации пакетов: исследовать трафик и ассоциировать пакеты с конкретным cos service level (c forwarding class и loss priority). И уже на основании forw class пакет обрабатывается по правилам конкретной очереди (queue).
Т.е.: определение и назначение forwarding class = помещение пакета в нужную очередь.
Ассоциирование трафика происходит по code-point меткам любого типа: DSCP (ip) / EXP (mpls) и другим.
Forwarding class - не возникает извне сети. Но при назначении FW class конкретному типу трафика на начальном узле, может быть опознан и обработай корректно на других узлах сети.
Пакеты определенного класса могут быть перекласифицированы дальше в сети.
Дефолтные классы
На всех роутерах есть уже предустановленные F-classes и queues для них:
- BF (Best effort) = 0 queue - default for PHB - по умолчанию пакеты в этой очереди при заторах - дропаются.
- EF (Expedited forwarding) = 1 - гарантированная полоса, low loss, low delay, low jitter - хорош для voice. Избыточный трафик принимается но при отправке его дальше часть трафика может быть дроппнута, часть переслана в неверном порядке.
- AF (assured forwarding) = 2 - концентрация в основном на packet loss - хорошо для типа трафика, чувствительного к потерям. Избыточный трафик принимается, но к нему применяется: RED drop profile. 4 drop probabilities для этого класса: low, medium-low, medium-high, and high.
- NC (network control) = 3 - low priority. Но в условиях заторов - трафик не дропается, т.к. передает служебную инфу для протоколов.
Можно создавать свои или менять для существующих классов названия, например:
blair> show class-of-service forwarding-class Forwarding class ID Queue Policing priority be 0 0 normal ef 1 1 normal voice 2 2 normal tv-data 3 3 normal
blair# show class-of-service forwarding-classes class be queue-num 0; class ef queue-num 1; class voice queue-num 2; class tv-data queue-num 3;
MX, T, M7i/M10i с CFEB-E: до 16 классов, до 8 очередей.
Назначение очереди происходит по следующим правилам:
- Если классификатор не занес пакет в какой-то класс, то умолчанию ему назначают BE forwardong-class, queue 0.
- Конфигурация CoS по умолчанию основана на номере очереди. Имя класса пересылки, которое появляется при отображении конфигурации по умолчанию - это класс пересылки, связанный в данный момент с этой очередью.
- Конфиг, где в QoS определено больше очередей, чем поддерживает роутер - не сможет быть закоммичен.
Только для BE и NC по дефолту определены и forwarding classes и schedulers. Для EF, AF требуется их (schedulers) настраивать.
Только IP precedence classifiers работают на интерфейсах.
Packet loss priority (PLP)
Определяет вероятность отбрасывания при заторах. Пакет с наибольшим PLP будет отброшен первым.
PLP назначается на ingress, когда используем классификаторы. Однако, PLP также можно назначить и позднее с помощью policer.
PLP может принимать 4 значения: low, medium-low, medium-high, high. По умолчанию JunoOS использует 2: low, high.
Если смотреть на default classifier, можно менять их в конфигурации:
000 - best-effor (low)
001 - best effort (high)
010 - exp-forwarding (low)
011 - exp-forwarding (high)
...
110 - network-control (low)
111 - network-control (high)
lower-priority = high drop eligibility
Виды классификаций
Каждый Ingress interface должен выбрать для себя способ классификации.
Fixed classification (interface based)
Один forwarding class назначается на unit (vlan) и применяется ко всем входящим пакетам.
Классификация очень грубая.
Такую схему хорошо использовать, если нужно особым способом обработать весь трафик клиента на одном интерфейсе.
Или если upstream узел ненадежный и нужно перекрасить весь трафик, приходящий на этот порт (обычно BE в подобных ситуациях).
При использовании такого метода нельзя сделать исключения для какого-то трафика, поэтому такой метод считается не очень "гибким" для использования.
Config
blair# show class-of-service interfaces ge-0/0/0 { unit 60 { forwarding-class voice;}}
MF (multifield) classification
Классификация основана на 1 или более полей в заголовке пакета: port, IP, prefix, mac.
Для выделения нужного трафика по определенным полям используется обычный stateless firewall-filter. (использует не только source/dest ip).
MF лучше применять на ingress (в самом начале попадания пакета в сеть).
Можно использовать MF для переклассификации пакетов, классифицированных ранее BA.
Config (можно писать несколько term, определяя по разным параметрам трафик и запихивая его в разные очереди)
set interfaces ge-0/0/0 unit 80 family inet filter input qos-tv-data
set firewall family inet filter qos-tv-data term 1 from source-address 239.30.30.0/24 set firewall family inet filter qos-tv-data term 1 then forwarding-class tv-data set firewall family inet filter qos-tv-data term 1 then accept set firewall family inet filter qos-tv-data term all-accept then accept
BA (behavior aggregate) classification
BA классификация основана по уже заданному у пакета значении QoS, т.е. пакет уже был ранее классифицирован другим устройством и присвоил конкретную QoS метку. На основании этой метки пакет будет обработан устройством.
Здесь напрямую приводится соответствие: CoS <> Forwarding class + PLP => более эффективный способ по сравнению с MF (не нужно тратить ресурсы на классификацию).
Применяется к unit (vlan).
Обрабатывает все пакеты с одинаковой CoS меткой - одинаково.
Обеспечивает одинаковый приоритет трафика на всей сети.
Хорош для core device.
Может работать по: IPv4 DSCP, IPv6 DSCP, IP precedence bits, MPLS EXP bits (experimental), IEEE 802.1p CoS bits, IEEE 802.1ad drop eligible indicator (DEI).
Все логические интерфейсы по умолчанию используют ipprec-compatibility => если включить MPLS на интерфейсе - он будет использовать exp-default классификатор.
BA классификатор лучше применять внутри сети (не на входе в сеть).
set class-of-service interfaces ge-0/0/0 unit * classifiers dscp dscp-classifier set class-of-service interfaces ge-0/0/0 unit * classifiers exp exp-classifier
set class-of-service classifiers dscp dscp-classifier forwarding-class best-effort loss-priority low code-points be set class-of-service classifiers dscp dscp-classifier forwarding-class vpn loss-priority low code-points vpn-low set class-of-service classifiers dscp dscp-classifier forwarding-class vpn loss-priority high code-points vpn-high set class-of-service classifiers dscp dscp-classifier forwarding-class vpn-priority loss-priority low code-points vpn-priority set class-of-service classifiers dscp dscp-classifier forwarding-class nc loss-priority low code-points nc set class-of-service classifiers exp exp-classifier forwarding-class best-effort loss-priority low code-points be set class-of-service classifiers exp exp-classifier forwarding-class vpn loss-priority low code-points vpn-low set class-of-service classifiers exp exp-classifier forwarding-class vpn loss-priority high code-points vpn-high set class-of-service classifiers exp exp-classifier forwarding-class vpn-priority loss-priority low code-points vpn-priority
set class-of-service code-point-aliases dscp be 000000 set class-of-service code-point-aliases dscp vpn-low 001010 set class-of-service code-point-aliases dscp vpn-high 001100 set class-of-service code-point-aliases dscp vpn-priority 101110 set class-of-service code-point-aliases dscp nc 110000 set class-of-service code-point-aliases exp be 000 set class-of-service code-point-aliases exp vpn-low 010 set class-of-service code-point-aliases exp vpn-high 011 set class-of-service code-point-aliases exp vpn-priority 101
p.s. code-points можно использовать и дефолтные, а можно прописать свои user-friendly. Посмотреть существующие: show class-of-service code-point-aliases
Mixed classification
На интерфейс можно применить как MF, так и BA классификатор.
- Сначала производится классификация по BA, потом по MF.
- При этом если трафик подойдет под оба классификатора, то так как последним будет MF, то и трафик классифицируется по его правилам.
Classifiers
blair> show class-of-service interface Logical interface: ge-0/0/0.100, Index: 72 (IPv4 + MPLS interface) Object Name Type Index Rewrite exp-default exp (mpls-any) 33 Classifier exp-default exp 10 Classifier ipprec-compatibility ip 13 Logical interface: ge-0/0/1.0, Index: 75 (only IPv4 interface) Object Name Type Index Classifier ipprec-compatibility ip 13
Остальные дефолтные классификаторы:
blair> show class-of-service classifier | match Classifier Classifier: dscp-default, Code point type: dscp, Index: 7 Classifier: dscp-ipv6-default, Code point type: dscp-ipv6, Index: 8 Classifier: dscp-ipv6-compatibility, Code point type: dscp-ipv6, Index: 9 Classifier: exp-default, Code point type: exp, Index: 10 Classifier: ieee8021p-default, Code point type: ieee-802.1, Index: 11 Classifier: ipprec-default, Code point type: inet-precedence, Index: 12 Classifier: ipprec-compatibility, Code point type: inet-precedence, Index: 13 Classifier: ieee8021ad-default, Code point type: ieee-802.1ad, Index: 41
Если хотите использовать другой (или несколько других), то в class-of-service interfaces нужно их применить к интерфейсу.
blair# set class-of-service interfaces ge-0/0/0 unit 100 classifiers ? > dscp Differentiated Services code point classifier > dscp-ipv6 Differentiated Services code point classifier IPv6 > exp EXP classifier > ieee-802.1 IEEE-802.1 classifier > ieee-802.1ad IEEE-802.1ad (DEI) classifier > inet-precedence IPv4 precedence classifier
При создании собственных классификаторов, для простоты можно использовать дефолтные классификаторы как шаблон и заменить некоторые правила на свои. (в режиме конфигурации классификатора: import <default classifier>)
[edit class-of-service] classifiers { dscp voice { import default; forwarding-class assured-forwarding { loss-priority high code-points 001000; }}} [edit class-of-service interfaces ge-0/0/0] unit 100 { classifiers { dscp voice;}}