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

AS_SET — Agrégation avec préservation

Sous-type de l'attribut AS_PATH utilisé lors de l'agrégation BGP. Contient un ensemble non-ordonné d'AS traversés par les routes composantes — préserve la loop prevention même après agrégation.

Les 4 sous-types de l'attribut AS_PATH
Sous-typeCodeDescriptionNotation show ip bgp
AS_SEQUENCE1Liste ordonnée des AS traversés (cas normal)65100 65200 65300
AS_SET2Ensemble non-ordonné — créé lors d'une agrégation avec as-set65100 {65200,65300}
AS_CONFED_SEQUENCE3AS_SEQUENCE interne à une confédération(65001 65002)
AS_CONFED_SET4AS_SET interne à une confédération[65001,65002]
Pourquoi AS_SET existe

Lors d'une agrégation BGP, plusieurs routes spécifiques sont remplacées par un préfixe plus large. Si le routeur agrégateur efface simplement l'AS_PATH des routes composantes, la protection contre les boucles est perdue.

❌ Sans as-set — perte d'info

Agrégat 10.0.0.0/22 annoncé avec AS_PATH vide ou uniquement l'AS local. AS 65100 et 65200 ne voient pas leur propre numéro → ne peuvent pas détecter la boucle.

AS_PATH reçu par ISP upstream
65000 ← seul l'agrégateur visible

✅ Avec as-set — boucle préservée

L'AS_PATH inclut un AS_SET contenant tous les AS des routes composantes. AS 65100 et 65200 voient leur propre numéro → route rejetée si boucle.

AS_PATH reçu par ISP upstream
65000 {65100,65200}
Profil de l'attribut
Attribut parent
AS_PATH (type 2)
Sous-type
AS_SET = code 2
Ordonné
Non — ensemble non-ordonné
Créé par
aggregate-address … as-set
Compte dans longueur AS_PATH ?
1 seul (tout le set = 1)
Loop prevention
Oui — préservée
ATOMIC_AGGREGATE
Non positionné (info préservée)
ℹ️
Un AS_SET complet compte pour 1 seul AS dans le calcul de la longueur AS_PATH (critère #4). Ainsi 65000 {65100,65200,65300} a une longueur de 2, pas de 4. Cela peut influencer la sélection du meilleur chemin.
Scénario — ISP agrégant les routes clients

Un ISP (AS 65000) reçoit des préfixes de deux clients et les agrège avant de les annoncer à un provider upstream. Le but : annoncer un seul préfixe /22 plutôt que quatre /24 individuels, tout en préservant la loop prevention.

Topologie : ┌──────────────────────────────────────────────────────────────────┐ │ AS 65000 (ISP) │ │ │ │ R1 (agrégateur) │ │ aggregate-address 10.0.0.0/22 as-set summary-only │ │ │ └──────────┬───────────────────────────┬───────────────────────────┘ │ eBGP │ eBGP ▼ ▼ ┌─────────────────────┐ ┌─────────────────────────────┐ │ AS 65100 (Client A)│ │ AS 65200 (Client B) │ │ 10.0.1.0/24 │ │ 10.0.2.0/24 │ │ 10.0.3.0/24 │ │ (reçu d'AS 65300) │ └─────────────────────┘ │ AS_PATH reçu: 65200 65300 │ └─────────────────────────────┘ │ eBGP vers upstream ▼ ┌─────────────────-────┐ │ AS 65400 (Upstream)│ │ Reçoit l'agrégat │ │ 10.0.0.0/22 │ └──────────────────-───┘
Étape par étape — construction du AS_SET
1
R1 reçoit les routes composantes
La table BGP de R1 contient les 3 routes spécifiques avec leurs AS_PATHs respectifs.
! Routes dans la table BGP de R1 (avant agrégation) :
10.0.1.0/24   via AS 65100            AS_PATH: 65100
10.0.2.0/24   via AS 65200            AS_PATH: 65200
10.0.3.0/24   via AS 65200 → AS 65300 AS_PATH: 65200 65300
2
R1 crée l'agrégat avec as-set
R1 combine les AS de toutes les routes composantes en un AS_SET. L'ordre n'est pas significatif (c'est un ensemble).
! Agrégation des AS_PATHs composants :
! AS_SEQUENCE local : 65000 (l'agrégateur lui-même)
! AS_SET : union de {65100} ∪ {65200} ∪ {65200, 65300}
!        = {65100, 65200, 65300} (doublons supprimés)
!
! AS_PATH de l'agrégat :
10.0.0.0/22   AS_PATH: 65000 {65100,65200,65300}
3
AS 65400 reçoit l'agrégat
L'upstream voit le préfixe /22 avec l'AS_PATH complet. La loop prevention est préservée.
Reçu par AS 65400
10.0.0.0/22 AS_PATH: 65000 {65100,65200,65300} Longueur = 2
4
Test de loop prevention
Si l'agrégat revient vers AS 65100 (via un autre chemin), AS 65100 voit son propre numéro dans l'AS_SET → route rejetée. La boucle est empêchée.
! Scénario de boucle : agrégat revient vers AS 65100
! AS 65100 reçoit : 10.0.0.0/22  AS_PATH: 65400 65000 {65100,65200,65300}
!                                                       ↑ AS 65100 présent !
! → Route rejetée par AS 65100 → BOUCLE EMPÊCHÉE ✅
Impact sur la longueur AS_PATH (critère #4)
RouteAS_PATHLongueur comptéeRemarque
10.0.1.0/24 (spécifique)65000 651002Route plus spécifique — préférée (longest match)
10.0.0.0/22 sans as-set650001Plus court, mais loop prevention perdue
10.0.0.0/22 avec as-set65000 {65100,65200,65300}2AS_SET entier = 1 seul hop
💡
Même si l'AS_SET contient 10 AS différents, il ne compte que pour 1 dans la longueur AS_PATH. 65000 {65100,65200,65300} = longueur 2, pas 4.
Commandes aggregate-address
! ─── Syntaxe complète ───────────────────────────────────────────────────
aggregate-address network mask [as-set] [summary-only] [suppress-map MAP] [advertise-map MAP] [attribute-map MAP]

! ─── Variantes courantes ─────────────────────────────────────────────────

! 1) Agrégat simple — annonce le /22 ET les /24 spécifiques (redondant)
router bgp 65000
 aggregate-address 10.0.0.0 255.255.252.0

! 2) Agrégat avec suppression des spécifiques (summary-only)
router bgp 65000
 aggregate-address 10.0.0.0 255.255.252.0 summary-only
!    → seul le /22 est annoncé, les /24 sont supprimés

! 3) Agrégat avec préservation AS_PATH ← cas de cette page
router bgp 65000
 aggregate-address 10.0.0.0 255.255.252.0 as-set

! 4) Combinaison recommandée en production
router bgp 65000
 aggregate-address 10.0.0.0 255.255.252.0 as-set summary-only
!    → seul le /22 annoncé + AS_SET préservé
Configuration complète du scénario
! ─── R1 — agrégateur (AS 65000) ─────────────────────────────────────────
router bgp 65000
 bgp router-id 1.1.1.1

 ! Peers clients
 neighbor 10.10.1.1 remote-as 65100   ! Client A
 neighbor 10.10.2.1 remote-as 65200   ! Client B

 ! Peer upstream
 neighbor 10.10.4.1 remote-as 65400   ! Upstream

 ! Agrégat : /22 avec AS_SET, suppression des spécifiques
 aggregate-address 10.0.0.0 255.255.252.0 as-set summary-only

!
! ─── Vérification ────────────────────────────────────────────────────────
show ip bgp 10.0.0.0/22            ! détail de l'agrégat
show ip bgp summary                  ! état des sessions
show ip bgp neighbors 10.10.4.1 advertised-routes  ! routes annoncées à upstream
suppress-map — suppression sélective des spécifiques
! ─── Scénario : supprimer seulement certains /24 avec suppress-map ───────
!
! Objectif : annoncer le /22 + garder visible 10.0.1.0/24 (client VIP)
!            mais supprimer 10.0.2.0/24 et 10.0.3.0/24

ip prefix-list SUPPRESS permit 10.0.2.0/24
ip prefix-list SUPPRESS permit 10.0.3.0/24

route-map SUPPRESS-MAP permit 10
 match ip address prefix-list SUPPRESS

router bgp 65000
 aggregate-address 10.0.0.0 255.255.252.0 as-set suppress-map SUPPRESS-MAP

! Résultat :
!   10.0.0.0/22  annoncé (agrégat avec AS_SET)
!   10.0.1.0/24  annoncé (non supprimé — client VIP)
!   10.0.2.0/24  supprimé
!   10.0.3.0/24  supprimé
advertise-map — contrôle fin des composantes incluses dans l'AS_SET
! ─── advertise-map : n'inclure que certaines routes dans l'AS_SET ────────
!
! Objectif : construire l'AS_SET uniquement à partir de 10.0.1.0/24
!            (ignorer 10.0.2.0/24 et 10.0.3.0/24 pour le calcul du SET)

ip prefix-list ADVERTISE-ONLY permit 10.0.1.0/24

route-map ADV-MAP permit 10
 match ip address prefix-list ADVERTISE-ONLY

router bgp 65000
 aggregate-address 10.0.0.0 255.255.252.0 as-set advertise-map ADV-MAP

! AS_SET résultant : {65100}  ← uniquement l'AS de 10.0.1.0/24
show ip bgp — agrégat avec AS_SET
R1# show ip bgp 10.0.0.0/22

BGP routing table entry for 10.0.0.0/22, version 15
Paths: (1 available, best #1, table default)
  Advertised to update-groups:
     1
  Refresh Epoch 1
  Local, (aggregated by 65000 1.1.1.1)         ← agrégat local
    0.0.0.0 from 0.0.0.0 (1.1.1.1)
      Origin IGP, metric 0, localpref 100, weight 32768, valid, aggregated, local, best
      AS-Path: {65100,65200,65300}               ← AS_SET
      rx pathid: 0, tx pathid: 0x0
⚠️
Notez AS-Path: {65100,65200,65300} — les accolades {} indiquent un AS_SET. L'ordre des AS à l'intérieur est arbitraire (ensemble, pas séquence). L'AS local (65000) est visible via "aggregated by 65000", pas dans l'AS_PATH lui-même.
show ip bgp — vue depuis AS 65400 (upstream)
R-Upstream# show ip bgp 10.0.0.0/22

BGP routing table entry for 10.0.0.0/22, version 8
Paths: (1 available, best #1, table default)
  65000 {65100,65200,65300}               ← AS_SEQUENCE 65000 + AS_SET
    10.10.4.2 from 10.10.4.2 (1.1.1.1)
      Origin IGP, valid, external, best
      rx pathid: 0, tx pathid: 0x0

R-Upstream# show ip bgp 10.0.0.0/22 | include AS-Path
      AS-Path: 65000 {65100,65200,65300}
!              ↑               ↑
!        AS_SEQUENCE      AS_SET (longueur = 1)
!        (l'agrégateur)   (les composantes)
Comparaison show ip bgp — avec et sans as-set
CommandeSans as-setAvec as-set
show ip bgp 10.0.0.0/22 AS-Path: (empty)
+ ATOMIC_AGGREGATE
AS-Path: {65100,65200,65300}
Longueur AS_PATH 0 (vide) 1 (le SET entier)
Loop prevention ❌ Perdue ✅ Préservée
ATOMIC_AGGREGATE Présent Absent
Vérifier les routes supprimées (summary-only)
R1# show ip bgp
   Network          Next Hop         Metric LocPrf Weight Path
s  10.0.1.0/24      10.10.1.1             0    100      0 65100 i       ← s = supprimé
s  10.0.2.0/24      10.10.2.1             0    100      0 65200 i
s  10.0.3.0/24      10.10.2.1             0    100      0 65200 65300 i
*> 10.0.0.0/22      0.0.0.0               0         32768 {65100,65200,65300} i   ← agrégat

! 's' = Suppressed — route reçue mais non annoncée à cause de summary-only
! Toujours présente dans la table BGP locale mais non propagée
Comportement selon la commande aggregate-address
SyntaxeAS_PATH de l'agrégatATOMIC_AGGREGATELoop prevention
aggregate-address X
(sans option)
(vide) Positionné ✓ Perdue ✗
aggregate-address X as-set {65100,65200,65300} Absent ✓ Préservée ✓
aggregate-address X summary-only (vide) Positionné ✓ Perdue ✗
aggregate-address X as-set summary-only {65100,65200,65300} Absent ✓ Préservée ✓
ATOMIC_AGGREGATE — rôle et signification

ATOMIC_AGGREGATE (type 6, Well-known Discretionary) est un flag sans valeur — sa seule présence suffit à signaler qu'une agrégation avec perte d'information a été effectuée. Il indique aux routeurs en aval que l'AS_PATH a été tronqué et que la route ne reflète pas fidèlement le chemin réel.

! ─── Sans as-set : ATOMIC_AGGREGATE positionné ──────────────────────────
R-Upstream# show ip bgp 10.0.0.0/22
  65000
    ...
    Origin IGP, valid, external, best
    atomic-aggregate                           ← perte d'info signalée
    Aggregated by 65000 1.1.1.1              ← + AGGREGATOR (type 7)

! ─── Avec as-set : pas d'ATOMIC_AGGREGATE ───────────────────────────────
R-Upstream# show ip bgp 10.0.0.0/22
  65000 {65100,65200,65300}
    ...
    Origin IGP, valid, external, best
    ← pas d'atomic-aggregate → info préservée
Quand utiliser quoi
🏭

as-set — recommandé en ISP/transit

Agrégation de routes clients avec AS différents. Préserve la loop prevention. Produit un AS_SET dans l'AS_PATH. À utiliser quand les composantes proviennent d'AS multiples.

🏢

Sans as-set — acceptable en enterprise

Agrégation de routes internes au même AS (ex: loopbacks). Loop prevention moins critique car toutes les routes appartiennent au même AS. ATOMIC_AGGREGATE positionné pour signaler l'agrégation.

⚠️

Cas particulier — AS_SET trop grand

Un AS_SET avec des centaines d'AS (agrégation massive) augmente la taille des UPDATE BGP. Dans ce cas, certains opérateurs préfèrent omettre as-set et accepter la perte de loop prevention pour réduire la charge CPU/mémoire.

Piège 1 — Agréger sans as-set ni summary-only
🔴
Problème : aggregate-address X sans options annonce l'agrégat ET les routes spécifiques simultanément. Les peers reçoivent le /22 ET les /24 — table BGP inutilement chargée, pas d'économie de préfixes.
! Symptôme : R-Upstream voit à la fois le /22 et les /24
R-Upstream# show ip bgp | include 10.0.
   10.0.0.0/22      ...   ← agrégat
   10.0.1.0/24      ...   ← spécifique aussi annoncé !
   10.0.2.0/24      ...   ← spécifique aussi annoncé !

! Fix : ajouter summary-only
 aggregate-address 10.0.0.0 255.255.252.0 as-set summary-only
Piège 2 — L'agrégat n'apparaît pas dans la table BGP
⚠️
Cause : l'agrégat BGP n'est créé que si au moins une route composante plus spécifique est présente dans la table BGP locale. Si toutes les routes /24 disparaissent (peer down), l'agrégat /22 est aussi retiré.
! L'agrégat disparaît si toutes les routes composantes sont absentes.
! Solution : ajouter une route statique null0 pour "ancrer" l'agrégat

ip route 10.0.0.0 255.255.252.0 Null0   ! route fantôme toujours présente

router bgp 65000
 network 10.0.0.0 mask 255.255.252.0   ! injecter via network (alternatif)
 ! ou
 aggregate-address 10.0.0.0 255.255.252.0 as-set summary-only
Piège 3 — AS_SET et critère #4 (longueur AS_PATH)
ℹ️
Un AS_SET de 50 AS compte pour 1 seul hop dans la longueur AS_PATH. Cela peut rendre l'agrégat artificiellement court et le faire préférer à une route plus spécifique (si le longest-match ne s'applique pas). À garder en tête lors du design de politiques de routage.
Piège 4 — as-set avec des routes de même AS
💡
Si toutes les routes composantes viennent du même AS (ex: deux prefixes /24 du même client AS 65100), l'AS_SET contiendra un seul AS : {65100}. Ce n'est pas une erreur, mais l'AS_SET n'apporte pas grand chose ici — une agrégation simple sans as-set suffirait.
Piège 5 — Confondre AS_SET et AS_CONFED_SET
⚠️
AS_SET (code 2) est utilisé lors d'une agrégation BGP normale. AS_CONFED_SET (code 4) est l'équivalent interne à une confédération BGP. En dehors des confédérations, seul AS_SET est utilisé. La notation dans show ip bgp : {} pour AS_SET, [] pour AS_CONFED_SET.

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

Qu'est-ce qu'un AS_SET dans l'attribut AS_PATH ?
Un sous-type de l'attribut AS_PATH (code 2) contenant un ensemble non-ordonné d'AS. Il est créé lors d'une agrégation BGP avec l'option as-set. Il contient l'union des AS de toutes les routes composantes de l'agrégat.
→ Notation : {65100,65200,65300} — accolades dans show ip bgp
Pourquoi utiliser as-set lors d'une agrégation BGP ?
Pour préserver la loop prevention. Sans as-set, l'AS_PATH de l'agrégat est vide → les AS d'origine ne voient pas leur propre numéro → ne peuvent pas détecter les boucles. Avec as-set, tous les AS composants sont visibles dans le SET.
→ as-set = ATOMIC_AGGREGATE non positionné = info préservée
Un AS_SET de 10 AS vaut combien dans la longueur AS_PATH (critère #4) ?
1 seul. Quelle que soit sa taille, un AS_SET entier compte pour 1 dans le calcul de la longueur AS_PATH. Ainsi 65000 {65100,65200,65300} a une longueur de 2, pas de 4.
→ AS_SEQUENCE compte 1 par AS · AS_SET entier = 1
Quelle est la différence entre summary-only et as-set ?
summary-only : supprime l'annonce des routes spécifiques (seul l'agrégat est propagé). as-set : construit l'AS_PATH de l'agrégat en incluant tous les AS des composantes. Les deux options sont indépendantes et souvent utilisées ensemble : aggregate-address X as-set summary-only.
→ summary-only = quoi annoncer · as-set = comment construire l'AS_PATH
Quel attribut BGP est positionné quand on agrège sans as-set ?
ATOMIC_AGGREGATE (type 6, Well-known Discretionary). C'est un flag sans valeur dont la seule présence signale qu'une agrégation avec perte d'information a été effectuée — l'AS_PATH original des routes composantes n'est plus visible. Accompagné de l'attribut AGGREGATOR (type 7).
→ ATOMIC_AGGREGATE absent → as-set utilisé → info préservée
Comment vérifier que l'agrégat est bien présent et supprime les spécifiques ?
Avec show ip bgp : les routes spécifiques supprimées affichent un s en début de ligne (Suppressed). L'agrégat affiche *>. La commande show ip bgp X.X.X.X/Y sur l'agrégat montre "aggregated by" et l'AS_PATH avec le SET.
→ 's' = supprimé par summary-only · '*>' = best path installé
L'agrégat BGP disparaît subitement. Quelle est la cause probable ?
Il n'existe plus aucune route composante (plus spécifique) dans la table BGP. L'agrégat est conditionnel : il n'existe que si au moins une route couverte est présente. Solution : ajouter une route statique ip route X.X.X.X mask Null0 pour ancrer l'agrégat en permanence.
→ Agrégat BGP = conditionnel · statique Null0 = ancrage permanent
Quelle est la notation de l'AS_SET dans show ip bgp ?
Les accolades { } — exemple : 65000 {65100,65200,65300}. À ne pas confondre avec les parenthèses ( ) pour AS_CONFED_SEQUENCE ni les crochets [ ] pour AS_CONFED_SET (utilisés uniquement dans les confédérations BGP).
→ { } = AS_SET · ( ) = CONFED_SEQ · [ ] = CONFED_SET