QoS Junos: esempio di configurazione in un router T-series (code-point, classes queue, drop-profile)
05.03 2024 | by massimilianoIl backbone QoS è un dominio di tipo DIFFSERV (Differentiated Services), poiché assegna differenti servizi di qualità ad opportuni classi […]
Il 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
T1600 router Junos configuration
set class-of-service classifiers exp LAB_exp forwarding-class be loss-priority low code-points 000
set class-of-service classifiers exp LAB_exp forwarding-class basic loss-priority low code-points 010
set class-of-service classifiers exp LAB_exp forwarding-class plus loss-priority low code-points 011
set class-of-service classifiers exp LAB_exp forwarding-class premium loss-priority low code-points 101
!
set class-of-service forwarding-classes queue 0 be
set class-of-service forwarding-classes queue 1 basic
set class-of-service forwarding-classes queue 2 plus
set class-of-service forwarding-classes queue 3 premium
!
I codici di code-point assegnati fanno riferimento alla seguente tabella di type of service e class-selector:

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:

T1600 router Junos configuration
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 Basic interpolate fill-level 60
set class-of-service drop-profiles Basic interpolate fill-level 100
set class-of-service drop-profiles Basic interpolate drop-probability 0
set class-of-service drop-profiles Basic interpolate drop-probability 100
set class-of-service drop-profiles Plus interpolate fill-level 80
set class-of-service drop-profiles Plus interpolate fill-level 100
set class-of-service drop-profiles Plus interpolate drop-probability 0
set class-of-service drop-profiles Plus interpolate drop-probability 100
Si riporta un esempio di architettura QoS Juniper per classifier, buffer management e scheduling:

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
T1600 router Junos configuration
set class-of-service scheduler-maps LAB_sched_map forwarding-class be scheduler be_scheduler
set class-of-service scheduler-maps LAB_sched_map forwarding-class basic scheduler basic_scheduler
set class-of-service scheduler-maps LAB_sched_map forwarding-class plus scheduler plus_scheduler
set class-of-service scheduler-maps LAB_sched_map forwarding-class premium scheduler premium_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 basic_scheduler transmit-rate percent 30
set class-of-service schedulers basic_scheduler buffer-size percent 25
set class-of-service schedulers basic_scheduler priority low
set class-of-service schedulers basic_scheduler drop-profile-map loss-priority any protocol any drop-profile Basic
!
set class-of-service schedulers plus_scheduler transmit-rate percent 50
set class-of-service schedulers plus_scheduler buffer-size percent 25
set class-of-service schedulers plus_scheduler priority medium-low
set class-of-service schedulers plus_scheduler drop-profile-map loss-priority any protocol any drop-profile Plus
!
set class-of-service schedulers premium_scheduler buffer-size percent 5
set class-of-service schedulers premium_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 logiche:
set class-of-service rewrite-rules exp LAB_exp_rewrite forwarding-class basic loss-priority low code-point 010
set class-of-service rewrite-rules exp LAB_exp_rewrite forwarding-class basic loss-priority high code-point 010
!
set class-of-service rewrite-rules exp LAB_exp_rewrite forwarding-class be loss-priority high code-point 000
set class-of-service rewrite-rules exp LAB_exp_rewrite forwarding-class be loss-priority low code-point 000
!
set class-of-service rewrite-rules exp LAB_exp_rewrite forwarding-class premium loss-priority low code-point 101
set class-of-service rewrite-rules exp LAB_exp_rewrite forwarding-class premium loss-priority high code-point 101
!
set class-of-service rewrite-rules exp LAB_exp_rewrite forwarding-class plus loss-priority high code-point 011
set class-of-service rewrite-rules exp LAB_exp_rewrite forwarding-class plus loss-priority low code-point 011
Applicazione scheduler sotto interface:
set class-of-service interfaces ge-0/0/0 scheduler-map LAB_sched_map
set class-of-service interfaces ge-0/0/0 unit 0 classifiers exp LAB_exp
set class-of-service interfaces ge-0/0/0 unit 0 rewrite-rules exp LAB_exp_rewrite