Well-known Mandatory · type 2 Sous-type 1 — AS_PATH RFC 4271 · Section 4.3

AS_SEQUENCE — Liste ordonnée des AS traversés

Sous-type par défaut de l'attribut AS_PATH. Représente la séquence ordonnée de tous les Autonomous Systems traversés par un préfixe depuis son origine. Fondamental pour la loop prevention et le critère #4 de sélection du meilleur chemin.

Définition

AS_SEQUENCE est le sous-type 1 de l'attribut AS_PATH (type 2). C'est le cas normal : quand un routeur annonce un préfixe via eBGP, il prepend son propre numéro d'AS au début de la liste. Le résultat est une séquence ordonnée, lue de gauche à droite, où l'AS le plus à gauche est le plus récent (le dernier à avoir propagé la route).

Attribut parent
AS_PATH — type 2
Code sous-type
0x01 (1)
Ordonné
Oui — le plus récent à gauche
Modifié par iBGP ?
Non — iBGP ne touche pas AS_PATH
Modifié par eBGP ?
Oui — prepend local AS
Calcul longueur
1 par AS dans la séquence
Taille max segment
255 ASes (champ longueur = 1 octet)
Notation show ip bgp
65100 65200 65300
Les 4 sous-types AS_PATH — Vue d'ensemble
Sous-typeCodeOrdonnéCréé parCompte eBGP ?Notation
AS_SEQUENCE 1 Oui Propagation eBGP normale Oui — 1 par AS 100 200 300
AS_SET 2 Non aggregate-address … as-set Oui — set entier = 1 {100,200,300}
AS_CONFED_SEQUENCE 3 Oui Propagation interne confédération Non — supprimé aux frontières (65001 65002)
AS_CONFED_SET 4 Non Agrégation au sein d'une confédération Non — supprimé aux frontières [65001,65002]
Règle fondamentale de construction
eBGP — Sortant
Le routeur prepend son propre AS au début de l'AS_PATH avant d'envoyer l'UPDATE vers le peer eBGP. Le premier AS vu par le destinataire est l'AS qui vient de propager la route.
iBGP — Inchangé
Le routeur ne modifie pas l'AS_PATH lors d'une propagation iBGP. La séquence reste identique tout au long de l'AS local.
Origination — Route locale
Quand un routeur origine un préfixe (via network ou redistribute), l'AS_PATH est vide dans la table BGP locale. Le premier prepend a lieu lors de l'envoi eBGP sortant.
ℹ️
La longueur AS_PATH utilisée pour le critère #4 est le nombre d'AS dans l'AS_SEQUENCE + 1 par AS_SET (quelle que soit sa taille) + 0 pour AS_CONFED_SEQUENCE/SET. Le prepending consiste à répéter son propre AS plusieurs fois pour artificiellement allonger cette longueur.
Structure du path segment (RFC 4271 §4.3)

L'attribut AS_PATH est composé d'un ou plusieurs path segments. Chaque segment a le format suivant :

Type
1 octet
Longueur
1 octet
AS₁
2 ou 4 octets
AS₂
2 ou 4 octets

ASₙ
2 ou 4 octets
ChampTailleValeur pour AS_SEQUENCEDescription
Path Segment Type 1 octet 0x01 (1) Identifie AS_SEQUENCE (1), AS_SET (2), AS_CONFED_SEQUENCE (3), AS_CONFED_SET (4)
Path Segment Length 1 octet N (nombre d'ASes) Nombre d'AS dans ce segment. Max = 255. Au-delà, un nouveau segment est ouvert.
Path Segment Value N × 2 octets
(ou N × 4 octets)
AS₁ AS₂ … ASₙ Liste des numéros AS. 2-octets en RFC 4271, 4-octets en RFC 6793 (NEW_AS_PATH).
Exemple concret — AS_PATH : 300 200 100

Route originée en AS 100, propagée via AS 200 puis AS 300. Encodage en 2-octets (RFC 4271) :

0x01
AS_SEQ
0x03
3 ASes
0x01 0x2C
AS 300
0x00 0xC8
AS 200
0x00 0x64
AS 100
📐
Taille totale du segment : 1 (type) + 1 (len) + 3×2 (AS 2-octets) = 8 octets. En 4-octets : 1 + 1 + 3×4 = 14 octets. Cela s'inscrit dans l'attribut AS_PATH dont les flags sont : 0x40 (Well-known Mandatory, non-partial, non-extended).
Attribut BGP complet — flags + type + length

L'attribut AS_PATH est précédé des 3 octets d'en-tête BGP :

0x40
Flags
0x02
Type=2
0x0A
Length=10
0x01
SEQ
0x03
3 ASes
0x01 0x2C
300
0x00 0xC8
200
0x00 0x64
100
Flags (0x40)BitValeurSignification
Optionalbit 70Well-known — tous les routers le reconnaissent
Transitivebit 61Propagé aux peers suivants
Partialbit 50Information complète (pas partial)
Ext-Lengthbit 40Champ Length = 1 octet (pas 2)
AS_PATH avec plusieurs segments

Un attribut AS_PATH peut contenir plusieurs segments à la suite, par exemple une AS_SEQUENCE suivie d'un AS_SET (après agrégation) :

# show ip bgp 10.0.0.0/22 — after aggregation with as-set
BGP routing table entry for 10.0.0.0/22
  Path: 65000 {65100,65200,65300}
         ^^^^^    ^^^^^^^^^^^^^^^^^^^^^
         AS_SEQ   AS_SET (sub-type 2)

# Wire: [SEQ|1|65000][SET|3|65100|65200|65300]
#        segment1     segment2
⚠️
Quand AS_PATH contient à la fois un AS_SEQUENCE et un AS_SET, le calcul de longueur est : nombre d'AS dans la séquence + 1 (pour le set entier). Exemple ci-dessus : longueur = 1 + 1 = 2.
Topologie — 5 AS en série
AS100 AS200 AS300 AS400 AS500 [Origine] ─eBGP─▶ [Transit] ─eBGP─▶ [Transit] ─eBGP─▶ [Transit] ─eBGP─▶ [Client] R1 R2 R3 R4 R5 R6 R7 R8 Préfixe originé : 10.0.0.0/8 dans AS100 (via network)
Évolution de l'AS_PATH hop par hop
R1 — AS 100
Originateur
↳ network 10.0.0.0 mask 255.0.0.0 → route injectée
AS_PATH dans table locale R1
vide — route locale
Longueur : 0
R2 — AS 200
Reçoit depuis AS100 (eBGP)
↳ R1 prepend AS100 avant envoi eBGP → R2 reçoit et stocke
AS_PATH reçu par R2
100
Longueur : 1
R3 — AS 200
iBGP depuis R2
↳ propagation iBGP — AS_PATH inchangé
AS_PATH reçu par R3 (iBGP)
100 ← identique à R2
Longueur : 1 — iBGP ne modifie pas
R4 — AS 300
Reçoit depuis AS200 (eBGP)
↳ R3 prepend AS200 avant envoi eBGP → R4 voit AS200 en tête
AS_PATH reçu par R4
200 100
Longueur : 2
R6 — AS 400
Reçoit depuis AS300 (eBGP)
↳ R5 prepend AS300 → R6 voit AS300 en tête
AS_PATH reçu par R6
300 200 100
Longueur : 3
R8 — AS 500
Reçoit depuis AS400 (eBGP)
↳ R7 prepend AS400 → chemin complet visible
AS_PATH final reçu par R8
400 300 200 100
Longueur : 4 — lecture : AS400 → AS300 → AS200 → AS100 (origine)
Prepending — Inflation artificielle

Un router peut prepend son propre AS plusieurs fois pour allonger artificiellement l'AS_PATH et rendre cette route moins préférable aux yeux d'autres AS (traffic engineering entrant).

! R1 (AS 100) — prepend 3 fois son AS sur le peer vers AS200
route-map PREPEND-OUT permit 10
  set as-path prepend 100 100 100

router bgp 100
  neighbor 203.0.113.1 route-map PREPEND-OUT out

! Résultat : AS_PATH vu par AS200 = 100 100 100 (longueur 3 au lieu de 1)
! AS200 préférera le chemin alternatif si longueur < 3
⚠️
Le prepending n'influence que les AS qui utilisent la longueur AS_PATH comme critère de sélection. Un AS qui a une LOCAL_PREF ou MED prioritaire sur l'autre chemin ne sera pas affecté.
Commande show — Lecture de l'AS_SEQUENCE
# Sur R8 (AS500) — show ip bgp 10.0.0.0/8
BGP routing table entry for 10.0.0.0/8, version 14
Paths: (1 available, best #1, table default)
  Advertised to update-groups:
     1
  Refresh Epoch 1
  400 300 200 100
    203.0.113.7 from 203.0.113.7 (10.4.4.4)
      Origin IGP, metric 0, localpref 100, valid, external, best
      rx pathid: 0, tx pathid: 0x0

# Lecture gauche → droite : AS400 (last hop), AS300, AS200, AS100 (origine)
# AS_PATH length = 4 → critère #4 de sélection du meilleur chemin
Mécanisme fondamental

Lorsqu'un routeur BGP reçoit un UPDATE, il vérifie si son propre numéro d'AS apparaît dans l'AS_PATH. Si c'est le cas, la route est silencieusement ignorée (ni installée, ni propagée). C'est la protection anti-boucle d'eBGP.

🔄
Règle RFC 4271 §9.1.2 : "A BGP speaker SHALL reject a route whose AS_PATH contains the speaker's own AS number." — La détection porte sur l'AS_SEQUENCE ET l'AS_SET.
Scénario — Détection de boucle
AS100 ─── AS200 ─── AS300 R1 R3 R5 | R4 (iBGP) Route 10.0.0.0/8 originée en AS100. AS200 la reçoit, la propage vers AS300. AS300 tente de la renvoyer vers AS200 (misconfiguration ou topologie iBGP).
AS_PATH reçu par R3 (AS200) venant de R5 (AS300)
AS_PATH = 200 300 200 100 ← AS200 apparaît !
→ R3 détecte son propre AS (200) dans le path → route rejetée immédiatement
AS_PATH reçu par R5 (AS300) venant de R3 (AS200) — chemin normal
AS_PATH = 200 100 ← AS300 absent → route acceptée ✓
Contournement — allow-as-in

Dans certaines topologies (MPLS VPN, clients multi-homés avec même AS), on veut délibérément accepter une route même si notre AS apparaît dans le path. La commande neighbor … allow-as-in permet de bypasser cette vérification.

! Topologie MPLS/VPN — deux sites du même client (AS65000)
! connectés via un provider (AS100). Les sites reçoivent leurs
! propres routes via le VRF du provider.

router bgp 65000
  neighbor 10.0.0.1 allow-as-in 1   ! accepte si AS65000 apparaît 1 fois
  neighbor 10.0.0.1 allow-as-in 3   ! accepte si AS65000 apparaît jusqu'à 3 fois

! Valeur par défaut si nombre omis : 3
! Maximum possible : 10
⚠️
allow-as-in est un bypass de sécurité. Il ne doit être utilisé que dans des topologies maîtrisées (MPLS L3VPN site-to-site, Hub-and-Spoke même AS). En production ISP, il est rarement justifié sur des sessions eBGP standard.
Loop prevention — iBGP : règle de full-mesh

Contrairement à eBGP, iBGP n'utilise pas l'AS_PATH pour la loop prevention (tous les routeurs sont dans le même AS). La protection iBGP repose sur la règle suivante :

Règle split-horizon iBGP : un routeur BGP ne propage jamais à un peer iBGP une route apprise via un autre peer iBGP. C'est pourquoi le full-mesh est requis (ou Route Reflector / Confédération).
Comparaison détaillée des 4 sous-types
Critère AS_SEQUENCE (1) AS_SET (2) AS_CONFED_SEQUENCE (3) AS_CONFED_SET (4)
Ordonné Oui Non Oui Non
Cas d'usage Propagation eBGP normale Agrégation avec as-set Transit interne confédération Agrégation interne confédération
Compte dans longueur eBGP Oui — 1 par AS Oui — 1 pour tout le set Non — retiré aux frontières Non — retiré aux frontières
Loop prevention Oui — si propre AS présent → drop Oui — si propre AS dans set → drop Oui — interne confédération Oui — interne confédération
Créé par Tout envoi eBGP aggregate-address … as-set Peer sub-AS dans confédération Agrégat interne confédération
Notation show ip bgp 100 200 300 {100,200,300} (100 200) [100,200]
Visible peers externes ? Oui Oui Non — supprimé en sortie confédération Non — supprimé en sortie confédération
Exemple complet — AS_PATH mixte avec confédération
# Confédération : AS_ext=65000, sub-AS = 65001, 65002, 65003
# Route traversant la confédération puis des AS externes

# Vue INTERNE à la confédération (depuis un sub-AS) :
BGP path: (65003 65001) 200 100
           ^^^^^^^^^^^^^    ^^^^^^^
           AS_CONFED_SEQ    AS_SEQUENCE

# Vue EXTERNE (peer eBGP hors confédération) :
BGP path: 65000 200 100
           ^^^^^
           AS_CONFED_SEQ supprimé, remplacé par l'AS externe 65000
ℹ️
La longueur AS_PATH vue par les peers externes est calculée sans les segments AS_CONFED_SEQUENCE/AS_CONFED_SET. L'AS de confédération externe (65000) compte pour 1. Dans l'exemple : longueur externe = 3 (65000 + 200 + 100).
Calcul de longueur — Récapitulatif
AS_PATHCalculLongueur
300 200 100 3 × AS_SEQUENCE 3
300 {200,100,50} 1 (AS_SEQ: 300) + 1 (AS_SET entier) 2
300 300 300 200 100 5 × AS_SEQUENCE (prepending) 5
(65002 65001) 300 200 100 AS_CONFED_SEQ ignoré + 3 AS_SEQUENCE 3
400 {300,200} 100 1 (400) + 1 (set) + 1 (100) 3
Pièges fréquents CCIE

⚠️ Piège 1 — iBGP modifie l'AS_PATH

Faux. iBGP ne touche jamais l'AS_PATH. La séquence reste identique pendant toute la traversée d'un AS. Seul l'envoi eBGP sortant déclenche un prepend.

⚠️ Piège 2 — AS_CONFED_SEQUENCE compte dans la longueur vue par les peers externes

Faux. AS_CONFED_SEQUENCE et AS_CONFED_SET sont retirés avant l'envoi à un peer eBGP externe à la confédération. Ils ne contribuent pas à la longueur AS_PATH vue de l'extérieur.

⚠️ Piège 3 — Un AS_SET de 100 AS compte pour 100 dans la longueur

Faux. Un AS_SET entier — quelle que soit sa taille — compte pour 1 dans le calcul de la longueur AS_PATH. C'est l'une des raisons pour lesquelles l'agrégation avec as-set peut rendre un agrégat "plus court" qu'une route spécifique.

⚠️ Piège 4 — allow-as-in 0 désactive la loop prevention

Faux. La valeur minimum est 1. La commande allow-as-in sans nombre équivaut à allow-as-in 3. Il n'existe pas de valeur 0 — la loop prevention ne peut pas être désactivée via cette commande.

⚠️ Piège 5 — Le prepending modifie l'AS_PATH reçu localement

Faux. Le prepending avec set as-path prepend dans une route-map outbound modifie uniquement ce qui est envoyé au peer. La table BGP locale reste inchangée. Un prepend inbound (sur receive) modifie par contre la vue locale.

⚠️ Piège 6 — L'AS_PATH d'une route originée localement contient l'AS local

Faux. Dans la table BGP locale, une route injectée via network ou redistribute a un AS_PATH vide. L'AS local n'est prepend qu'au moment de l'envoi eBGP sortant vers les peers.

📌 Point d'attention — Loop prevention et AS_SET

La loop prevention vérifie aussi les AS présents dans les AS_SET. Si l'AS d'un routeur apparaît dans un AS_SET d'un agrégat reçu, la route est rejetée — même si ce n'est pas dans la séquence. C'est souvent oublié lors de l'étude d'AS_SET.

📌 Point d'attention — Regex AS_PATH et AS_SET

Les regex AS_PATH (ip as-path access-list) matchent sur la représentation textuelle complète incluant les accolades. La notation _200_ matchera AS 200 dans une séquence, mais pas nécessairement dans {100,200,300} selon l'implémentation. Tester avec show ip bgp regexp.

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

Quel est le code de sous-type de AS_SEQUENCE dans l'attribut AS_PATH ?
1 (0x01). Les 4 sous-types sont : 1 = AS_SEQUENCE, 2 = AS_SET, 3 = AS_CONFED_SEQUENCE, 4 = AS_CONFED_SET.
RFC 4271 §4.3
Qu'est-ce que le prepending et pourquoi l'utilise-t-on ?
Répétition du propre AS plusieurs fois dans l'AS_PATH sortant (set as-path prepend 100 100 100) pour allonger artificiellement la longueur. But : rendre cette route moins préférable aux peers qui utilisent le critère #4 (AS_PATH length). Utilisé pour l'ingress traffic engineering.
route-map outbound — set as-path prepend
Un routeur iBGP modifie-t-il l'AS_PATH lors de la propagation ?
Non. L'AS_PATH est conservé intact lors de la propagation iBGP. Seul un envoi eBGP sortant provoque un prepend du local AS.
Règle fondamentale iBGP
Quelle est la longueur AS_PATH de : 300 {200,100,50} ?
2. La séquence contient 1 AS (300 = AS_SEQUENCE) + le set entier compte pour 1 (AS_SET, quelle que soit sa taille). Total = 1 + 1 = 2.
AS_SET entier = 1 dans le calcul de longueur
Dans quel cas utilise-t-on allow-as-in ? Quelle est la valeur par défaut si le nombre est omis ?
Topologies où notre propre AS apparaît dans le path reçu : MPLS L3VPN sites avec même AS, Hub-and-Spoke même AS. Valeur par défaut si nombre omis : 3. Range possible : 1 à 10.
neighbor X allow-as-in [1-10]
AS_CONFED_SEQUENCE est-il visible par les peers eBGP extérieurs à la confédération ?
Non. AS_CONFED_SEQUENCE et AS_CONFED_SET sont supprimés de l'AS_PATH avant l'envoi à un peer eBGP externe à la confédération. Ils ne contribuent pas à la longueur AS_PATH externe.
RFC 5065 — Confederations
Quel est l'AS_PATH d'une route locale originée via la commande network ?
Vide. Dans la table BGP locale, l'AS_PATH d'une route originée est une séquence vide. Le prepend du local AS n'a lieu qu'au moment de l'envoi vers un peer eBGP.
show ip bgp — origin i, AS_PATH vide = local
Comment se lire une AS_SEQUENCE : de gauche à droite ou de droite à gauche pour trouver l'origine ?
L'AS le plus à droite est l'AS originateur. L'AS le plus à gauche est le dernier AS qui a propagé la route (le voisin direct ou le plus récent). Exemple : 400 300 200 100 → originé en AS100, reçu via AS400.
Left = most recent, right = origin
Quelle est la taille maximale d'un segment AS_PATH et pourquoi ?
255 AS par segment — le champ "Path Segment Length" est codé sur 1 octet (valeur max = 255). Si un prepending dépasse 255, un nouveau segment AS_SEQUENCE est ouvert à la suite.
RFC 4271 §4.3 — 1-byte length field
La loop prevention porte-t-elle uniquement sur l'AS_SEQUENCE ou aussi sur l'AS_SET ?
Sur les deux. Si le propre AS d'un routeur apparaît dans l'AS_SEQUENCE ou dans un AS_SET du chemin reçu, la route est rejetée. La RFC 4271 §9.1.2 couvre l'ensemble de l'attribut AS_PATH.
RFC 4271 §9.1.2
Aller plus loin
🔗
AS_PATH
Attribut complet, prepending, regex, allow-as-in
📦
AS_SET
Agrégation, as-set, summary-only, atomic_aggregate
🏠
Accueil BGP
Tous les attributs et critères de sélection