Cisco IS-IS

From HackerNet
Revision as of 09:50, 3 October 2016 by Helikopter (talk | contribs)
Jump to: navigation, search

Intermediate System-to-Intermediate System är ett link-state routing protokoll. Det använder Network Service Access Point (NSAP) adressering för att identifiera routrar, area-tillhörighet och deras grannskap. IS-IS använder inte något L3-protokoll alls utan det enkapsuleras direkt i L2 multicast frames, för L1 används 01:80:C2:00:00:14 och för L2 01:80:C2:00:00:15, detta gör det helt L3-protokolloberonde. Grannskap och adressinformation skrivs med Type-Length-Value (TLV) records, detta gör det väldigt flexibelt. T.ex. om en ny adressfamilj ska läggas till så handlar det om att definiera nya TLVer som innehåller adress- och topologiinformation.

IS-IS är ett av de tre protokollen i standarden Connectionless Network Services (CLNS), de andra två är CLNP och ES-IS. Numera används det vanligare för IP IGP och är bl.a. en del i MPLS Traffic Engineering.

Type: Link State

Algorithm: Dijkstra

AD: 115

Protocols: IP, CLNS

Packets: 4

Terminologi

  • End system: host
  • Intermediate system: router
  • Circuit: interface
  • Domain: autonomous system

Packets

Hello/IIH: IS-IS Hello används för att upptäcka grannar och kontrollera att de lever. De skickas default var 10:e sekund och innehåller en lista på alla grannar man har på segmentet om det är ett broadcastnäverk. De används också för att välja DIS (Designated IS) där det behövs. DIS skickar Hellos mer frekvent, hello time delat på 3 så var 3.33 sekund default. Hold time är Hello-interval x Hello-multiplier. Varken Hello eller Hold behöver matcha för grannskap. På broadcast segment används separata Hellos för L1 och L2 medans på point-to-point interface används gemensamma L1L2 Hellos pga effektivitet. Hello padding görs default.

Timers ställs per interface. Default är 10 sekunder och multiplier är 3 för hold time.

isis hello-interval 10 [level]
isis hello-multiplier 3 [level]


Link state PDU: LSPs används för att skicka routing-information till andra IS. Det finns inte olika LSP-typer som OSPF har olika LSA-typer utan adjacencies och prefixes skickas med en LSP som innehåller olika TLVer. En LSPs payload kan därmed variera i storlek. Varje LSP innehåller ett LSPID som gör det unikt. Det består av System ID (router that originated the LSP), Pseudonode ID (DIS) och LSP number (fragment number). För att skilja mellan olika versioner av samma LSP sätts även ett löpnummer. Det börjar på 1 och varje gång en ändring görs ökas det med 1. Om Attached Biten är satt i LSP-headern betyder det att den kommer ifrån en nod med ben i en annan area eller L2, det finns flera "Attached bits" men endast default metric används på Cisco IOS. Varje LSP har även en remaining lifetime satt, det börjar på 1200 sekunder och tickar neråt. Var 900:e sekund så refreshar en IS-IS router sina self-originated LSPer och skickar ut dem pånytt. Går remaining lifetime ner till 0 på en LSP tas routing informationen bort från LSDB och routern kommer att flooda ut endast LSP:ns header med remaining lifetime satt till 0 för att signalera att man vill ha ny information och på så vis ta reda på om någon annan känner till mer aktuell information, detta kallas LSP Purge. LSP headern hålls kvar i LSDB så länge som ZeroAgeLifetime är satt till, 60 sekunder default men kan sparas 20 minuter på Cisco-routrar.

router isis
 max-lsp-lifetime 1200
 lsp-refresh-interval 900

Eftersom IS-IS paket enkasuleras direkt i L2-frames måste IS-IS ha en egen fragmenteringsfunktion för LSPer som är större än MTU. Behöver man skicka en LSP vars header + TLVer är större än MTU så delar routern upp det i flera LSPer som innehåller några TLVer var. LSPerna har samma LSPID men LSP/fragment number ökas per LSP med start från 0. Fragmentering görs av den router som skapar LSPn, när den sedan har skickats ut får den inte modifieras eller fragmenteras om. Detta leder till att MTU på alla interface inom arean måste vara identiskt. Annars får man manuellt ställa lsp-storlek på alla enheter så det inte överstiger lägsta MTU.

lsp-mtu 1400


Complete Sequence Numbers PDU: CSNP används för att synkronisera LSDB mellan enheter (fungerar ungefär på samma sätt som DD i OSPF). CSNP innehåller en komplett lista med alla LSPer som routern har och mottagaren kan jämföra det mot sin egen LSDB. Finns det någon LSP som mottagaren ej har kan den requesta den och fattas det någon hos avsändaren floodas den tillbaka. Finns det fler LSPID:n än vad MTU klarar skickas det flera paket. Varje CSNP specificerar vilka LSPID:n den innehåller och det börjar på 0000.0000.0000.00-00 och räknar uppåt (stigande).

På point-to-point-länkar utbyts CSNP vid adjacency buildup och på broadcast skickas det regelbundet av DIS.


Partial Sequence Numbers PDU: PSNP skickas för att requesta eller acka en LSP (fungerar både som OSPF LSR och LSAck). En PSNP kan requesta eller acka flera LSPer. På broadcast används dock PSNP endast för Request eftersom Ack görs av CSNP från DIS.

Levels

En IS-IS router konfigureras med nivå som anger systemtyp - antingen Level 1, Level 2 eller Level 1-2. Se en Level 2 router som motsvarande area 0 (backbone area) i OSPF och Level 1 som en area som är ”NSSA Totally Stubby ”, d.v.s. det enda som injiceras i arean är en default route samt att redistribution från andra routingprotokoll är tillåtet, och en Level 1-2 som en ABR.

IS-IS routrar på level 1 agerar oberoende av level 2 och vice versa. De upprättar separata grannskap på varje level. T.ex. om det finns två stycken IS-IS routrar som båda kör L1 och L2 så kommer de att ha två grannskap med varandra. Det blir bara grannskap om båda är på samma level, t.ex. L2 + L1L2 = L2-grannskap. De kommer även hålla separata LSDBer för varje level. Så Link State PDUer som skickas görs det antingen på L1 eller L2. L1-LSPer beskriver grannskap i L1 och samma gäller för L2. Det går nästan likna vid separata routing-processer. Att ändra mellan L1, L2 och L1L2 görs per router.

router isis 1
 is-type level-1-2  #Default

Men det går att ändra per interface för att tvinga grannskap för en specifik level.

interface gi2
 isis circuit-type {level-1 | level-2 | level-1-2}

Show

show isis protocol | i IS-Type

Backdoor
Default använder L1-routrar den närmaste L1L2-routern som gateway of last resort. Det är inte alltid man vill ha det så, då kan man stänga av att L1L2-routern sätter attached bit i sina Hellos och övriga routrar kommer inte att installera en default route till den.

is-type level-1-2 backdoor 

NET

Network Entity Title, maxlängd är 160 bitar. Formatet är AFI.DSP.SystemID.NSEL:

  • AFI = 49
  • DSP(Area ID) = 0001
  • SystemID = Räknas fram baserat på Loopback adressen
  • NSEL = 00

Areas

Eftersom en nod endast har en NSAP-adress tillhör en nod och alla dens interface samma area (det går att konfigurera upp till 3 NSAP-adresser men det är endast användbart under splitting/joining/renumbering areor och det skapas bara en mergead LSDB och SystemID måste vara samma). Två L1-noder med olika areor upprättar inte grannskap medans L2 inte bryr sig om area-ID. Både L1 och L2 annonserar sina directly connected IP networks till sina grannar. Är en nod L1L2 redistribueras alla routes från L1 till L2 medans åt andra hållet går endast en default route default. Detta leder till att backbone känner till alla routes.

Nätverkstyp

Till skillnad från OSPF finns det endast två nätverkstyper, broadcast och point-to-point. På broadcast-segment har man en pseudonod som alla formar grannskap med, denna kallas Designated IS och är motsvarigheten till DR i OSPF. Man låter en enhet stå för LSP för segmentet annars blir LSDB större och rörigare. Dock är det skillnad på hur flooding fungerar. Alla uppdaterar alla vilket leder till att det inte behövs någon "Backup" DIS. DIS floodar periodvis sin databas och finns det då med någon LSP som en IS inte har fått märker den det och begär att få den av DIS. Detta leder också till att DIS kan ersättas preemptively vilket inte OSPF DR kan.

Den som väljs till DIS är den med högst prio (default 64), vid lika är högsta MAC-adress tie breaker.

interface gi2
 isis priority 100
show clns interface | i DR

Metrics

IS-IS använder bandwidth som metric precis som OSPF. Från början fanns det 4 olika metric-typer men i princip är det endast default (bandwidth) som används idag. Default så får alla interface en cost av 10 oavsett bandbredd. Med andra ord så räknar inte routern ut cost på en länk så som andra routing protokoll gör utan det är upp till administratören att manuellt ställa metric per interface om man vill. Likt OSPF är det inte metric som i första hand jämförs vid path selection utan det är typ av route där L1 > L2 > external. Nedan visas det som kallas narrow metrics, det är legacy och är inte default på Cisco-routrar.

isis metric 1-63

Wide metrics togs fram för att man hade behov av större metrics och det har 24-bitars längd. Detta är alltid rekommenderat men alla enheter inom arean måste stödja det. T.ex. krävs det för MPLS traffic engineering över IS-IS.

router isis
 metric-style wide

Det går även att acceptera båda typerna av metric.

metric-style transition

Verify

R1# show isis protocol | i metrics
 Generate narrow metrics: none
 Accept narrow metrics:   none
 Generate wide metrics:   level-1-2
 Accept wide metrics:     level-1-2

Konfiguration

router isis 1
 is-type level-2
 log-adjacency-changes
 address-family ipv4 unicast
 exit
 net 49.0001.0001.0001.0001.0001.00

Passive interfaces, med passive interface default annonseras allt som är directky connected i isis men inga grannskap byggs förrens man tar bort passive på något interface.

 passive-interface default
 no passive-interface te0/1/1

För att skicka en default route i level 2

default-information originate

Default konfiguration när man drar igång IS-IS (kan skilja mellan IOS-versioner).

router isis
 no protocol shutdown
 max-area-addresses 3
 no fast-flood
 adjacency-check
 no use external-metrics
 metric 10 level-1
 metric 10 level-2
 hello padding
 no nsf cisco
 no nsf ietf
 maximum-paths 4
 distance 115 ip
 no bfd all-interface
 no bfd check-ctrl-plane-failure

Vänta med att använda en granne som nyss har bootat.

set-overload-bit on-startup 180

MPLS LDP kan autokonfigureras med hjälp av IS-IS.

mpls ldp autoconfig
show isis mpls ldp

CLNS
Beroende på IOS-variant aktiveras CLNS när man slår på IS-IS. Man kan slå på det manuellt.

clns routing
show clns
show clns route
ping clns 49.0400.0001.0001.0001.00

Adjacency

Enablea IS-IS på interface. Interface MTU måste matcha för grannskap. Grannar måste även vara i samma IP subnet för att adjacency ska gå upp, detta behövdes inte förr. Går inte grannskap upp kan det också bero på duplicate system ID.

interface te0/1/1
 ip router isis 1
 no isis hello padding
 isis network point-to-point  #effektivisera LSP-hantering
 no shut

Verify

show isis
show isis database
show isis hostname
show isis neighbors/adjacency
show isis topology

Authentication

Kan göras per interface eller area med clear text eller md5.

Per interface oavsett level

interface gi2
 isis authentication mode md5
 isis authentication key-chain <key-chain-name>

L1

router isis
 area-password SECRET

L2

router isis
 domain-password SECRET

Redistribution

Man kan läcka L2 routes till L1 med hjälp av redistribution

redistribute isis [instance] ip level-2 into level-1 distribute-list  (ext acl)

IPv6

IS-IS är oberoende av L3-protokoll för grannskap och kan bära information om destinationer för olika adressfamiljer. IPv6 prefix kan skickas med samma IS-IS-process och grannskap som IPv4 och samma L1/L2-förhållanden gäller för IPv6.

router isis 1
 address-family ipv6 unicast
 exit
show ipv6 route isis
show isis ipv6 topology

Fast convergence

lsp-gen-interval 5 50 50
prc-interval 5 50 50
spf-interval 5 50 50

BFD
BFD hjälper routingprotokoll att konvergera snabbare.

int te0/1/1
 bfd interval 50 min_rx 50 multiplier 5
 isis bfd

iSPF
SPF-algoritmen behöver inte köras för alla länkar varje gång det sker en topologi-förändring. Med incremental SPF körs endast algoritmen för de delar som har påverkats av förändringen för att spara CPU-cykler. Detta går att styra individuellt på enheterna med ispf-kommandot. Det kan vara svårt att veta exakt hur mycket skillnad detta gör men generellt ju större topologi ju större skillnad.

router isis 1
 ispf level-1-2 10
show isis protocol | i Incremental

FRR

fast-reroute per-prefix level-1
fast-reroute per-prefix level-2

NX-OS

feature isis
router isis IS
 is-type level-2
 passive-interface default level-1-2
 log-adjacency-changes
 address-family ipv4 unicast
 exit
 net 49.0001.0001.0001.0001.0002.00

Fast convergence

spf-interval level-2 5000 50 50
lsp-gen-interval level-2 5000 50 50

Authentication

authentication-type md5 level-2
authentication key-chain <key-chain-name> level-2

Vänta med att använda en granne som nyss har bootat.

set-overload-bit on-startup 180

Interface

int lo0
 ip router isis IS

interface e1/1
 ip router isis IS
 no isis passive-interface level-2
 no isis hello-padding
 isis network point-to-point #effektivisera LSP-hantering
 isis authentication-type md5 level-2
 isis authentication key-chain <key-chain-name> level-2

BFD

feature bfd
int e1/1
 bfd interval 50 min_rx 50 multiplier 3
 no bfd echo
bfd per-link
isis bfd