Distance-vector: sused susedovi verí na slovo
RIP (Routing Information Protocol) je najstarší bežne používaný IGP protokol, prvýkrát štandardizovaný v RFC 1058 (1988), hoci princípy, na ktorých stojí, sa v rôznych implementáciách používali už dávno predtým. Patrí do kategórie distance-vector protokolov — na rozdiel od OSPF, kde si každý router buduje kompletnú mapu celej topológie, si router pri distance-vector prístupe pamätá len dve veci o každej vzdialenej sieti: smer (cez ktorého suseda sa tam dostane) a vzdialenosť (koľko "skokov" to je).
Router nevidí topológiu za svojimi bezprostrednými susedmi vôbec — spolieha sa na to, že mu sused úprimne povie "túto sieť viem dosiahnuť za X skokov", a jednoducho k tomuto číslu pripočíta jeden skok navyše. Matematicky ide o aplikáciu Bellman-Fordovho algoritmu v distribuovanej podobe — každý router opakovane aktualizuje svoje odhady na základe informácií od susedov, kým sa celá sieť neustáli (konverguje) na konzistentnom stave.
Metrika: počet skokov, maximálne 15
RIP používa najjednoduchšiu možnú metriku — počet skokov (hop count), teda počet routerov, cez ktoré musí packet prejsť, aby dosiahol cieľ, bez ohľadu na skutočnú rýchlosť alebo zaťaženie jednotlivých liniek. Táto jednoduchosť má cenu: RIP nedokáže rozlíšiť medzi pomalou linkou s jedným skokom a rýchlou linkou s dvomi skokmi — vždy uprednostní menší počet skokov, aj keby to v danom prípade znamenalo pomalšiu cestu.
Ešte významnejšie obmedzenie je strop na 15 skokov. Hodnota 16 je v RIP rezervovaná ako symbol "nekonečno" — teda nedosiahnuteľná sieť. Táto na prvý pohľad svojvoľná hranica priamo obmedzuje maximálnu veľkosť siete, v ktorej RIP môže fungovať — akákoľvek sieť vzdialená 16 a viac skokov je pre RIP neviditeľná, bez ohľadu na to, či fyzicky existuje.
Problém count-to-infinity a ako ho RIP rieši
Naivná implementácia distance-vector routingu trpí vážnym problémom: ak sieť, ktorú sused predtým oznamoval, zrazu zmizne, môže dôjsť k situácii, keď si dva susediace routery navzájom "klamú" — každý si myslí, že ten druhý má stále platnú cestu, a postupne si medzi sebou navyšujú počet skokov až donekonečna (odtiaľ názov count-to-infinity). RIP tento problém rieši kombináciou niekoľkých mechanizmov:
- Split horizon — router nikdy nepošle informáciu o sieti späť tým istým smerom, odkiaľ sa o nej sám dozvedel. Zabraňuje najjednoduchšiemu prípadu vzájomného "klamania" medzi dvomi priamymi susedmi.
- Split horizon with poison reverse — prísnejšia varianta: namiesto toho, aby router informáciu smerom späť jednoducho zamlčal, aktívne ju pošle späť s metrikou nekonečno (16), čím explicitne povie "táto cesta cez mňa neexistuje".
- Triggered updates — namiesto čakania na najbližší pravidelný cyklus updatu (predvolene každých 30 sekúnd) router okamžite rozošle zmenu, len čo ju zistí, čím výrazne skracuje čas potrebný na rozšírenie informácie o výpadku.
- Hold-down timery — po prijatí informácie o nedosiahnuteľnosti siete ju router na určitý čas "podrží" v tomto stave a odmieta akceptovať potenciálne zastarané, priaznivejšie správy o tej istej sieti od iných susedov, kým sa situácia nestabilizuje.
Tieto mechanizmy problém výrazne zmierňujú, no v topológiách s viac než dvomi cestami k tej istej sieti ho úplne neeliminujú — jedna z hlavných príčin, prečo sa RIP pre veľké alebo komplexne prepojené siete dnes prakticky nepoužíva.
RIPv1: pôvodná, classful verzia (1988)
Prvá verzia, definovaná v RFC 1058, má niekoľko zásadných obmedzení z pohľadu dnešných sietí:
- Classful routing — RIPv1 v aktualizáciách vôbec neprenáša subnet mask, len samotnú IP adresu siete. Maska sa odvodzuje výhradne z triedy adresy (A, B, C) — čo znemožňuje použitie VLSM (Variable Length Subnet Mask) alebo nespojitých sietí v rámci jednej triedy.
- Broadcast aktualizácie — updaty sa posielajú ako broadcast na celú lokálnu sieť, čo zaťažuje aj zariadenia, ktoré o RIP vôbec nemajú záujem.
- Žiadna autentifikácia — akékoľvek zariadenie v sieti môže vysielať RIPv1 aktualizácie a router ich bez overenia akceptuje.
RIPv2: classless a bezpečnejšia verzia (1993 – 1994)
RIPv2 (RFC 1723, neskôr aktualizovaný RFC 2453) odstraňuje najbolestivejšie obmedzenia RIPv1, pričom zámerne zachováva jednoduchosť a spätnú kompatibilitu formátu packetov:
- Classless routing — aktualizácie teraz prenášajú aj subnet mask ku každej sieti, čím pridávajú podporu pre VLSM a CIDR.
- Multicast aktualizácie — updaty sa posielajú na multicast adresu
224.0.0.9namiesto broadcastu, takže ich spracúvajú len zariadenia, ktoré o ne skutočne majú záujem. - Autentifikácia — pridaná podpora pre heslo v čistom texte aj pre kryptograficky bezpečnejšiu MD5 autentifikáciu aktualizácií.
- Route tags — voliteľné pole umožňujúce označiť trasy pochádzajúce z iných routing protocols, užitočné pri redistribúcii trás medzi rôznymi protokolmi.
RIPng: RIP pre svet IPv6 (1997)
S nástupom IPv6 vznikla potreba prispôsobiť aj RIP — výsledkom je RIPng ("next generation", RFC 2080). Zachováva rovnaký základný princíp aj limit 15 skokov, no je prispôsobený novému adresnému priestoru:
- Aktualizácie sa posielajú cez UDP port 521 (namiesto pôvodného portu 520) na multicast adresu FF02::9.
- Nesie natívne IPv6 prefixy a dĺžky prefixov namiesto IPv4 adries a masiek.
- Zaujímavo, RIPng nemá vlastnú vstavanú autentifikáciu — namiesto toho sa spolieha výhradne na IPsec zabezpečenie na úrovni samotného IPv6, podobne ako sme spomínali pri OSPFv3.
Porovnanie verzií
| RIPv1 | RIPv2 | RIPng | |
|---|---|---|---|
| Rok / RFC | 1988 · RFC 1058 | 1993/1994 · RFC 2453 | 1997 · RFC 2080 |
| Adresácia | IPv4 | IPv4 | IPv6 |
| Routing | Classful | Classless (VLSM/CIDR) | Classless (IPv6 prefixy) |
| Distribúcia | Broadcast | Multicast 224.0.0.9 | Multicast FF02::9 |
| Autentifikácia | Žiadna | Text / MD5 | Žiadna (spolieha sa na IPsec) |
| Max. skokov | 15 | 15 | 15 |
Prečo sa RIP dnes takmer nepoužíva vo veľkých sieťach
Kombinácia limitu 15 skokov, pomalej konvergencie (predvolený update interval 30 sekúnd znamená, že šírenie zmeny naprieč väčšou sieťou môže trvať desiatky sekúnd až minúty, aj s triggered updates), hrubej metriky založenej len na počte skokov a nezanedbateľnej réžie pravidelných plošných aktualizácií robí RIP nevhodným pre stredné a veľké siete. Práve tieto limity boli priamou motiváciou pre vznik OSPF a ďalších modernejších IGP protokolov, ktoré namiesto jednoduchého počítania skokov budujú presnejší obraz siete a konvergujú rádovo rýchlejšie.
RIPv1 bez akejkoľvek autentifikácie predstavuje priame riziko — útočník s prístupom do lokálnej siete môže jednoducho vysielať podvrhnuté RIP aktualizácie a preroutovať prevádzku cez vlastné zariadenie (podobne ako pri iných formách route poisoning útokov popísaných v našom článku o kybernetických útokoch). Aj v RIPv2 je len jednoduché heslo v čistom texte prakticky bezcenné — v prostrediach, kde je RIP stále v prevádzke, sa preto odporúča minimálne MD5 autentifikácia a dôsledné obmedzenie rozhraní, na ktorých je protokol vôbec povolený.
Zhrnutie
RIP zostáva cenným študijným príkladom čistého distance-vector routingu — jednoduchý na pochopenie aj konfiguráciu, no s limitmi (15 skokov, hrubá metrika, pomalá konvergencia), ktoré ho robia nevhodným mimo malých alebo výukových sietí. Evolúcia od RIPv1 cez RIPv2 až po RIPng ukazuje typický vzorec, akým sieťové protokoly dozrievajú — pridávanie podpory pre modernejšiu adresáciu (VLSM, CIDR, IPv6) a bezpečnosť (autentifikácia) bez toho, aby sa menil základný, overený princíp fungovania.