Introduction à BGP

Vous êtes-vous déjà demandé quel protocole de routage est utilisé sur internet ? La réponse est BGP.

Ce protocole est prévu pour réaliser du routage entre des AS (Autonomous System). Il est aussi prévu pour fonctionner sur de très grands réseaux.

A travers cette série d’article, nous allons étudier son fonctionnement, comment le mettre en place, etc…

 

1)     Caractéristiques de base

 

Il existe 2 types de protocole de routage : les IGP (Interior Gateway Protocol) et les EGP (Exterior Gateway Protocol).

Les IGP assurent le routage au sein des AS (Autonomous System). Par exemple : RIP, EIGRP, OSPF.

Les EGP assurent le routage entre les AS.

EGP Topologie

BGP est du type EGP. C’est d’ailleurs le seul protocole de ce type.

 

Pour rappel, un AS est un ensemble de réseaux sous une même autorité. Par exemple, un réseau d’entreprise est un AS. BGP permet de connecter cet AS à internet, et donc à d’autres AS.

 

Il est utile de connaitre le fonctionnement de BGP pour :

  • Travailler chez un opérateur internet
  • Gérer un point d’échange entre opérateurs
  • Se connecter à plusieurs FAI
  • Le mettre en place dans le cœur de réseau d’une très grande entreprise

 

BGP est du type Path Vector. C’est un dérivé du type vecteur de distance.

La métrique utilisée est très complexe, et l’administrateur de l’AS pourra en quelque sorte choisir la métrique à utiliser. Il ne s’agit pas d’une métrique simple, mais d’une liste d’attributs associés à la route. Nous verrons les détails plus tard.

BGP utilise TCP sur le port 179. C’est donc TCP qui se charge d’envoyer les Ack.

La convergence sur un réseau BGP est très lente.

Imaginez ce qui se passerait sur internet avec une convergence rapide.

Le moindre changement serrait immédiatement répliqué dans le monde entier !

 

Aussi, les MAJ de routage sont envoyées quand il y a du changement, et seulement ce qui a changé est envoyé.

2)     Relation de voisinage BGP

 

Pour établir une relation de voisinage BGP entre 2 routeurs, il faut la configurer manuellement sur les deux routeurs.

Contrairement à d’autres protocoles où les voisins se détectent automatiquement, en BGP il faut renseigner l’adresse du voisin, de manière à établir la connexion.

Comme dit précédemment, la session utilise le protocole TCP.

Voici les états d’une connexion :

  • Idle : Premier stade d’une session BGP. Quand une ouverture de session est demandée (configuration, démarrage du routeur), le routeur initie une session TCP, puis passe en mode Connect (pour attendre la réponse)
  • Connect : Le routeur attend une réponse (TCP Syn-Ack) du voisin ou une demande d’établissement de connexion TCP. En effet, les deux routeurs vont vouloir établir une session en même temps. Une seule session sera conservée (celle initiée par le routeur avec le plus haut ID). Il y aura donc un routeur « chef » de la relation de voisinage. Quand la session est établie, on envoie le message Open et on passe en mode Open Sent
  • Active (facultatif): La tentative de connexion avec le voisin a échoué (Timeout). Le routeur fait une nouvelle tentative. En cas d’échec, il retombe en mode Idle. En cas de succès, on passe en mode Open Sent. Ce statut n’est donc atteint qu’en cas d’échec en mode Connect.
  • Open Sent : Le message Open a été envoyé. Il contient diverses infos (version BGP, ID du routeur, numéro d’AS, Hold Down Timer). A la réception du message Open du voisin, si tout convient, le routeur envoie un KeepAlive au et passe en Open Confirm.
  • Open Confirm : Attente du KeepAlive du voisin, avant de passer en Established.
  • Established : La relation de voisinage est établie. Les routeurs peuvent s’échanger des routes.

 

Voici un petit schéma résumant le processus (sans le passage en mode Active)  :

Session BGP

3)     Types de messages BGP

 

Voyons les différents types de messages qui existent en BGP.

Nous avons déjà abordé certains d’entre eux.

  •  Open packet : Il permet de démarrer une relation de voisinage. C’est le premier message envoyé après qu’une session TCP soit établie. Il contient entre autre la version BGP, l’ID du routeur (l’IP d’une des interfaces), le numéro de l’AS local, et le Hold Down Timer (temps max entre deux messages BGP avant de clore la session). Le message Open peut aussi contenir des informations additionnelles.
  • Keep Alive : Permet de maintenir la relation BPG. Comme BGP n’envoie des MAJ que lors ce que c’est nécessaire (après un changement), il est fort probable que les routeurs ne discutent pas pendant longtemps (si il n’y a pas de changement). Pour s’assurer que la relation de voisinage tient toujours (et que le voisin est toujours là), des Keep Alive sont envoyés. En générale, le temps entre deux Keep Alive représente 1/3 du Hold Down Timer Max. Si on ne reçoit pas de Keep Alive ou de Update, et que le Hold Down Timer est atteint, la relation est arrêtée. Par défaut le Hold Down Timer est de 180 secondes chez Cisco. Donc 60 secondes entres les Keep Alive.
  • Update : Permet d’annoncer de nouvelles routes, ou d’en retirer. Quand on annonce une nouvelle route, on donne l’AS Path avec. Il s’agit du chemin que va emprunter le paquet pour arriver à destination. Si le routeur qui reçoit la route pour une destination voit son propre AS dans l’AS Path, il va refuser la route (car cela causerait une boucle de routage).
  • Notification : Informe le voisin qu’il y a un problème. La relation BGP est arrêtée (ainsi que la session TCP) et le routeur repasse en mode Idle.

4)     Types de tables BGP

 

BGP utilise 3 tables pour fonctionner.

 

Neighbor Table : contient la liste des voisins à qui on est connecté. Les relations sont établies à la main.

Voici un exemple de table de voisinage :

Show IP BGP Summary

 

Les champs contenus dans la table sont les suivants :

  • Neighbor : l’ID du voisin
  • V : la version BGP
  • AS : le numéro de l’Autonomous System du voisin
  • MsgRcvd : nombre de messages reçus (Update, KeepAlive)
  • MsgSent : nombre de messages envoyés
  • TblVer : dernière version de la table de routage envoyée (à comparer avec la version locale)
  • InQ : nombre de messages en file d’attente venant du voisin
  • OutQ : nombre de message en file d’attente, à envoyer chez le voisin
  • Up/Down : depuis combien de temps la relation est UP
  • State/PfxRcd : nombre de préfixes reçus par le voisin

 

La deuxième table est la BGP Table. Elle contient la liste de toutes les routes reçus, et ce depuis tous les voisins. En effet, si l’on a plusieurs voisins, il se peut que l’on reçoive plusieurs fois la même route (mais venant d’un voisin différent).

Voici un exemple :

Show IP BGP

 

Les champs contenus dans la table sont les suivants :

 

  • * : l’étoile signifie que la route est valide
  • > : le chevron signifie que c’est la meilleure route disponible pour cette destination (ici nous n’avons qu’une route, donc il n’y a pas le choix)
  • Network : le réseau de destination
  • Next Hop : prochain saut pour joindre la destination
  • Metric : un des attributs constituant la métrique totale
  • LocPrf : un des attributs constituant la métrique totale
  • Weight : un des attributs constituant la métrique totale
  • Path : les AS par lesquels il faudra passer (ici il n’y en a que 1 : le 200)

 

La troisième table est la table de routage, ce qui est logique. Son fonctionnement ne change pas de d’habitude.

 

Pour chaque destination apprise par BGP, la meilleure route sera placée dans la table de routage.

 

5)     Multihoming

 

Le principe du Multihoming c’est d’être connecté à plusieurs FAI.

4

Cela permet d’avoir de la redondance (haute disponibilité), et de faire de la répartition de charge.

Cela à un intérêt sur les paquets entrants et sortants :

Paquet sortant : nous pouvons répartir la charge sur les deux FAI. Nous pourrons alors profiter de nos deux lignes internet. De plus, selon le réseau de destination à joindre (sur Internet), il est possible qu’un FAI offre une meilleure route. Nous pourrons alors le favoriser dans le choix du Next Hop.

Sans BGP, nous pouvons tout de même faire de la répartition de charge, par contre, nous ne pouvons pas savoir quel FAI offre le meilleur chemin (il faudra choisir au hasard).

 

Paquet entrant : nous pouvons aussi répartir la charge en entrée en annonçant la moitié de nos sous réseaux internes à un FAI, et l’autre moitié au deuxième FAI.

Dans l’exemple donnée, nous pouvons annoncer 170.50.2.0 /25 au FAI 1, et 170.50.2.128 /25 au FAI 2.

 

Si nous avons deux routeurs qui font face à internet, nous pouvons privilégier l’un ou l’autre en fonction du réseau interne à joindre. Ainsi, un paquet venant d’internet sera automatiquement dirigé vers le routeur (d’entrée sur notre réseau) offrant le meilleur chemin.

 

Voyons maintenant les 3 façons d’implémenter BGP pour se connecter à Internet

 

Cas No 1 : route par défaut

Ici nous avons deux FAI, qui nous envoient chacun une route par défaut.

Il n’est donc pas possible de favoriser un FAI ou un autre en fonction du réseau à joindre.

Par contre, nous pouvons tout de même utiliser les deux FAI simultanément (répartition de charge), ou en garder un en secours.

Nous pouvons aussi influencer le choix du FAI pour les paquets entrants (voir précédemment), selon les réseaux (internes) que l’on annonce aux FAI.

Cette solution ne consomme que très peu de ressource.

 

Cas No 2 : MAJ partielles

Ici les FAI nous envoient une partie de leur table de routage (table de routage de tout internet).

Nous pouvons choisir les routes (pour quelles destinations) que nous souhaitons recevoir.

Par exemple, si nous avons des bureaux distants ou des serveurs dans un Data Center, nous y enverrons régulièrement du trafic. Nous souhaitons donc savoir quel FAI nous offre le meilleur chemin vers ces destinations favorites.

Pour les autres destinations, nous choisirons aléatoirement un des FAI.

 

Cas No 3 : MAJ complètes

Ici les 2 (ou plus) FAI nous envoient chacun leur table de routage complète (table de routage de tout internet).

Nous pourrons donc choisir le meilleur FAI pour chaque paquet sortant.

Cette solution consomme beaucoup de ressource. Surtout beaucoup de RAM (plusieurs centaines de MO)

 

 

Tagués avec :
Publié dans BGP
3 commentaires pour “Introduction à BGP
  1. Mike dit :

    Merci pour votre article sur le protocole BGP

  2. Atighou diallo dit :

    merci beaucoup pour l’explication!!!!

  3. ZAKARI dit :

    Merci beaucoup

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Le temps imparti est dépassé. Merci de saisir de nouveau le CAPTCHA.