Routing loopar

En routing-loop är ett tillstånd i vilket ett datapaket sänds kontinuerligt i en serie av routrar utan att någonsin nå sitt avsedda destinationsnätverk. En routing-loop kan uppstå när två eller flera routrar har felaktig routing-information, till exempel att ett otillgängligt nätverk uppfattas som fungerande.

I exemplet nedan har nätverket 10.4.0.0 slutat fungera. Trots att router R3 informerar det i uppdateringar som skickas till R2 sprider sig felaktigt att nätverket 10.4.0.0 är tillgängligt. Det är router R2 som hinner att skicka en uppdatering med felaktig innehåll till R3 och denna router godta den informationen.

Bild 1: Routing-loop

Routing-loopar kan vara ett resultat av:

  • Felaktigt konfigurerade statiska route.
  • Felaktigt konfigurerad route omfördelning (omfördelning är en process för att överlämna routing-information från en routingprotokoll till en annan routingprotokoll)
  • Instabila routing-tabeller som inte uppdateras på grund av långsam konvergens.
  • Felaktigt konfigurerade eller installerade route

Distansvektor routing-protokoll är enkla i sin verksamhet. Deras enkelhet resulterar i protokollens nackdelar exempelvis när routing-loopar uppstår.

Obs: IP-protokollet har en egen mekanism för att förhindra paket åker runt i ett nätverk i all oändlighet, fältet Time-to-Live (TTL). Fältets värde minskar med 1 vid varje passerad router. Om TTL är noll, routern tar bort paketet.

Vad är konsekvenserna av routing-loopar?

En routing-loop kan ha en förödande effekt på ett nätverksprestanda som kan leda till att nätverket slutar fungera. En routing-loop kan skapa följande problem:

  • Nätverkets överföringskapacitet (bandbredd) kommer att användas för det mesta till routing-loopar.
  • En routers CPU överbelastas på grund av trafiken genererad av routing-loopar som i sin tur påverkar negativt konvergensen av ett nätverk.
  • Routing uppdateringar kan gå vilse eller inte bearbetas i tid. Förseningar skulle införa ytterligare routing-loopar, vilket gör situationen ännu värre.

Det finns ett antal mekanismer som har för uppgift att eliminera routing-loopar, främst när distansvektor routingprotokoll används. Dessa mekanismer inkluderar:

  • Definiera en maximal mått (metric) för att förhindra loopars “Count to infinity”
  • Holddown timers
  • Split horisont
  • Route poisoning eller Poison reverse
  • Triggered uppdateringar
Bild 2: Count to Infinity

Count to infinity

Count to infinity råder när felaktiga routing uppdateringar ökar mätvärdet (metric) till “oändligheten” för ett nätverk som inte längre är tillgängligt. Ordet “oändlig” pekar på högsta antal hopp för RIP routing-protokoll, 16. Bilden ovan illustrerar hur routrar R1, R2 och R3 uppdateras varandra med felaktig route till ett nätverk som inte längre existerar. Den direkta konsekvensen är att uppdateringar ökar antal hopp oändligt. Count to Infinity möjliggör definitionen av ett maximalt mätvärde för antal hopp till 16 – en “unreachable” markering.

Holddown Timers

Holddown timer används för att förhindra felaktiga uppdateringar exempelvis att återinföra en route som har slutat fungera. Holddown timer instruerar routrar vänta med uppdateringar för en angiven tidsperiod. Uppdateringar rörande den felaktiga route ignoreras för en förutbestämd tid. Detta innebär att routrar behåller befintlig information relaterade till den felaktiga route tillräckligt länge så att alla routrar informeras. Under den angiven Holdown tiden fortsätter nätverkstrafiken dirigeras till den icke fungerande nätverk eftersom inte alla routrar har den aktuella informationen.

Bild 3: Holddown timer

Holddown timers fungerar på följande sätt:

  1. En router mottar en uppdatering från en granne som indikerar att ett nätverk som tidigare var tillgängligt är nu inte längre tillgängligt (unreachable).
  2. Routern markerar nätverket som möjligen icke-fungerande (down) och startar Holddown timer.
  3. Om en uppdatering med en bättre mått för det icke-fungerande (unreachable) nätverket tas emot från någon närliggande router under Holddown perioden korrigeras markeringen denna gång som tillgängligt nätverket och Holddown timer tas bort.
  4. Om en uppdatering från någon annan granne tas emot under Holddown period med samma eller sämre mått för nätverket ignoreras.
  5. Routrar fortfarande vidarebefordrar paket till nätverket som är markerade som möjligen icke-fungerande (down). Detta gör det möjligt för routern att förhindra eventuella problem i samband med intermittent anslutning. Om nätverket verkligen är otillgängligt (unreachable) och paketen vidarebefordras hamnar dessa paket i något som kallas “svart hål routing” tills Holddown tiden löper ut.

Split Horizont Regel

Split horisont regel förhindrar att en router annonserar ett nätverk via interfacet från vilket uppdateringen om samma nätverk tagits emot. En tillämpning av denna regeln kan förklaras med hjälp av samma route till nätverket 10.4.0.0:

  • R3 informerar om nätverk 10.4.0.0 via en uppdatering till R2.
  • R2 tar emot informationen och uppdaterar sin routing-tabell.
  • R2 informerar därefter om 10.4.0.0 nätverket till R1 via S 0/0/0 interface.
  • R2 inkluderar inte nätverk 10.4.0.0 i uppdatering till R3 via S 0/0/1 interface eftersom informationen om nätverk 10.4.0.0 har mottagits via detta interface.
  • R1 tar emot informationen om nätverk 10.4.0.0 och uppdaterar sin dirigeringstabell.
  • På grund av split horisont regeln annonserar R1 inte heller nätverket 10.4.0.0 tillbaka till R2.
Bild 4: Split Horisont för 10.4.0.0

Route Poisoning

Route poisoning används i uppdateringar för att markera en route till ett nätverk som inte längre är fungerande (unreachable). “Unreacheable” tolkas som ett mått satt till maximum. För RIP markeras route med 16 antal hopp (metric).

Bild 5: Route Poisoning

Följande process inträffar:

  • Nätverk 10.4.0.0 blir otillgänglig på grund av ett fel i länken.
  • R3 ändrar mätvärdet till 16 och sedan sänder ut en triggered uppdatering och meddelar att 10.4.0.0 nätverk är otillgänglig (unreachable).
  • R2 tar emot och bearbetar uppdateringen. Eftersom routes mätvärdet är 16 inaktiverar R2 routing för 10.4.0.0 nätverk i sin routing-tabell.
  • R2 sänder därefter en route poisoning i en uppdatering till R1 som indikation till att nätverk 10.4.0.0 är otillgänglig (unreachable). Det görs genom att sätta maximum mätvärde till 16 igen.
  • R1 mottar och bearbetar uppdateringen och inaktiverar interfacet via vilket nätverket 10.4.0.0 nås i sin routing-tabell. Detta påverkar interfacet endast relaterade till nätet 10.4.0.0

Route Poisoning påskyndar konvergensprocessen i vilken sprides information om nätverk 10.4.0.0 snabbare genom att sätta hopp antalet till maximum.

Split Horizon med Poison Reverse

Bild 6: Poison Reverse

Poison reverse kan kombineras med split horisonten tekniken, metoden kallas Split Horizon med Poison Reverse. Regeln innebär att en router som har fått en uppdatering  i vilken informeras att en viss route inte längre är fungerande ignorerar nya uppdateringar via samma interface som motsäger informationen om samma route.

Följande process inträffar:

  • Nätverk 10.4.0.0 blir otillgängligt på grund av ett fel i länken.
  • R3 förgiftar mätvärdet med ett värde på 16 och därefter sänder ut en triggered uppdatering för att informera till sina grannar om att 10.4.0.0 nätverk är otillgängligt.
  • R2 tar emot och bearbetar uppdateringen. Routern tillämpar det förgiftat mätvärdet i sin routing-tabell och omedelbart sänder ett Poison Reverse paket tillbaka till R3.

Poison Reverse är en särskild faktor som försummar Split horisont regeln. Det säkerställer att R3 inte är mottagliga för felaktiga uppdateringar om nätverket 10.4.0.0.

Obs: Split horisont är aktiverat som standard, men inte Split horisont med Poison Reverse.

IP and TTL

Time to Live (TTL) är en 8-bitarsfält i IP-huvudet. Fältet begränsar antal hopp i ett paket med syfte att undvika paketet cirkulerar på nätverket i all oändlighet. TTL för ett paket minskas med ett varje gång paketet passerar en router på väg till sin destination. Om fältet TTL når noll innan paketet anländer till sin destination tas paketet bort och routern skickar en Internet Control Message Protocol (ICMP) felmeddelande tillbaka till avsändaren.

Exempel

Här en enkel nätverkstopologi i vilken ska ändras RIP timers och inaktivera Split Horizon. Därefter felsöker (debug) RIP uppdateringar.

Bild 7: RIP routing-loops

Konfigurationer

  • R1# config ter
  • R1(config)# int fa0/0
  • R1(config-if)# ip address 192.168.1.1  255.255.255.0
  • R1(config-if)# no shut
  • R1(config-if)# exit
  • R1(config)# int fa0/1
  • R1(config-if)# ip address 10.0.0.1 255.0.0.0
  • R1(config-if)# no shut
  • R1(config-if)# exit
  • R1(config)# do show ip int br
  • R1(config)# router rip
  • R1(config-router)# version 2
  • R1(config-router)# no auto-summary
  • R1(config-router)# passive-interface fa0/0
  • R1(config-router)# network 192.168.1.0
  • R1(config-router)# network 10.0.0.0
  • R1(config-router)#end
  • R1# show ip route
  • R1# show ip route rip
  • R1# show ip protocol
  • R1# show ip int fa0/1 | include Split
  • R2# config ter
  • R2(config)# int fa0/1
  • R2(config-if)# ip address 10.0.0.2 255.0.0.0
  • R2(config-if)# no shut
  • R2(config-if)# exit
  • R2(config)# int fa0/0
  • R2(config-if)# ip address 20.0.0.1 255.0.0.0
  • R2(config-if)# no shut
  • R2(config-if)# exit
  • R2(config)# do show ip int br
  • R2(config)# router rip
  • R2(config-router)# version 2
  • R2(config-router)# no auto-summary
  • R2(config-router)# network 10.0.0.0
  • R2(config-router)# network 20.0.0.0
  • R2(config-router)#end
  • R2# show ip route
  • R2# show ip route rip
  • R2# show ip protocol
  • R2# show ip int fa0/1 | include Split
  • R2# show ip int fa0/0 | include Split
  •  
  • R3# config ter
  • R3(config)# int fa0/0
  • R3(config-if)# ip address 20.0.0.2 255.0.0.0
  • R3(config-if)# no shut
  • R3(config-if)# exit
  • R3(config)# int fa0/1
  • R3(config-if)# ip address 172.16.1.1 255.255.255.0
  • R3(config-if)# no shut
  • R3(config-if)# exit
  • R3(config)# do show ip int br
  • R3(config)# router rip
  • R3(config-router)# version 2
  • R3(config-router)# no auto-summary
  • R3(config-router)# passive-interface fa0/1
  • R3(config-router)# network 172.16.1.0
  • R3(config-router)# network 20.0.0.0
  • R3(config-router)#end
  • R3# show ip route
  • R3# show ip route rip
  • R3# show ip protocol
  • R3# show ip int fa0/0 | include Split
  • Ta fram routing-tabeller. Följande visas på mina routrar (det blir annorlunda efter några felaktiga konfigurationer)

  • R1(config)# int fa0/1
  • R1(config-if)# no ip split-horizon
  • R1(config-if)# exit
  • R1(config)# router rip
  • Syntax
  • timers basic update invalid holddown flush
  • Uppdateringar varje 30 sekunder
  • Om inte tas emot uppdateringar inom 180 sekunder markeras route som onåbara
  • Holddown 10 sekunder (för kort tid, troligen vill man snabba till routing)
  • Efter 240 sekunder tas bort markerade route.
  • R1(config-router)# timers basic 30 180 10 240
  • R1(config-router)# end
  • R1# show ip route rip
  • R1# debug ip rip