HCNP Routing&Switching之IS-IS鄰居建立、LSDB同步、拓撲計算和路由形成

1874發表於2021-09-14

  前文我們瞭解了IS-IS的報文結構和型別相關話題,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/15260670.html;今天我們來聊一聊IS-IS建立鄰居、同步LSDB資料庫和拓撲計算及路由形成相關話題;

  IS-IS動態路由協議的工作流程和OSPF工作流程大致一樣;都是先傳送Hello包,通過hello包建立鄰居,在鄰居建立完成以後,同步LSDB資料庫、計算拓撲和路由;細微的差別在於IS-IS整個建立鄰居的過程沒有OSPF那麼複雜,相對來說IS-IS更為簡單,所以IS-IS建立鄰居時,速度要比OSPF快很多;其次在同步LSDB資料時,對於IS-IS來說,它沒有什麼特殊區域,所以IS-IS中同步資料庫就傳送CSNP、PSNP和LSP這三種包就能把LSDB資料庫同步完成;沒有OSPF裡有123457類LSA複雜;由於採用拓撲與網路分離的演算法,路由收斂速度較快;

  IS-IS鄰居建立過程

  點到點環境鄰居建立過程

  提示:在早期ISO10589標準中,點到點網路環境中,IS-IS建立鄰居只需要兩次握手,即只要收到對方傳送的Hello包,那麼對應路由器就會認為對方是自己的鄰居;對應鄰居狀態就會變為up;其實兩次握手建立鄰居不是很精準,比如A可以向B傳送hello包,那麼B收到A的hello包以後,對應就會把A當作B的鄰居,但是B不能向A傳送hello包,同時A也收不到B傳送的Hello包,此時就產生了單向鄰居;所以為了解決這樣的問題,在RFC3373定義P2P三次握手機制;三次握手的機制和OSPF建立鄰居的過程一樣,只要在對應hello包裡看到鄰居欄位是自己,對應路由器才認為對方才是和自己是鄰居;

  提示:在鄰居建立初期,RTA傳送的hello包裡,鄰居的欄位為空,因為此時RTA沒有任何鄰居;當RTB收到R他的hello包以後,對應RTB就會傳送hello包,裡面鄰居欄位會置為R他的mac,對應鄰居狀態變為init狀態,表示我有一個鄰居是RTA;此時RTA收到RTB傳送的hello包以後,看到裡面鄰居欄位是自己,此時RTA和RTB建立鄰居,其鄰居狀態為up;然後RTA會再次傳送hello包,此時的hello包裡鄰居欄位會置為RTB的mac,表示我有一個鄰居是RTB,此時RTB收到RTA傳送的hello包,它會和RTA建立鄰居,並且對應鄰居狀態為up;經過三次資料包的互動,最終RTA和RTB建立鄰居且鄰居狀態為up狀態;對於廣播型別網路的鄰居關係必須是三次握手;當鄰居建立完成以後,後續就是選舉DIS(偽節點)類似ospf中的DR;選舉DIS會持續兩個hello的時間間隔;

  IS-IS鄰居hello報文

  提示:IS-IS目前只支援點到點和廣播型別網路;對於點到點網路型別,對應hello包型別為p2p IIH,如果在對應介面為PPP封裝的點到點環境中,hello包傳送沒有用到mac地址,其原因是介面為ppp封裝的二層不用mac地址;對於介面型別broadcast,在對應介面下把isis鏈路修改為p2p網路型別環境中,對應hello包目標mac是一個組播mac地址,其地址為09:00:2b:00:00:05;對於廣播型別網路中,hello包的型別有兩種,分別是L1 LAN IIH 和L2 LAN IIH;對於L1的hello包,其組播mac地址為01:80:C2:00:00:14;L2的hello包,其組播mac地址為01:80:C2:00:00:14;

  實驗:如下拓撲,配置isis

  R1的配置

HCNP Routing&Switching之IS-IS鄰居建立、LSDB同步、拓撲計算和路由形成
sys
sys R1
int g0/0/0
ip add 12.0.0.1 24

isis 1
net 20.0000.0000.0001.00
is-le level-1
int g0/0/0
isis en 1
isis circuit-type p2p
View Code

  R2的配置

HCNP Routing&Switching之IS-IS鄰居建立、LSDB同步、拓撲計算和路由形成
sys
sys R2
int g0/0/0
ip add 12.0.0.2 24
isis 1
net 20.0000.0000.0002.00
is-le level-1
int g0/0/0
isis en 1
isis circuit-type p2p
View Code

  在R1或R2上抓包,看看對應hello包型別以及對應hello包傳送的目標mac地址是多少?

  提示:可以看到鏈路型別為p2p網路環境中,對應hello包型別為P2P HELLO,對應hello包傳送的目標mac地址為09:00:2b:00:00:05;

  更改R1鏈路型別為broadcast

  提示:介面為broadcast型別預設鏈路型別為廣播網路,所以我們直接刪除更改鏈路為p2p的配置即可;可以看到當我們把R1的更改鏈路為p2p的配置刪除以後,對應R1和R2的鄰居就down了;原因是此時R1和R2傳送的hello包型別不同,hello包型別不同是不能建立鄰居的;

  在R1上抓包,看看此時R1傳送的hello包型別以及目標mac地址?

  提示:可以看到R1傳送的hello包型別為L1 hello,因為R1此時的路由器型別為L1;對應R2還是傳送的P2P hello,所以R1和R2此時hello包型別不同,不能建立鄰居關係;對應R1傳送hello包的目標mac地址為01:80:C2:00:00:14;

  更改R1的路由器型別為L2,看看對應hello包型別和目標mac會變成什麼?

  在R1上抓包,看看對應hello包型別和目標mac地址

  提示:可以看到此時R1傳送的hello包型別為L2 HELLO,對應目標mac為01:80:C2:00:00:15;

  更改R1路由器型別為L1-2,看看對應hello包的型別以及目標mac地址

  提示:華為路由器預設路由器型別為L1-2,所以我們配置路由器型別為L1-2在對應程式下是看不到配置,一般情況看不我們配置的內容,表示配置的配置是預設配置;

  在R1上抓包,看看對應R1會這樣傳送hello包?對應目標mac會是多少呢?

  提示:更改R1路由器型別為L1-2以後,對應R1會同時傳送L1 和L2的hello包,對應L1型別hello包的目標mac地址為01:80:C2:00:00:14,對應L2型別的hello包目標mac地址為01:80:C2:00:00:15;

  更改R2的鏈路型別為broadcast,看看和R1是否能建立鄰居?

  驗證:在R2上檢視鄰居關係

  提示:可以看到,此時R2和R1建立起L1型別鄰居;

  抓包檢視對應鄰居建立過程

  提示:可以看到在開始R2傳送的hello包和R1傳送的hello裡對應都沒有鄰居欄位,表示鄰居為空;後續當R1收到R2傳送的L1 hello包以後,對應R1再次傳送的hello包裡就有了鄰居欄位,對應值為R2的mac地址;當R2收到R1傳送鄰居是自己的hello包以後,對應R2傳送的hello包,對應鄰居欄位資訊就置為R1的mac,此時R1收到R2傳送hello包裡看到對應鄰居是自己,所以R1和R2建立起L1的鄰居,並且對應鄰居狀態都為Up;這裡需要注意一點,鄰居欄位只有在廣播網路型別的環境中才有的欄位,p2p環境中是沒有鄰居欄位的,抓包看不到;

  IS-IS鄰居建立條件

  1、只有同一層次的相鄰路由器才有可能成為鄰居;所謂同一層次是指L1和L1是同一層次;L2和L2是同一層次;L1-2和L1-2是一個層次;不同層次出L1-2以外,L1和L2是不能建立鄰居;

  2、對於L1的路由器來說,區域號必須一致;即必須在同一個區域的L1或L1-2的路由器才能建立L1型別的鄰居;

  3、鏈路兩端IS-IS介面的網路型別必須一致;這個我們在上面的實驗中也看到了,對應介面網路型別不一致,對應hello包型別就不一致,hello包型別不一致,對應鄰居就建立不起來;

  4、鏈路兩端IS-IS介面的地址必須處於同一網段;這個要求至少針對廣播網路環境,對於P2P網路環境沒有要求,但一般情況下不管在廣播網路環境還是p2p網路環境,建議都是介面地址都配置為同一網段;

  IS-IS同步LSDB資料庫

  P2P網路環境LSDB同步過程

  提示:在P2P鏈路上,鏈鋸建立完成以後,對應就是同步LSDB資料庫;首先RTA或RTB都會傳送一條CSNP包,這個包的主要作用是描述對應路由器上的路由資訊,類似OSPF裡的DD包(資料庫摘要資訊);對應資料庫收到對端傳送的csnp包以後,就會和自身LSDB進行對比,如果對應CSNP包裡的描述和自己的LSDB一樣,此時RTB或RTA不會傳送psnp,psnp類似ospf裡的LSR和LSACK的作用;如果對應和自己LSDB資料不一樣,此時RTA或RTB就會像對放傳送PSNP,意思就是告訴對方把自己沒有的鏈路狀況傳送過來;當對方收到對應路由器傳送的PSNP包以後,對應路由器會傳送LSP,LSP就類似ospf裡的LSU,此時傳送LSP包的路由器就會等待對方傳送PSNP包來確認,如果在5秒鐘對應路由器沒有收到PSNP包,此時對應路由器會認為對方沒有收到它傳送的LSP,此時原傳送LSP路由器會重新向對應路由器傳送LSP,直到收到對應路由器回應psnp包;在點到點的網路中CSNP報文只會傳送一次,即鄰居建立後立即傳送,後續不會再傳送CSNP,只會傳送LSP和PSNP;如下

  提示:可以看到CSNP包在點到點網路中,只有在鄰居建立以後傳送一次,後續就沒有CSNP包;

  廣播網路環境LSDB同步過程

  提示:在廣播網路環境中,首先個路由器會傳送LSP包向DIS請求CSNP包;DIS收到各路由器的LSP包以後,會傳送CSNP包,對應各路由器收到CSNP包以後,會對應自己的LSDB資料庫,然後根據差別請求傳送PSNP包進行向dis請求差別部分鏈路狀態資訊;DIS收到PSNP包以後,傳送LSP包給對應路由器;當所有路由器都同步網LSDB資料庫以後,dis會週期性的傳送CSNP,預設時間是10秒;

  實驗:如下拓撲,配置IS-IS

  R1的配置

HCNP Routing&Switching之IS-IS鄰居建立、LSDB同步、拓撲計算和路由形成
sys
sys R1
int g0/0/0
ip add 172.16.11.1 24
int lo 1
ip add 1.1.1.1 32

isis 1
net 11.0000.0000.0001.00
is-le level-1

int g0/0/0
isis en 1
int lo 1
isis en 1
View Code

  R2的配置

HCNP Routing&Switching之IS-IS鄰居建立、LSDB同步、拓撲計算和路由形成
sys
sys R2
int g0/0/0
ip add 172.16.11.2 24
int lo 1
ip add 2.2.2.2 32

isis 1
net 11.0000.0000.0002.00
is-le level-1

int g0/0/0
isis en 1
int lo 1
isis en 1
View Code

  R3的配置

HCNP Routing&Switching之IS-IS鄰居建立、LSDB同步、拓撲計算和路由形成
sys
sys R3
int g0/0/0
ip add 172.16.11.3 24
int lo 1
ip add 3.3.3.3 32

isis 1
net 11.0000.0000.0003.00
is-le level-1

int g0/0/0
isis en 1
int lo 1
isis en 1
View Code

  在R1或R2或R3上抓包,看看對應LSDB同步過程

 

  提示:我們在R1的g0/0/0介面抓包,首先看到各路由器先各自傳送自己的更新LSP包,隨後R3傳送了一條CSNP包(從這裡可以知道對應dis是R3的g0/0/0口),隨後再是由R2傳送PSNP包向R3請求R1和R3上的鏈路狀態;隨後R3傳送相應鏈路狀態的LSP包給R2;對應R3傳送R1的LSP包裡可以看到對應ip地址為1.1.1.1;對應R3傳送R3的LSP包裡可以看到對應ip地址為3.3.3.3;通過上述過程R2就把R1和R3的LSDB同步到自己的LSDB資料庫中,後續就根據同步後的LSDB計算拓撲和路由;

  驗證:在R2上檢視lsdb資料,看看對應是否同步了R1和R3上的鏈路狀態資訊?

  提示:可以看到對應R2的LSDB中同步了R1和R3的相關LSP;

  驗證:在R3上檢視g0/0/0是否是DIS?

  提示:可以看到在對應R3的g0/0/0口就是對應L1型別的DIS(偽節點);從上面的實驗可以看到,CSNP都是由DIS發出;其他非DIS都是向DIS傳送LSP更新和PSNP請求,然後由DIS在向其他非DIS傳送LSP更新;即LSDB資料庫同步都是和DIS進行同步,所以對於不同型別的路由器,對應建立LSDB資料庫也有所不同;原因是DIS分L1型別DIS和L2型別DIS;

  驗證:在R1上抓包看看對應CSNP包是否是每10秒傳送一次?

  提示:可以看到對應PSNP包預設會每10秒由DIS傳送一次;

  IS-IS LSP比較規則

  提示:在路由器收到一條LSP更新以後,首先它會對比和自己LSDB中對應LSP的序列號,如果收到的序列號大,此時路由器會將對應LSP更新到自己的LSDB資料庫,然後再向其他鄰居傳送LSP更新;如果收到的LSP序列號小,此時收到LSP包的路由器會把自己對應LSP傳送給對方;如果收到的LSP序列號和自己LSDB中對應LSP序列號一樣,此時路由器會對比LSP中Remaining Lifetime欄位的大小,還是遵循上述原則,如果收到的LSP中Remaining Lifetime欄位比自己LSDB中Remaining Lifetime欄位要大,此時路由器會把對應LSP更新到自己的lsdb中,然後再向其他鄰居傳送LSP更新;如果收到LSP包中Remaining Lifetime欄位要比自己LSDB中對應LSP中Remaining Lifetime的值要小,此時收到LSP更新的路由器會將自己lsdb中對應LSP傳送給對方;如果Remaining Lifetime相同,此時路由器會對比對應LSP中checksum欄位的值;還是遵循上述規則,如果比自己大就更新到自己LSDB資料庫中,如果比自己小,就把自己的LSP傳送給對方,如果LSP的序列號,Remaining Lifetime,checksum都和自己LSDB中對應LSP一樣,此時路由器會丟棄該LSP,它會認為兩個LSP一模一樣,沒有必要更新;

  IS-IS拓撲計算與路由的形成

  提示:IS-IS拓撲計算和路由的形成過程和ospf一樣,都是先通過hello包建立鄰居,然後同步LSDB資料庫,最後計算拓撲和路由;在IS-IS中鄰居關係建立主要通過Hello包互動並協商各種引數,包括鏈路型別(L1或者L2),hold time,網路型別,支援協議,區域號,系統ID, PDU長度介面ip等;在同步LSDB資料庫時,與ospf不同,ISIS互動鏈路狀態的基本載體不是LSA,而是LSP;互動過程沒有OSPF協議那樣經歷多個階段,主要是通過CSNP和PSNP兩種報文來同步,請求和確認鏈路狀態資訊(承載鏈路狀態資訊摘要);而鏈路狀態資訊的詳細拓撲和路由資訊由LSP報文傳遞;路由計算和OSPF一樣,都是通過LSDB資料庫中的內容結合SPF演算法進行計算;當ISIS演算法分離了拓撲結構和ip網段,加快了網路收斂速度;

  IS-IS路由演算法

  提示:IS-IS在本區域內路由器第一次啟動的時候執行的是Full-SPF演算法;後續收到LSP更新,如果是部分拓撲的變化執行的是iSPF(Incremental SPF,增強SPF演算法)計算;如果只是路由資訊變化,執行的就是PRC(Partial Route Calculate,部分路由計算演算法)計算,PRC用來處理網路拓撲不變而路由資訊發生改變的情況,而ISPF用來處理網路拓撲結構(最短路徑樹的結構)發生改變的情況;由於採用拓撲與網路分離的演算法,路由收斂速度較快;

相關文章