前文我們了解了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收到RTA的hello包以后,對應RTB就會發送hello包,里面鄰居字段會置為RTA的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的配置

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
R2的配置

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
在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的配置

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
R2的配置

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
R3的配置

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
在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用來處理網絡拓撲結構(最短路徑樹的結構)發生改變的情況;由於采用拓撲與網絡分離的算法,路由收斂速度較快;