🏛️ ArchiZeroTrust CCIE QoS 04 — Policing
🚔 QoS · Policing

Traffic Policing

Le gendarme du réseau : décision instantanée, sans buffer. Un paquet arrive, le bucket a des jetons → CONFORM. Pas assez → EXCEED ou VIOLATE. Les paquets non conformes sont droppés ou remarqués — jamais retardés.

Policing ≠ Shaping. Le policing droppe ou remarque les paquets en excès — instantanément, sans buffer. Le shaping retarde les paquets dans une file d'attente. Policing = gendarme. Shaping = régulateur de vitesse.

Un policer est un token bucket avec une règle : si le paquet ne trouve pas assez de jetons, il est traité immédiatement selon l'action configurée. Il n'attend pas. C'est la différence fondamentale avec le shaping qui, lui, maintient un buffer de délai.

✅ CONFORM

Le paquet a trouvé suffisamment de jetons dans le bucket. Il est dans le CIR.

action: transmit (défaut)

⚠️ EXCEED

Le paquet dépasse le CIR mais reste dans le PIR (dual bucket uniquement). BC épuisé, BE disponible.

action: drop ou set-dscp-transmit

❌ VIOLATE

Le paquet dépasse tout (single bucket: au-delà du BC ; dual bucket: au-delà du BE).

action: drop (défaut)
CritèrePolicingShaping
Excès de trafic Drop ou remark (immédiat) Buffer → retard
Buffer utilisé Non Oui
Délai ajouté Non Oui (jitter possible)
Application typique Ingress (ISP), inter-site Egress vers WAN
Impact voix Drops → dégradation Latence → acceptable si bien config
Débit moyen résultant ≤ CIR (bursts perdus) = CIR (bursts bufferisés)

Placement typique du policer

Ingress (input) — Le plus courant. L'ISP police le trafic entrant depuis le client avant même de le router. Permet de protéger le réseau du fournisseur.
Egress (output) — Moins courant pour le policing (shaping préféré). Utilisé pour limiter le débit vers un lien ou un partenaire spécifique.
Local policy — Policing sur le control plane (CoPP). Protection du CPU du routeur contre les floods.
En pratique : le policing ingress est la norme ISP pour enforcer les SLA. Le client paie pour 100 Mbps, l'ISP police à 100 Mbps en entrée sur son interface vers le client.
Single Token Bucket = policer 2 couleurs. Un seul bucket de taille BC. Un seul seuil : CIR. Résultat : CONFORM (≤ CIR) ou VIOLATE (> CIR). Pas de zone intermédiaire EXCEED.
PKT BC (tokens) CIR ↓ tokens/s Assez de jetons ? OUI CONFORM → TX NON VIOLATE → DROP
ParamètreSignificationValeur typique
CIRCommitted Information Rate — débit de génération de jetons (bps)Débit contractuel ISP
BCCommitted Burst Size — taille du bucket (bits). Max burst instantané.CIR × Tc (Tc ≈ 125 ms–1 s)
TcTiming interval = BC / CIR. IOS utilise Tc ≈ 125 ms par défaut.BC / CIR en secondes
⚠️ Single bucket = 2 couleurs seulement. CONFORM (transmit) ou VIOLATE (drop/remark). Il n'y a pas de zone EXCEED dans un policer single bucket. Pour avoir EXCEED, il faut un dual bucket.
! ── Syntaxe 1 : "police cir" ── IOS classique (12.3 et avant)
! Paramètres positionnels, pas de mot-clé "rate", pas de "percent"
policy-map PM-POLICE-IN
 class CM-ALL
  police cir 1000000 bc 187500
    conform-action transmit
    exceed-action  drop


! ── Syntaxe 2 : "police rate" ── IOS 12.4+ / IOS-XE (moderne)
! Mot-clé "rate" explicite, supporte "percent", plus lisible
policy-map PM-POLICE-IN
 class CM-ALL
  police rate 1000000 bps      ! ou : police rate 10 percent
    burst 187500
    conform-action transmit
    exceed-action  drop
Résultat identique sur le dataplane — la différence est syntaxique uniquement. En pratique : utiliser police rate sur tout équipement IOS-XE récent (ISR 4K, ASR, Catalyst). Réserver police cir si tu travailles sur du vieux IOS 12.3 ou si tu lis une config legacy.
Dual Token Bucket = policer 3 couleurs (RFC 2698)."Le dual bucket (3 couleurs, RFC 2698) a été introduit directement avec la syntaxe police cir/pir sur IOS 12.4+. Il n'y a donc qu'une seule façon de l'écrire — pas d'équivalent legacy. Deux buckets : BC (committed) et BE (excess/burst). Trois décisions : CONFORM, EXCEED, VIOLATE. Permet un débit de burst jusqu'au PIR avec remark DSCP au lieu de drop immédiat.
PKT Bucket BC CIR tokens CIR = remplissage Bucket BE PIR tokens PIR = remplissage Évaluer buckets BC ok CONFORM → transmit BC épuisé BE ok EXCEED → set-dscp/drop BC+BE épuisés VIOLATE → drop
ParamètreSignificationNote
CIRCommitted Information Rate — débit de remplissage du bucket BC (bps)Débit garanti
BCCommitted Burst Size — taille bucket CIR (bits)Burst court garanti
PIRPeak Information Rate — débit de remplissage du bucket BE (bps)PIR > CIR
BEExcess Burst Size — taille bucket PIR (bits). Zone EXCEED.Burst au-delà du CIR
✅ Cas d'usage dual bucket : ISP qui veut permettre du burst ponctuel au-delà du CIR sans couper brutalement. EXCEED → remark CS1 (Scavenger) → réseau transporte si capacité dispo, droppe en priorité si congestion. VIOLATE → drop immédiat.
! Dual bucket — 3 couleurs — RFC 2698
policy-map PM-DUAL-POLICE
 class class-default
  police
    cir 1000000              ! 1 Mbps committed
    bc  125000               ! 125 kbits burst BC
    pir 2000000              ! 2 Mbps peak (PIR)
    be  250000               ! 250 kbits burst BE
    conform-action transmit
    exceed-action  set-dscp-transmit cs1  ! Remark + transmet
    violate-action drop
CPE Client port physique 1G 1 Gbps CE Customer Edge 1 Gbps PE — ISP Provider Edge 🚔 POLICER INGRESS service-policy input ≤100 Mbps CONFORM → TX >100 Mbps → DROP ✗ Core ISP réseau ISP Internet
Contexte : Routeur PE de l'ISP. Le client a un port physique 1 Gbps mais n'a payé que 100 Mbps. Sans policing, il peut injecter 1 Gbps dans le réseau ISP et dégrader les autres clients. L'ingénieur pose un policer en ingress sur l'interface PE côté client — tout ce qui dépasse 100 Mbps est droppé instantanément.
! PE-ISP — interface vers le client, port physique 1 Gbps
! Contrat client : 100 Mbps — on droppe tout ce qui dépasse

ip access-list extended ACL-CLIENT-TOUT
 permit ip any any

class-map match-all CM-CLIENT
 match access-group name ACL-CLIENT-TOUT

policy-map PM-POLICE-CLIENT
 class CM-CLIENT
  police rate 100000000 bps       ! CIR = 100 Mbps
    conform-action transmit       ! dans les 100 Mbps → forwarded
    exceed-action  drop           ! au-delà → droppé sans pitié

interface GigabitEthernet0/1      ! port physique 1G vers le client
 service-policy input PM-POLICE-CLIENT   ! ingress — avant routage
CPE Client 1G physique 1 Gbps PE — ISP Dual Bucket Policer ≤100 Mbps CONFORM 100–200 Mbps EXCEED >200 Mbps VIOLATE transmit (EF/AF) remark CS1 + TX >200 Mbps → DROP ✗ Core ISP WRED droppe CS1 si congestion Internet CIR=100 Mbps PIR=200 Mbps
Contexte : Même ISP, même client 100 Mbps. Mais cette fois l'ISP veut être moins brutal — il tolère un burst jusqu'à 200 Mbps (PIR), mais remarque ces paquets en excès CS1 (Scavenger). Ils transitent si le réseau a de la capacité, mais seront droppés en priorité par WRED en cas de congestion. Au-delà de 200 Mbps → drop immédiat.
! Dual bucket — 3 couleurs — CONFORM / EXCEED / VIOLATE
! CIR=100Mbps → CONFORM transmit
! 100→200Mbps → EXCEED remark CS1 + transmit  (best effort si capacité)
! >200Mbps   → VIOLATE drop

policy-map PM-POLICE-DUAL
 class CM-CLIENT
  police
    cir 100000000                  ! CIR = 100 Mbps (contrat)
    bc  12500000                  ! BC  = 100M × 125ms = 12,5 Mbits
    pir 200000000                  ! PIR = 200 Mbps (burst toléré)
    be  25000000                   ! BE  = 200M × 125ms = 25 Mbits
    conform-action transmit        ! ≤ 100 Mbps → passe normalement
    exceed-action  set-dscp-transmit cs1  ! 100-200 Mbps → remark + transmit
    violate-action drop             ! > 200 Mbps → drop

interface GigabitEthernet0/1
 service-policy input PM-POLICE-DUAL
DC1 Serveurs apps (AF31) backup (CS1) 10G Router DC1 🚔 POLICER EGRESS output 30% = 300 Mbps apps AF31 — 70% libre backup CS1 ≤ 300 Mbps backup >300 Mbps → DROP ✗ ──── 1 Gbps inter-DC ──── Router DC2 pas de policer traffic reçu proprement 10G DC2 Serveurs réplication DB backup S3
Contexte : Lien 1 Gbps entre deux datacenters, partagé par tous les services. Un job de backup S3 nocturne peut saturer le lien et tuer les réplications de base de données. L'ingénieur classe le trafic backup (DSCP CS1) et le limite à 30% du lien. Les 70% restants sont libres pour les applis critiques.
! Lien inter-DC 1 Gbps — limiter le backup à 30% = 300 Mbps max

class-map match-all CM-BACKUP
 match dscp cs1                   ! trafic marqué Scavenger = backup

policy-map PM-LIMIT-BACKUP
 class CM-BACKUP
  police rate 30 percent          ! 30% de la bw interface = 300 Mbps
    conform-action transmit       ! backup dans les 300 Mbps → passe
    exceed-action  drop           ! backup > 300 Mbps → droppé
 class class-default
  ! tout le reste → pas de police, utilise les 70% libres

interface TenGigabitEthernet0/0   ! lien 1 Gbps inter-DC
 service-policy output PM-LIMIT-BACKUP  ! egress — en sortie vers le DC distant
DécisionActionEffetQuand l'utiliser
CONFORMtransmitForwarded tel quelToujours — trafic dans le CIR
EXCEEDdropDroppéISP strict — zéro tolérance burst
EXCEEDset-dscp-transmit cs1Remark + transmitTolérer le burst, dropper si congestion aval
EXCEEDset-dscp-transmit af11Remark AF11 + transmitDéclasser en Low Priority Data
VIOLATEdropDroppéToujours — au-delà du PIR, plus d'excuse
VIOLATEset-dscp-transmit cs1Remark + transmitRare — tolérance maximale, réseau absorbe
Formule BC = CIR × Tc — Tc recommandé Cisco : 125 ms à 250 ms.
Si non spécifié, IOS calcule BC automatiquement (CIR / 8 = 125 ms de Tc).
Exemple : CIR = 100 Mbps → BC auto = 100 000 000 / 8 = 12 500 000 bits.
R1# show policy-map interface GigabitEthernet0/0 input
GigabitEthernet0/0
Service-policy input: PM-POLICE-IN ← policy appliquée en input
Class-map: CM-CRITIQUE (match-all)
2847 packets, 3682430 bytes ← total matchés par cette class
30 second offered rate 450000 bps ← débit actuel en entrée
Match: dscp ef (46)
police:
cir 1000000 bps, bc 125000 byte ← CIR=1Mbps, BC=125kB (=1Mbit×0.125s)
conformed 2815 packets, 3639890 bytes; actions:
transmit ← paquets dans le CIR → forwarded
exceeded 32 packets, 42540 bytes; actions:
drop ← paquets en excès → droppés (single bucket = violate)
conformed 440000 bps, exceeded 8000 bps ← débits moyens
Class-map: class-default (match-any)
504 packets, 64512 bytes
30 second offered rate 10000 bps, drop rate 0 bps ← pas de police → 0 drop
! Vue complète avec compteurs
show policy-map interface GigabitEthernet0/0
show policy-map interface GigabitEthernet0/0 input
show policy-map interface GigabitEthernet0/0 output

! Vue des policy-maps configurées (sans compteurs)
show policy-map
show policy-map PM-POLICE-IN

! Réinitialiser les compteurs
clear counters GigabitEthernet0/0

! Vérifier la class-map
show class-map CM-CRITIQUE

! Debug (attention en prod !)
debug qos police
Ce que vous voyezCe que ça signifieAction
exceeded 0 packetsTout le trafic est dans le CIR — ou le policer ne matche rienVérifier class-map avec show
exceeded augmente en continuTrafic dépasse le CIR régulièrement — CIR trop bas ou burst applicatifAugmenter BC ou CIR
exceeded élevé sur voix EFVoix droppée → qualité dégradée. Policing trop agressif sur trafic sensibleNe pas policer EF ou augmenter CIR voix
conformed 0, exceeded élevéBucket vide au démarrage ? Non — bucket démarre plein. Problème de class-map ou CIR = 0Vérifier config police

⚠️ 1 — Policing droppe la voix EF

Si vous policez un flux EF (DSCP 46) trop agressivement, vous droppez des paquets voix. La voix tolère la perte de 1–2% max. Un policer mal dimensionné sur un lien VoIP provoque une dégradation sonore immédiate. Règle : ne policez jamais EF ou dimensionnez le CIR avec marge (CIR ≥ 150% du débit voix estimé).

⚠️ 2 — exceed-action vs violate-action

Sur un single bucket, exceed-action et violate-action sont synonymes — IOS les traite pareil. Sur un dual bucket, ils sont distincts : exceed = BC épuisé mais BE disponible ; violate = BC et BE épuisés. Ne pas configurer les deux dans le même policer single bucket.

⚠️ 3 — Le bucket démarre PLEIN

Au démarrage d'un policer, le bucket BC est plein (= BC bits disponibles). Premier paquet après un silence = burst autorisé jusqu'à BC bits. C'est intentionnel : BC représente le burst autorisé après une période d'inactivité. Un policer ne commence jamais à 0 token.

⚠️ 4 — police rate percent et bande passante de l'interface

police rate 50 percent se base sur la bande passante configurée de l'interface (bandwidth), pas sur la bande passante physique. Sur une interface GE sans bandwidth configuré, le percent se calcule sur 1 Gbps. Sur une interface avec bandwidth 10000 (10 Mbps), 50% = 5 Mbps — même si le lien physique est 1 Gbps.

⚠️ 5 — ingress vs egress — où policer ?

Le policing ingress (input) est appliqué avant le routage — les paquets droppés n'utilisent pas de ressources de forwarding. C'est le comportement ISP classique. Le policing egress (output) est appliqué après décision de routage — les ressources de lookup sont consommées même pour les paquets qui seront droppés. Préférez ingress quand possible.

⚠️ 6 — Policing hiérarchique : attention au parent

Dans une policy hiérarchique (parent shape + child police), le police dans la child ne peut pas dépasser le shape du parent. Si parent shape = 10 Mbps et child police CIR = 20 Mbps, le policer child est inutile — le parent a déjà limité à 10 Mbps. Dimensionner child CIR ≤ parent shape.

⚠️ 7 — 1 token = 1 bit sur IOS

Sur IOS/IOS-XE, 1 token = 1 bit (pas 1 octet). BC est exprimé en bits dans la commande police cir X bc Y (Y en bits). Un paquet de 1500 octets = 12 000 tokens. Si BC = 12 000, un seul paquet de 1500 B vide le bucket. Le show policy-map affiche BC en octets — ne pas confondre avec la config.

⚠️ 8 — set-dscp-transmit ≠ drop

L'action set-dscp-transmit cs1 sur exceed remark le paquet et le transmet. Il n'est pas droppé. Il sera droppé en priorité si une congestion survient en aval (WRED avec seuil bas pour CS1). C'est le pattern "remarquer l'excès plutôt que dropper" — adapté aux données non critiques.

Simulateur Dual Bucket (3 couleurs). Configurez CIR, BC, PIR et BE. Envoyez des paquets et observez le comportement CONFORM / EXCEED / VIOLATE en temps réel. Les jetons se régénèrent automatiquement selon le CIR et le PIR.
512 kbps
64 kbits
1024 kbps
128 kbits
Tc (CIR)125.0 ms
Tc (PIR)125.0 ms
BC tokens65536
BE tokens131072
BC Bucket
100%
64k/64k bits
BE Bucket
100%
128k/128k bits
Paquets CONFORM 0
Paquets EXCEED 0
Paquets VIOLATE 0
Total paquets 0
Envoyez un paquet →
// Log des événements — envoyez un paquet...

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

Quelle est la différence fondamentale entre policing et shaping ?
Policing droppe ou remarque les paquets en excès instantanément (pas de buffer). Shaping retarde les paquets dans un buffer pour étaler le débit. Policing = gendarme. Shaping = régulateur.
cliquer
Un policer single bucket a-t-il une action EXCEED ?
Non. Un single bucket est 2 couleurs : CONFORM ou VIOLATE. Pour avoir EXCEED (3 couleurs), il faut un dual bucket avec PIR/BE configurés.
cliquer
À quel niveau le bucket BC est-il à l'activation du policer ?
Le bucket démarre PLEIN (= BC bits disponibles). Le premier paquet bénéficie du burst maximal. Ce n'est pas un piège — c'est le design : BC = burst autorisé après une période d'inactivité.
cliquer
Que fait l'action set-dscp-transmit cs1 sur exceed ?
Elle remark le DSCP du paquet en CS1 (Scavenger) et le transmet. Le paquet n'est PAS droppé. Il sera droppé en priorité si une congestion survient en aval (typiquement via WRED avec seuil bas pour CS1).
cliquer
Sur IOS, combien de bits équivaut 1 token ?
1 token = 1 bit. Un paquet de 1500 octets = 12 000 tokens. Le show policy-map affiche BC en octets mais la commande police cir X bc Y prend Y en bits — ne pas confondre.
cliquer
Pourquoi ne faut-il généralement pas policer le trafic DSCP EF ?
EF = Expedited Forwarding = voix VoIP. La voix tolère 1-2% de perte max. Un policer trop agressif droppe des paquets RTP, provoquant une dégradation sonore immédiate. EF doit être protégé par LLQ, pas limité par policing.
cliquer
Quelle est la formule pour calculer BC recommandé ?
BC = CIR × Tc. Cisco recommande Tc = 125 ms à 250 ms. Exemple : CIR = 1 Mbps, Tc = 125 ms → BC = 1 000 000 × 0,125 = 125 000 bits = 15 625 octets.
cliquer
Dans un policer dual bucket, que se passe-t-il si BC est épuisé mais BE disponible ?
Le paquet est EXCEED (pas VIOLATE). L'action EXCEED s'applique — typiquement set-dscp-transmit cs1 ou drop selon config. Le bucket BE est consommé.
cliquer
Où vaut-il mieux appliquer le policing : ingress ou egress ?
Ingress (input) est préféré : les paquets droppés n'ont pas consommé de ressources de routage/switching. En egress, la décision de routage a déjà été prise — les ressources sont gaspillées pour les paquets qui seront droppés.
cliquer
police rate 50 percent — sur quelle valeur se base le calcul ?
Sur la commande bandwidth configurée sur l'interface, pas sur la bande passante physique. Sans commande bandwidth, IOS utilise la vitesse physique. Attention : un lien GE sans bandwidth explicite → 50% = 500 Mbps.
cliquer