🏛️ ArchiZeroTrust / CCIE / QoS / 02 — Classification & Marquage
📶 QoS · 02

Classification & Marquage

Classifier le trafic, c'est lui attribuer une identité QoS qui persistera à travers le réseau. Marquer, c'est inscrire cette identité dans les bits de l'en-tête IP ou Ethernet pour que chaque équipement sur le chemin puisse prendre des décisions cohérentes.

Classifier = identifier le type de trafic (voix, vidéo, web…) en inspectant les en-têtes.
Marquer = inscrire cette classification dans les bits du paquet (DSCP, CoS…) pour que les équipements suivants n'aient pas à ré-inspecter.

Règle d'or : classifier une seule fois, le plus tôt possible (à la périphérie du réseau), puis propager la marque. C'est le principe du modèle DiffServ.
PC / Téléphone sans marquage DSCP = 0 Switch Accès Trust boundary CLASSIFY + MARK DSCP EF / AF41… marqué Routeur trust DSCP QoS → ok DSCP intact Internet / WAN DSCP souvent remis à 0 ! Destinataire DSCP = ? ① Trust Boundary Classifier + Marquer ② Cœur de réseau Faire confiance au marquage ③ Frontière Re-marquer si nécessaire
ChampBitsValeurs possiblesPortéePersistance
DSCP6 bits (IP ToS)0–63 (64 valeurs)L3 — tout le chemin IPPersist jusqu'à réécriture
CoS (PCP 802.1p)3 bits (trame Ethernet)0–7 (8 valeurs)L2 — un seul segmentPerdu au routage L3
IP Precedence3 bits (IP ToS, héritage)0–7 (8 valeurs)L3 — tout le chemin IPPersist (sous-ensemble DSCP)
MPLS EXP (TC)3 bits (label MPLS)0–7 (8 valeurs)L2.5 — réseau MPLSPerdu hors MPLS
QoS GroupInterne IOS0–99Local au routeur uniquementJamais transmis
MéthodeNiveauPrécisionCoût CPU
match dscp / match cosL3/L2Dépend de la politique de marquage amontTrès faible
match access-group (ACL)L3–L4IP source/dest, port TCP/UDPMoyen
match protocol (NBAR)L4–L7Application (HTTP, RTP, Skype…)Élevé
match input-interfaceL2Interface d'entrée (VLAN, port)Très faible
Octet ToS (Type of Service) — 8 bits dans l'en-tête IPv4 bit 7 bit 6 bit 5 bit 4 bit 3 bit 2 bit 1 bit 0 D S C P 5 4 ECN 2 bits ← 6 bits DSCP → 64 valeurs possibles (0–63) ECN Congestion explicite EF = 46 décimal = 101110 binaire AF41 = 34 = 100010 BE = 0 = 000000
Nom DSCPValeur déc.BinairePHBUsage typiqueCoS par défaut
EF46101110Expedited ForwardingVoix G.711/G.729, latence <150ms5
CS648110000Class Selector 6Protocoles routage (OSPF, BGP, EIGRP)6
CS540101000Class Selector 5Vidéo broadcast5
AF4134100010Assured Forwarding 4-1Vidéo interactive (visioconf) — drop faible4
AF4236100100Assured Forwarding 4-2Vidéo interactive — drop moyen4
AF4338100110Assured Forwarding 4-3Vidéo interactive — drop élevé4
CS432100000Class Selector 4Vidéo conférence signalisation4
AF3126011010Assured Forwarding 3-1Applications critiques — drop faible3
AF3228011100Assured Forwarding 3-2Applications critiques — drop moyen3
AF3330011110Assured Forwarding 3-3Applications critiques — drop élevé3
CS324011000Class Selector 3Signalisation voix (SIP, H.323)3
AF2118010010Assured Forwarding 2-1Transactions business — drop faible2
AF2220010100Assured Forwarding 2-2Transactions business — drop moyen2
AF2322010110Assured Forwarding 2-3Transactions business — drop élevé2
AF1110001010Assured Forwarding 1-1Données élastiques — drop faible1
AF1212001100Assured Forwarding 1-2Données élastiques — drop moyen1
AF1314001110Assured Forwarding 1-3Données élastiques — drop élevé1
CS216010000Class Selector 2OAM (gestion réseau)2
CS18001000Class Selector 1Scavenger (P2P, vidéo non-critique)1
DF / BE / CS00000000Default / Best EffortTrafic non marqué — tout le reste0
AFxy : x = classe (1–4), y = drop precedence (1=faible, 2=moyen, 3=élevé)
Formule décimale : DSCP = 8x + 2y
Ex: AF41 = 8×4 + 2×1 = 32 + 2 = 34 | AF23 = 8×2 + 2×3 = 16 + 6 = 22

Dans une même classe AF, plus y est élevé, plus le paquet est droppé en premier par WRED.
AF13 (14) est droppé avant AF12 (12) qui est droppé avant AF11 (10).
Trame Ethernet 802.1q — champ Tag Control Information (TCI) DST MAC SRC MAC TPID 0x8100 TCI — Tag Control Information (16 bits) EtherType Payload (IP…) FCS PCP 3 bits = CoS DEI 1 bit VLAN ID (VID) 12 bits — 4096 VLANs possibles ← CoS ici Priority Code Point valeurs 0–7 ⚠ CoS présent seulement sur trames 802.1q (trunk/dot1q) Perdu sur accès non-taggé et au routage L3
CoS 0 DSCP 0 BE CoS 1 DSCP 10 AF11 CoS 2 DSCP 18 AF21 CoS 3 DSCP 26 AF31 CoS 4 DSCP 34 AF41 CoS 5 DSCP 46 EF — Voix CoS 6 DSCP 48 CS6 Mapping par défaut Cisco — modifiable avec mls qos map cos-dscp
CoS est L2 — perdu au routage ! Quand un routeur reçoit une trame 802.1q et route le paquet IP vers une autre interface, la trame est décapsulée et le CoS disparaît. Seul le DSCP (L3) persiste de bout en bout. Le CoS se re-dérive du DSCP sur l'interface de sortie si configuré (mls qos trust dscp + mapping).
L'IP Precedence utilise les 3 bits de poids fort de l'octet ToS (les mêmes que DSCP). C'est le système QoS pré-DiffServ — défini en 1981 dans RFC 791. DSCP et IP Precedence partagent le même octet : les 3 premiers bits de DSCP correspondent exactement aux 3 bits d'IP Precedence. Ils sont donc compatibles mais non équivalents.
ValeurNomUsage historiqueDSCP équivalent
7Network ControlRoutage réseau (réservé)CS7 (56)
6Internetwork ControlProtocoles routage (OSPF, BGP)CS6 (48)
5CRITIC/ECPVoixCS5 (40) — ≈ EF (46)
4Flash OverrideVidéoCS4 (32)
3FlashCall SignalingCS3 (24)
2ImmediateApplications critiquesCS2 (16)
1PriorityDonnées prioritairesCS1 (8)
0RoutineBest Effort (défaut)CS0 / BE (0)
Un équipement configuré avec match precedence 5 va matcher tous les paquets dont les 3 bits de poids fort du DSCP valent 101 — ce qui inclut DSCP 40 (CS5), 41, 42, 43, 44, 45 et 46 (EF).

C'est pourquoi on préfère match dscp ef (précis) à match precedence 5 (trop large — capture tout ce qui a le MSB = 101).
! IP Precedence — encore utilisé dans certains environnements legacy
class-map match-all CM-PRECEDENCE5
 match precedence 5    ! Matche DSCP 40-47 (trop large !)

class-map match-all CM-VOIX-PRECIS
 match dscp ef         ! Préférer cette syntaxe — précis (DSCP 46 uniquement)

! Marquer en IP Precedence (legacy)
 set precedence 5

! Marquer en DSCP (recommandé)
 set dscp ef
NBAR permet de classifier le trafic au niveau applicatif (L7) — là où les ACLs et le DSCP ne suffisent pas. Il inspecte le contenu des paquets pour identifier l'application : HTTP vs HTTPS vs YouTube vs Netflix, RTP audio vs RTP vidéo, Skype vs WebEx… Très puissant mais coûteux en CPU.
NBAR inspecte jusqu'à L7 — là où les autres méthodes s'arrêtent L2 — Ethernet / 802.1q match cos, match input-interface L3 — IP Header (DSCP, src/dst IP) match dscp, match access-group L4 — TCP/UDP (ports) match access-group (port 80, 443…) L5–L7 — Application (contenu) HTTP/HTTPS, YouTube, Netflix, RTP audio/vidéo, SIP, FTP, DNS, Skype, WebEx… NBAR uniquement Plus on monte dans les couches → plus c'est précis → plus c'est coûteux en CPU
! 1. Activer NBAR sur l'interface (obligatoire)
interface GigabitEthernet0/1
 ip nbar protocol-discovery

! 2. Utiliser dans une class-map
class-map match-any CM-VIDEO-STREAM
 match protocol youtube
 match protocol netflix
 match protocol rtsp

class-map match-any CM-VOIP
 match protocol rtp audio    ! RTP avec payload audio uniquement
 match protocol sip           ! Signalisation SIP

class-map match-any CM-SCAVENGER
 match protocol bittorrent
 match protocol kazaa2
 match protocol gnutella

! 3. Vérifier ce que NBAR détecte
show ip nbar protocol-discovery interface GigabitEthernet0/1
show ip nbar protocol-discovery top-n 10
show ip nbar port-map                  ! Voir le mapping port → protocole

! 4. Protocole custom (PDLM ou PDL)
ip nbar custom MON-APP transport tcp port 8080
Protocole NBARApplication détectéeMéthode détection
rtp audioVoix VoIP (G.711, G.729)Payload RTP + ports UDP dynamiques
rtp videoVidéo temps réelPayload RTP vidéo
sipSignalisation SIP (5060/5061)Inspection applicative
httpWeb HTTP port 80Port + signature
secure-httpHTTPS port 443Port + TLS signature
youtubeYouTube streamingDPI — deep packet inspection
netflixNetflix streamingDPI
bittorrentP2P BitTorrentSignature protocole
dnsDNS (UDP 53)Port + format
sshSSH (TCP 22)Port + handshake
snmpSNMP (UDP 161/162)Port
La trust boundary est le point du réseau à partir duquel on fait confiance aux marquages DSCP/CoS existants dans les paquets. En deçà de cette frontière, les marquages sont soit ignorés soit réécrit. Au-delà, on les propage tels quels. Placer la trust boundary trop loin = risque qu'un utilisateur marque lui-même ses paquets EF pour contourner la QoS.
⛔ Non fiable PC utilisateur DSCP EF (manuell) IP Phone DSCP EF (légitime) Trust Boundary Switch Accès ✅ Réseau de confiance DSCP re-marqué Routeur Core trust dscp WAN Edge Policing police + remark Phone → trust cos PC → untrust → remark mls qos trust cos
ÉquipementTrust ?Commande switchRaison
IP Phone CiscoTrust CoSmls qos trust cosLe phone marque correctement CoS 5 (voix) et CoS 3 (signalisation)
PC derrière IP PhoneUntrust — remark à 0mls qos cos 0L'utilisateur pourrait se marquer EF lui-même
Switch distribution CiscoTrust DSCPmls qos trust dscpLe réseau interne est de confiance
ServeurCas par casPolicy d'ingress + remarkMarquer selon l'application (voix serveur → EF, web → AF21)
Lien WAN / InternetJamaisRe-marquer en entréeDSCP peut avoir été altéré par le FAI
! Switch Cisco Catalyst — trust boundary avec IP Phone
interface FastEthernet0/1
 mls qos trust cos            ! Faire confiance au CoS du phone
 mls qos cos 0                 ! Remarquer le PC derrière à CoS 0
 spanning-tree portfast

! Uplink vers routeur : trust DSCP
interface GigabitEthernet0/1
 mls qos trust dscp
Le marquage MQC s'effectue dans une policy-map via la commande set. On peut marquer en ingress (à l'entrée) pour établir la politique QoS dès le bord, ou en egress pour adapter le marquage avant transmission. Le cas le plus courant : ingress policy qui classifie et marque le trafic entrant selon la source (VLAN, port, protocole NBAR).
! Scénario : interface LAN — marquer le trafic avant qu'il entre dans le réseau

! Class-maps de classification
class-map match-any CM-VOIP
 match protocol rtp audio         ! NBAR détecte RTP voix

class-map match-any CM-SIGNALISATION
 match protocol sip

class-map match-any CM-CRITIQUE
 match protocol ssh
 match access-group name ACL-ERP    ! Applications métier via ACL

class-map match-any CM-SCAVENGER
 match protocol bittorrent
 match protocol kazaa2

! Policy-map de marquage
policy-map PM-INGRESS-MARK
 class CM-VOIP
  set dscp ef               ! Voix → EF (46)
 class CM-SIGNALISATION
  set dscp cs3              ! Signalisation → CS3 (24)
 class CM-CRITIQUE
  set dscp af31             ! Apps critiques → AF31 (26)
 class CM-SCAVENGER
  set dscp cs1              ! P2P → Scavenger CS1 (8)
 class class-default
  set dscp default          ! Reste → Best Effort (0)

interface GigabitEthernet0/0  ! Interface LAN
 ip nbar protocol-discovery
 service-policy input PM-INGRESS-MARK
! SLA client : 10 Mbps garanti, surplus remarqué AF13 (droppé en priorité par WRED)
policy-map PM-SLA-CLIENT
 class CM-TRAFIC-CLIENT
  police rate 10000000 bps burst 125000 byte
   conform-action set-dscp-transmit af11   ! Dans contrat → AF11
   exceed-action  set-dscp-transmit af13   ! Hors contrat → AF13 (drop élevé)
   violate-action drop                     ! Très hors contrat → drop
! À la sortie vers Internet : l'ISP ne respecte pas DSCP
! On peut forcer le marquage ou re-marquer pour son propre usage
policy-map PM-WAN-EGRESS-REMARK
 class CM-VOIX
  set dscp ef               ! S'assurer que EF est bien là avant envoi
 class class-default
  set dscp default          ! Tout le reste à 0 — l'ISP ignorera de toute façon

⚠ DSCP remis à 0 par l'Internet

La majorité des FAI et des équipements Internet remettent le DSCP à 0 (ou le réécrivent) sur les trafics traversant leur réseau. La QoS interne DiffServ n'a donc aucune garantie end-to-end sur Internet. La solution : des accords SLA avec l'opérateur (MPLS QoS) ou des tunnels DSCP-aware (GRE qui copie le DSCP interne dans l'en-tête externe).

⚠ CoS disparaît au routage L3

Le CoS (PCP 802.1p) est dans l'en-tête Ethernet 802.1q — il est détruit quand le routeur décapsule la trame pour router le paquet IP. Pour que le CoS soit re-propagé, le routeur doit le re-dériver du DSCP sur l'interface de sortie. Sur les switchs Cisco : mls qos map dscp-cos configure ce mapping.

⚠ match precedence 5 capture plus que EF

match precedence 5 matche tous les paquets dont les 3 bits MSB du DSCP valent 101, soit DSCP 40, 41, 42, 43, 44, 45 et 46 (EF). Un paquet DSCP 40 (CS5, vidéo broadcast) serait traité comme de la voix. Toujours utiliser match dscp ef pour classifier précisément la voix.

⚠ NBAR sans ip nbar protocol-discovery = silence

match protocol http dans une class-map est accepté sans erreur mais ne classifie rien si ip nbar protocol-discovery n'est pas activé sur l'interface. Le trafic HTTP tombe dans class-default. À toujours vérifier avec show ip nbar protocol-discovery interface.

⚠ Trust boundary mal placée = abus QoS

Si on fait confiance (trust dscp) sur les ports d'accès des PC, n'importe quel utilisateur peut configurer son OS pour marquer son trafic DSCP EF et obtenir la priorité voix pour son trafic. La trust boundary doit être sur le premier équipement géré du réseau — typiquement le switch d'accès, avec untrust sur les ports PC.

⚠ Le marquage ne remplace pas le contrôle de flux

Marquer le trafic voix EF ne garantit rien si aucune policy-map n'est configurée pour prioriser EF. Le DSCP est un label — sans policy LLQ (priority) sur les liens, il n'a aucun effet sur la latence ou le jitter. Le marquage + la policy doivent aller ensemble.

⚠ AF et drop precedence — AFx3 droppé en premier

Dans la même classe AF (ex: AF1x), AF13 est droppé avant AF12, qui est droppé avant AF11. C'est la logique WRED. Un trafic marqué AF13 (hors contrat, après police remark) sera sacrifié en premier lors de congestion — c'est volontaire. Ne pas marquer du trafic critique en AF13 par erreur.

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

Combien de bits fait le champ DSCP et où est-il dans l'en-tête IP ?
6 bits, dans les 6 bits de poids fort de l'octet ToS (Type of Service) de l'en-tête IPv4. Les 2 bits restants de l'octet ToS sont réservés à ECN.
Quelle est la formule pour calculer la valeur décimale d'un DSCP AFxy ?
DSCP = 8×x + 2×y. Exemple : AF41 = 8×4 + 2×1 = 34. AF23 = 8×2 + 2×3 = 22.
Quelle valeur DSCP pour la voix ? Pour le routage ? Pour Best Effort ?
Voix : EF = 46. Routage (OSPF, BGP) : CS6 = 48. Best Effort : 0 (DF/default).
Pourquoi CoS est-il "perdu" au routage L3 ?
CoS est dans l'en-tête de la trame Ethernet 802.1q (3 bits PCP). Quand le routeur décapsule la trame et route le paquet IP, la trame est détruite — le CoS disparaît. Seul le DSCP (dans l'en-tête IP) persiste.
Quelle est la différence entre match precedence 5 et match dscp ef ?
match precedence 5 matche tous les DSCP dont les 3 MSB = 101 (DSCP 40-47). match dscp ef matche uniquement DSCP 46. Pour la voix, toujours utiliser match dscp ef — plus précis.
Quelle commande est obligatoire pour utiliser match protocol http ?
ip nbar protocol-discovery sur l'interface. Sans cette commande, NBAR n'inspecte pas le trafic et la class-map ne matche rien.
Qu'est-ce que la trust boundary et pourquoi est-elle importante ?
C'est le point à partir duquel le réseau fait confiance aux marquages DSCP/CoS. Si elle est mal placée (trop proche du PC utilisateur), n'importe qui peut se marquer EF et obtenir la priorité voix. Elle doit être sur le premier équipement géré (switch d'accès).
Dans la famille AFxy, quel suffixe est droppé en premier par WRED ?
y=3 (drop precedence élevé). AF13 est droppé avant AF12, qui est droppé avant AF11. C'est utilisé pour marquer le trafic hors-contrat (via police exceed-action set-dscp AF13) — il sera sacrifié en premier lors de congestion.
!================================================
! CLASSIFICATION — class-map
!================================================
class-map match-all CM-NOM
 match dscp ef cs6 af41              ! DSCP (nommé ou décimal 0-63)
 match ip dscp 46                    ! IPv4 uniquement
 match cos 5                          ! CoS 802.1p (0-7)
 match precedence 5                  ! IP Precedence (0-7) — legacy
 match protocol rtp audio            ! NBAR L7
 match access-group 101             ! ACL (L3/L4)
 match access-group name ACL-NOM
 match not dscp default             ! Inversion

!================================================
! MARQUAGE — set dans policy-map
!================================================
policy-map PM-MARK
 class CM-NOM
  set dscp ef                       ! Marquer DSCP (L3 — persistant)
  set dscp 46                       ! Équivalent décimal
  set cos 5                         ! Marquer CoS (L2 — trame 802.1q)
  set precedence 5                  ! Marquer IP Precedence (legacy)
  set qos-group 1                   ! Groupe interne (local au routeur)
  set mpls experimental imposition 5 ! MPLS EXP

! Police + Remark (marquage hors contrat)
  police rate 10000000 bps
   conform-action set-dscp-transmit af11
   exceed-action  set-dscp-transmit af13
   violate-action drop

!================================================
! NBAR
!================================================
interface GigabitEthernet0/1
 ip nbar protocol-discovery          ! Obligatoire pour match protocol

show ip nbar protocol-discovery interface Gi0/1
show ip nbar protocol-discovery top-n 10
show ip nbar port-map
show ip nbar pdlm                      ! PDLMs chargés

!================================================
! TRUST BOUNDARY (switch Catalyst)
!================================================
interface FastEthernet0/1
 mls qos trust cos                  ! Faire confiance au CoS
 mls qos trust dscp                 ! Faire confiance au DSCP
 mls qos cos 0                      ! Forcer CoS = 0 (untrust)

mls qos map cos-dscp 0 8 16 24 32 46 48 56   ! Mapping CoS→DSCP
mls qos map dscp-cos 46 5                   ! DSCP 46 → CoS 5

!================================================
! VÉRIFICATION
!================================================
show class-map
show policy-map interface Gi0/1
show mls qos interface Gi0/1
show mls qos maps