🏛️ ArchiZeroTrust CCIE Infrastructure CEF
🧮 Infrastructure · CEF

Cisco Express Forwarding

Architecture FIB + table d'adjacence, switching paths, load-balancing, punting et dCEF. Prérequis fondamental pour BFD, MPLS, PBR et QoS.

Définition : CEF (Cisco Express Forwarding) est le mécanisme de commutation par défaut sur IOS/IOS-XE depuis IOS 12.0. Il précalcule une FIB (Forwarding Information Base) et une table d'adjacence à partir de la RIB et de l'ARP cache, permettant la commutation de paquets sans consulter le CPU pour chaque paquet.
Pourquoi CEF existe

⚠️ Avant CEF — Process Switching

Chaque paquet interrompt le CPU via une interrupt. Le processeur consulte la RIB, résout l'ARP, construit l'en-tête L2, transmet. Non scalable au-delà de quelques Mpps.

⚡ Avant CEF — Fast Switching

Premier paquet d'un flow traité en process switching, résultat mis en cache. Paquets suivants commutés via ce cache. Mémoire limitée, invalidation difficile, problèmes de routage asymétrique.

✅ CEF — Commutation topologie-based

La FIB est recalculée entièrement à chaque changement de RIB (pas de cache par flow). La table d'adjacence est recalculée à chaque changement ARP/L2. La commutation s'effectue dans le dataplane sans interruption CPU pour chaque paquet.

Résultat : déterministe, uniforme pour tous les paquets d'un préfixe, compatible avec ECMP, MPLS, BFD, PBR, QoS.

Statut par défaut

🟢 Activé par défaut

CEF est activé globalement par défaut sur pratiquement toute plateforme IOS/IOS-XE moderne. La commande ip cef est implicite. Sur les anciennes plateformes ou dans des cas rares, no ip cef peut l'avoir désactivé.

! Vérification rapide
show ip cef summary
! Résultat attendu :
IPv4 CEF is enabled and running
Fonctions dépendantes de CEF
FonctionDépendance CEFRaison
BFDObligatoireBFD utilise le dataplane CEF pour mesurer la latence réelle de forwarding
MPLSObligatoireLabel switching repose sur la FIB et l'LFIB CEF
PBR (Policy-Based Routing)ObligatoireCEF PBR = fast-path PBR ; sans CEF = process switching uniquement
IP SLA (certains modes)RecommandéMesures précises nécessitent le dataplane
QoS (MQC)RecommandéCBWFQ/LLQ efficace sur le dataplane CEF
NetFlow v5/v9RecommandéCapture dans le dataplane CEF
NAT (haute performance)RecommandéCEF-switching NAT évite le process switching
Pipeline CEF
PLAN DE CONTRÔLE (CPU)
Protocoles de routage
OSPF / BGP / EIGRP…
RIB
Routing Table
FIB
Forwarding Table
ARP / ND Cache Adj Table
Next-hop L2 rewrite
DATAPLANE (hardware / interrupts)
Paquet entrant Lookup FIB
LPM sur dst IP
Lookup Adj
next-hop + L2 rewrite
Paquet sortant

🗃️ FIB — Forwarding Information Base

Copie optimisée de la RIB, indexée pour un Longest Prefix Match (LPM) rapide. Contient : préfixe, next-hop IP, interface de sortie, pointeur vers l'entrée d'adjacence.

Recalculée à chaque modification de la RIB. Structure en trie ou Patricia tree.

show ip cef                  ! table FIB complète
show ip cef 10.1.1.0/24     ! entrée spécifique
show ip cef detail          ! avec pointeurs adj

🔗 Table d'adjacence

Contient pour chaque next-hop : l'en-tête L2 précalculé (MAC src, MAC dst, 802.1q tag si vlan). La réécriture L2 est appliquée sans calcul ARP au moment de la commutation.

Types d'entrées : glean (ARP requis), drop, punt, null, entrée normale.

show adjacency
show adjacency detail
show adjacency GigabitEthernet0/0
Types d'entrées dans la table d'adjacence
TypeDescriptionAction dataplane
normalNext-hop connu, ARP résoluRéécriture L2 + forwarding
gleanRéseau directement connecté, ARP non encore résoluEnvoie une requête ARP, punt vers CPU pour ce paquet
puntPaquet nécessitant une attention CPURemonte au process switching (voir onglet Punting)
dropDestination injoignable ou filtréePaquet silencieusement jeté
null0Route de type Null (blackhole)Paquet jeté avec ICMP Unreachable optionnel
discardFiltrage explicit (ACL, etc.)Paquet jeté
Hiérarchie des switching paths
Process Switching
CPU, interruption par paquet
← lent, ~100 kpps, historique
Fast Switching
cache par flow, 1er paquet CPU
← amélioré, ~1 Mpps, déprécié IOS 15+
CEF
FIB précalculée, topologie-based
← défaut IOS moderne, ~multi-Gpps sur ASIC
Comparaison détaillée
CritèreProcess SwitchingFast SwitchingCEF
Lookup par paquetRIB (CPU)Cache (1er : CPU)FIB (dataplane)
Résolution L2ARP à chaque foisCache L2Adj table précalculée
InvalidationN/APar flow, complexeSur changement topo (propre)
Load-balancingPer-packetPer-destination (flow)Per-dest ou per-packet
Compatibilité BFD
Compatibilité MPLS
Activationno ip cef + no ip route-cacheno ip cefip cef (défaut)
Vérification du mode actif par interface

🔍 show ip interface

show ip interface GigabitEthernet0/0
! Chercher :
  IP fast switching is enabled
  IP CEF switching is enabled
  IP CEF switching turbo vector
  IP multicast fast switching is disabled
⚠️ Attention : Sur certaines interfaces (tunnel, dialer, virtual-template), CEF peut être désactivé par défaut. Vérifier individuellement avec show ip interface <if> | include CEF.
Contexte ECMP : Quand plusieurs chemins de même métrique existent (ECMP), CEF distribue le trafic entre les next-hops. Le mode de distribution est configurable et a des implications importantes sur la symétrie et les performances.
Modes de load-balancing CEF

📦 Per-Destination (défaut)

Le hash est calculé sur l'adresse source et destination IP. Tous les paquets d'un même flux (même src/dst) empruntent le même chemin.

Avantages : Ordre des paquets préservé, compatible TCP, débogage plus facile.

Inconvénient : Distribution inégale si peu de flux distincts.

🔀 Per-Packet

Chaque paquet est envoyé sur le prochain next-hop disponible (round-robin). Distribution parfaitement équilibrée en octets.

Inconvénient majeur : Paquets hors-ordre → dégradation TCP, incompatible avec la plupart des applications. À éviter.

⚙️ Configuration load-balancing

! Per-destination (défaut, rien à faire)
ip cef load-sharing algorithm original

! Universal (inclut ports src/dst dans le hash)
ip cef load-sharing algorithm universal

! Tunnel ID-based (pour MPLS TE)
ip cef load-sharing algorithm tunnel

! Vérification
show ip cef load-sharing
show ip cef 0.0.0.0/0 ! voir les next-hops ECMP
Polarisation et graine (seed)

🎲 Problème de polarisation

Si plusieurs routeurs utilisent le même algorithme avec les mêmes paramètres, le trafic peut se retrouver toujours sur le même lien à chaque saut (polarisation). La solution est de configurer des graines différentes par routeur.

! Algorithme universal avec graine fixe
ip cef load-sharing algorithm universal 1234567

! Ou laisser IOS choisir automatiquement (recommandé)
ip cef load-sharing algorithm universal
Vérification distribution ECMP

🔍 Compteurs CEF par next-hop

show ip cef 10.0.0.0/8
! Output exemple :
10.0.0.0/8, version 42, epoch 0
  via 192.168.1.1, GigabitEthernet0/0, 0 dependencies
    traffic share 1
    next hop 192.168.1.1, GigabitEthernet0/0
    valid adjacency
  via 192.168.2.1, GigabitEthernet0/1, 0 dependencies
    traffic share 1
    next hop 192.168.2.1, GigabitEthernet0/1
    valid adjacency
Punting : Mécanisme par lequel le dataplane CEF renvoie un paquet au CPU (process switching) car il ne peut pas le traiter localement. Le punting est normal pour certains types de trafic, mais un excès de punting indique un problème de configuration ou d'infrastructure.
Causes légitimes de punting
CauseDescriptionNormal ?
Trafic destiné au routeurSSH, Telnet, BGP, OSPF Hello, SNMP…Normal
ARP incomplet (glean)Premier paquet vers un voisin direct non encore dans le cache ARPNormal
TTL = 1Traceroute, paquet expiré → ICMP Time ExceededNormal
Options IPRecord Route, Timestamp, Loose/Strict Source RoutingNormal
Fragments IPPremier fragment (si non-hardware)Normal
Tunnels non-CEFGRE sans CEF activé sur tunnel interfaceÀ corriger
Crypto (VPN)Certains VPN en software encryptionSurveiller
ACL incohérenteACL qui force le process switchingProblème
Vérification et diagnostic

🔍 Compteurs de punting

! Statistiques CEF globales
show ip cef switching statistics

! Drops CEF par type
show cef drop

! Interfaces avec CEF désactivé (= punt total)
show ip interface | include CEF|line

! Compteurs process switching (doit rester bas)
show interface GigabitEthernet0/0 | include switching

🚨 Punt excessif — Impact

Le CPU du routeur a une capacité de traitement limitée (process switching). Un punt excessif peut saturer le CPU, provoquer des drops de paquets de contrôle (BGP keepalives, OSPF Hello), déclencher des flaps de voisinage, et finalement une panne réseau.

! Surveiller le CPU
show processes cpu sorted
show processes cpu history

! Si le process "IP Input" consomme > 20% → punt excessif
dCEF (distributed CEF) : Extension de CEF pour les plateformes modulaires à plusieurs line cards (Catalyst 6500, GSR 12000, ASR 1000, etc.). Chaque line card maintient sa propre copie locale de la FIB et de la table d'adjacence, permettant la commutation sans aller sur le Route Processor.
CEF centralisé vs dCEF

CEF centralisé

FIB et adj table sur le Route Processor (RP) uniquement. Les line cards transfèrent les paquets au RP pour la commutation. Le bus interne est un goulot d'étranglement.

Plateformes : routeurs ISR (1 CPU, pas de line cards indépendantes).

⚡ dCEF distribué

Le RP distribue la FIB à chaque line card via un protocole interne. Chaque LC commute localement. Le RP n'est impliqué que pour les mises à jour de la FIB.

Débit : peut atteindre des centaines de Gbps sans saturer le RP.

⚙️ Activation dCEF

! Sur les plateformes supportant dCEF
ip cef distributed

! Vérification
show ip cef summary
! Output sur plateforme dCEF :
IPv4 CEF is enabled and running
distributed CEF is enabled

show ip cef distributed  ! état par line card
Synchronisation RP → LC

🔄 Mise à jour de la FIB distribuée

Quand la RIB change (route ajoutée/retirée), le RP recalcule la FIB et distribue les mises à jour différentielles à chaque LC. Pendant ce court laps de temps, les LCs peuvent avoir des FIBs légèrement différentes.

Surveillance : show ip cef inconsistency détecte les incohérences entre la FIB du RP et celles des LCs.

show ip cef inconsistency
show ip cef summary      ! compter préfixes par LC
Commandes essentielles CEF

📊 État global CEF

show ip cef
! Affiche toute la FIB

show ip cef summary
! Résumé : nombre de préfixes, état CEF
! Output clé :
  IPv4 CEF is enabled and running
  VRF Default
    14 prefixes (9/5 fwd/non-fwd)

show cef state
! État détaillé avec flags de configuration

🔍 Lookup FIB pour un préfixe

show ip cef 10.1.1.0/24
! Output :
10.1.1.0/24, version 18, epoch 0
  via 192.168.1.1, GigabitEthernet0/0, 0 dependencies
    traffic share 1
    next hop 192.168.1.1, GigabitEthernet0/0
    valid adjacency

show ip cef 10.1.1.0/24 detail
! Avec pointeurs internes, compteurs, adj handle

show ip cef exact-route 10.0.0.1 10.1.1.1
! Simule le LPM pour un paquet src→dst

🔗 Table d'adjacence

show adjacency
! Toutes les adjacences
Protocol  Interface        Address
IP        Gi0/0            192.168.1.1(7)

show adjacency detail
! Avec le L2 rewrite header (bytes hex)
IP        Gi0/0            192.168.1.1(7)
                           0 packets, 0 bytes
                           epoch 0
                           sourced in sev-epoch 4
                           Encap length 14
                           AABBCC001122 001122AABBCC 0800
                           (dst MAC   )(src MAC   )(IPv4)

show adjacency GigabitEthernet0/0 detail

🧪 Simulation de forwarding

! Quel chemin prendrait un paquet ?
show ip cef exact-route 192.168.1.100 10.5.5.5
nexthop 172.16.0.1 GigabitEthernet0/0

! Debug (ATTENTION : très verbeux en production)
debug ip cef
debug ip cef events
undebug all

📋 Checklist de vérification CEF

! 1. CEF actif globalement ?
show ip cef summary              → "enabled and running"

! 2. CEF actif sur l'interface ?
show ip interface Gi0/0 | inc CEF → "CEF switching is enabled"

! 3. La FIB a une entrée pour la destination ?
show ip cef 10.1.1.0/24          → "valid adjacency"

! 4. L'adjacence est résolue ?
show adjacency detail             → pas de "incomplete"

! 5. Pas d'inconsistances FIB ?
show ip cef inconsistency         → vide = OK
1

CEF désactivé sur une interface tunnel

Par défaut, certaines interfaces logiques (tunnel GRE, virtual-template) n'ont pas CEF activé. BFD sur tunnel échoue silencieusement. Toujours vérifier show ip interface tunnel0 | include CEF et activer avec ip route-cache cef sur l'interface si nécessaire.

2

Adjacence "incomplete" = ARP en attente

Si show adjacency detail montre incomplete, le routeur n'a pas encore résolu l'ARP du next-hop. Les paquets vers ce next-hop sont puntés. Vérifier la connectivité L2, le VLAN, et forcer une résolution avec ping <next-hop-ip>.

3

ip route-cache désactivé = fast switching, pas CEF

La commande no ip route-cache sur une interface force le process switching. Dans un lab CCIE, si quelqu'un a appliqué cette commande "pour tester", CEF est contourné sur cette interface et BFD ne fonctionnera pas. Vérifier et retirer no ip route-cache.

4

Polarisation ECMP avec même algorithme sur tous les routeurs

Dans une topologie ECMP multi-niveaux (spine-leaf, etc.), si tous les routeurs utilisent le même hash (algorithme "original" par défaut), un flow peut toujours choisir le même chemin physique à chaque niveau. Configurer des graines différentes avec ip cef load-sharing algorithm universal <seed>.

5

dCEF : incohérence FIB RP/LC après changement de topo rapide

Sur les plateformes distribuées, après une convergence rapide, la FIB d'une line card peut temporairement être différente de celle du RP. show ip cef inconsistency le détecte. En production, cela peut causer des micro-boucles transitoires. Surveiller surtout après des maintenances.

6

Per-packet load-balancing : TCP cassé

Si ip load-sharing per-packet (ancienne commande) ou l'équivalent est configuré, les paquets TCP d'un même flux peuvent arriver hors-ordre, causant des retransmissions massives et des performances catastrophiques. Toujours utiliser per-destination (défaut) ou l'algorithme universal.

7

CEF et VRF : oublier "ip vrf forwarding" crée une FIB dans le VRF global

Si une interface est configurée dans un VRF mais que la route est dans le VRF global (ou vice versa), CEF ne trouvera pas l'adjacence. Toujours vérifier : show ip cef vrf <nom-vrf> pour la FIB du bon VRF, et show ip vrf interfaces pour confirmer l'appartenance des interfaces.

8

Punt CPU élevé = "IP Input" process à 100%

Quand le process switching explose, show processes cpu sorted montre "IP Input" consommant la majorité du CPU. Causes fréquentes : trafic de broadcast (storm), ACL forçant process switching, DDoS avec options IP, ou NTP/DNS flood. Isoler avec debug ip packet detail brièvement, puis CoPP pour protéger.

Cliquer sur une carte pour révéler la réponse.
01
Que contient la FIB CEF et en quoi diffère-t-elle de la RIB ?
La FIB (Forwarding Information Base) est une copie optimisée de la RIB, structurée pour un LPM (Longest Prefix Match) rapide dans le dataplane. Contrairement à la RIB qui contient les informations de routage brutes (distances admin, métriques), la FIB ne contient que le meilleur chemin avec le pointeur vers l'entrée d'adjacence correspondante.
02
À quoi sert la table d'adjacence CEF ?
Elle contient l'en-tête L2 précalculé (MAC destination, MAC source, VLAN tag 802.1q) pour chaque next-hop connu. Lors de la commutation, CEF applique directement ce header sans consultation ARP, économisant des cycles CPU.
03
Quels protocoles/fonctions requièrent CEF obligatoirement ?
BFD (Bidirectional Forwarding Detection), MPLS (Label Switching), PBR (Policy-Based Routing en fast-path). Sans CEF, ces fonctions soit ne fonctionnent pas, soit tombent en process switching non scalable.
04
Qu'est-ce que le "punting" dans le contexte CEF ?
C'est le mécanisme par lequel le dataplane CEF renvoie un paquet au CPU (process switching) car il ne peut pas le traiter localement. Causes normales : trafic destiné au routeur lui-même, ARP incomplet (glean), TTL=1, options IP. Un punt excessif sature le CPU.
05
Différence entre CEF centralisé et dCEF ?
CEF centralisé : FIB uniquement sur le Route Processor, les line cards envoient les paquets au RP. dCEF (distributed) : chaque line card a sa propre copie de la FIB, commute localement sans impliquer le RP pour chaque paquet. dCEF est pour les plateformes modulaires à haute capacité (Cat 6500, GSR, ASR).
06
Commande pour vérifier que CEF est actif et fonctionnel ?
show ip cef summary → doit afficher "IPv4 CEF is enabled and running". Aussi show cef state pour les détails de configuration.
07
Qu'affiche show adjacency detail d'utile pour le debug ?
L'en-tête L2 en hexadécimal (MAC dst + MAC src + EtherType), les compteurs de paquets/octets par adjacence, et l'état (valid, incomplete, glean). "incomplete" = ARP non résolu = punt.
08
Mode de load-balancing CEF par défaut et son avantage principal ?
Per-destination (hash sur src IP + dst IP). Avantage : tous les paquets d'un flux TCP empruntent le même chemin, donc pas de réordonnancement. Inconvénient : distribution peut être inégale avec peu de destinations distinctes.
09
Qu'est-ce que la polarisation ECMP et comment la corriger ?
Quand plusieurs routeurs en cascade utilisent le même algorithme de hash CEF, un flux peut toujours prendre le même chemin physique à chaque saut, sous-utilisant les liens. Solution : ip cef load-sharing algorithm universal <graine-unique> avec une graine différente sur chaque routeur.
10
Commande pour simuler le chemin qu'un paquet src→dst emprunterait ?
show ip cef exact-route <src-ip> <dst-ip> — affiche le next-hop et l'interface de sortie que CEF sélectionnerait pour ce couple d'adresses.
11
Différence entre "adjacence glean" et "adjacence punt" ?
Glean : le next-hop est sur un réseau directement connecté mais l'ARP n'est pas encore résolu. Le paquet est punté pour déclencher une requête ARP. Punt : le paquet doit être traité par le CPU pour une raison spécifique (ex: trafic destiné au routeur). Les deux envoient le paquet en process switching, mais pour des raisons différentes.
12
Quelle commande désactive CEF sur une interface (à ne pas faire en prod) ?
no ip route-cache cef sur l'interface. Cela force le fast switching (si activé) ou le process switching. À éviter absolument en production car cela casse BFD, MPLS, PBR et dégrade les performances.