🚦 QoS (Quality of Service) – Priorisation, Queuing & Policing
Guide complet IDEO-Lab sur la gestion de la congestion réseau et la priorisation du trafic.
Qu'est-ce que la QoS ?
Quality of Service. Gestion de la congestion réseau.
QoS CongestionLe Problème (Métriques)
Latence, Gigue (Jitter), Perte (Loss), Bande Passante.
Latence Jitter PerteStratégie (CMMP)
Classifier -> Marquer -> Manager (Queuing/Policing).
Classification MarquageModèle 1 : Best-Effort
Pas de QoS (défaut). File FIFO. (Internet "normal").
Best-Effort FIFOModèle 2 : IntServ (Legacy)
Integrated Services. Réservation (RSVP). Non-scalable.
IntServ RSVP LegacyModèle 3 : DiffServ (Moderne)
Differentiated Services. Marquage (DSCP). Scalable.
DiffServ DSCPClassification
Identifier le trafic (ACLs, NBAR / L7).
Classification ACL NBARMarquage : CoS vs DSCP
Couche 2 (802.1p) vs. Couche 3 (IP Precedence / DSCP).
CoS (L2) DSCP (L3)Détail : DSCP & PHB
EF (Voix), AF (Data prioritaire), CS (Contrôle), BE (Défaut).
DSCP PHB EFQueuing : FIFO
First-In, First-Out. File d'attente "simple" (Best-Effort).
FIFO QueuingQueuing : WFQ & CBWFQ
Weighted Fair Queuing. Garantie de bande passante.
WFQ CBWFQQueuing : LLQ (Priorité)
Low Latency Queuing. File prioritaire (VoIP).
LLQ Priority QueueÉvitement : Tail Drop vs WRED
Rejet (Queue pleine) vs. Rejet Aléatoire (TCP Sync).
Tail Drop WREDConditioning : Policing
Token Bucket. Respect du débit (Drop / Re-mark).
Policing Token BucketConditioning : Shaping
Mise en tampon (Buffer) pour lisser le débit (Jitter).
Shaping BufferingCas d'Usage : VoIP
EF (DSCP), LLQ (Queuing). Sensible Latence/Jitter.
VoIP EF LLQCas d'Usage : Wi-Fi (WMM)
802.11e. (AC_VO, AC_VI, AC_BE, AC_BK).
WMM 802.11eCas d'Usage : MPLS
Mappage DSCP (L3) vers EXP (L2.5).
MPLS EXPOutils : Cisco MQC
Modular QoS CLI (class-map, policy-map, service-policy).
MQC Cisco CLICheat-sheet : DSCP
Valeurs EF, AF (11-33), CS.
DSCP PHBCheat-sheet : Pol/Shp
Policing (Drop) vs Shaping (Buffer).
Policing ShapingLa Gestion de la Priorité
La Qualité de Service (QoS) n'est pas un protocole unique, mais un ensemble de stratégies et de techniques réseau dont l'objectif est de gérer la congestion et de garantir un certain niveau de performance (bande passante, latence, gigue) pour des applications spécifiques.
Analogie : Un réseau sans QoS est une autoroute à une voie (Best-Effort). Un réseau avec QoS est une autoroute à 4 voies : 1 voie pour les ambulances (VoIP), 1 voie pour les VIP (Business App), 1 voie pour le trafic normal (Web), et 1 voie pour le trafic non-prioritaire (Email, Backups).
Le Problème : La Congestion
La QoS n'augmente pas la bande passante totale (elle ne crée pas de nouvelles routes), mais elle gère intelligemment la rareté de cette bande passante.
La congestion se produit lorsqu'un nœud réseau (ex: un routeur) reçoit plus de trafic qu'il ne peut en traiter ou en transmettre (goulot d'étranglement).
[ 1 Gbps LAN ] [ 100 Mbps WAN (FAI) ] [ 1 Gbps LAN ] ──► [ ROUTEUR ] ──► [ Goulot d'étranglement ] ──► [Internet] [ 1 Gbps LAN ]
Sans QoS, lorsque le lien WAN à 100 Mbps est saturé, le routeur traite les paquets en FIFO (First-In, First-Out). Un paquet VoIP (sensible) attendra derrière un gros téléchargement (non sensible).
La QoS vise à gérer ces 4 caractéristiques du réseau :
| Métrique | Description | Impact (Exemple : VoIP) |
|---|---|---|
| Bande Passante (Bandwidth) | La capacité (débit) du lien (ex: 100 Mbps). | Pas assez : La voix est coupée (clipping). |
| Latence (Latency / Delay) | Le temps (ms) pour qu'un paquet aille de A à B. | Élevée : Décalage, on se parle dessus (> 150ms). |
| Gigue (Jitter) | La variation de la latence (ex: Paquet 1=10ms, P2=50ms, P3=20ms). | Élevée : La voix est "robotique" (les paquets arrivent dans le désordre). |
| Perte (Loss) | Le pourcentage de paquets qui n'arrivent jamais (ex: rejetés par congestion). | Élevée : Mots ou syllabes manquants. |
La mise en œuvre de la QoS (particulièrement le modèle DiffServ) suit un processus en 3 ou 4 étapes :
Étape 1 : CLASSIFICATION (Identifier le trafic) │ │ Ex: "Ce paquet est de la VoIP (UDP 5060)" │ ▼ Étape 2 : MARQUAGE (Marking) (Appliquer une "étiquette" de priorité) │ │ Ex: "Marquer ce paquet comme EF (Priorité Haute)" │ ▼ Étape 3 : GESTION DE FILE (Queuing) (Gérer la congestion basée sur le marquage) │ │ Ex: "Placer ce paquet EF dans la file prioritaire (LLQ)" │ ▼ Étape 4 (Optionnelle) : CONDITIONNEMENT (Policing/Shaping) (Forcer le respect des limites de débit) │ │ Ex: "Laisser passer 10 Mbps de VoIP, │ dropper/buffer le reste."
Le modèle Best-Effort est le modèle par défaut d'Internet. C'est l'absence de QoS.
- Le réseau "fait de son mieux" (best effort) pour livrer les paquets.
- Il n'y a aucune garantie de livraison, de latence, ou de gigue.
- Tous les paquets sont traités de la même manière (importance égale).
- La file d'attente (Queue) est FIFO (First-In, First-Out).
Ce modèle est parfait pour le trafic qui tolère le délai (Email, FTP, navigation web), mais inadapté au temps réel (VoIP).
IntServ (Services Intégrés) est un modèle de QoS "Hard QoS" (garantie absolue).
Analogie : C'est comme réserver une voie d'autoroute entière pour votre ambulance, à l'avance.
Protocole : RSVP (Resource Reservation Protocol)
Avec IntServ, l'application (ex: un téléphone VoIP) doit demander (réserver) explicitement la bande passante dont elle a besoin à tous les routeurs sur le chemin.
1. [App VoIP] -> (RSVP) -> [R1, R2, R3] : "J'ai besoin de 128 Kbps en priorité." 2. [R1, R2, R3] (vérifient s'ils ont la capacité) -> [App VoIP] : "OK, 128 Kbps réservés pour vous."
Inconvénient (Non-Scalabilité)
Ce modèle a échoué car il n'est pas scalable. Chaque routeur doit maintenir un état (state) pour chaque flux individuel (chaque appel téléphonique). Sur Internet (des millions de flux), c'est impossible.
DiffServ (Services Différenciés) est le modèle de QoS moderne et scalable. C'est un modèle "Soft QoS" (basé sur la confiance et la priorisation, pas la réservation).
Analogie : C'est le système de "voies réservées" (Ambulance, Bus, Covoiturage). Le trafic est "marqué" à l'entrée, et les routeurs sur le chemin "font confiance" à ce marquage.
Fonctionnement (PHB)
DiffServ est "stateless" (pour le routeur). Les routeurs ne suivent pas les flux, ils regardent juste l'étiquette (le marquage) de chaque paquet.
- Le marquage (étiquette) est le champ DSCP (Differentiated Services Code Point) dans l'en-tête IP (voir 3.3).
- Chaque routeur applique un PHB (Per-Hop Behavior) (un comportement) basé sur la valeur DSCP (ex: "DSCP 46 (EF) ? -> Mettre dans la file prioritaire").
La Classification est le processus d'identification du trafic, généralement effectué par le premier routeur/switch (le "Trust Boundary") à l'entrée du réseau.
Classification L3/L4 (ACL)
La méthode la plus courante. On utilise des ACLs (Access Control Lists) pour identifier le trafic basé sur le 5-Tuple (IPs/Ports).
(Exemple Cisco MQC) ! On crée une "class-map" pour matcher le trafic ! Classifie la VoIP (SIP/RTP) class-map match-any VOIP_TRAFFIC match protocol rtp match protocol sip ! Classifie le trafic Web class-map match-any WEB_TRAFFIC match protocol tcp port 80 match protocol tcp port 443
Classification L7 (NBAR)
Problème : Beaucoup d'applications (ex: BitTorrent, Skype) utilisent des ports aléatoires (ou le 443) pour échapper au filtrage L4.
Solution : NBAR (Network Based Application Recognition) (Cisco) ou DPI (Deep Packet Inspection).
Le routeur inspecte le payload (L7) du paquet pour identifier l'application par sa signature.
(Exemple Cisco MQC) class-map match-any SKYPE_TRAFFIC match protocol skype class-map match-any BITTORRENT_TRAFFIC match protocol bittorrent
Une fois le trafic classifié, on doit le "marquer" (l'étiqueter). On le fait à la Couche 2 (CoS) ou à la Couche 3 (DSCP).
| Critère | CoS (Class of Service) | DSCP (Differentiated Services Code Point) |
|---|---|---|
| Couche OSI | Couche 2 (Liaison) | Couche 3 (Réseau) |
| Où ? | Dans le Tag 802.1Q (VLAN) (champ PCP). | Dans l'En-tête IP (champ ToS/DiffServ). |
| Taille | 3 bits (0-7) | 6 bits (0-63) |
| Persistance | Non (Perdu). Le tag 802.1Q est retiré au passage d'un routeur. | Oui (End-to-End). L'en-tête IP voyage de la source à la destination finale. |
| Usage | Priorisation interne au LAN (entre switchs). | Standard de QoS (WAN/Internet). |
Bonne Pratique (Trust Boundary) : Le switch d'accès (L2) "fait confiance" au marquage CoS d'un téléphone IP, puis mappe (convertit) cette valeur CoS en une valeur DSCP (L3) avant de l'envoyer au routeur.
DSCP (Differentiated Services Code Point) est le champ de 6 bits dans l'en-tête IP utilisé par le modèle DiffServ. (Il remplace l'ancien champ "IP Precedence" de 3 bits).
La valeur DSCP (0-63) indique au routeur quel PHB (Per-Hop Behavior) (comportement) appliquer au paquet.
PHB (Comportements) Communs
| PHB (Nom) | Valeur DSCP | Binaire | Usage |
|---|---|---|---|
| Best-Effort (BE) | CS0 (0) | 000000 | Défaut. Trafic non prioritaire (Email, FTP). |
| Expedited Forwarding (EF) | EF (46) | 101110 | Priorité Absolue. (VoIP). Faible latence, faible gigue, faible perte. |
| Assured Forwarding (AF) | AFxy | (xxyy10) | Trafic prioritaire (mais pas temps réel). (ex: Vidéo, App Métier). |
| Class Selector (CS) | CSx | (xxx000) | Rétrocompatibilité avec "IP Precedence". |
Assured Forwarding (AF) en détail
AF (ex: AF31) combine une Classe (x) et une Priorité de "Drop" (y).
- Classe 1 (AF1x) < Classe 2 (AF2x) < Classe 4 (AF4x) (Priorité de bande passante)
- Drop 1 (
y=1) < Drop 2 (y=2) < Drop 3 (y=3) (Agressivité du WRED)
Le Queuing (Gestion des files d'attente) est la Gestion de la Congestion. Quand un routeur ne peut pas envoyer un paquet immédiatement (lien WAN saturé), il le place dans une "queue" (buffer).
FIFO (First-In, First-Out)
C'est la file d'attente par défaut (associée au "Best-Effort"). Elle est "stupide".
Le premier paquet arrivé (In) est le premier paquet à sortir (Out). Il n'y a aucune priorisation.
File d'attente (Buffer) :
[ Pkt 1 (Email) ] [ Pkt 2 (Email) ] [ Pkt 3 (VoIP) ] [ Pkt 4 (FTP) ]
↑ ↑
Sortie Entrée
(Vers WAN)
Résultat : Le paquet VoIP (Pkt 3) est "bloqué" derrière
deux gros paquets Email. -> Latence + Jitter.WFQ (Weighted Fair Queuing)
File d'attente "équitable". Au lieu d'une seule file FIFO, le routeur crée une file (dynamique) par flux (flow) (par 5-Tuple).
Il sert ensuite ces files en mode "Round Robin" (tourniquet), en donnant plus de "poids" (Weight) aux flux ayant une priorité IP Precedence/DSCP plus élevée.
Avantage : Un gros flux (FTP) ne peut pas "affamer" (starve) un petit flux (SSH).
CBWFQ (Class-Based Weighted Fair Queuing)
C'est le standard moderne. Au lieu de se baser sur des *flux*, il se base sur des Classes (définies par l'admin, ex: "Classe WEB", "Classe FTP").
Vous pouvez garantir un certain pourcentage de la bande passante à chaque classe.
Lien WAN : 100 Mbps Configuration CBWFQ : - Classe A (Critique) : Garantie de 50% (50 Mbps) - Classe B (Normal) : Garantie de 30% (30 Mbps) - Classe C (Défaut) : Garantie de 20% (20 Mbps)
Problème du CBWFQ : C'est "équitable" (Fair), mais la VoIP n'a pas besoin d'équité, elle a besoin de priorité absolue.
LLQ (CBWFQ + Priority Queue)
LLQ (Low Latency Queuing) est la solution. C'est du CBWFQ auquel on ajoute une Priority Queue (PQ) (File Prioritaire).
Fonctionnement
Le planificateur (Scheduler) du routeur suit cette règle :
"TOUJOURS servir la file prioritaire (PQ) en premier, jusqu'à ce qu'elle soit vide. Ensuite, s'il reste de la bande passante, la distribuer équitablement (CBWFQ) aux autres classes."
File 1 (PQ / LLQ) -> [ VoIP (EF) ] -> (Servi en 1er) File 2 (CBWFQ) -> [ Web (AF21) ] File 3 (CBWFQ) -> [ Email (BE) ]
Attention : On doit policer (limiter) la file PQ (ex: 10% de la bande passante), sinon la VoIP (si trop importante) pourrait "affamer" (starve) tout le reste du trafic.
Le Problème : Tail Drop & TCP Global Sync
Tail Drop est le comportement par défaut de toutes les files (FIFO, CBWFQ...). Lorsque la file d'attente (buffer) est pleine, tous les nouveaux paquets sont rejetés (dropped).
Problème (TCP Global Sync) : Si la file est pleine, elle rejette les paquets de tous les flux TCP en même temps. Tous les flux TCP entrent alors en "TCP Slow Start" (ralentissement) simultanément. La file se vide, puis tous les flux TCP ré-accélèrent en même temps, remplissant la file à nouveau. Le débit oscille (pics et creux).
Solution : WRED (Weighted Random Early Detection)
WRED (Évitement de Congestion) est une technique qui anticipe la congestion.
Au lieu d'attendre que la file soit 100% pleine, WRED commence à rejeter aléatoirement quelques paquets avant qu'elle ne soit pleine (ex: quand elle atteint 70%).
Résultat : Seuls *quelques* flux TCP ralentissent (ceux dont les paquets ont été "choisis" pour être droppés). Les autres continuent. Cela évite la "Synchronisation Globale" et maintient un débit moyen plus stable.
"Weighted" (Pondéré) signifie qu'il rejette plus agressivement les paquets à faible priorité (ex: DSCP AF13) que les paquets à haute priorité (ex: DSCP AF11).
Le Policing (Contrôle) est une fonction qui force le respect d'un débit (limite). Il est souvent appliqué au trafic entrant (Inbound).
Analogie : Un péage. Si vous arrivez trop vite (dépassement du débit), le policier vous arrête (Drop) ou vous donne une amende (Re-mark).
Token Bucket (Seau à Jetons)
Utilise un "Token Bucket" : la "rafale" (Burst) est autorisée tant qu'il y a des "jetons" dans le seau. Si le seau est vide, le trafic est "non-conforme".
Action (Violation)
Quand le trafic dépasse le débit autorisé (CIR - Committed Information Rate) :
- Drop (Rejeter) : (Le plus courant) Le paquet est jeté.
- Re-Mark (Re-marquer) : Le paquet n'est pas jeté, mais sa priorité est dégradée (ex: Marqué AF11 -> Re-marqué BE).
Le Shaping (Façonnage) est une fonction qui lisse le trafic pour respecter un débit. Il est appliqué au trafic sortant (Outbound).
Analogie : Un entonnoir. Si vous versez l'eau (trafic) trop vite, l'entonnoir (Shaper) ne la jette pas (Drop) ; il la stocke (Buffer) et la laisse s'écouler au débit maximum (CIR).
Action (Violation)
Quand le trafic dépasse le débit autorisé (CIR) :
- Buffer (Mettre en file d'attente) : Le paquet est mis en attente (dans une queue) et sera envoyé dès que la bande passante sera disponible.
Inconvénient : Le Shaping introduit de la Latence et de la Gigue (Jitter), car les paquets sont retardés. (À ne pas utiliser sur la VoIP, mais utile pour lisser les gros transferts FTP).
La VoIP (Voix sur IP) est le trafic le plus sensible. Il ne tolère aucune perte, peu de latence (< 150ms) et très peu de gigue (< 30ms).
Configuration QoS (Stratégie complète)
- Classification (Entrée LAN) : Identifier le trafic VoIP.
- (Méthode 1) Faire confiance au CoS 5 (802.1p) venant du Téléphone IP (Voice VLAN).
- (Méthode 2) Utiliser une ACL (
match udp port 5060pour SIP,match rtp 16384-32767pour la Voix).
- Marquage (Entrée LAN) :
- Marquer ce trafic avec DSCP EF (46).
- Queuing (Sortie WAN) :
- Configurer LLQ (Low Latency Queuing).
- Mettre la classe "DSCP EF" dans la File Prioritaire (Priority Queue).
- Policing (LLQ) :
- Limiter (Police) la file PQ à 20% de la bande passante WAN (pour éviter le "starvation").
Le Wi-Fi (média partagé, CSMA/CA) a son propre mécanisme de QoS, appelé WMM (Wi-Fi Multimedia) ou IEEE 802.11e.
Il ne garantit rien, mais il "triche" au CSMA/CA (voir guide WLAN) pour donner la priorité à certains types de trafic.
Les 4 Catégories d'Accès (AC)
WMM divise le trafic en 4 files (AC), par ordre de priorité décroissante. Le trafic de haute priorité (Voix) utilise des timers d'attente plus courts (il "parle" en premier).
| Priorité | AC (Nom) | Usage | Mappage DSCP |
|---|---|---|---|
| 1 (Max) | AC_VO (Voice) | VoIP | EF (46) |
| 2 | AC_VI (Video) | Visioconférence | AF41 |
| 3 (Défaut) | AC_BE (Best Effort) | Trafic normal (Web, Email) | CS0 (0) |
| 4 (Min) | AC_BK (Background) | Backups, Téléchargements | CS1 |
La QoS est un argument de vente majeur du MPLS (WAN Entreprise).
DSCP (L3) -> EXP (L2.5)
Quand un paquet IP (Couche 3) entre dans le réseau MPLS, il est encapsulé dans une trame MPLS (Couche 2.5). L'en-tête IP (et le marquage DSCP) n'est plus visible par les routeurs MPLS.
Pour préserver la QoS, le routeur d'entrée (Provider Edge) mappe (copie) la valeur DSCP (L3) dans le champ EXP (Experimental) (3 bits) de l'en-tête MPLS.
[ Paquet IP (DSCP: 46) ]
│
▼
[ Routeur Entrée MPLS ]
(Mappe 46 -> 5)
│
▼
[ Trame MPLS (EXP: 5) | Paquet IP (DSCP: 46) ] -> (Réseau FAI)
Les routeurs du FAI utilisent alors le champ EXP (3 bits, 0-7) pour appliquer la QoS (similaire au CoS).
Le MQC est le framework de configuration de la QoS sur les routeurs/switchs Cisco (IOS).
Il se fait en 3 étapes :
1. class-map (Classifier)
Définir le trafic.
class-map VOIP match ip dscp ef class-map WEB match protocol http match protocol https
2. policy-map (Manager)
Définir les actions (Queuing, Policing) pour chaque classe.
policy-map QOS-SORTIE-WAN
! Classe LLQ
class VOIP
priority percent 20 (File prioritaire, max 20%)
! Classe CBWFQ
class WEB
bandwidth percent 30 (Garantie de 30%)
! Classe par défaut (FIFO)
class class-default
fair-queue3. service-policy (Appliquer)
Attacher la politique à une interface.
interface GigabitEthernet0/1 (Vers le FAI) service-policy output QOS-SORTIE-WAN
Mapping des valeurs DSCP (Differentiated Services Code Point) et des PHB (Per-Hop Behaviors).
| PHB (Comportement) | Nom DSCP | Valeur (Dec) | Usage Recommandé |
|---|---|---|---|
| Expedited Forwarding (Priorité Absolue) | EF | 46 | VoIP (RTP) |
| Assured Forwarding 4 | AF41, AF42, AF43 | 34, 36, 38 | Visioconférence (Streaming) |
| Assured Forwarding 3 | AF31, AF32, AF33 | 26, 28, 30 | Applications Métier (Critique) |
| Assured Forwarding 2 | AF21, AF22, AF23 | 18, 20, 22 | Applications Métier (Normal) |
| Assured Forwarding 1 | AF11, AF12, AF13 | 10, 12, 14 | Trafic "haute priorité" (ex: Web) |
| Best Effort | BE (CS0) | 0 | Défaut (Email, FTP, tout le reste) |
| Class Selector 1 | CS1 (Scavenger) | 8 | Trafic "poubelle" (ex: BitTorrent, Mises à jour Windows) |
| Class Selector (Contrôle) | CS6, CS7 | 48, 56 | Trafic de routage (OSPF, BGP) (Très haute priorité) |
| Critère | Policing (Contrôle) | Shaping (Façonnage) |
|---|---|---|
| Objectif | Limiter (Faire respecter) | Lisser (Retarder) |
| Action (si dépassement) | Drop (Rejette) ou Re-mark (Dégrade) | Buffer (Met en file d'attente) |
| Impact | Perte (Loss) | Latence & Gigue (Jitter) |
| Outil | Seau à jetons (Token Bucket) | Seau à jetons (Token Bucket) + Buffer |
| Direction typique | Entrant (Inbound) | Sortant (Outbound) |
| Analogie | Péage (Stop ou Amende) | Entonnoir (Stocke et lisse) |
