BGP : PRINCIPE DE AS Path Prepending

06/01/2016 12:45

Sur Internet, le routage des paquets est structuré selon une hiérarchie à deux niveaux. L'Internet est composé d'un assemblage de Systèmes Autonomes (AS pour « Autonomous System », « Domaines » en Français) qui utilisent chacun en interne leur protocole interne de routage (ou IGP pour Interior Gateway Protocol) afin de déterminer le chemin le plus efficace en interne au sein de l'AS. Ces règles de routage sont très fines, les protocoles communément utilisés étant OSPF, IS-IS ou EIGRP.

Utiliser des routes fines au niveau global Internet ne fonctionnerait pas car leur  nombre serait beaucoup trop important : Les "routes fines" sont donc agrégées (ou regroupées) en routes de plus haut niveau.

Le second niveau de la hiérarchie de routage correspond à un routage entre domaines. A ce niveau on décrit comment sont interconnectés les Domaines et via quels domaines un paquet doit transiter pour arriver à destination. Le protocole actuellement utilisé sur Internet pour le routage inter-Domaines est BGP4 (Border Gateway Protocol version 4).

Chaque domaine est indépendant dans la gestion de son routage interne. Les domaines (ou AS pour "Autonomous System") est identifié de façon unique par un numéro : Le numéro d'AS (ou ASN pour Autonomous System Number).

Chaque AS "annonce" (ou déclare) ses routes à ses voisins qui propagent l'information : A chaque passage d'un AS, la route s'enrichit de l'AS quelle vient de traverser. C'est l'AS-PATH.

Illustrons cela avec quelques exemples pour comprendre BGP :

La figure 1 présente un réseau simplifié avec quelques AS et décrit la génération de l'AS-PATH

 

On peut voir que :

  1. l'AS1 annonce "192.0.2.0/24" (il est dans ce cas appelé "AS-Origin") et émet des annonces avec AS-PATH=(1)
  2. AS2 reçoit cette annonce, se rajoute en premier dans l'AS-PATH (action de "AS-PATH Prepending") et émet un AS-PATH=(2,1)
  3. AS4 reçoit cette annonce, fait un AS-PATH Prepending de lui-même et émet un AS-PATH=(4,2,1)

AS5 sait donc qu'il peut joindre le sous-réseau "192.0.2.0/24" via un AS-PATH de longueur 3 (4,2,1) en passant via AS4.

  1. D'un autre coté la même annonce d'AS1 est parvenue à AS3, qui fait son "AS-PATH Prepend" et émet donc un AS-PATH=(3,1) vers AS5

AS5 sait donc qu'il peut joindre le sous-réseau "192.0.2.0/24" via un AS-PATH de longueur 2 (3,1) en passant via AS3.

En conclusion : AS5 a donc deux routes : Il va préférer utiliser en priorité la route la plus courte, donc celle via AS3.

Mais dans ce cas comment AS1 peut forcer le trafic à passer via AS2 (par exemple pour des raisons de prix) ? La Figure 2 présente comment AS1 peut artificiellement augmenter la longueur de l'AS-PATH afin d'obtenir un tel résulta : AS1 va émettre une annonce vers AS3 en ajoutant 2 fois son ASN à l'AS-PATH émis. La figure 2 décrit un tel scénario.

Dans ce cas, AS5 reçoit deux routes :

  1. Une de longueur 3 via AS4 avec un AS-PATH=(4,2,1)
  2. Une autre de longueur 4 via AS3 avec un AS-PATH=(3,1,1,1).

AS5 va donc préférer le lien vers AS4 pour envoyer le trafic : C'est bien le lien avec AS2 qui sera utilisé pour arriver sur AS1.

Dans un contexte ou les AS sont maillés, comment les boucles de routage sont-elles détectées ? Assez simplement : Si un routeur reçoit une annonce avec un AS-PATH dans lequel il y a déjà son propre AS-PATH c'est qu'une boucle s'est formée : Il ignore donc la route.

Comme on a pu le voir, l'AS-PATH Prepending permet d'allonger artificiellement la taille de l'AS-PATH, via la répétition du numéro d'AS. Ce mécanisme couplé avec celui de détection de boucle permet d'éviter que le trafic emprunte un AS donné.