Kam OSPF patrí: IGP a link-state princíp
OSPF (Open Shortest Path First) je vnútorný routing protocol (IGP — Interior Gateway Protocol), určený na routing vnútri jednej organizácie alebo jedného autonómneho systému (AS) — na rozdiel od BGP, ktorý routuje medzi autonómnymi systémami. OSPF je definovaný v RFC 2328 (verzia pre IPv4, OSPFv2) a je štandardizovaný, výrobcovo nezávislý protokol — odtiaľ slovo "Open" v názve.
Kľúčová vlastnosť, ktorá OSPF odlišuje od starších protokolov ako RIP, je princíp link-state (stav linky). Namiesto toho, aby si router pamätal len "kam a ako ďaleko" (ako pri distance-vector protokoloch), si každý OSPF router vybuduje kompletnú, identickú mapu celej topológie siete — tzv. Link-State Database (LSDB) — a z nej si sám, lokálne, vypočíta najkratšiu cestu ku každému cieľu.
Dijkstrov algoritmus: ako OSPF počíta cesty
Keď má router kompletnú mapu siete (LSDB), použije Dijkstrov algoritmus (v kontexte OSPF nazývaný aj SPF — Shortest Path First) na výpočet stromu najkratších ciest zo svojej vlastnej pozície ku všetkým ostatným nodes v sieti. Algoritmus postupne skúma najbližšie ešte nespracované nodes, priebežne aktualizuje najkratšie známe vzdialenosti a nikdy sa nemusí "vrátiť" a prepočítavať už uzavreté nodes — vďaka čomu je výpočtovo efektívny aj na veľkých topológiách.
Výsledkom je, že každý router v sieti dospeje nezávisle k rovnakému globálnemu pohľadu na topológiu, no každý si z neho vypočíta svoj vlastný, na seba orientovaný strom najkratších ciest — presne to sa nakoniec premietne do jeho routing table.
Nadväzovanie susedstva: Hello protokol a stavy suseda
Predtým, než si dva OSPF routery môžu vymieňať informácie o topológii, musia sa navzájom objaviť a nadviazať susedský vzťah (adjacency). Toto rieši Hello protokol — routery pravidelne (predvolene každých 10 sekúnd na Ethernet rozhraniach) posielajú multicast Hello packety na adresu 224.0.0.5. Ak router nedostane Hello od suseda počas Dead Interval (predvolene štvornásobok Hello intervalu, teda 40 sekúnd), považuje suseda za nedostupného.
Nadväzovanie susedstva prechádza presne definovanou postupnosťou stavov:
| Stav | Čo sa deje |
|---|---|
| Down | Žiadna komunikácia so susedom zatiaľ neprebehla |
| Init | Prijatý Hello packet, ale zatiaľ bez potvrdenia obojstrannej komunikácie |
| 2-Way | Obojstranná komunikácia potvrdená — router vidí seba v Hello packetoch suseda |
| ExStart | Routery si dohodnú, kto bude "master" pri výmene databázy |
| Exchange | Výmena popisov obsahu LSDB (Database Description packety) |
| Loading | Sťahovanie chýbajúcich detailných LSA záznamov |
| Full | Susedstvo plne nadviazané, LSDB je synchronizovaná |
Voľba DR a BDR na multi-access sieťach
Na segmentoch typu Ethernet, kde môže byť pripojených viacero routerov naraz (tzv. multi-access siete), by vytvorenie plného susedstva medzi každou dvojicou routerov (full mesh) viedlo k zbytočne veľkému množstvu duplicitnej komunikácie — pri N routeroch by vzniklo N×(N-1)/2 susedstiev. OSPF preto na takýchto segmentoch volí Designated Router (DR) a záložný Backup Designated Router (BDR). Všetky ostatné routery na segmente nadviažu plné susedstvo len s DR a BDR, nie navzájom medzi sebou — DR následne funguje ako centrálny bod, cez ktorý sa informácie o topológii šíria ďalej všetkým.
Voľba DR prebieha na základe najvyššej nakonfigurovanej priority rozhrania (router s prioritou 0 sa voľby vôbec nezúčastňuje); pri zhode priority rozhoduje najvyššie Router ID. Dôležitá vlastnosť: voľba DR nie je preemptívna — ak sa neskôr pripojí router s vyššou prioritou, existujúceho DR "nezosadí".
Typy LSA: stavebné kamene topologickej mapy
Informácie o topológii sa medzi routermi šíria vo forme LSA (Link-State Advertisement) záznamov, z ktorých sa skladá LSDB. Existuje viacero typov LSA, každý pre iný účel:
| Typ | Názov | Účel |
|---|---|---|
| 1 | Router LSA | Popisuje priamo pripojené linky a susedov daného routera; šíri sa len v rámci jednej oblasti |
| 2 | Network LSA | Generuje ho DR na multi-access segmente, popisuje všetky routery pripojené k tomuto segmentu |
| 3 | Summary LSA (Inter-Area) | Vytvára ho ABR router, sumarizuje siete z jednej oblasti a šíri ich do iných oblastí |
| 4 | ASBR Summary LSA | Informuje ostatné oblasti, kde sa nachádza router, ktorý importuje externé trasy (ASBR) |
| 5 | AS External LSA | Trasy naimportované z iného routing protocol (napr. z BGP), šíria sa naprieč celou doménou |
| 7 | NSSA External LSA | Obdoba typu 5, ale používaná len v špeciálnych "Not-So-Stubby" oblastiach |
Hierarchia oblastí: prečo OSPF škáluje
Na veľmi veľkej ploche siete by udržiavanie jednej spoločnej LSDB pre všetky routery viedlo k obrovskej databáze a čoraz náročnejším prepočtom SPF pri každej zmene. OSPF preto zavádza hierarchiu oblastí (areas) — sieť sa rozdelí na menšie celky, pričom Area 0 (backbone, chrbtica) je vždy povinná a všetky ostatné oblasti sa k nej musia priamo pripájať.
Existuje niekoľko typov oblastí s odlišným správaním voči externým trasám:
- Štandardná oblasť — prijíma všetky typy LSA vrátane externých trás (typ 5).
- Stub oblasť — neprijíma externé trasy (typ 5), namiesto nich ABR vloží len predvolenú trasu — zmenšuje veľkosť LSDB v koncových oblastiach, ktoré nepotrebujú poznať detaily o vonkajšom svete.
- Totally Stubby oblasť (rozšírenie špecifické pre niektorých výrobcov) — ide ešte ďalej a blokuje aj medzi-oblastné trasy (typ 3), opäť ich nahrádza len predvolenou trasou.
- NSSA (Not-So-Stubby Area) — kompromis: zakazuje klasické externé LSA typu 5, no dovoľuje lokálne importovať externé trasy cez špeciálny typ 7, ktorý sa na hranici oblasti prekonvertuje na typ 5.
Metrika: cena namiesto počtu skokov
Na rozdiel od RIP, ktorý počíta len počet skokov, OSPF používa metriku zvanú cost, odvodenú od bandwidth rozhrania. Predvolený vzorec je cost = referenčný bandwidth / bandwidth rozhrania, pričom referenčná hodnota je predvolene 100 Mb/s (na moderných vysokorýchlostných linkách je preto zvykom túto referenčnú hodnotu ručne zvýšiť, inak by viacero rýchlych liniek dostalo rovnakú, najnižšiu možnú cenu 1). Celková cena cesty je súčet cien všetkých rozhraní na trase — Dijkstrov algoritmus následne vyberie cestu s najnižším súčtom.
OSPFv2 vs OSPFv3: IPv4 a IPv6
OSPFv2 (RFC 2328) je pôvodná verzia pre IPv4. OSPFv3 (RFC 5340) prináša podporu IPv6, no zásadné princípy — link-state model, Dijkstrov algoritmus, hierarchia oblastí, typy LSA — zostávajú rovnaké. Kľúčové rozdiely: OSPFv3 beží nad rámec konkrétnej IP adresácie (susedstvo sa identifikuje podľa Router ID, nie IP adresy), podporuje viacero inštancií protokolu na jednom rozhraní, a bezpečnosť rieši inak — kým OSPFv2 mal autentifikáciu vstavanú priamo v protokole, OSPFv3 sa spolieha na IPsec na úrovni IPv6.
Autentifikácia a bezpečnostné riziká
OSPFv2 podporuje tri úrovne autentifikácie susedských vzťahov: žiadnu, jednoduché heslo v čistom texte (ľahko odpočúvateľné, dnes sa neodporúča) a MD5 autentifikáciu, ktorá kryptograficky podpisuje OSPF packety zdieľaným kľúčom.
Bez autentifikácie môže útočník s prístupom do siete vyslať podvrhnuté Hello alebo LSA packety, nadviazať falošné susedstvo a vložiť do LSDB nepravdivé informácie o topológii — čím môže preroutovať prevádzku cez seba (forma Man-in-the-Middle, pozri náš článok o kybernetických útokoch) alebo spôsobiť výpadok časti siete. V produkčných sieťach sa preto odporúča vždy nasadiť aspoň MD5 autentifikáciu a pasívne rozhrania (passive-interface) na portoch, kde susedstvo nie je očakávané.
Zhrnutie
OSPF nahradil jednoduché distance-vector protokoly ako RIP tam, kde záležalo na rýchlej konvergencii a škálovateľnosti — vďaka tomu, že si každý router udržiava kompletnú mapu topológie (LSDB) a sám si na nej spúšťa Dijkstrov algoritmus, dokáže sa po zmene v sieti prispôsobiť rádovo rýchlejšie než distance-vector protokoly. Hierarchia oblastí okolo povinnej Area 0 backbone drží veľkosť databázy pod kontrolou aj vo veľkých sieťach, a rôzne typy LSA umožňujú presne kontrolovať, aké informácie sa kam šíria. Cenou za túto sofistikovanosť je vyššia zložitosť konfigurácie a nutnosť dôsledne premyslieť návrh oblastí a autentifikácie od začiatku.