La qualité de service (QDS) ou quality of service (QoS) est la capacité à véhiculer dans de bonnes conditions un type de trafic donné, en termes de disponibilité, débit, délais de transmission, gigue, taux de perte de paquets, etc.
La qualité de service est un concept de gestion qui a pour but d’optimiser les ressources d'un réseau (en management du système d'information) ou d'un processus (en logistique) et de garantir de bonnes performances aux applications critiques pour l'organisation. La qualité de service permet d’offrir aux utilisateurs des débits et des temps de réponse différenciés par applications (ou activités) suivant les protocoles mis en œuvre au niveau de la structure.
(source Wikipedia)
Prennons le réseau suivant
Le routeur représente un "goulot d'étranglement" pour les flux qui se dirigent vers la partie "droite" du réseau (dont le serveur FTP)
L'objectif ici va être d'augmenter la priorité du flux venant de H1 (afin de laisser passer le traffic venant de G1 & G2 avant lui) et de baisser la priorité pour le traffic allant vers le serveur FTP afin d'éviter d'encombrer le réseau (afin d'avoir les requêtes qui lui sont transmises envoyé en priorité).
Nous allons implémenter de la QoS afin de prioriser les différents flux.
Sur le routeur nous allons déclarer une classe "prio-on-int" pour la priorité sur les interfaces.
On y ajoutera uniquement le flux venant de l'interface fa1/0 et une clause "match-all" pour lui dire de récupérer TOUS les paquets venant de cette interface.
Pour cela effectuez les commandes suivantes sur le routeur :
Router>en
Router# conf t
Router(config)#class-map match-all prio-on-int
Router(config-cmap)#match input-interface fa1/0
Pour vérifer la configuration faites la commande suivante :
Router#show class-map
Notre interface est alors bien créé :
Class Map match-any class-default (id 0)
Match any
Class Map match-all prio-on-int (id 1)
Match input-interface FastEthernet1/0
Pour déclarer la politique QoS effectuez les commandes suivantes :
Router(config)#policy-map my-policy
Router(config-pmap)#class prio-on-int
Router(config-pmap-c)#set ip dscp cs7
Ici on va définir une politique appelée "my-policy" cette politique englobe la classe "prio-on-int" créé plus tôt et cette classe aura comme paramètre une priorité sur le champ dscp de niveau "cs7" donc le niveau le plus bas de priorité.
Ainsi tout ce qui est au dessus de ce niveau (ex : 6,5,4,3, etc..) passeront avant le traffic venant de l'interface fa1/0
Avant d'appliquer ma politique, vérifions ensemble un petit détail.
En regardant la configuration de l'interface que je vais vouloir changer a savoir l'interface allant vers la droite (fa0/1). Je vais pouvoir voir la politique actuellement en place :
Router#show interfaces fa0/1
Actuellement on peut voir que ma "Queueing strategy" est "FIFO" (ce qui signifie premier arrivé premier servi)
FastEthernet0/1 is up, line protocol is up (connected)
Hardware is Lance, address is 0090.0cc1.6002 (bia 0090.0cc1.6002)
Internet address is 172.20.0.254/16
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Full-duplex, 100Mb/s, media type is RJ45
ARP type: ARPA, ARP Timeout 04:00:00,
Last input 00:00:08, output 00:00:05, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0 (size/max/drops); Total output drops: 0
Queueing strategy: fifo
Output queue :0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
0 packets input, 0 bytes, 0 no buffer
Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
0 input packets with dribble condition detected
0 packets output, 0 bytes, 0 underruns
0 output errors, 0 collisions, 1 interface resets
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier
0 output buffer failures, 0 output buffers swapped out
Pour changer cela, on se rend d'abord sur l'interface en question, ici je veux gérer le traffic sur l'interface allant vers la droite (donc fa0/1)
Router(config)#int fa0/1
Je vais ensuite appliquer ma politique créé précédemment appelée "my-policy":
Router(config-if)#service-policy output my-policy
Ainsi je précise que je souhaites appliquer ma politique au moment de SORTIR de l'interface fa0/1
Quand je vais vérifier la configuration a présent je suis passé en mode "Class-based queueing" et non plus "FIFO"
Router#show interfaces fa0/1
FastEthernet0/1 is up, line protocol is up (connected)
Hardware is Lance, address is 0090.0cc1.6002 (bia 0090.0cc1.6002)
Internet address is 172.20.0.254/16
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
reliability 255/255, txload 1/255, rxload 1/255
Encapsulation ARPA, loopback not set
Full-duplex, 100Mb/s, media type is RJ45
ARP type: ARPA, ARP Timeout 04:00:00,
Last input 00:00:08, output 00:00:05, output hang never
Last clearing of "show interface" counters never
Input queue: 0/75/0 (size/max/drops); Total output drops: 0
Queueing strategy: Class-based queueing
Output queue :0/40 (size/max)
5 minute input rate 0 bits/sec, 0 packets/sec
5 minute output rate 0 bits/sec, 0 packets/sec
0 packets input, 0 bytes, 0 no buffer
Received 0 broadcasts, 0 runts, 0 giants, 0 throttles
0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored, 0 abort
0 input packets with dribble condition detected
0 packets output, 0 bytes, 0 underruns
0 output errors, 0 collisions, 1 interface resets
0 babbles, 0 late collision, 0 deferred
0 lost carrier, 0 no carrier
0 output buffer failures, 0 output buffers swapped out
Maintenant en observant le traffic, si j'envoie un ping entre le PC H1 et un pc à droite, avant d'arriver sur l'interface fa0/1 le DSCP est à 0
Une fois qu'il sort par l'interface fa0/1 il passe à 7 (ou en hex 0x38 et en binaire 111000)
Nous allons créer une classe comme précédemment :
Router (config)#class-map match-all prio-on-ftp
Router (config-cmap)#match protocol ftp
Petit changement, cette fois-ci la classe s'appelle "prio-on-ftp" et possède un paramètre "match" pour un "protocol", ici forcément FTP.
En vérifiant, la classe est bien créé
Router#sh class-map
Class Map match-any class-default (id 0)
Match any
Class Map match-all prio-on-int (id 1)
Match input-interface FastEthernet1/0
Class Map match-all prio-on-ftp (id 2)
Match protocol ftp
Nous allons ensuite modifier notre politique "my-policy" en lui ajoutant la classe prio-on-ftp avec une autre priorité.
Router (config)#policy-map my-policy
Router (config-pmap)#class prio-on-ftp
Router (config-pmap-c)#set ip dscp cs1
Ainsi le traffic FTP sera placé automatiquement en priorité 1 (la plus basse et donc la plus prioritaire) a partir du moment où elle rencontre le routeur (et ce peu importe l'interface)
Si vous vérifiez une requête FTP depuis par exemple le PC G1 voilà le résultat :
Quand elle arrive du switch elle est en DSCP 0
Quand elle arrive SUR le routeur pour être traité puis ressortie (peu importe l'interface) la valeur DSCP est changé en 1 (ou en hex 0x08 ou en binaire 1000)
Clause | Description |
---|---|
access-group | Flux correspondant à un ACL (depuis un réseau, une IP, vers un port applicatif, etc.) |
any | Tous les paquets |
class-map | Flux appartenant déjà à une certaine autre classe |
cos | Flux doté d'un certain champ COS IEEE 802.1Q |
destinationaddress | Flux avec une certaine adresse MAC de destination |
input-interface | Flux entré par une certaine interface |
ip | Flux doté d'une certaine adresse IP |
precedence | Flux doté d'une certaine précédence (champ sur 3 bits) en IPV4 et IPV6 |
protocol | Flux correspondant à un protocole donné |
qos-group | Flux appartenant à un certain groupe de QoS (de 0 à 1023) |