天天看點

IS-IS 知識點

IS-IS位址

NET位址 = NSAP + 00(NSEL) 例:49.0000.0000.0001.00(16進制)

NESL類似于IP封包中的協定位,标志了不同的協定号,可以說是承載上層資訊的字段(因為IS-IS本身不依賴于IP協定,也就不涉及IP相應的服務,隻能自己來),目前所學這裡就是00。

NSAP = Area ID + System ID  

Area ID 定義所屬區域,System ID 定義區域内每一個節點,其中Area ID 可為1-8 bytes,而System ID 固定為6 bytes。

IS-IS是在鍊路層上直接封裝的路由協定,基于CLNS 構架,有節點概念,無接口概念,是以NET位址标志的是一台路由器,也就是名稱中提到的IS(Intermediate System 中間系統)。

IS-IS在鍊路層定義了Circuit 和相應的SNAP(subnetwork point of attachment)。SNAP是由OSI 定義的Layer 2位址,針對Circuit 類型各有不同,比如在Ethernet中為Mac位址,在Frame-Relay中為DLCI值。

在Ethernet中,System ID (6 Bytes) 與Circuit ID (1 Byte) 連用來标記鍊路。比如1921.6800.0001.01(16進制表示,最後兩位至FF),最後的01就是用來差別Router的各個接口,不過在Cisco路由器中,Circuit ID是與Hostname組合而不是System ID,比如RouterA.01。

保證System ID 在區域内唯一的方法是使用接口的Mac 位址或IP 位址,出于可讀性的考慮建議使用IP位址,形式為 192.168.0.1  -->  1921.6800.0001。

IS-IS 基于CLNS網絡設計,後來由于TCP/IP 協定族的興起發展為內建IS-IS,對IP協定給予支援。不過即使是這樣,在IS-IS中給接口配IP位址仍舊像挂一片葉子一樣無足輕重,有Circuit ID 和 System ID,網絡已經可以組建起來,IP位址本身不參與SPF運算(這裡指IS-IS 本身的SPF,分支節點為各路由器,而不是IP網段)。

IS-IS鍊路

IS-IS支援的網絡類型隻有兩種:Broadcast  &  Point-to-Point ,沒有NBMA的概念。在NBMA主接口,點到多點子接口上IS-IS 都是發送LAN Hello,即當成廣播型鍊路來思考,如果處于同一IP子網的接口沒有形成鄰接關系,對應的下一跳網絡不會裝進路由表。

在NBMA上部署IS-IS時,注意在廣播模式下必須使用CLNS Map,并加上broadcast 關鍵字,拓撲為Full-Mesh。不過還是強烈建議使用點到點模式,應用子接口使每一條PVC對應一個IP子網,否則可能會有路由丢失。

CLNS MAP 指令:   frame-relay  map  clns  105  broadcast

Broadcast鍊路中,Level-1 和Level-2 區域各選舉自己的DIS,不像Level-1區域每個Area選舉一個DIS,Level-2路由器形成鄰接關系并不受Area ID 的影響,是以選舉DIS也是如此。Level-1 & 2 的DIS也不一定相同。

DIS是路由器的一個接口,沒有備份DIS,相應的解決備份問題的機制是DIS搶奪,代價是每搶奪一次會引起一組LSP的泛洪。同時IS-IS LSDB在LAN上不斷同步,即CSNP的周期性發送,其實設計成周期性發送還有一個原因,那就是CSNP不要求有确認應答。

IS-IS 選舉DIS标準:1. 最高接口優先級 (優先級範圍0-127,預設64) 

                                    2. 最高的Mac位址

IS隻與DIS形成鄰接關系,之間的通信不通過IP多點傳播位址,這裡依然強調的是不依賴IP協定,相應的解決方案是用二層多點傳播Mac位址,Level-1的通告都發送到0180.c200.0014,Level-2的發送到0180.c200.0015。

注意:這樣的一個Mac多點傳播位址是所有IS都監聽的,不像OSPF中DR/DRother監聽不同的多點傳播位址,不過一個IS發出的PSNP請求隻有DIS會用相應的LSP給予回應。

IS-IS的LSDB同步中,SNP(Sequence Number PDU,序列号封包)分為PSNP和CSNP,這個與OSPF的分組可以形成對應,PSNP對應的OSPF的LSR and LSAck,CSNP對應OSPF的DBD,但是針對不同的鍊路有細節上的差異。

1)Point-to-Point 鍊路上的LSDB 同步,CSNP隻在點到點鍊路激活時發送一次,PSNP擔當LSR和LSAck的職責,既作為鍊路資訊查詢,又用來确認每一個LSP資料包是否收到。

2)Broadcast 鍊路上的LSDB 同步,LSP不需要每一台接收它的路由器确認,DIS周期性的發送CSNP(間隔為10s),PSNP隻相當于LSR。

思科對于IS-IS的路徑成本處理十分簡單,預設接口度量(單鍊路開銷)Cost=10,可設定為0~63之間的數值(2^6),路徑度量(路由總開銷)為0~1023(2^10),不過這是以前的窄帶路徑成本,新版本的IOS已經擴充到24位的接口度量和32位的路徑度量。

IS-IS通過Hello來形成鄰接關系,針對鍊路類型的不同,IIH可以分為3種,點到點IIH(周期為10s),Level-1 LAN的IIH,Level-2 LAN的IIH(DIS發送Hello周期為3.3s)。而Hello還可以分為ESH(ES之間的Hello),ISH(IS與ES之間的Hello)以及IIH(IS間的Hello)。

IS-IS路由

OSI定義的IS-IS路由等級:

Level-0     ES與IS之間的路由,協定為ES-IS,類似于IP網絡中的IRDP 協定。

Level-1 & Level-2     協定為IS-IS,Level-1為Area内路由,Level-2為Area間路由。

Level-3    在Domian 之間進行的路由,一般不涉及。  

IS-IS 路由器類型3種:Level-1 路由器    Level-1-2 路由器    Level-2 路由器

IS-IS 鄰接關系3種:    Level-1 鄰接       Level-1-2 鄰接        Level-2 鄰接

形成鄰接關系的規則:

Level-1 和 Level-2 路由器       一定不能形成鄰居關系

如果鄰居是Level-2路由器       不管Area ID是否相同都能形成Level-2鄰接關系

如果鄰居是Level-1路由器       隻有Area ID相同才能形成Level-1鄰接關系

兩台Level-1-2路由器之間        Area ID相同則為Level-1鄰接;不同則為Level-2鄰接關系

IS-IS 的LSP類型2種: LSP 1 &  LSP 2

LSP 1通告相連的Level-1 和Level-1-2 鍊路資訊  LSP 1  -->  Level-1 LSDB --> Area内 路由

LSP 2通告相連的Level-2 和Level-1-2 鍊路資訊  LSP 2  -->  Level-2 LSDB --> Area間 路由

IS-IS 鍊路類型(Circuit-Type)定義了該鍊路的等級和允許處理和泛洪的PDU類型,有3種:

Level-1 (隻允許LSP 1通告) Level-1-2  (允許LSP 1 & 2通告) Level-2-only  (隻允許LSP 2通告)

同一Area内的路由器Area ID必須相同,ES與所連路由器用相同的Area ID。Area ID用于Level-2路由(區域間路由),System ID用于Level-1路由(區域内路由)是以Area内必須唯一。具體來講,Area間路由的時候,隻考慮Area ID 不考慮System ID,Area内路由的時候,隻考慮System ID 不考慮Area ID。

IS-IS在設計時應先定義好區域,骨幹區域全為Level-2 Router,邊界為Level-1-2 Router(最好規劃到Level-1區域),末節區域為Level-1 Router。

當一個Level-2 或者Level-1-2路由器與其他Area的路由器相連時,它所發的LSP的ATT位為會設為1。Level-1區域作為末節會是以有預設路由注入,并選擇最近的L1/2路由器作為本區域的出口。

IS-IS的路由優先級為:當去往同一目的地有多條路由可選時,L1路由優于L2路由。IS-IS外部路由預設以L2方式傳播,是以在L1區域不會有外部路由,在Level-1路由器上執行的重釋出也是無效的,就好象在OSPF的Stub區域做重釋出一樣。如果L1路由器一定要将外部路由重釋出進來的話,可以用指令來實作:(config-router)# redistribute  connected  level-1 。

L2路由可能是Area間路由,也可能是外部路由,在IS-IS資料庫裡可以識别出來。如果達到某一目的地,同時存在L2外部路由和域間路由,那麼IS-IS會根據最短路徑來選擇,而到達外部路由的路徑以到達ASBR為準,是以可能會出現安裝外部路由而沒有安裝域間路由的情況。這和OSPF明顯區分内部路由和外部路由不同,在OSPF中如果已存在域間路由,外部路由在重釋出進的時候會被過濾掉。 

路由洩露

上述的次優選路IS-IS可以通過路由洩漏來解決,即讓L1路由器知道L2路由。配置在Leve-1區域出口上完成,在L1路由器的路由表洩漏的條目一“i ia” 表示,Metric會額外加上128:

(config)# access-list 101 permit ip host 1.1.10 any

(config-router)# redistribute  isis ip level-2 into level-1 distribute-list 101

在IOS操作中,IS-IS重釋出進其他IGP(比如OSPF)時并不包含自己的直接接口,目前版本依然沒有解決,處理這種狀況又2種方案,要麼将IS-IS的接口同時運作OSPF,要麼在ABR上做重釋出直連的配置:

(config)# route-map  from-isis

(config-route-map)# match  interface  loopback0  s1/0

(config)# router  ospf  10

(config-router)# redistribute  connected  subnets  route-map  from-isis

IS-IS特性

強擴充性:第一點,以路由器等級(Level)來劃分骨幹區域,沒有實際上地理位置的制約,但設計時應該考慮。

第二點,IS-IS的邊界在鍊路上,不像OSPF那樣以ABR作為邊界,這樣每個Router隻屬于一個Area,而且可以通過設定使一個IS屬于多個Area(預設最多為3個),這樣在區域過度的時候不必中斷,像ISP中的IS-IS往往就是一個單一的L2區域,僅提供區域的外部出口,這樣新的Area可以作為L1類型直接連接配接到已經存在的L2區域。

第三點,IS-IS應用TLV來進行通告,TLV可以擴充出很多資訊,格式無窮無盡(TLV是Type,Length,Value的縮寫,更廠商自行設計,在程式設計時被翻譯為“元組”,指的是大小固定的異構對象的集合)。

OL位設定:IS-IS有一個有趣的特性,如果它的裝置由于記憶體不足無法記錄完整的鍊路狀态資料庫時,它具有通知其他路由器的能力,其動作是在所發送的LSP資料包中設定OL位(Overload),表明自己可能不能進行正确的路由選擇,是以在該路由器沒有清除OL位之前,其他路由器不會通過這台路由器來轉發,不過需要注意的是,由于LSDB可以針對L1或者L2,是以路由器可能隻是在其中一層過載,而其他層記憶體還正常。

OL位目前最常用的地方是在BGP網絡中,當一台新的路由器添加進網絡,IGP會比BGP先收斂,如果另一台路由器根據收斂的IGP路由确認這台新添加進來的路由器是BGP路徑的下一跳,而這時新路由器的BGP還沒有完成收斂,就會造成路由黑洞。

在BGP收斂之前通過設定IS-IS的OL位,可以避免這個問題,其他路由器會繞過這台新的路由器進行選路,一旦BGP收斂,OL位将被清除。建議使用 set-overload .-startup 指定一個秒數說明IS-IS啟動後需要設定OL位的時間(可設為300~500s),也可以加關鍵字 wait-for-bgp 使其在BGP完成收斂的時候清除OL位(不過一旦BGP由于某些原因沒有起來,OL位就永遠不會清除,是以還是設定時間為好)。

PS:IS-IS路由器的Level,決定了所發PDU的類型,隻有PDU類型比對才可以形成鄰居,而且L1類型的鄰居還要求必須有一樣的AREA ID。

L2路由器不能和L1路由器形成鄰居,因為PDU類型不同,AREA也肯定不同,L2區域也不允許存在L1路由器,

處于其它AREA的L1-2雖然能發L1類型的PDU,但是由于和L1路由器的AREA ID不同,是以不能形成鄰接關系。

一個L1 AREA必須要至少有一個處于本AREA的L1-2,作為ABR,但L1-2路由器并不一定隻位于L1 AREA。是以當L1和L2路由器之間隻有一台L1-2路由器時,這台L1-2必然和L1路由器處于同一AREA,因為要兩邊都形成鄰居,L1鄰接條件更為嚴格,需要AREA ID相同。

一般來講,L2區域應該都是L2路由器,L1-2路由器要發揮其作用就應該分放在各自的L1區域,作為該區域的ABR,雖然L1-2放在L2區域不會有大問題,但是不是很好的設計。

當一個Level-2 或者Level-1-2路由器與其他Area的路由器相連時,它所發的LSP的ATT位為會設為1。Level-1區域收到這樣的LSP不會放進路由表,隻是會裝入預設路由,并選擇最近的L1/2路由器作為本區域的出口。

L2路由器隻有L2資料庫,但是有全部的鍊路資訊,L1隻有L1資料庫,隻有本AREA的鍊路資訊。

L2隻有L2 LSDB,但是有全部路由,這類似于OSPF,L2作為骨幹區域,得到的是L1-2路由器通告的“路由”,而不是“鍊路”,同樣具有距離矢量的行為特征,即隻是知道通過哪個L1-2可以到達相應的L1 區域。

L1隻有L1 LSDB,隻有本區域的路由,L1-2作為該AREA的出口,雖然有L1 & L2 LSDB,但是L1-2不會将L2 LSDB的内容通告給L1路由器。

LSP2 形成 L2 LSDB,LSP1聚在一起形成L1 LSDB

路由器類型 -> 鍊路類型 -> PDU類型 -> 鄰接關系

Level-2路由器  -> 鍊路類型都是Level-2-only  ->  隻能發L2的PDU  ->  隻能形成Level-2鄰接關系

Level-1路由器  -> 鍊路類型都是Level-1  ->  隻能發L1的PDU  ->  隻能形成Level-1鄰接關系(且要求Area ID相同)

Level-1-2路由器  -> 鍊路類型都是Level-1-2(預設)  ->  L1和L2的PDU都發  ->  可能L1和L2鄰接同時形成

記住,沒有什麼所謂的L1-2鄰接關系,實際上是處于一個Area的兩台L1-2路由器同時形成L1和L2的鄰接關系,因為預設的鍊路類型是L1-2,即L1和L2類型的PDU都會發,而且L1鄰接條件滿足,是以都形成,當Area ID不同,就隻能形成L2鄰接了。

LSP的類型取決于始發該LSP的路由器是L1還是L2,L1路由器發出的LSP,在IS Type字段中會寫着01,代表是L1,相應的L2發出的LSP會寫着11,L1-2路由器就是依據這個字段判别是LSP1還是LSP2。

不過L1-2路由器在發自身所知道的資訊時會有所動作,那就是雖然他會把資訊分别形成LSP1和LSP2資訊通告出去,發LSP1就寫的01,發LSP2就寫11,但要注意LSP1的資訊已經将Level-2鍊路過濾掉了,而且ATT位會設為1,也就是告訴其L1 Area的路由器自己和外界連通良好,可以注入預設路由。

記住,ATT位隻和L1-2始發的LSP1資料包有關,其L1區域路由器一旦核實該LSP1的始發L1-2路由器确實同屬一個Area,就會向自己的路由表中注入預設路由。

關鍵:Level1-2路由器通過向L1區域發送ATT比特位為1的LSP讓L1區域的路由器生成一條指向Level1-2路由器的ISIS預設路由。

要明确OSPF中的LSA是針對一條鍊路的,LSU才等于IS-IS中的LSP,LSP中的内容都是通過一個個TLV填充的,L1-2路由器在形成LSP1的時候SPF運算在每個Level中進行,即一個Level-2 & N個Level-1 AREA。

L2路由字首不允許注入L1區域。

L1路由 > L2路由 > L1 ia路由 (Lab-Result)

IS-IS對損壞的LSP态度就是直接丢棄。

L1區域的每一條路由在始發時因為設定了TLV 128中的U/D比特位為0,即為Up,意味着能向上層Level2區域注入,但是不能像其他Level1區域注入。

ATT位隻在L1-2路由器發送LSP1會設定,僅限這種情況。

OL位:當IS-IS記憶體過載,不足以完整記錄某一層的LSDB時,它會在自己發送的LSP中設定OL位,聲明自己不保證正确路由,這樣其他路由器都不會通過它轉發資料。

OL位主要用于配合BGP,路由器可在自己的BGP收斂之前,将自己IS-IS的LSP設定OL位,防止自己成為BGP下一跳,避免了路由黑洞的産生。

TLV 128針對路由字首設定了U/D位,來避免路由洩漏引起的環路問題,首先記住預設情況下,L2路由字首禁止通告進L1 AREA。

U位:預設為U位,即數值為0,Up意味着該路由字首能夠 <Up進L2區域> 但是不能 <Down進L1區域> 

是以一般情形下L2區域擁有全路由,但是各個L1區域都隻有本區域的路由

D位:設定為D位,即數值為1,Down意味着該路由字首能夠 <Down進L1區域> 但是不能 <Up進L2區域>

這種情形下L1能知道L2路由,選路可以實作最優,但是學到的路由不能再通告出去,這樣可以避免環路。

繼續閱讀