Глава 2. Packet classification: различия между версиями

Материал из Juniper Exam Wiki
Перейти к навигации Перейти к поиску
(Новая страница: «'''Цель классификации пакетов''': исследовать трафик, разделить трафик по разным классам и…»)
 
м
 
(не показана 41 промежуточная версия этого же участника)
Строка 1: Строка 1:
'''Цель классификации пакетов''': исследовать трафик, разделить трафик по разным классам и разместить его в разные очереди. Далее назначить forwardin class и packet loss priority.
{{#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).


Т.е.: assign to forwarding class = placing packet into queue
Т.е.: определение и назначение forwarding class = помещение пакета в нужную очередь.


==4 дефолтных класса: ==
Ассоциирование трафика происходит по code-point меткам любого типа: DSCP (ip) / EXP (mpls) и другим.
- BF (Best effort) = 0 queue


- EF (Expedited forwarding) = 1
'''Forwarding class''' - не возникает извне сети. Но при назначении FW class конкретному типу трафика на начальном узле, может быть опознан и обработай корректно на других узлах сети.


- AF (assured forwarding) = 2
Пакеты определенного класса могут быть перекласифицированы дальше в сети.
==Дефолтные классы==
На всех роутерах есть уже предустановленные 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. Но в условиях заторов - трафик не дропается, т.к. передает служебную инфу для протоколов.


- NC (network control) = 3
Можно создавать свои или менять для существующих классов названия, например:
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


  ''show class-of-service''
  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)==
==Packet loss priority (PLP)==
Строка 22: Строка 50:
PLP может принимать 4 значения: low, medium-low, medium-high, high. По умолчанию JunoOS использует 2: low, high.
PLP может принимать 4 значения: low, medium-low, medium-high, high. По умолчанию JunoOS использует 2: low, high.


Если смотреть на default classifier:
Если смотреть на default classifier, можно менять их в конфигурации:
 
000 - best-effor (low)
000 - best-effor (low)


Строка 39: Строка 68:
lower-priority = high drop eligibility
lower-priority = high drop eligibility


== Fixed classification ==
=Виды классификаций=
Каждый Ingress interface должен выбрать для себя способ классификации.


1 forwarding class назначется на unit (vlan) и применяется ко всем входящим пакетам.
== 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 ==
== MF (multifield) classification ==
Строка 49: Строка 92:
Классификация основана на 1 или более полей в заголовке пакета: port, IP, prefix, mac.
Классификация основана на 1 или более полей в заголовке пакета: port, IP, prefix, mac.
   
   
Для выделения нужного трафика по определенным полям используется обычный firewall-filter.
Для выделения нужного трафика по определенным полям используется обычный '''stateless''' firewall-filter. (использует не только source/dest ip).


MF лучше применять на ingress (в самом начале попадания пакета в сеть).
MF лучше применять на ingress (в самом начале попадания пакета в сеть).


== BA classification ==
Можно использовать MF для переклассификации пакетов, классифицированных ранее BA.


:-BA классификация основана на уже созданных у пакета значении QoS, т.е. пакет уже был ранее классифицирован другим устройством и присвоил конкретную QoS метку.
Config (можно писать несколько term, определяя по разным параметрам трафик и запихивая его в разные очереди)
set interfaces ge-0/0/0 unit 80 family inet filter input qos-tv-data


:-Здесь напрямую приводится соответствие: CoS <> Forwarding class + PLP => более эффективный способ по сравнению с MF (не нужно тратить ресурсы на классификацию).
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'''


:-Применяется к unit (vlan).
== BA (behavior aggregate) classification ==
BA классификация основана по уже заданному у пакета значении QoS, т.е. пакет уже был ранее классифицирован другим устройством и присвоил конкретную QoS метку. На основании этой метки пакет будет обработан устройством.


:-Обрабатывает все пакеты с одинаковой CoS меткой - одинаково.
Здесь напрямую приводится соответствие: CoS <> Forwarding class + PLP => более эффективный способ по сравнению с MF (не нужно тратить ресурсы на классификацию).


:-Обеспечивает одинаковый приоритет трафика на всей сети.
Применяется к unit (vlan).


:-Хорош для core device.
Обрабатывает все пакеты с одинаковой CoS меткой - одинаково.


Can match against: IPv4 DSCP, IPv6 DSCP, IP precedence bits, MPLS EXP bits, IEEE 802.1p CoS bits, IEEE 802.1ad drop eligible indicator (DEI).
Обеспечивает одинаковый приоритет трафика на всей сети.


All logical interfaces use ipprec-compatibility by default, if you enable mlps on int, it will use exp-default.
Хорош для core device.


If you want your interface uses another classifier, you should apply it on the int (можно и несколько) in ''class-of-service interfaces'' stanza.
Может работать по: 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


You can use default classifiers as a template for your own classifier by ''import''. The rules from default will rewrite.
Остальные дефолтные классификаторы:
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


Apply BA classification within the network.
Если хотите использовать другой (или несколько других), то в ''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


'''BA class performs first, but if traffic match both of class, MF overrides BA'''.
При создании собственных классификаторов, для простоты можно использовать дефолтные классификаторы как шаблон и заменить некоторые правила на свои. (в режиме конфигурации классификатора: 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;}}
=Дополнительная информация=
*[[Глава 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;}}

Дополнительная информация