🏛️ ArchiZeroTrust CCIE QoS 05 — Shaping
📉 QoS · Shaping

Traffic Shaping

Là où le policing droppe, le shaping attend. Les paquets en excès entrent dans un buffer et sortent au rythme du CIR. Aucun paquet n'est perdu — mais ils peuvent être retardés. C'est la bonne solution pour le WAN.

Shaping = token bucket + buffer. Quand le bucket est vide, les paquets ne sont pas droppés — ils attendent dans une file. Ils sortent dès que de nouveaux jetons arrivent. Le débit moyen respecte le CIR. Les bursts sont absorbés, pas rejetés.

Même trafic bursty — résultat différent

TRAFIC ENTRANT CIR Temps → POLICING — excès droppé CIR Bursts au-dessus du CIR → droppés instantanément SHAPING — excès bufferisé CIR Bursts bufferisés → sortent lissés au CIR → rien perdu
CritèreShapingPolicing
Excès de traficBufferisé → retardéDroppé ou remarqué
Paquets perdusNon (sauf buffer plein)Oui (exceed/violate)
Latence ajoutéeOui (jitter possible)Non
Impact voixAcceptable si LLQ actifDrops = dégradation
Cas d'usage principalEgress WAN — respecter débit contractuelIngress ISP — enforcer SLA client
DirectionEgress (output) uniquement sur IOSIngress ou egress
✅ Règle terrain : Sur un lien WAN contractuel (MPLS, leased line), tu shapes en egress pour ne pas dépasser le débit acheté. L'ISP police en ingress de son côté. Si tu ne shapes pas et que tu envoies plus que le CIR, l'ISP droppe tes paquets — y compris ta voix. Le shaping te donne le contrôle de ce qui sort en premier.
Shape average = lisse le trafic en moyenne au CIR. Pendant Tc, le routeur envoie BC bits en burst puis attend le reste du Tc. Débit moyen = CIR. C'est le mode de shaping standard sur IOS.
Temps ← Tc → ← Tc → ← Tc → ← Tc → BC silence BC silence BC silence BC silence CIR Débit instantané ↑ burst BC pause

Si le routeur a été silencieux pendant plusieurs Tc, les jetons non utilisés s'accumulent dans Be (Excess Burst). Au prochain burst, il peut envoyer BC + Be bits — un burst plus grand que la normale. Après ce burst, Be se vide et on revient au BC normal.

ParamètreSignificationValeur typique
CIRCommitted Information Rate — débit moyen garanti (bps)Débit contractuel WAN
BCCommitted Burst — bits envoyés par Tc. BC = CIR × TcCIR × 125 ms
TcTiming interval. IOS calcule Tc = BC / CIR125 ms par défaut
BeExcess Burst — accumulation pendant les silences. Permet un burst plus grand ponctuel.= BC (défaut IOS)
⚠️ Be en shaping ≠ Be en policing. En shaping, Be = jetons accumulés pendant les périodes de silence → burst ponctuel autorisé. En policing dual bucket, Be = bucket séparé rempli au PIR. Même nom, mécanisme différent. Ne pas confondre à l'examen.
! CIR = 512 000 bps ! Tc = 125 ms (défaut) ! BC = CIR × Tc = 512 000 × 0.125 = 64 000 bits = 8 000 octets ! Be = BC = 64 000 bits (défaut IOS) policy-map PM-SHAPE-WAN class class-default shape average 512000 ! IOS calcule BC et Be automatiquement ! Ou explicitement : shape average 512000 64000 64000 ↑CIR ↑BC ↑Be
Le concept le plus mal compris du QoS Cisco. La hiérarchie shape parent + LLQ child est obligatoire sur tout lien Ethernet WAN pour que LLQ fonctionne réellement. Sans elle, LLQ est configuré mais quasiment inactif — la voix est mélangée aux données dans le FIFO hardware. Comprendre pourquoi nécessite de comprendre la différence entre file logicielle et file hardware.
Contexte réel : interface GigabitEthernet0/1 physique à 1 Gbps raccordée à un lien WAN ISP à 512 kbps. Vous configurez LLQ avec priority 128 et appliquez directement la policy sur l'interface. Résultat : LLQ est configuré mais la voix n'est pas prioritaire.

Pourquoi ? LLQ opère sur la file logicielle (software queue). Cette file ne s'active que quand des paquets s'y accumulent — c'est-à-dire en cas de congestion. Sur une GigE à 1 Gbps, les paquets transitent si vite dans la hardware TX Queue qu'ils ne s'y accumulent jamais. La file logicielle reste vide. Le scheduler LLQ n'a rien à ordonner.
❌ Sans shape parent — GigabitEthernet 1 Gbps physique Ingress DSCP EF (voix) vidéo AF41 backup LLQ software priority queue JAMAIS activé ! file toujours vide TX Queue hardware FIFO ⚡ sortie à 1 Gbps file quasi-instantanément vide rien à ordonner pour LLQ 512 kbps ISP burst 1 Gbps reçu → drops massifs → TX Queue vide à 1 Gbps : LLQ n'a rien à trier — voix, vidéo et backup mélangés — ISP droppe tout ce qui dépasse 512k vs ✅ Avec shape parent — sas logiciel permanent Ingress DSCP EF (voix) vidéo AF41 backup Shape Queue shape average 512000 V vid V bck V vid toujours pleine = sas logiciel LLQ scheduler actif en permanence — voix sort EN PREMIER TX Queue hardware (presque vide) V 512 kbps ISP ✓ débit exact — zéro drop → Shape Queue = sas permanent → LLQ toujours actif → voix sort EN PREMIER dans chaque intervalle Tc
Ce que fait shape average 512000 :

La commande crée une file logicielle permanente entre l'ingress et la hardware TX Queue. Les paquets y entrent à la vitesse de l'ingress (1 Gbps) mais n'en sortent que par tranches de Bc = CIR × Tc bits — soit 64 000 bits toutes les 125 ms sur un lien 512k.

Puisque les paquets arrivent 2000× plus vite qu'ils ne sortent (1 Gbps / 512 kbps), la Shape Queue est structurellement toujours pleine dès qu'il y a du trafic. C'est cette congestion permanente et contrôlée — le "sas" — qui active le scheduler LLQ en continu. Le LLQ trie la Shape Queue et envoie les paquets voix en tête de file à chaque Tc.
IOS interdit de combiner shape et priority/bandwidth dans la même classe. Ces commandes opèrent à des niveaux différents du scheduler :

shape average → contrôle le débit total de la classe (pacing Tc)
priority / bandwidth → ordonnent les paquets à l'intérieur de ce débit

IOS impose donc une hiérarchie stricte à deux niveaux :
Policy parent = façade du lien WAN. Contient uniquement shape dans class-default + appel de l'enfant via service-policy.
Policy enfant = gestion interne des classes. Contient priority (LLQ), bandwidth (CBWFQ), fair-queue (WFQ). Ne jamais l'appliquer directement sur l'interface.
! ── ÉTAPE 1 : class-maps (classification) ─────────────────────────
class-map match-any CM-VOIX
 match dscp ef              ! G.711, G.729 — voix RTP
 match dscp cs5             ! signalisation SIP/H.323

class-map match-any CM-VIDEO
 match dscp af41            ! vidéoconférence temps réel

class-map match-any CM-APPS
 match dscp af31            ! applicatifs métier critiques

! ── ÉTAPE 2 : policy enfant — LLQ + CBWFQ ─────────────────────────
! C'est ici que s'appliquent les règles de priorité et de garantie
! Les valeurs bandwidth/priority sont en kbps dans une policy-map
policy-map PM-WAN-CHILD
 class CM-VOIX
  priority 128        ! LLQ : 128 kbps — sort EN PREMIER, policer intégré
!                       ! si trafic > 128k → excès droppé (pas bufferisé)

 class CM-VIDEO
  bandwidth 128       ! CBWFQ : 128 kbps garantis — servi après LLQ

 class CM-APPS
  bandwidth 128       ! CBWFQ : 128 kbps garantis

 class class-default
  fair-queue          ! WFQ pour backup/web — prend ce qui reste (~128k)

! ── ÉTAPE 3 : policy parent — shape + appel enfant ─────────────────
! Contient UNIQUEMENT shape dans class-default + service-policy vers l'enfant
! Ne jamais mettre priority/bandwidth ici — IOS refusera
policy-map PM-WAN-PARENT
 class class-default
  shape average 512000   ! crée le sas logiciel — pace à 512 kbps
!                           ! Bc = 512000 × 0.125 = 64 000 bits par Tc
  service-policy PM-WAN-CHILD  ! LLQ+CBWFQ tournent dans ce sas

! ── ÉTAPE 4 : application sur l'interface ──────────────────────────
! TOUJOURS le parent sur l'interface — jamais l'enfant directement
interface GigabitEthernet0/1
 bandwidth 512              ! déclare la CIR à IOS — référence pour les % QoS
!                            ! ne limite PAS le trafic — juste un paramètre IOS
 service-policy output PM-WAN-PARENT   ! output uniquement — jamais input
Ce qui se passe à chaque Tc (125 ms sur lien 512k) :

Le shaper libère Bc = 64 000 bits depuis la Shape Queue vers la hardware TX Queue. Avant la libération, le scheduler LLQ trie la Shape Queue :

① Tous les paquets voix (EF) en attente sortent EN PREMIER — jusqu'à épuiser les tokens LLQ (128k × 125ms = 16 000 bits)
② Les paquets vidéo (AF41) suivent — CBWFQ par SEQ — jusqu'à leurs tokens (16 000 bits)
③ Les paquets apps (AF31) suivent — même logique CBWFQ
④ Le reste (backup, BE) prend les tokens résiduels

Ce cycle se répète 8 fois par seconde. La voix a toujours ses 128k garantis. Le backup prend ce qui reste — il peut être réduit à zéro pendant un appel voix intensif.
Contenu d'un Tc = Bc = 64 000 bits — ordre de sortie imposé par LLQ Tc 1 EF AF41 AF31 BE Tc 2 EF AF41 AF31 BE Tc 3 EF AF41 AF31 BE Tc 4 …×8/s EF AF41 AF31 BE EF — Voix LLQ (sort 1er) AF41 — Vidéo CBWFQ AF31 — Apps CBWFQ BE — Best Effort (reste) temps → EF sort toujours en tête — identique dans chaque Tc — garanti par LLQ 512 kbps — total shapé par PM-WAN-PARENT (shape average 512000) LLQ — CM-VOIX — priority 128 kbps (25%) — SORT EN PREMIER — policer intégré CBWFQ — CM-VIDEO — bandwidth 128 kbps (25%) — garanti, servi après LLQ CBWFQ — CM-APPS — bandwidth 128 kbps (25%) — garanti WFQ — class-default — ~128 kbps restants (25%) — backup compressé ici en dernier
ContrainteRègleDans ce scénario 512k
priority ≤ shape rate La LLQ du child ne peut pas dépasser le CIR du parent 128 ≤ 512 ✓
Règle des 75% Somme des bandwidth + priority dans child ≤ 75% du CIR shapé 128+128+128 = 384 = 75% de 512 ✓ (limite exacte)
bandwidth dans child Référence = CIR du parent (512k), pas la vitesse physique de l'interface bandwidth 128 = 128 kbps = 25% des 512k shapés
service-policy sur l'interface Toujours appliquer le PARENT — jamais l'enfant directement Erreur fréquente : appliquer PM-WAN-CHILD sur l'interface
shape uniquement en output Shaping = contrôle de l'émission — ingress = policing service-policy output PM-WAN-PARENT

⚠️ 1 — Appliquer l'enfant directement sur l'interface

Si service-policy output PM-WAN-CHILD est appliqué sans parent, la voix LLQ est configurée mais quasiment inactive. Les paquets ne passent pas par la Shape Queue — la file logicielle ne se congestionne jamais — LLQ ne s'active pas. Résultat identique à une absence totale de QoS sur Ethernet WAN.

⚠️ 2 — Shape parent sans child policy (shape seul)

shape average 512000 seul dans class-default sans service-policy enfant crée le sas logiciel mais laisse un FIFO à l'intérieur. Voix et backup sont bufferisés ensemble. Le sas est actif mais non trié — la voix attend quand même derrière un transfert backup. Toujours coupler shape parent + LLQ child.

⚠️ 3 — priority dans child > CIR du parent

Si priority 600 dans child mais shape average 512000 dans parent, IOS accepte la config mais le policer LLQ est théoriquement supérieur au débit total disponible. En pratique la voix peut consommer 100% du lien shapé — starvation complète des autres classes. Règle : priority ≤ 33% du CIR parent en production voix.

⚠️ 4 — Oublier bandwidth sur l'interface Ethernet WAN

Sans bandwidth 512 sur une GigE, IOS pense que le lien fait 1 000 000 kbps. Les calculs bandwidth percent dans l'enfant seront 2000× trop grands. bandwidth percent 25 = 25% de 1 Gbps = 250 Mbps au lieu de 128 kbps. La règle des 75% sera aussi faussée. Toujours déclarer la CIR réelle.

⚠️ 5 — shape dans class-default uniquement

Dans la policy parent, shape doit être dans class class-default — jamais dans une classe nommée comme CM-VOIX. La raison : tout le trafic doit passer par le sas, y compris la voix. Si shape est dans une classe spécifique, seule cette classe est pacée — les autres classes débordent directement dans la hardware TX Queue à vitesse physique.

! ── shape average — débit MOYEN = CIR ─────────────────────────────
! Le plus courant — respecte strictement le contrat ISP
policy-map PM-SHAPE-AVG
 class class-default
  shape average 512000              ! CIR seul — Bc/Be calculés par IOS
!
! Syntaxe complète : shape average CIR [Bc] [Be]  (Bc et Be en bits)
  shape average 512000 64000 64000  ! CIR=512k  Bc=64000b  Be=64000b
!                          ↑        ↑       ↑
!                         bps      bits    bits
!
! Calcul IOS par défaut (Tc=125ms) :
!   Bc = CIR × Tc = 512000 × 0.125 = 64 000 bits
!   Be = 0 (pas d'excess burst par défaut en average)

! ── shape peak — débit MOYEN = CIR + Be/Tc ─────────────────────────
! Plus agressif — autorise un burst au-delà du CIR chaque Tc
! Rarement utilisé en prod — risque de drops ISP si lien contractuel
policy-map PM-SHAPE-PEAK
 class class-default
  shape peak 512000                 ! PIR ≈ 2×CIR si Bc=Be
!
! Avec shape peak : chaque Tc libère Bc + Be bits
! Bc = 64 000 bits (CIR portion)
! Be = 64 000 bits (excess burst — emprunté sur Tc suivant)
! Débit effectif = (Bc + Be) / Tc = 128 000 / 0.125 = 1 024 kbps
Paramètreshape averageshape peak
Débit moyen= CIR= CIR × (1 + Be/BC) ≈ 2×CIR
Utilisation BeAccumulation sur silenceUtilisé chaque Tc
RisqueAucun (respecte contrat)ISP peut dropper (dépasse contrat)
Cas d'usageStandard WAN contractuelLien non contractuel, test lab
! ── shape average percent ───────────────────────────────────────────
! Référence = commande 'bandwidth' de l'interface (pas la vitesse physique)
interface GigabitEthernet0/1
 bandwidth 512             ! déclare la CIR à IOS — référence pour les %

policy-map PM-SHAPE-PCT
 class class-default
  shape average percent 50 ! 50% de 512k = 256 kbps — s'adapte si bandwidth change

! ── Application egress (shaping = output uniquement) ────────────────
interface GigabitEthernet0/1
 bandwidth 512
 service-policy output PM-WAN-PARENT  ! toujours output — jamais input

! ── Vérification ────────────────────────────────────────────────────
show policy-map interface GigabitEthernet0/1 output
show traffic-shape
show traffic-shape statistics
R1# show policy-map interface Serial0/0/0 output
Serial0/0/0
Service-policy output: PM-WAN-PARENT
Class-map: class-default (match-any)
Output queue: Conversation 265
Bandwidth 512 (kbps) Max Threshold 64 (packets)
(pkts matched/bytes matched) 0/0 ← compteurs match
shape (average) cir 512000, bc 64000, be 64000 ← CIR/BC/Be effectifs
target shape rate 512000 ← débit cible
Service-policy : PM-WAN-CHILD
queue stats for all priority classes:
Queueing
priority level 1
queue limit 64 packets
(total drops) 0 ← drops LLQ = 0 idéalement
Class-map: CM-VOIX (match-all)
1247 packets, 99760 bytes ← trafic voix transmis
30 second offered rate 125000 bps ← ~128 kbps voix actuelle
Match: dscp ef (46)
Priority: 128000 kbps, burst bytes 3200000
drops: 0 ← 0 drops voix = config correcte
R1# show traffic-shape
Interface Se0/0/0
Access Target Byte Sustain Excess Interval Increment Adapt
VC queue Rate Limit bits/int bits/int (ms) (bytes) Active
- - 512000 8000 64000 64000 125 8000 - ← BC=64k bits, Tc=125ms
Ce que vous voyezSignificationAction
drops LLQ = 0Voix jamais droppée — config correcteRien à faire
drops LLQ > 0Voix droppée — LLQ saturéAugmenter priority bandwidth
output queue pleineBuffer shaping plein — trafic best effort droppéNormal si trafic > CIR
rate offert > shape rateShaping actif — buffer utiliséNormal — shaping fonctionne

⚠️ 1 — Shaping uniquement en egress

Sur IOS/IOS-XE, shape average dans une policy-map ne fonctionne qu'en output sur l'interface. Si tu appliques la policy en input, IOS refuse la commande ou l'ignore silencieusement. Le policing ingress, c'est l'affaire de l'ISP — pas du routeur client.

⚠️ 2 — Sans child policy, shaping = buffer sans priorité

Un shape average 512000 seul dans class-default sans child policy-map crée un buffer FIFO. Voix et données sont mélangées. Un gros transfert peut faire attendre des paquets voix dans la file. Toujours coupler shaping parent + LLQ child dès qu'il y a de la voix.

⚠️ 3 — shape peak dépasse le contrat ISP

shape peak pousse le débit au-delà du CIR contractuel. L'ISP police en ingress — l'excès sera droppé de son côté. Tu shapes pour ne rien dropper localement, mais l'ISP droppe quand même. Résultat : retard (buffer) + drops ISP = pire que sans shaping. Utiliser shape average en production.

⚠️ 4 — Be en shaping ≠ Be en policing

En shaping, Be = accumulation de jetons pendant les périodes de silence → burst ponctuel autorisé au-delà du BC normal.
En policing dual bucket, Be = deuxième bucket séparé rempli au PIR.
Le mot est le même, le mécanisme est différent. Question classique CCIE.

⚠️ 5 — LLQ dans child : priority bandwidth ≤ shape rate

La priority dans la child policy ne peut pas dépasser le débit shapé par le parent. Si parent shape = 512 kbps et child priority = 600 kbps, IOS accepte la commande mais la priorité sera limitée à 512 kbps. En pratique : dimensionner LLQ à max 25-33% du shape rate.

⚠️ 6 — Tc trop grand = latence voix

Tc = BC / CIR. Si BC est grand, Tc est grand. Entre deux Tc, le routeur est en pause — les paquets voix attendent. Sur un lien lent (512 kbps), Tc = 125 ms est déjà à la limite. Un BC trop grand → Tc 500 ms → voix coupée. Conseil : garder Tc entre 10 ms et 125 ms sur les liens voix.

Simulateur Shape Average. Visualise comment le trafic est lissé au CIR sur plusieurs intervalles Tc. Les bursts entrent dans le buffer et sortent au rythme BC/Tc. Le débit moyen reste = CIR même si le trafic entrant est bursty.
512 kbps
64 kbits
Tc calculé125.0 ms
BC (bits)64 000
Buffer0 bits
Jetons64 000
■ Trafic envoyé (dans CIR) ■ Buffer (en attente) ─ CIR
// Envoyez un burst pour observer le lissage au CIR...

Cliquez sur une carte pour révéler la réponse.

Quelle est la différence fondamentale entre shaping et policing ?
Shaping bufferise les paquets en excès et les envoie au rythme du CIR — rien n'est perdu. Policing droppe ou remarque les paquets en excès instantanément. Shaping = régulateur. Policing = gendarme.
cliquer
Le shaping s'applique en ingress ou egress ?
Egress (output) uniquement sur IOS/IOS-XE. Le policing peut être ingress ou egress. Une policy-map avec shape average appliquée en input sera refusée ou ignorée.
cliquer
Pourquoi coupler shape average (parent) + LLQ (child) ?
Shape seul = buffer FIFO = voix mélangée aux données = latence. Avec LLQ dans le child, la voix est servie en priorité dans les 512 kbps shapés. Sans child policy, un transfert de fichier peut bloquer des paquets voix dans la file.
cliquer
Qu'est-ce que Be en contexte de shaping ?
Be (Excess Burst) en shaping = accumulation de jetons BC non utilisés pendant les périodes de silence. Permet un burst ponctuel plus grand que BC normal. Après ce burst, Be se vide et on revient au BC standard. ≠ Be en policing dual bucket.
cliquer
Pourquoi shape average et pas shape peak en production ?
Shape peak dépasse le CIR contractuel. L'ISP police en ingress côté PE — l'excès est droppé. Résultat : buffer local (latence) + drops ISP = pire des deux mondes. Shape average respecte le contrat.
cliquer
Quel est l'impact d'un Tc trop grand sur la voix ?
Tc = BC / CIR. Un Tc grand = le routeur envoie BC bits en burst puis pause longtemps. Les paquets voix attendent dans la pause. Sur un lien voix, Tc doit rester entre 10 ms et 125 ms. BC trop grand → Tc 500 ms → gigue excessive → voix coupée.
cliquer
Formule de shape average — calcul BC pour CIR = 1 Mbps, Tc = 125 ms
BC = CIR × Tc = 1 000 000 × 0.125 = 125 000 bits = 15 625 octets. IOS calcule BC automatiquement si non spécifié. La commande : shape average 1000000 (BC auto).
cliquer
Quelle commande vérifie que le shaping fonctionne ?
show policy-map interface [int] output → affiche CIR/BC/Be effectifs + compteurs. show traffic-shape → vue rapide du débit cible et des intervalles Tc. Chercher "drops: 0" sur la classe LLQ voix.
cliquer