Sans queue intelligente, backup et voix partagent le même couloir. FIFO → WFQ → CBWFQ → LLQ : chaque étape résout un problème que la précédente ne pouvait pas gérer. La voix mérite son propre couloir.
| Mécanisme | Rôle | Config | Défaut IOS |
|---|---|---|---|
| FIFO | Un seul buffer, ordre d'arrivée | Aucune | Oui (interfaces rapides) |
| WFQ | Séparation automatique par flux, équité | Automatique | Oui (interfaces lentes <2M) |
| CBWFQ | Classes manuelles, bande passante garantie minimum | MQC class+policy | Non |
| LLQ | CBWFQ + priority queue stricte pour la voix | MQC + priority | Non |
! ── Activer WFQ sur une interface (si pas déjà par défaut) ── interface Serial0/0/0 fair-queue ! active WFQ avec paramètres par défaut ! ── Syntaxe complète avec paramètres ── interface Serial0/0/0 fair-queue 64 256 0 ! threshold=64 queues=256 reservable=0 ! │ │ └── queues réservées RSVP (IntServ) ! │ └──────── nombre de queues dynamiques (défaut : 256) ! └────────────── seuil de congestion (défaut : 64 paquets) ! ── Augmenter à 1024 queues (pour plus de 256 flux) ── interface Serial0/0/0 fair-queue 64 1024 0 ! valeurs possibles : 16, 32, 64, 128, 256, 512, 1024, 2048, 4096 ! ── Vérifier ── show interfaces Serial0/0/0 | include Queueing show queue Serial0/0/0
| Critère de poids | Détail | Effet |
|---|---|---|
| IP Precedence | Poids = 32 384 / (IP Precedence + 1) Prec 0 (BE) → poids 32 384 Prec 5 (Voice) → poids 5 397 Prec 7 (Network) → poids 4 048 |
Poids bas = servi plus souvent. Prec 5 est servi ~6× plus souvent que Prec 0 |
| Taille de paquet | Le numéro de séquence d'un flux augmente proportionnellement aux octets transmis | Un flux qui envoie de gros paquets "avance" plus vite dans sa séquence → servi moins souvent. Favorise les petits paquets (voix). |
| Sans IP Precedence | Tous les paquets ont Prec 0 → même poids (32 384) | WFQ fonctionne quand même — équité pure entre flux, favorise les petits paquets. Pas besoin de marquage DSCP/Prec pour activer WFQ. |
| Contexte | WFQ pertinent ? | Recommandation |
|---|---|---|
| Lien Serial WAN <2Mbps (ancien) | Oui — actif par défaut, correct pour petites structures | Acceptable si pas de voix critique |
| Réseau avec voix/vidéo | Non — pas de garantie stricte | CBWFQ + LLQ obligatoire |
| class-default dans CBWFQ | Oui — fair-queue dans class-default |
Usage recommandé : équité entre flux non classifiés dans le bucket par défaut |
| WAN moderne (MPLS, SD-WAN) | Non — remplacé par CBWFQ/LLQ + DSCP | WFQ = mécanisme legacy. CBWFQ/LLQ = standard actuel. WFQ survit uniquement dans class-default. |
bandwidth).
Pour priorité stricte : LLQ (priority).
| Critère | WFQ |
|---|---|
| Config requise | Aucune — fair-queue suffit |
| Définition d'un flux | 5-tuple : src IP + dst IP + src port + dst port + protocole |
| Queues dynamiques | 256 par défaut — modifiable jusqu'à 4096 |
| Critère de poids | IP Precedence (poids = 32 384 / Prec+1) + taille des paquets |
| Fonctionne sans marquage | Oui — équité pure si Prec 0 partout |
| Bande passante garantie | Non — proportionnelle seulement |
| Priorité stricte voix | Non — LLQ requis |
| Défaut IOS sur | Interfaces <2 Mbps (Serial, BRI). FIFO sur FastEth/Gig. |
class-map + policy-map + service-policy).
Chaque classe obtient un minimum de bande passante garanti en cas de congestion.
Sans congestion, toutes les classes peuvent utiliser plus que leur minimum — la bande passante libre est partagée proportionnellement.
set dscp) est une action optionnelle que tu peux ajouter dans la même classe.
| Étape | Commande | Rôle |
|---|---|---|
| ① class-map | class-map match-all CM-VOIX |
Définit qui est concerné — le critère de classification (DSCP, ACL, protocole, VLAN…) |
| ② policy-map | policy-map PM-WAN + class CM-VOIX + bandwidth 128 |
Définit quoi faire — garantir une bande passante, priorité, marquage… |
| ③ service-policy | interface Serial0/0/0 → service-policy output PM-WAN |
Applique la policy à une interface, dans un sens (input = policing, output = queuing/shaping) |
! ── Classification par DSCP (recommandé — survit au transit MPLS) ── class-map match-all CM-VOIX match dscp ef ! DSCP 46 — voix EF class-map match-all CM-VIDEO match dscp af41 ! DSCP 34 — vidéo AF41 class-map match-all CM-APPS match dscp af31 af21 ! plusieurs DSCP dans un seul match ! ── Classification par ACL (L3/L4 — quand pas de marquage DSCP) ── ip access-list extended ACL-VOIX permit udp any any range 16384 32767 ! ports RTP voix class-map match-all CM-VOIX-ACL match access-group name ACL-VOIX ! ── Classification par protocole (NBAR — reconnaissance applicative) ── class-map match-all CM-WEBEX match protocol webex-meeting ! NBAR2 identifie l'appli sans ACL class-map match-all CM-HTTP match protocol http ! ou https, ftp, ssh, ospf… ! ── Classification par IP Precedence (ancien, interopérabilité) ── class-map match-all CM-CRITIQUE match ip precedence critical ! Prec 5 ! ── match-all vs match-any ── ! match-all = ET logique (tous les critères doivent être vrais) ! match-any = OU logique (un seul critère suffit) class-map match-any CM-TEMPS-REEL match dscp ef match dscp af41 ! voix OU vidéo → même classe
match protocol <appli> dans un class-map suffit.
match dscp :! ── Activer NBAR sur l'interface (requis sur IOS, automatique sur IOS-XE/NBAR2) ── interface Serial0/0/0 ip nbar protocol-discovery ! active la reconnaissance — observe les protocoles ! ── class-maps avec match protocol ── class-map match-all CM-WEBEX match protocol webex-meeting ! NBAR reconnaît Webex même sur ports dynamiques class-map match-all CM-RTP-VOIX match protocol rtp audio ! RTP audio uniquement — pas vidéo RTP class-map match-all CM-P2P match protocol bittorrent ! identifier pour limiter/déprioriser class-map match-all CM-SQL match protocol sqlserver ! trafic base de données métier ! ── policy-map : même structure que DSCP — NBAR est transparent pour CBWFQ ── policy-map PM-WAN-NBAR class CM-RTP-VOIX priority 128 ! LLQ pour voix identifiée par NBAR — 128 kbps class CM-WEBEX bandwidth 128 ! CBWFQ pour vidéo conférence — 128 kbps class CM-SQL bandwidth 64 ! 64 kbps garanti pour la base de données class CM-P2P bandwidth 32 ! confinement P2P — toujours en dernier class class-default fair-queue ! ── Vérifier ce que NBAR a identifié ── show ip nbar protocol-discovery interface Serial0/0/0 stats byte-count show ip nbar protocol-discovery top-n 10 ! top 10 applis les plus actives
| Aspect | NBAR |
|---|---|
| Avantage principal | Identifie des applis sans DSCP ni ACL complexe — reconnaît ports dynamiques et encapsulation |
| CPU overhead | Plus élevé que match dscp — DPI paquet par paquet. À éviter sur routeurs bas de gamme sous forte charge. |
| Premiers paquets du flux | NBAR peut classer en class-default avant d'identifier l'appli (besoin de voir plusieurs paquets). Problème mineur en pratique. |
| Trafic TLS chiffré | NBAR2 utilise des heuristiques statistiques — moins fiable qu'une inspection claire. Teams/Webex identifiables via SNI. |
| Combo optimal terrain | NBAR en ingress pour set dscp → CBWFQ en egress lit le DSCP. DPI une seule fois à l'entrée, scheduling léger sur chaque lien. |
set dscp dans la class action.
Deux cas d'usage : (1) reclassifier du trafic en transit, (2) marquer le trafic généré par le routeur lui-même.
! ── Cas 1 : trafic en transit — reclassifier + ordonnancer ── ! Exemple : le trafic SSH arrive non marqué → on le marque AF21 en sortie class-map match-all CM-SSH match access-group name ACL-SSH ! ACL identifie le flux SSH policy-map PM-WAN class CM-SSH set dscp af21 ! ① MARQUE le paquet DSCP 18 bandwidth 64 ! ② GARANTIT 64 kbps minimum ! ── Cas 2 : trafic généré par le routeur (OSPF, BGP, SSH management) ── ! Un service-policy OUTPUT sur une interface attrape aussi les paquets ! originés par le routeur lui-même qui sortent par cette interface class-map match-all CM-OSPF-LOCAL match protocol ospf ! NBAR identifie les hellos OSPF locaux policy-map PM-WAN class CM-OSPF-LOCAL set ip precedence critical ! Prec 5 sur les paquets de contrôle bandwidth 32 ! 32 kbps garanti pour les paquets de contrôle ! ── Alternative pour protocoles de routage — commande ip-precedence ── router ospf 1 ip-precedence critical ! marque tous les paquets OSPF générés par ce process router bgp 65000 neighbor 10.0.0.1 dscp 40 ! marque les paquets BGP vers ce voisin (IOS 15.x+)
priority.
! ══════════════════════════════════════════════════════════ ! Étape 1 — class-maps : QUI est classé ? ! ══════════════════════════════════════════════════════════ class-map match-all CM-VOIX match dscp ef ! EF = DSCP 46 — voix IP class-map match-all CM-VIDEO match dscp af41 ! AF41 = DSCP 34 — vidéo class-map match-all CM-APPS match dscp af31 ! AF31 = DSCP 26 — applis métier ! class-default récupère tout le reste (backup FTP, BE…) ! ══════════════════════════════════════════════════════════ ! Étape 2 — policy-map : QUOI faire ? ! ══════════════════════════════════════════════════════════ policy-map PM-WAN-CBWFQ class CM-VOIX bandwidth 128 ! 128 kbps garantis — 25% de 512k class CM-VIDEO bandwidth 128 ! 128 kbps garantis — 25% class CM-APPS bandwidth 128 ! 128 kbps garantis — 25% ! Total explicite = 384 kbps = 75% de 512k ← limite exacte ! class-default reçoit les 128k restants (25%) — backup FTP ici class class-default fair-queue ! équité entre flux non classifiés dans ce bucket ! ══════════════════════════════════════════════════════════ ! Étape 3 — service-policy : OÙ appliquer ? ! ══════════════════════════════════════════════════════════ interface Serial0/0/0 bandwidth 512 ! IOS doit connaître la bw logique (kbps) service-policy output PM-WAN-CBWFQ
Total alloué explicitement : 384 kbps = 75%. class-default reçoit les 128k restants. Backup FTP = confiné dans class-default — il ne peut plus voler la bande des autres.
bandwidth dans une policy-map dépasse 75% de la bande passante
de l'interface, IOS refuse l'application du service-policy.
! ── Scénario : on essaie d'allouer trop ── policy-map PM-TOO-MUCH class CM-VOIX bandwidth 200 ! 200 kbps class CM-VIDEO bandwidth 200 ! 200 kbps class CM-APPS bandwidth 100 ! 100 kbps → total = 500 kbps = 97.6% de 512k ❌ interface Serial0/0/0 bandwidth 512 service-policy output PM-TOO-MUCH ! ── Réponse IOS ── %CBWFQ: bandwidth sum 500000 bps exceeds 75% of interface bandwidth 512000 bps (384000 bps) %Service policy PM-TOO-MUCH not applied on interface Serial0/0/0 - insufficient bandwidth ! ── Fix : descendre à 384 kbps max ── ! Voix=128k + Video=128k + Apps=128k = 384k = 75% ← OK ! Ou utiliser "bandwidth percent" pour être auto-adaptatif : bandwidth percent 25 ! → voir section ci-dessous
bandwidth dans une policy-map est en kbps.bandwidth 128 = 128 kbps ✓bandwidth 128000 = 128 000 kbps = 128 Mbps ← absurde sur un lien 512k !shape average et police rate qui eux sont en bps :shape average 512000 = 512 000 bps = 512 kbps ✓police rate 1000000 bps = 1 000 000 bps = 1 Mbps ✓
| Commande | Unité | Exemple | Résultat |
|---|---|---|---|
bandwidth interface | kbps | bandwidth 512 | 512 kbps — référence logique du lien |
bandwidth policy-map | kbps | bandwidth 128 | 128 kbps garanti minimum |
priority policy-map | kbps | priority 128 | 128 kbps LLQ strict |
shape average | bps | shape average 512000 | 512 kbps (512 000 bps) |
police rate | bps | police rate 1000000 bps | 1 Mbps (1 000 000 bps) |
bandwidth configurée sur l'interface (en kbps).interface Serial0/0/0 → bandwidth 512 ← déclare 512 kbps comme référencebandwidth percent 25 dans la policy-map = 25% × 512 = 128 kbpsbandwidth n'est pas configurée sur l'interface, IOS utilise la vitesse physique du port (clock rate). Sur un lien WAN contrat 512 kbps sur un port physique 2 Mbps, ne pas mettre bandwidth 512 = mauvais calcul de référence.
! ── Scénario : contrat WAN upgradé de 512k à 1 Mbps ────────── ! Avec valeur absolue — tu dois tout recalculer manuellement : interface Serial0/0/0 bandwidth 1024 ! nouveau contrat 1 Mbps policy-map PM-WAN class CM-VOIX bandwidth 256 ! ← à changer manuellement (était 128) class CM-VIDEO bandwidth 256 ! ← à changer manuellement class CM-APPS bandwidth 256 ! ← à changer manuellement ! 3 lignes à modifier → risque d'oubli, erreur humaine ! Avec percent — 1 seule ligne à changer : interface Serial0/0/0 bandwidth 1024 ! ← seul changement nécessaire policy-map PM-WAN class CM-VOIX bandwidth percent 25 ! 512k → 128k, 1024k → 256k : auto-recalcul class CM-VIDEO bandwidth percent 25 ! idem class CM-APPS bandwidth percent 25 ! idem — total = 75% ← respecte la règle ! La policy-map ne change pas — seule la bandwidth interface suffit
bandwidth 128 ne bloque pas la classe à 128k. Contrairement à police rate 128000 bps … exceed-action drop qui lui, plafonne à 128k.
| Critère | WFQ | CBWFQ |
|---|---|---|
| Config | Aucune — automatique | MQC : class-map + policy-map + service-policy |
| Définition des classes | Automatique par flux (5-tuple) | Manuelle — tu choisis les critères |
| Bande passante garantie | Non — proportionnelle IP Prec | Oui — valeur absolue (kbps) ou percent |
| Peut marquer (set dscp) | Non | Oui — avec set dscp dans la class action |
| Nombre de queues | 256 max (4096 configurable) | Illimité — une queue par class-map |
| Limite 75% | Non applicable | Oui — 75% max de la bw interface |
| Scalabilité | Faible (<50 users) | Excellente — grandes entreprises, WAN MPLS |
| Utilisation typique | Serial <2Mbps (legacy) ou class-default | Standard actuel sur WAN/LAN — toujours avec LLQ pour voix |
SEQ = seq_précédent + (taille_paquet / bandwidth_classe).
Le paquet avec le SEQ le plus bas est servi en premier — ce qui garantit proportionnellement la bande passante à chaque classe.set dscp ef ou set ip precedence 5 dans la class action.bandwidth — ordonnancer (scheduling)set — marquer (optionnel)queue-limit — limiter la taille du buffer de la classe (optionnel)
bandwidth 128 garantit 128 kbps minimum mais la voix peut quand même
attendre dans sa queue derrière d'autres paquets voix ou données de la même classe.
Pour zéro latence sur la voix → il faut LLQ (priority au lieu de bandwidth).
priority au lieu de bandwidth.priority 128 fait deux choses simultanément que beaucoup ignorent :| Mécanisme | bandwidth 128 | priority 128 |
|---|---|---|
| Ordre de service | Tour WFQ par SEQ — attend les autres | Sort EN PREMIER, toujours, avant tout |
| Calcul SEQ | Oui — poids dans le scheduler WFQ | Non — bypass total du scheduler WFQ |
| Si trafic < 128k | Bande libre redistribuée aux autres | Bande libre redistribuée aux autres |
| Si trafic = 128k | Garanti — servi en priorité WFQ | Garanti — servi immédiatement |
| Si trafic > 128k | Mis en attente jusqu'à avoir son tour | Excès DROPPÉ — policer intégré actif |
! ── Ce que priority 128 fait réellement ────────────────── class CM-VOIX priority 128 ! équivaut EXACTEMENT à : ! ① file strictement prioritaire (sort avant toutes les autres) ! ② police rate 128 kbps — excès droppé, jamais bufferisé ! ! ── Scénario piège : 3 appels voix G.711 sur lien 512k ─── ! 3 appels G.711 = 3 × 85 kbps = 255 kbps réels (codec + headers) ! priority 128 → seulement 128 kbps passent, 127 kbps droppés → voix dégradée ! ! ! ── Fix 1 : ajuster la valeur absolue class CM-VOIX priority 256 ! 256 kbps = 3 × 85k + marge ≈ correct pour 3 appels G.711 ! ! ── Fix 2 : utiliser priority percent — s'adapte si le lien change class CM-VOIX priority percent 50 ! 50% de 512k = 256k → couvre 3 appels G.711 ! ! ⚠ MAIS 50% pour la voix sur un lien 512k, c'est dangereux — voici pourquoi : ! ! Budget lien 512k 512 kbps (100%) ! └─ priority voix (3 appels G.711) 256 kbps ( 50%) ! └─ control plane (OSPF hellos, BGP keepalives…) ~128 kbps ( 25%) ← réservé ! └─ reste pour données, vidéo, backup ~128 kbps ( 25%) ← quasi rien ! ! ! Règle empirique : priority ≤ 33% du lien ! Au-delà, le risque de starvation des autres classes devient réel. ! ! ── Conclusion : 3 appels G.711 sur 512k, c'est trop ! Passer à G.729 : 3 × 30k = 90k = 17.5% → budget sain, reste 57.5% pour données class CM-VOIX priority percent 18 ! 18% de 512k = ~92k → 3 appels G.729 avec marge ! ! ── priority percent — syntaxe et référence ────────────── ! La référence est la commande 'bandwidth' de l'interface (pas la vitesse physique) ! ! ⚠ PIÈGE : bandwidth par défaut ≠ CIR sur Ethernet WAN ! ! Interface Serial → bandwidth par défaut = clockrate → souvent correct ! Interface GigE → bandwidth par défaut = 1 000 000 kbps (vitesse physique !!!) ! ! Si tu oublies de déclarer la CIR sur une GigE : ! priority percent 25 = 25% de 1 000 000k = 250 Mbps → le policer ne sert à rien ! ! ! Il faut donc déclarer manuellement la CIR réelle du lien WAN : interface GigabitEthernet0/1 bandwidth 512 ! déclare ta CIR à IOS — référence pour tous les calculs % QoS ! ! ne limite PAS le trafic — c'est uniquement un paramètre IOS ! ! le vrai shaping est fait par 'shape average' dans la policy ! ! ── Si le lien monte de 512k à 1M : changer bandwidth → tout s'adapte interface GigabitEthernet0/1 bandwidth 1000 ! lien upgradé à 1M — priority percent 25 = 250k automatiquement ! ! sans toucher à la policy-map — c'est l'avantage de percent ! class CM-VOIX priority percent 25 ! 25% = valeur raisonnable sur un lien dimensionné pour la voix
priority 64 pour de la voix G.711 parce que "G.711 = 64 kbps". Faux — le codec seul c'est 64 kbps, mais les headers IP/UDP/RTP ajoutent 40 octets par paquet. Le débit réel par appel est nettement supérieur.
| Codec | Débit codec | Payload (20ms) | Headers IP/UDP/RTP | Overhead | Débit réel/appel |
|---|---|---|---|---|---|
| G.711 | 64 kbps | 160 octets | 40 octets | 40/(160+40) = 20% | ~85 kbps |
| G.729 | 8 kbps | 20 octets | 40 octets | 40/(20+40) = 67% | ~30 kbps |
| G.729 + cRTP | 8 kbps | 20 octets | 4 octets (compressés) | 4/(20+4) = 17% | ~11 kbps |
! ── Formule de dimensionnement ────────────────────────── ! priority = nb_appels × débit_réel/appel × marge (1.10 à 1.20) ! ! Scénario A : 2 appels G.711 simultanés max ! priority = 2 × 85 × 1.1 = 187 kbps → arrondir à 192 class CM-VOIX priority 192 ! 2 appels G.711 avec marge 10% ! Scénario B : 10 appels G.729 simultanés max ! priority = 10 × 30 × 1.1 = 330 kbps class CM-VOIX priority 330 ! 10 appels G.729 avec marge 10% ! Scénario C : lien 512k, 2 appels G.711 ! priority 192 = 37.5% du lien ← attention, limite recommandée 33% ! Considérer G.729 ou réduire le nombre d'appels simultanés ! ! Ajouter signalisation SIP/H.323 : +10-20 kbps par trunk actif class CM-SIGNALISATION bandwidth 20 ! CBWFQ suffit — la signalisation tolère +latence
! ── Sans shape parent — LLQ rarement actif ──────────────── interface GigabitEthernet0/1 bandwidth 512 ! déclare la CIR à IOS service-policy output PM-LLQ-SEUL ! LLQ actif seulement si TX queue pleine ! Résultat : en trafic normal (interface GigE), les paquets filent dans le FIFO hardware ! La TX queue ne se remplit jamais → LLQ ne s'active pas → voix n'est pas prioritaire ! ! ── Avec shape parent — configuration complète ─────────── ! ! ÉTAPE 1 — policy enfant : les vraies règles LLQ + CBWFQ policy-map PM-CHILD-LLQ class CM-VOIX priority 128 ! LLQ — voix strictement prioritaire, policer 128k intégré class CM-VIDEO bandwidth 128 ! CBWFQ — vidéo garantie, servi quand voix satisfaite class CM-APPS bandwidth 128 ! CBWFQ — apps métier garanties class class-default fair-queue ! WFQ pour le reste (backup, inconnu…) ! ! ÉTAPE 2 — policy parent : shape + appel de la policy enfant policy-map PM-PARENT class class-default shape average 512000 ! crée le sas logiciel à 512 kbps ! ! → la Shape Queue est toujours pleine → LLQ toujours actif service-policy PM-CHILD-LLQ ! LLQ + CBWFQ tournent dans ce sas ! ! ÉTAPE 3 — appliquer sur l'interface interface GigabitEthernet0/1 bandwidth 512 ! déclare la CIR — référence pour les calculs % service-policy output PM-PARENT ! ← toujours le PARENT sur l'interface, jamais l'enfant ! ! Hiérarchie : PM-PARENT (shape 512k) → PM-CHILD-LLQ (priority + bandwidth) ! Le shaping est traité en détail dans le chapitre QoS Shaping
priority par policy-map.priority possibles — mais avec des niveaux différents.priority level 1 = priorité absolue (voix)priority level 2 = priorité haute (vidéo interactive) — servie après level 1bandwidth CBWFQ. Deux niveaux de priority = complexité accrue, risque de starvation en cascade.
! ── Multi-level LLQ (IOS-XE 15.x+) ─────────────────────── policy-map PM-MULTI-LLQ class CM-VOIX priority level 1 128 ! level 1 = absolu — servie avant TOUT class CM-VIDEO-RT priority level 2 256 ! level 2 — servie après level 1, avant CBWFQ class CM-APPS bandwidth 128 ! CBWFQ classique class class-default fair-queue ! ⚠ Risque : si level 1 + level 2 saturent → starvation CBWFQ ! Dimensionner level 1 + level 2 ≤ 50% du lien au total
priority est ignoré ou refusé par IOS.bandwidth (CBWFQ) et class-default.
| Scénario | Lien | priority | Reste CBWFQ | Résultat |
|---|---|---|---|---|
| Bien dimensionné | 512 kbps | 128 (25%) | 384 kbps pour vidéo+apps+backup | OK — voix protégée, autres classes ont de la place |
| Priority trop haut | 512 kbps | 400 (78%) | 112 kbps seulement | Starvation — vidéo et apps manquent de bande passante |
| Priority trop bas | 512 kbps | 64 (12.5%) | 448 kbps | Drops voix — 3 appels G.711 = 255 kbps → 191 kbps droppés |
| Règle terrain | Tout lien | 20-30% max | ≥ 70% pour le reste | Jamais dépasser 33% — laisser de la marge pour les pics voix |
! ── Vérifier les drops sur la priority queue ────────────── show policy-map interface Serial0/0/0 ! Extrait de sortie : Class-map: CM-VOIX (match-all) packets: 12450, bytes: 747000 Output Queue: Conversation 265/1 (pkts matched/bytes matched) 12450/747000 (total drops) 0 ! ← 0 drops = priority bien dimensionné ✓ (total drops) 847 ! ← drops > 0 = priority trop bas ! augmenter ! ── Réinitialiser les compteurs ─────────────────────────── clear counters Serial0/0/0 ! ── Vérifier en temps réel ──────────────────────────────── show policy-map interface Serial0/0/0 | include drops|Class|packets
priority = strict priority + policer intégré — l'excès est droppé, pas bufferisé! ── Étape 1 : class-maps ────────────────────────────────── class-map match-all CM-VOIX match dscp ef ! VoIP RTP — DSCP 46 class-map match-all CM-VIDEO match dscp af41 ! Teams, Webex vidéo — DSCP 34 class-map match-all CM-APPS match dscp af31 ! ERP, CRM — DSCP 26 ! class-default matche tout ce qui reste (backup, web...)
! ── Étape 2 : child policy — queuing dans les 512 kbps ─── policy-map PM-WAN-CHILD class CM-VOIX priority 128 ! LLQ — sort EN PREMIER — 128 kbps max class CM-VIDEO bandwidth 128 ! CBWFQ — 128 kbps garanti minimum class CM-APPS bandwidth 128 ! CBWFQ — 128 kbps garanti minimum class class-default fair-queue ! backup et reste — ce qui reste (~128k)
! ── Étape 3 : parent policy — shape total à 512 kbps ───── policy-map PM-WAN-PARENT class class-default shape average 512000 ! plafonner tout le trafic à 512 kbps service-policy PM-WAN-CHILD ! appliquer les priorités dans les 512k ! ── Étape 4 : application sur l'interface WAN ───────────── interface Serial0/0/0 ! ou GigabitEthernet vers PE MPLS service-policy output PM-WAN-PARENT
% bandwidth sum exceeds available bandwidth.
! Vue complète avec compteurs par classe show policy-map interface Serial0/0/0 output ! Vue synthétique — toutes les interfaces show policy-map interface ! Vérifier le shaping show traffic-shape show traffic-shape statistics ! Vérifier les class-maps show class-map show class-map CM-VOIX ! Reset des compteurs clear counters Serial0/0/0
| Ce que vous voyez | Signification | Action |
|---|---|---|
| drops LLQ = 0 | Voix jamais droppée — LLQ bien dimensionné | Rien |
| drops LLQ > 0 | Voix droppée — trafic EF dépasse la priority BW | Augmenter priority ou vérifier marquage EF |
| drops class-default élevés | Normal — backup droppé en priorité | Normal si voix/video OK |
| offered rate > bandwidth sur CBWFQ | Classe en congestion — utilise son minimum garanti | Normal — c'est le but de CBWFQ |
LLQ seul en egress sur une interface 1G vers un lien MPLS 512 kbps ne sert à rien. Le LLQ s'applique dans le buffer du routeur. Si le lien physique est 1G, le routeur ne bufferise presque jamais — tout passe directement sur le fil. La congestion se produit côté ISP, hors de portée du LLQ. Toujours coupler shape (parent) + LLQ (child). Le shaping crée artificiellement de la congestion dans le routeur pour que le LLQ ait quelque chose à gérer.
bandwidth 128 = minimum garanti (kbps), pas de priorité. La voix peut
encore attendre dans sa queue derrière d'autres paquets.
priority 128 = sort en PREMIER, toujours, ET plafond à 128 kbps.
Pour la voix : toujours priority. Pour les données : bandwidth.
IOS refuse si la somme de tous les bandwidth et priority
dépasse 75% de la bande passante de l'interface (ou du parent shapé).
Sur 512 kbps → max allouable = 384 kbps.
Si tu mets 3 × 200k = 600k, IOS retourne une erreur à l'application du service-policy.
IOS n'accepte qu'une seule commande priority par policy-map
(une seule LLQ). Si tu veux plusieurs trafics en priorité (voix + signalisation),
mets-les dans la même class-map avec match-any.
Deux classes priority dans la même policy → IOS refuse.
Sans fair-queue dans class-default, la classe default utilise FIFO —
les flux dans class-default se comportent comme avant (backup écrase tout dans ce bucket).
Ajouter fair-queue dans class-default donne de l'équité entre les flux
non classifiés sans configuration par flux.
bandwidth dans une policy-map est en kbps — bandwidth 128 = 128 kbps. À ne pas confondre avec shape average 512000 (bps) ou police rate 1000000 bps (bps).
Dans une child policy sous un parent shapé, bandwidth percent 25 se calcule sur la bande passante du parent shapé, pas de l'interface physique.
Parent shapé à 512 kbps → bandwidth percent 25 dans la child = 128 kbps.
Cliquez sur une carte pour révéler la réponse.
bandwidth — garantit un minimum mais la classe attend son tour de scheduler. LLQ utilise priority — la classe sort EN PREMIER, avant toutes les autres, à chaque cycle. LLQ = CBWFQ + priority queue stricte.priority par policy-map. Pour mettre voix + signalisation en LLQ, créer une class-map match-any qui matche les deux DSCP.