Routrar i ett system samarbetar för att ständigt stå beredda att välja den bästa möjliga vägen för ett datapaket. Artikeln förklarar även hur routrarna automatiskt finner alternativa vägar vid driftstörningar och hur anpassning sker till förändringar i nätverket.
När data skall routas mellan flera nätverk, gäller det att alla datagram både hittar fram till sitt mål och finner den kortaste, mest ekonomiska vägen. Routrarna i systemet måste också automatiskt kunna anpassa sig vid både olika typer av driftstörningar och andra topologiska förändringar såsom utbyggnader. För att göra detta möjligt sker ett intimt samarbete mellan routrarna - via ett routingprotokoll. Denna artikel i två delar kommer att ge en inblick i hur det vanligaste routingprotokollet - Routing Information Protocol (RIP) - fungerar.
Bakgrund
RIP utvecklades ursprungligen av Xerox. Under 1982 kom RIP att förknippas med Unix och
TCP/IP då Berkeley Software Distribution (BSD) lanserade sin version av Unix. BSD
implementerade RIP i programmet routed (uttalas route-d). Detta program kom att bli
en de facto standard för utbyte av information mellan routers och värddatorer.
Följaktligen uppstod behovet av en mer formell specifikation, vilken också kom 1988 i
och med RFC 1058. Med tiden gjordes en del tillägg vilka 1994 fick sin nuvarande
specifikation som RIP version 2 i RFC 1723. Även om det på senare tid utvecklats
tekniskt mer avancerade routingprotokoll såsom OSPF, har RIP sina klara fördelar.
Särskilt i mindre nätverk uppvisar RIP mycket liten overhead i bandbredd och
tidsåtgång för konfigurering och underhåll. Man bör dock hålla i minnet att RIP
utvecklades för att fungera i måttligt stora IP-baserade nätverk med någorlunda
homogen topologi. RIP har även kommit att användas för andra protokoll än TCP/IP, inte
minst av PC-tillverkare. Företag som 3Com, Apple, Banyan, Novell och Ungermann-Bass har
alla baserat sina routingprotokoll på RIP i en mer eller mindre modifierad form.
Varför routingprotokoll?
Antag att en router (även kallad gateway) mottar ett datagram som är adresserat till en
viss dator. Om mottagaren är ansluten till ett nätverk som även är direktanslutet till
routern sänds datagrammet direkt till mottagaren. Kan mottagaren inte nås direkt, måste
routern istället sända datagrammet till en annan router, som ligger steget närmare
mottagaren. Kruxet är just att veta vilken router som utgör nästa steg på vägen.
Målet med ett routingprotokoll är därför att förse varje router med sådan
information att den kan fatta relevanta beslut om var datagrammet skall skickas.
Distansvektoralgoritmen
I själva verket är RIP en tillämpning av en distansvektoralgoritm (Bellman-Ford
algoritmen), vilket innebär att beslut om vägval baseras på avståndet, eller den mest
ekonomiska vägen till slutdestinationen. Algoritmen bygger på det faktum att det är
möjligt för en enskild router att avgöra den optimala vägen uteslutande baserat på
information från sina närmaste grannar. Varje router som deltar i routingprotokollet
upprätthåller därför en routingtabell med adressinformation till samtliga
destinationer inom systemet. I IP-sammanhang lagras oftast bara information om aktuella
nätverksadresser, ej till varje ansluten enhet. Varje rad i routingtabellen innehåller
även adressen till nästa router på vägen till det aktuella målet.
Vidare innehåller tabellen en metrik, ett tal mellan 1 till 15 som speglar avståndet till slutdestinationen. Ordet avstånd i detta sammanhang är ett generaliserat begrepp, som kan innebära tidsfaktorn för att leverera data, kostnaden i pengar etc. I praktiken motsvarar dock metriken oftast antal hopp (antal routrar på vägen) till slutdestinationen. Även själva slutdestinationen räknas som ett hopp. Ett nätverk som kan nås via en enda router motsvaras följaktligen av två hopp. Man måste dock vara medveten om att användningen av en hopp-räknare för att kalkylera den kortaste distansen inte alltid ger ett optimalt resultat. Exempelvis är en väg med 3 hopp som passerar via Ethernet väsentligt snabbare och mer ekonomisk än en väg med två hopp som går via en långsam modemförbindelse. För att kompensera för sådana tekniska skillnader kan man i många routrar justera upp hopp-räknaren vid till exempel långsamma förbindelser. Slutligen innehåller routingtabellen några interna flaggor och timers.
Uppdateringsmeddelanden
Normalt initieras en routertabell med information om sina närmaste grannar i samband med
att routern konfigureras. Så snart routern har startats upp sänder den en begäran till
sina grannar om att erhålla en kopia av deras respektive routingtabeller. På grundval av
denna information kan routern utöka sin tabell med nya fakta som anländer. Om den redan
har information om en viss destination, jämför den metriken, och sparar endast
information om den bästa vägen (den med lägsta metrik-talet). På så sätt kommer
information snabbt att sprida sig från router till router i systemet, tills alla har
information om samtliga destinationer inom systemet. När data senare skall
vidarebefordras sker det till den router som är källa till informationen i aktuell rad i
routingtabellen - det är ju just denna router som utgör bästa vägvalet tack vare
metrikjämförelsen.
Skulle en förbindelse fallera, markerar den router som upptäckt problemet detta genom att sätta metriken till talet 16 (onåbar) för samtliga destinationer över den felande förbindelsen. Därefter informeras grannarna omedelbart, vilka i sin tur informerar sina grannar etc, tills meddelandet spritts över hela systemet. Finns det en alternativ väg till målen bortom den felande förbindelsen kommer den automatiskt att speglas i alla routrar inom kort. För att få systemet stabilt och att automatiskt kunna anpassa sig till topologiska förändringar, utbyter routrarna information med varandra var 30:e sekund. Om en router inte hört av sin granne på 180 sekunder, anses denne ha problem, varvid alla destinationer bakom grannen markeras som onåbara (metriken sätts till 16). Sedan informeras kringliggande routrar etc, tills hela systemet uppdaterats.
Nästa del av denna artikel kommer att behandla frågor om hur RIP förebygger instabilitet i systemet; det gäller att undvika att loopar uppstår och att information felaktigt vidarebefordras bakåt. Även fördröjningseffekter i meddelandekedjan kommer att belysas.

Routingtabellen
När ett datagram skall routas kontrolleras först om motsvarande hostdestination
finns i routingtabellen. Om så inte är fallet, kontrolleras om en giltig nätverksdestination
finns. Som en sista utväg sänds datagrammet till eventuell default rout (anges i
routingtabellen med IP-adressen 0.0.0.0).
Faktaruta: Skillnader mellan RIP version 1 och 2
Behovet av att kunna routa effektivt även över subnät frammanade RIP version 2, vars
uppdateringsmeddelanden inte bara innehåller IP-adress, utan även slutdestinationens
nätmask (i version 1 förutsattes samtliga inblandade nätverk använda samma nätmask).
Version 2 kan även öka säkerheten i ett nätverk då det är möjligt att identifiera
RIP-meddelandets avsändare med ett lösenord. Meddelanden med felaktiga lösenord
förkastas helt enkelt och påverkar därmed inte tabellen hos den mottagande routern. Route
tag är ett fält som kan användas för att markera information som härrör från
ett annat system av routrar (med kanske ett annat routingprotokoll). Normalt skickas ett
datagram till den router som meddelat destinationsadressen. Om fältet Nästa hopp
innehåller annat än nollor, adresseras istället datagrammet till i fältet angiven
router. Detta är användbart för att förhindra överflödiga hopp i system med blandade
routingprotokoll.
0
1
2
3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Kommando(1) | Version(1) | Måste vara noll (2)
|
-----------------------------------------------------------------
| Adressidentifierare (2) | Måste vara noll (2)
|
-----------------------------------------------------------------
| IP-adress (4)
|
-----------------------------------------------------------------
| Måste vara noll (4)
|
-----------------------------------------------------------------
| Måste vara noll (4)
|
-----------------------------------------------------------------
| Metrik (4)
|
-----------------------------------------------------------------
RIP-meddelandet version 1 (siffror inom parentes anger antal bytes). Kommando kan vara antingen request, dvs en begäran om att mottagaren skall sända sin routingtabell, eller response vilket är svar på en request, eller ett uppdateringsmeddelande som spontant genererats av sändande router. Adressindentifierare är alltid 2, vilket betyder IP. Fälten adressindentifierare till och med metrik kan upprepas upp till 25 gånger. Datagrammets storlek är enligt specifikationen maximerat till 512 bytes. RIP-meddelanden sänds som User Datagram Protocol (UDP) över port 520.
0 1 2 3RIP-meddelandet version 2. Här har vi tre nya fält, nämligen route tag, subnätmask och nästa hopp. Om adressidentifieraren sätts till 0xFFFF motsvaras istället fälten IP-adress till och med metrik av ett 16 bytes lösenord i klartext.
Faktaruta: RIP-protokollets begränsningar
RIP-protokollet är primärt avsett att användas som ett IGP (Interior Gateway Protocol),
dvs inom ett autonomt system. Vidare förutsätts en någorlunda homogen topologi och ett
måttligt stort nätverk. Detta har inte hindrat RIP från att vinna i popularitet, det
används idag i långt fler tillämpningar än alla andra routingprotokoll tillsammans.
Följande begränsningar är dock värda att känna till:
Bildtext huvudillustration: Om länken fallerar kommer RIP automatiskt att etablera en ny förbindelse mellan nätverk B och C via router 1.