Technologie internetu (9.): Směrování ve velkém

1. 10. 2007

Sdílet

Pokud jde o vnější směrování, tedy směrování mezi autonomními systémy, používá se dnes prakticky výhradně Border Gateway Protocol (BGP) verze 4. Protokol BGP umožnil přejít od centralizovaného směrování k uspořádání peer-to-peer, kdy datagramy putující mezi dvěma autonomními systémy mohou využít kteroukoli existující cestu.

Pokud jde o vnější směrování, tedy směrování mezi autonomními systémy, používá se dnes prakticky výhradně Border Gateway Protocol (BGP) verze 4. Protokol BGP umožnil přejít od centralizovaného směrování k uspořádání peer-to-peer, kdy datagramy putující mezi dvěma autonomními systémy mohou využít kteroukoli existující cestu.

První verze BGP se oficiálně objevila v červnu 1989 (RFC 1105). Poté následovaly v poměrně rychlém sledu další verze, až se v polovině devadesátých let vývoj ustálil na verzi 4 (RFC 1771), která se s malými úpravami a řadou rozšíření používá dodnes.

Výměna informací v BGP

Samotný protokol není, třeba ve srovnání s OSPF, příliš složitý. Výměna informací se v rámci BGP nejčastěji odehrává mezi dvojicemi hraničních směrovačů v různých AS, jež jsou spolu přímo propojeny. Relace BGP, nazývané BGP peering, jsou dlouhotrvající a k přenosu dat využívají spolehlivý transportní protokol TCP. Po navázání spojení si směrovače nejprve vymění celou směrovací tabulku, ale potom už si posílají jen informace o změnách.

Sousední BGP směrovače si, podobně jako v případě RIPu, navzájem sdělují informace o dostupnosti síťových prefixů spolu s údajem, jak je každý prefix vzdálen od původce této informace, která se odborně nazývá Network Layer Reachability Information (NLRI). Zatímco v RIPu se však jako metrika předává pouze jedno číslo, v BGP je s každým prefixem spojena celá posloupnost autonomních systémů (atribut AS_PATH), která kompletně popisuje nejkratší cestu, jíž se lze dostat od daného směrovače k tomuto prefixu. Slovo „kompletně“ je ale třeba chápat v kontextu vyšší úrovně směrovací hierarchie – BGP se vůbec nezabývá tím, jak budou datagramy putovat uvnitř každého z autonomních systémů, které se na nejkratší cestě nacházejí.


Podívejme se na příklad, kde autonomní systém AS1 obsahuje síť s prefixem 175.111.0.0/16. Oba jeho hraniční směrovače o tom informují všechny své BGP sousedy. Uvedený prefix je přitom spojen s atributem AS_PATH, v němž je uveden jediný autonomní systém AS1. Každý ze sousedů se tím dozví, že datagram s cílovou adresou patřící do tohoto prefixu je třeba dopravit do AS1. Tato informace se ale zároveň předává dále. Například hraniční směrovač v AS3 oznámí stejný prefix svému sousedovi v AS5, na začátek AS_PATH ale přiřadí svůj vlastní autonomní systém, takže nový AS_PATH bude v tomto případě obsahovat dva autonomní systémy – AS3 a AS1. Podobný postup pokračuje dále, takže nakonec se o dostupnosti prefixu dozvědí všechny autonomní systémy v síti.

Atribut AS_PATH zastává několik funkcí. První z nich je funkce metriky, jíž je v případě BGP vždy počet „hopů“, tedy počet autonomních systémů v AS_PATH. V našem příkladu se tedy AS5 dozví od svých sousedů o třech možných cestách k prefixu 175.111.0.0/16: první z nich odpovídá tříprvková AS_PATH (AS4, AS2, AS1), druhé (AS3, AS1) a třetí pak jednoprvková posloupnost (AS1). Směrovače v AS5 by za normálních okolností měly zvolit cestu s nejkratší AS_PATH, tedy přímým spojem.

Druhou funkcí AS_PATH je ochrana proti smyčkám, které lze okamžitě rozpoznat podle toho, že se stejný autonomní systém v posloupnosti opakuje. Protokol BGP proto vyžaduje, aby směrovače ignorovaly všechny NLRI, které již v atributu AS_PATH obsahují lokální AS daného směrovače. Znovu k našemu příkladu: AS5 oznamuje po přímé lince svému sousedovi AS1 dostupnost prefixu 175.111.0.0/16 s AS_PATH = (AS5, AS3, AS1). Na oznámení však v AS1 nebude brán zřetel, protože AS1 se už v posloupnosti vyskytuje.

Interní BGP

Pozorný čtenář si na obrázku jistě všiml toho, že některé autonomní systémy mají více hraničních směrovačů. Vzniká proto otázka, jak si tyto směrovače předávají informace získané z BGP, aby je mohly šířit dalším sousedům. Jednou z možností by byla jejich redistribuce do vnitřního směrovacího protokolu, například OSPF. Z několika důvodů to ale není nejlepší nápad. Předně, databáze BGP je (jak vzápětí uvidíme) obludně veliká a vnitřní směrovače by se tím zbytečně zatěžovaly. Kromě toho by se redistribucí ztratily některé atributy (především AS_PATH!) předávané jako součást NLRI, protože vnitřní směrovací protokoly je neznají. Hraniční směrovače patřící do stejného autonomního systému proto spolu komunikují také prostřednictvím BGP, přesněji jeho varianty, která se nazývá interní BGP (iBGP). Výše popsaná varianta, která slouží k výměně NLRI mezi autonomními systémy, se pak logicky nazývá externí BGP (eBGP). Interní BGP se řídí některými dodatečnými pravidly, která nejsou pro eBGP relevantní. Například kvůli ochraně proti směrovacím smyčkám uvnitř AS nesmí směrovač předávat v iBGP informace, které se dozvěděl od jiného iBGP souseda.

Směrovací politika

Principy fungování BGP tedy není příliš těžké pochopit. Velmi obtížné – ale také zajímavé – však je, jak tyto principy využít k realizaci určité směrovací politiky vlastního autonomního systému. Toto know-how nelze jen tak někde nastudovat, správce AS se k němu musí propracovat vlastními zkušenostmi a omyly. Musíme si totiž uvědomit, že v systému BGP vystupuje velké množství relativně nezávislých účastníků, kteří si mezi sebou posílají ohromný objem informací. Podle aktuálních statistik, dostupných na serveru www.potaroo.net pojímá globální internet v současnosti více než 21 tisíc aktivních autonomních systémů a počet prefixů vyměňovaných pomocí BGP již překročil 250 tisíc. Je jasné, že v takto složitém systému se čas od času dějí prapodivné věci, zvláště když problémy jednoho AS (ať už způsobené výpadky nebo chybnou konfigurací) mohou negativně ovlivnit celý internet.

Implicitním kritériem výběru směrovací cesty k danému síťovému prefixu, jež určuje základní způsob chování protokolu BGP, je délka cesty, tedy počet autonomních systémů v atributu AS_PATH. Občas je ale potřeba aplikovat i jiná kritéria a směrování poupravit. Pro tento účel je k dispozici několik nástrojů, které lze v různých situacích použít.

Základní jsou tyto dva:
1. Filtrace některých NLRI v hraničním směrovači.
2. Umělé prodloužení atributu AS_PATH.

První metoda upravuje směrování datagramů ven z vlastního AS: vnitřním směrovačům se některé NLRI „zatají“, čímž se pro ně dotyčná cesta stane nedostupnou a použijí jinou. Druhá metoda pak ovlivňuje opačný směr toku dat, tedy směrování z cizích AS do vlastního. AS_PATH se uměle prodlouží tím, že se na jeho začátek uvede vlastní autonomní systém ne jednou, ale hned několikrát. Pokud bychom v našem příkladu jako správci AS1 nechtěli, aby k nám AS5 směroval datagramy po přímém spoji, ale raději přes AS3, změníme AS_PATH u prefixů předávaných autonomnímu systému AS5 tak, že místo standardního jednoprvkového (AS1) pošleme (AS1, AS1, AS1), čímž se pro AS5 stane posloupnost (AS3, AS1) nejkratší. Všimněme si ale, že toto naše opatření může zhatit správce AS3, pokud by autonomnímu systému AS5 předával naše prefixy také s uměle prodlouženou AS_PATH. Proto je důležité, aby správci AS mezi sebou komunikovali a své směrovací politiky koordinovali.