qos esempi di applicazione in un router juniper e cisco asr9k all'interno di un backbone mpls

 

Un backbone QoS è un dominio di tipo DIFFSERV (Differentiated Services), poiché assegna differenti servizi di qualità ad opportuni classi di traffico con un set di classi di servizio con corrispondenti regole di forwarding su base:

 

EF (Expedited Forwarding): fornisce QoS ad applicazioni che richiedono un basso ritardo (low delay) di comunicazione ed un basso valore di jitter (il valore di tempo variabile dei pacchetti in arrivo a destinazione);

 

AF (Assured Forwarding): fornisce QoS su base PHB (Per-Hop Behaviour) con quattro differenti classi e tre valori di scarto tra cui:

 

  • low drop precedence
  • medium drop precedence
  • high drop precedence

 

All’interno delle classi in ogni nodo della rete backbone, vengono allocate una certa quantità di risorse (buffer and bandwidth) associate a differenti livelli di drop profile (scarto).

In caso di congestione il livello di drop precedence è rilevato dalla importanza del valore associato; pertanto il low drop precedence assume più importanza rispetto al medium eppoi infine al high.

 

La gerarchia QoS seguita è la seguente:

  • classificazione dei pacchetti IP sulla base del valore DSCP assegnato alle differenti code (buffer) di forwarding (in cisco vengono definite come class-map);
  • scheduling dei pacchetti: un meccanismo di priorità delle code definisce come servire il traffico con più alta priorità, rispetto a quello di media priorità ed infine quello best-effort; un meccanismo WRR (Weighted Round Robin), rilascia le code sul valore di bandwidth assegnato (in cisco sono definite attraverso policy-map);
  • applicazione delle policy-map alle interfacce.

 

esempio di configurazione JUNOS

 

set class-of-service classifiers exp QOS_EXP forwarding-class be loss-priority low code-points 000

set class-of-service classifiers exp QOS_EXP forwarding-class copper loss-priority low code-points 010

set class-of-service classifiers exp QOS_EXP forwarding-class silver loss-priority low code-points 011

set class-of-service classifiers exp QOS_EXP forwarding-class gold loss-priority low code-points 101

!

set class-of-service forwarding-classes queue 0 be

set class-of-service forwarding-classes queue 1 copper

set class-of-service forwarding-classes queue 2 silver

set class-of-service forwarding-classes queue 3 gold

!

 

I codici di code-point assegnati fanno riferimento alla seguente tabella di type of service e class-selector:

 

 

qos table 1

 

Il controllo della congestione è definito attraverso drop-profile configurando delle soglie (fill-level) e probabilità di scarto (drop-probabilities) nella modalità interpolated abilitando il software a generare automaticamente sino a 64 data points partendo dal punto iniziale di percentuale 0% sino al punto finale del 100%

 

Si riporta una tabella di riferimento per class priority e drop probability:

 

 qos table 2

 

 

set class-of-service drop-profiles be interpolate fill-level 40

set class-of-service drop-profiles be interpolate fill-level 100

set class-of-service drop-profiles be interpolate drop-probability 0

set class-of-service drop-profiles be interpolate drop-probability 100

set class-of-service drop-profiles copper interpolate fill-level 60

set class-of-service drop-profiles copper interpolate fill-level 100

set class-of-service drop-profiles copper interpolate drop-probability 0

set class-of-service drop-profiles copper interpolate drop-probability 100

set class-of-service drop-profiles silver interpolate fill-level 80

set class-of-service drop-profiles silver interpolate fill-level 100

set class-of-service drop-profiles silver interpolate drop-probability 0

set class-of-service drop-profiles silver interpolate drop-probability 100

 

Si riporta un esempio di architettura QoS Juniper per classifier, buffer management e scheduling:

 

qos junos example 1

 

 

La classificazione aggrega flussi di traffico all’interno di forwarding-class associandola  ad una determinata coda.

 

Le code sono motivo di packet-loss e delay e pertanto un meccanismo di priorità delle code (policy queue) definisce come servire prima il traffico con più alta priorità (high) rispetto a quello  definito a bassa priorità (low) ed il restante traffico trattato come best-effort.

 

Lo scheduler definisce parametri quali transmission-rate, buffer-size e priority assegnate infine alle interfacce.

 

Le tecniche di scheduling dei pacchetti sono:

 

FIFO (First In First Out): il primo pacchetto che entra nel router è quello rilasciato (forward) prima;

 

PS (Priority Scheduling): le code sono assegnate a differenti valori di priorità e le code definite high sono servite prima di quelle definite low;

 

WRR (Weighted Round Robin): alle code sono assegnate valori su base bandwidth percui se ad una coda viene assegnato un 40% della banda disponibile ed ad un'altra coda un 60% di banda disponibile, allora la seconda coda viene servita in un rapporto di 6/4 volte maggiore rispetto alla prima coda.

 

 

Il buffer management (memorizzazione) ha differenti modi di gestione: 

  • Push Out: i pacchetti associati alla priorità high possono eliminare quello a priorità low;
  • Threshold: verranno scartati i pacchetti a bassa priorità (low) se il contenuto del buffer avrà raggiunto e superato una certa soglia

 

set class-of-service scheduler-maps QOS_sched_map forwarding-class be scheduler be_scheduler

set class-of-service scheduler-maps QOS_sched_map forwarding-class copper scheduler copper_scheduler

set class-of-service scheduler-maps QOS_sched_map forwarding-class silver scheduler silver_scheduler

set class-of-service scheduler-maps QOS_sched_map forwarding-class gold scheduler gold_scheduler

!

set class-of-service schedulers be_scheduler transmit-rate remainder

set class-of-service schedulers be_scheduler buffer-size percent 45

set class-of-service schedulers be_scheduler priority low

set class-of-service schedulers be_scheduler drop-profile-map loss-priority any protocol any drop-profile be

!

set class-of-service schedulers copper_scheduler transmit-rate percent 30

set class-of-service schedulers copper_scheduler buffer-size percent 25

set class-of-service schedulers copper_scheduler priority low

set class-of-service schedulers copper_scheduler drop-profile-map loss-priority any protocol any drop-profile copper

!

set class-of-service schedulers silver_scheduler transmit-rate percent 50

set class-of-service schedulers silver_scheduler buffer-size percent 25

set class-of-service schedulers silver_scheduler priority medium-low

set class-of-service schedulers silver_scheduler drop-profile-map loss-priority any protocol any drop-profile silver

!

set class-of-service schedulers gold_scheduler buffer-size percent 5

set class-of-service schedulers gold_scheduler priority strict-high

 

 

Con il comando EXP rewrite si marca il valore di CoS in direzione outbound per un pacchetto MPLS-EXP abilitato su interfacce:

 

set class-of-service rewrite-rules exp QOS_exp_rewrite forwarding-class copper loss-priority low code-point 010

set class-of-service rewrite-rules exp QOS_exp_rewrite forwarding-class copper loss-priority high code-point 010

!

set class-of-service rewrite-rules exp QOS_exp_rewrite forwarding-class be loss-priority high code-point 000

set class-of-service rewrite-rules exp QOS_exp_rewrite forwarding-class be loss-priority low code-point 000

!

set class-of-service rewrite-rules exp QOS_exp_rewrite forwarding-class gold loss-priority low code-point 101

set class-of-service rewrite-rules exp QOS_exp_rewrite forwarding-class gold loss-priority high code-point 101

!

set class-of-service rewrite-rules exp QOS_exp_rewrite forwarding-class silver loss-priority high code-point 011

set class-of-service rewrite-rules exp QOS_exp_rewrite forwarding-class silver loss-priority low code-point 011

 

 

Applicazione scheduler sotto interface:

 

set class-of-service interfaces <interface> scheduler-map QOS_sched_map

set class-of-service interfaces <interface> unit 0 classifiers exp QOS_exp

set class-of-service interfaces <interface> unit 0 rewrite-rules exp QOS_exp_rewrite

 

 

 

  

ESEMPIO DI CONGIGURAZIONE QOS PER UN ROUTER ASR9K CISCO:

 

La classificazione del traffico è gestita via class-map alle quali si possono usare diverse condizioni (match); il traffico (pacchetti) che non rientra nei criteri di nessuna classe sono implicitamente assegnati alla classe di default che è referenziata come class-default.

 

Per garantire uniformità QoS per tutto il path MPLS end-to-end deve essere configurato in modo corretto ed assegnare la medesima qualità del servizio attraverso algoritmi di scheduling.

 

NOTA:

match-any si comporta come un operatore booleano OR

match-all si comporta come un operatore booleano AND

 

La logica di implementazione QOS su un router ASR9K è indicata dalla figura seguente:

 

 

qos asr9k10

 

Pertanto:

 

CLASS_MAP INPUT POLICY

 

class-map match-any TRUST

match dscp CS7

match mpls experimental topmost 7

end-class-map

!

class-map match-any VOICE

match dscp EF

match mpls experimental topmost 5

end-class-map

!

class-map match-any VIDEO-MULTIMEDIA

match dscp CS4

match mpls experimental topmost 4

end-class-map

!

class-map match-any SIGNALING

match dscp CS3

match mpls experimental topmost 3

end-class-map

!

class-map match-any MANAGEMENT

match dcsp 50 CS6

match mpls experimental topmost 6

end-class-map

!

class-map match-any DATA

match dscp AF21

match mpls experimental topmost 2

end-class-map

!

class-map match-any SURVEILLANCE

match dscp AF11

match mpls experimental topmost 1

end-class-map

!

 

La classificazione è poi codificata all'interno della marcatura (colorazione dei pacchetti) basandosi su valori di IP-Prec, DSCP oppure EXP, configurate all’interno di policy-map che referenzia la class-map:

 

POLICY_MAP INPUT POLICY

 

policy-map QOS-INGRESS

class TRUST

set qos-group 7

priority level 1

!

class VOICE

set qos-group 5

priority level 2

!

class VIDEO-MULTIMEDIA

set qos-group 4

!

class SIGNALING

set qos-group 3

!

class MANAGEMENT

set qos-group 6

!

Class DATA

set qos-group 2

!

class SURVEILLANCE

set qos-group 1

!

 

Stessa considerazione fatta sopra per le policy Output

 

CLASS_MAP OUTPUT POLICY

 

class-map match-all TRUST-OUT

match qos-group 7

!

class-map match-all VOICE-OUT

match qos-group 5

!

class-map match-all VIDEO-MULTIMEDIA-OUT

match qos-group 4

!

class-map match-all SIGNALING-OUT

match qos-group 3

!

class-map match-all MANAGEMENT-OUT

match qos-group 6

!

class-map match-all DATA-OUT

match qos-group 2

!

!

class-map match-all SURVEILLANCE-OUT

match qos-group 1

!

 

 

POLICY-MAP OUTPUT POLICY

 

policy-map QOS-OUT

class TRUST-OUT

priority level 1

police rate percent 30

!

class VOICE-OUT

priority level 2

police rate percent 10

!

class VIDEO-MULTIMEDIA-OUT

bandwidth remaining percent 20

!

class SIGNALING-OUT

bandwidth remaining percent 5

!

class MANAGEMENT-OUT

bandwidth remaining percent 15

!

class DATA-OUT

bandwidth remaining percent 25

!

class SURVEILLANCE-OUT

bandwidth remaining percent 10

!

class class-default

bandwidth remaining percent 25

!

 

L’applicazione della policy-map è configurata su base interfaccia con questa logica:

 

La input policy-map che referenzia le input class-map con il matching di valori DSCP ed EXP setta dei valori di qos group e priority level.

 

Queste qos group poi sono associate a delle output class-map referenziate da output policy-map le quali a loro volta settano dei valori di rate, bandwidth e priority.

 

ASR9910 CISCO:

 

interface <interface-toward-backbone>

service-policy input QOS-INGRESS

service policy output QOS-OUT