Słownik

Czym jest wybór trasy w BGP?

Wybór trasy w BGP to algorytm best-path, który spośród wielu tras do tego samego prefiksu wybiera jedną według ustalonej kolejności atrybutów.

Ostatnia aktualizacja:

Wybór trasy w BGP (best-path selection) to algorytm, według którego router spośród wielu tras do tego samego prefiksu wybiera dokładnie jedną najlepszą i instaluje ją w tablicy routingu. BGP jest protokołem typu path-vector i nie używa pojedynczej metryki jak protokoły wewnętrzne, dlatego decyzja zapada przez sekwencyjne porównywanie atrybutów ścieżki w ściśle ustalonej kolejności. Pierwsze kryterium, które rozróżnia dwie trasy, kończy porównanie, a pozostałe nie są już brane pod uwagę.

Dlaczego BGP potrzebuje algorytmu best-path

Do tego samego prefiksu router często poznaje wiele równoległych tras: od różnych dostawców tranzytu, partnerów peeringowych czy własnych sąsiadów iBGP. BGP z definicji wybiera tylko jedną najlepszą ścieżkę do każdego prefiksu i tylko ją rozgłasza dalej. Algorytm musi więc być deterministyczny i identyczny na wszystkich routerach, aby uniknąć pętli i niespójności. Implementacje zgodne z RFC 4271 stosują tę samą logiczną kolejność, choć Cisco dokłada przed nią niestandardowy atrybut weight, lokalny dla danego routera.

Kolejność atrybutów rozstrzygających

Algorytm przechodzi przez kolejne kryteria od najwyższego priorytetu do najniższego. Najpierw odrzucane są trasy z nieosiągalnym next-hopem, po czym router porównuje atrybuty po kolei, aż jedno z nich rozstrzygnie remis.

  • Weight (tylko Cisco, lokalny dla routera): wyższy wygrywa. Potem LOCAL_PREF: wyższy wygrywa i steruje wyjściem ruchu z całego AS.
  • Trasy pochodzące lokalnie (network, redistribute, aggregate) przed nauczonymi od sąsiadów.
  • Najkrótsza ścieżka AS_PATH, następnie najniższy kod ORIGIN (IGP < EGP < incomplete).
  • Najniższy MED, porównywany domyślnie tylko między trasami z tego samego sąsiedniego AS.
  • Preferencja eBGP nad iBGP, potem najniższa metryka IGP do next-hopa, a na końcu najniższy Router ID jako ostateczny rozjemca.

Sterowanie wyborem trasy w praktyce

Inżynieria ruchu polega na świadomym wpływaniu na te kryteria. LOCAL_PREF to najsilniejsze praktyczne narzędzie dla ruchu wychodzącego: ustawiając go wyżej dla peeringu niż dla tranzytu, kierujesz ruch tańszą ścieżką. Na ruch przychodzący wpływa się trudniej, bo decyduje o nim sieć zdalna, dlatego stosuje się prepending AS_PATH (sztuczne wydłużanie ścieżki), MED między tymi samymi sąsiadami oraz społeczności BGP (BGP communities) sygnalizujące dostawcy pożądaną politykę. Trzeba pamiętać, że LOCAL_PREF i weight stoją w algorytmie przed długością AS_PATH, więc nadgorliwy prepending nie przebije polityki ustawionej u sąsiada.

Wybór trasy w sieci AS202520 SkyPass

W AS202520 SkyPass best-path działa na co dzień. W PoP-ach w Warszawie i Wrocławiu poznajemy te same prefiksy przez peering w THINX, w TPIX, we WRIX, w POZIX i w 1-IX oraz przez tranzyt IP, a algorytm best-path automatycznie preferuje krótsze, tańsze ścieżki peeringowe. Klientom usług peeringu i tranzytu IP udostępniamy społeczności BGP do sterowania LOCAL_PREF i prependingiem, a publiczny looking glass pozwala sprawdzić, którą trasę do danego prefiksu faktycznie wybrał nasz router i dlaczego.

Najczęstsze pytania

Jakie jest pierwsze kryterium wyboru trasy w BGP?

Na routerach Cisco najpierw porównywany jest niestandardowy atrybut weight (wyższy wygrywa, lokalny dla routera). W czystej implementacji RFC 4271 pierwszym kryterium jest najwyższy LOCAL_PREF.

Czy najkrótsza ścieżka AS zawsze wygrywa?

Nie. AS_PATH jest porównywany dopiero po weight i LOCAL_PREF, więc wyższy LOCAL_PREF przebije krótszą ścieżkę AS. Dlatego prepending nie zadziała, jeśli zdalna sieć ustawiła już wyższy LOCAL_PREF dla innej trasy.

Kiedy porównywany jest MED?

Domyślnie MED porównuje się tylko między trasami pochodzącymi z tego samego sąsiedniego AS. Opcja always-compare-med pozwala porównywać MED między różnymi AS, ale stosuje się ją ostrożnie.

Co rozstrzyga remis, gdy wszystkie atrybuty są równe?

Router preferuje eBGP nad iBGP, potem najniższą metrykę IGP do next-hopa, a jeśli to nie wystarczy, wybiera trasę od sąsiada o najniższym Router ID.

Powiązane artykuły