Border Gateway Protocol

BGP (ang. Border Gateway Protocol) – zewnętrzny protokół trasowania (routingu). BGP w wersji czwartej jest podstawą działania współczesnego Internetu. Istnieje wiele rozszerzeń BGP stosowanych przy implementacji MPLS VPN, IPv6 czy Multicast VPN.

Schemat zmiany stanów połączenia BGP

Jest protokołem wektora ścieżki umożliwiającym tworzenie niezapętlonych ścieżek pomiędzy różnymi systemami autonomicznymi. Obecny otwarty standard protokołu BGP jest opisany w dokumentach RFC 4271 i 1771. Protokół ten nie używa tradycyjnych metryk – analogiczną funkcję (determinanty wyboru trasy) pełnią atrybuty i algorytm wyboru. BGP pozwala na pełną redundancję w połączeniu z Internetem, jest również używany do połączenia dwóch systemów autonomicznych, do wymiany ruchu między tymi systemami.

Protokół BGP funkcjonuje w oparciu o protokół warstwy 4 modelu OSI (port TCP o numerze 179). Zapewnia to, że aktualizacje są wysyłane w sposób niezawodny, dzięki czemu w BGP niepotrzebne są mechanizmy retransmisji, segmentacji itp. Routery zestawiają pomiędzy sobą sesje BGP, dzięki którym mogą wymieniać się informacjami o dostępnych trasach (prefiksach) i wyznaczać najlepszą niezapętloną ścieżkę do sieci docelowych.

Podstawą funkcjonowania BGP jest system autonomiczny, (ang. Autonomous System, AS), czyli sieć lub grupa sieci pod wspólną administracją i ze wspólną polityką trasowania. Systemy autonomiczne identyfikowane są za pomocą numerów, zwanych numerami AS, które przyznawane są przez organizację RIR (w Europie i części Azji jest to RIPE NCC). Protokół BGP w wersji oryginalnej zakładał dwubajtowe numery AS (16 bit), co ze względu na ich ograniczoną liczbę (65536) stanowiło poważniejsze ograniczenie rozwoju Internetu niż brak numerów IP. W 2007 roku wprowadzono numery AS o długości 4 bajtów (32 bit), przez co powiększono znacznie przestrzeń dostępnej numeracji. Implementacja 32 bitowego ASN jest rozwiązana za pomocą dodatkowych atrybutów, przez co jest kompatybilna ze starszym formatem i nie wymagała wymiany oprogramowania na wszystkich routerach.

Możemy rozróżnić EBGP (ang. exterior), gdy mamy sesję między dwoma różnymi AS oraz IBGP (ang. interior), gdy sesja BGP nawiązana jest między dwoma routerami brzegowymi w obrębie jednego AS. Protokół wymiany informacji przez routery IBGP oraz EBGP jest taki sam, natomiast routery inaczej interpretują trasy otrzymane poprzez protokół BGP z własnego lub obcego systemu autonomicznego. Trasy otrzymane przy użyciu BGP od routerów znajdujących się w tym samym systemie autonomicznym (IBGP) mają zazwyczaj bardzo niski priorytet. Pozwala to na stosowanie wewnętrznych protokołów routingu (IGP) do optymalizacji tras wewnątrz systemu autonomicznego. W implementacjach stosujących tzw. dystans administracyjny, czyli parametr określający priorytet ważności tras otrzymanych za pośrednictwem danego źródła (protokołu routingu), przejawia się to domyślnym ustawieniem dystansu dla EBGP na 20 (wysoki priorytet), a dla IBGP na 200 (bardzo niski priorytet). Routery również ustawiają w różny sposób atrybuty tras przy wysyłaniu aktualizacji przez IBGP lub EBGP[1].

Sesje mogą być zestawione pomiędzy routerami bezpośrednio połączonymi (standardowo na stykach Internetowych) lub pomiędzy zdalnymi routerami (BGP multihop). Sesje multihop są naturalne dla IBGP, w połączeniach zewnętrznych (EBGP) są rzadziej używane, gdyż najczęściej do prawidłowego działania wymagają wsparcia innych protokołów trasowania dynamicznego bądź też trasowania statycznego. Wynika to z konieczności uzyskania komunikacji na poziomie protokołu TCP z sąsiednim routerem EBGP, w przypadku braku trasy pochodzącej z innego źródła nie ma możliwości zestawienia sesji BGP.

Każdy system autonomiczny może rozgłaszać pewną liczbę adresów IP zgrupowanych w prefiksy. Np. www.onet.pl ma adres IP 213.180.130.200, Onet.pl rozgłasza prefiks 213.180.128.0/21 (czyli zakres IP 213.180.128.0-213.180.135.255) pod AS o numerze 12990. Liczba prefiksów w Internecie cały czas rośnie wraz z liczbą użytych adresów i wyczerpywaniem się adresacji (potrzeba dzielenia bloków adresowych na mniejsze), w kwietniu 2011 prefiksów w tablicy routingu było już 350000 a w maju 2013 już 450000.

BGP używa się typowo jako protokołu routingu w sieci posiadającej styki internetowe z 2 (lub więcej) dostawcami Internetu. BGP jest protokołem o długim czasie zbieżności (pobranie pełnej tablicy routingu Internetu może potrwać wiele godzin, jak również rozpowszechnienie nowego wpisu z tablicy routingu w całej sieci).

Cechy charakterystyczne

edytuj
  • Protokół wektora ścieżki;
  • Używa TCP jako protokołu warstwy transportowej;
  • Pełna tablica trasowania jest wymieniana tylko podczas początkowej sesji BGP;
  • Aktualizacje przesyłane są przez port TCP o numerze 179;
  • Sesje BGP są utrzymywane przez wiadomości typu „keepalive”;
  • Każda zmiana w sieci powoduje wysłanie zawiadomienia o aktualizacji;
  • BGP ma swoją własną tablicę BGP. Każda pozycja w sieci musi znaleźć się najpierw w tablicy BGP;
  • BGP ma skomplikowaną tabelę atrybutów, np. sąsiedniego skoku i pochodzenia;
  • Obsługuje VLSM i podsumowanie (zwane też bezklasowym trasowaniem międzydomenowym (ang. Classless Inter-Domain Routing (CIDR));

Atrybuty ścieżki BGP

edytuj

Każdy zestaw ścieżek (tras) przesyłanych przez BGP opisywany jest zestawem atrybutów. Pozwalają one na większą elastyczność i podejmowanie złożonych decyzji dotyczących wyboru najlepszej trasy. Atrybuty BGP są przenoszone w komunikatach aktualizacyjnych (UPDATE) protokołu BGP.

BGP definiuje następujące rodzaje atrybutów ścieżki:

  • standardowe (ang. well-known) lub niestandardowe. Atrybuty standardowe muszą być rozumiane przez wszystkie implementacje BGP.
  • obowiązkowe lub opcjonalne. Niektóre ze standardowych atrybutów są obowiązkowe, tzn. muszą być podane w opisie ścieżki. Wszystkie atrybuty niestandardowe są opcjonalne.
  • przechodnie lub nieprzechodnie. Atrybut przechodni jest przekazywany dalej do innych routerów BGP. Wszystkie parametry standardowe są przechodnie. Atrybuty opcjonalne mogą być przechodnie (wówczas router jest zobowiązany przekazać atrybut do innych routerów, nawet jeżeli jego implementacja protokołu go nie interpretuje) lub nieprzechodnie (wówczas atrybut może zostać zignorowany).
Najważniejsze atrybuty ścieżki przesyłane przez protokół BGP
Kod atrybutu Nazwa atrybutu Kategoria atrybutu Opis Źródło
1 ORIGIN (Pochodzenie) Standardowy, obowiązkowy Atrybut określa źródło ścieżki; może przybrać jedną z trzech następujących wartości:
  • IGP – pochodzący z wewnątrz danego systemu autonomicznego.
  • EGP – otrzymany z EGP (ang. External Gateway Protocol, protokół bramy zewnętrznej).
  • Niepełny (ang. incomplete) – trasa BGP zostaje wykryta przez redystrybucję lub routery statyczne.
RFC:1771
2 AS_PATH Standardowy, obowiązkowy Opisuje ciąg systemów autonomicznych, będących ścieżką do docelowej sieci IP. RFC:1771
3 NEXT_HOP (Następny skok) Standardowy, obowiązkowy Opisuje adres następnego skoku ze zdalnej ścieżki. RFC:1771
4 MULTI_EXIT_DISC (Multi Exit Discriminator, Wyróżnik wielowyjściowy) Niestandardowy, nieprzenośny Informuje routery równorzędne BGP w innych systemach autonomicznych o ścieżce, którą należy podążać do AS w przypadku istnienia wielu połączonych systemów autonomicznych. Preferowana jest niższa wartość MED. RFC:1771
5 LOCAL_PREF (Lokalna preferencja) Standardowy, opcjonalny Wskazuje preferowaną ścieżkę wyjścia z danego AS. Wyższa lokalna preferencja jest zawsze lepsza. RFC:1771
6 ATOMIC_AGGREGATE (Niepodzielny agregat) Standardowy, opcjonalny Informuje routery BGP, że dokonana została agregacja tras. Nieużywany przy wyborze routera. RFC:1771
7 AGGREGATOR (Agregator) Niestandardowy, przenośny Identyfikator routera odpowiedzialnego za agregację; nie używany przy wyborze routera. RFC:1771
8 COMMUNITY (Okolica) Niestandardowy, przenośny Pozwala na znakowanie tras i użycie grup tras o takich samych cechach charakterystycznych.

ISP zwykle znakuje ruch od klientów oraz niektóre grupy prefiksów.

RFC:1997
9 ORIGINATOR_ID (Identyfikator źródła) Opcjonalny, nieprzenośny Służy zapobieganiu powstawaniu pętli. RFC:1966
10 Cluster list (Lista klastrów) opcjonalny, nieprzenośny Lista używana w środowisku route reflectorów. Używana do zapobiegania pętli. RFC:1966

Algorytm wyboru najlepszej ścieżki

edytuj

BGP z założenia pracuje w sieciach redundantnych, gdzie istnieje kilka możliwości osiągnięcia sieci docelowej. Gdy protokół BGP otrzyma wiele ścieżek do konkretnego celu w zdalnej sieci, musi wybrać najlepszą ścieżkę. Różne ścieżki do tych samych prefiksów (a tak naprawdę ich atrybuty) są porównywane zgodnie z poniższym algorytmem. Atrybuty są sprawdzane po kolei, jeżeli dany atrybut ma taką samą wartość we wszystkich ścieżkach (opcjach dojścia do prefiksu), to porównywany jest kolejny atrybut. Atrybuty sprawdzane są z podaną kolejnością, poszukiwane jest pierwsze wystąpienie nierównych parametrów (co pozwala wybrać lepszą ścieżkę). BGP nie bierze pod uwagę kwestii związanych z jakością połączenia.

BGP zawsze propaguje najlepszą ścieżkę do wszystkich routerów równorzędnych.

Algorytm wyboru trasy stosowany przez routery Cisco[2]:

  1. Preferuj najwyższą wagę (ang. WEIGHT, lokalny parametr routingu BGP specyficzny dla Cisco, nie przesyłany do innych routerów)
  2. Preferuj najwyższy LOCAL_PREF,
  3. Preferuj trasy ogłoszone lokalnie przez komendę network lub redistribute.
  4. Preferuj ścieżkę z krótszym AS_PATH (mniejsza liczba systemów autonomicznych w ścieżce).
  5. Preferuj niższy ORIGIN.
  6. Preferuj niższy MED.
  7. Preferuj ścieżki z eBGP nad iBGP.
  8. Preferuj ścieżki, gdzie koszt IGP do BGP next-hopa jest niższy.
  9. Jeżeli włączony jest BGP multipath to zainstaluj trasę w tablicy routingu.
  10. Preferuj starszą ścieżkę (otrzymaną wcześniej).
  11. Preferuj ścieżkę, która ma niższy router-id.
  12. Preferuj ścieżkę, która przyszła od sąsiada (neighbor) z niższym adresem IP.

Implementacje

edytuj

Symulatory BGP

edytuj

Przypisy

edytuj
  1. Sam Halabi: Internet Routing Architecures. Wyd. 2. Cisco Press, kwiecień 2001, s. 138. ISBN 1-57870-233-X.
  2. BGP Best Path Selection Algorithm, IP Routing Design Technotes, www.cisco.com

Zobacz też

edytuj

Linki zewnętrzne

edytuj