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).
| Sous-type | Code | Ordonné | Créé par | Compte 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] |
network ou redistribute), l'AS_PATH est vide dans la table BGP locale. Le premier prepend a lieu lors de l'envoi eBGP sortant.L'attribut AS_PATH est composé d'un ou plusieurs path segments. Chaque segment a le format suivant :
1 octet
1 octet
2 ou 4 octets
2 ou 4 octets
2 ou 4 octets
| Champ | Taille | Valeur pour AS_SEQUENCE | Description |
|---|---|---|---|
| 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). |
Route originée en AS 100, propagée via AS 200 puis AS 300. Encodage en 2-octets (RFC 4271) :
AS_SEQ
3 ASes
AS 300
AS 200
AS 100
0x40 (Well-known Mandatory, non-partial, non-extended).L'attribut AS_PATH est précédé des 3 octets d'en-tête BGP :
Flags
Type=2
Length=10
SEQ
3 ASes
300
200
100
| Flags (0x40) | Bit | Valeur | Signification |
|---|---|---|---|
| Optional | bit 7 | 0 | Well-known — tous les routers le reconnaissent |
| Transitive | bit 6 | 1 | Propagé aux peers suivants |
| Partial | bit 5 | 0 | Information complète (pas partial) |
| Ext-Length | bit 4 | 0 | Champ Length = 1 octet (pas 2) |
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
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
# 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
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.
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.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 :
| 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 |
# 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
| AS_PATH | Calcul | Longueur |
|---|---|---|
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è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.
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.
400 300 200 100 → originé en AS100, reçu via AS400.