CCNA--距離矢量協議與鏈路狀態路由協議

 CCNA--距離矢量協議與鏈路狀態路由協議


 
 

距離矢量路由協議:

距離矢量

  距離矢量算法是以R.E.Bellman,L.R.Ford和D.R.Fulkerson所作的工做爲基礎的,鑑於此,咱們把距離矢量路由協議稱爲Bellman-Ford或者Ford-Fulkerson算法。
  距離矢量名稱的由來是由於路由是以矢量(距離,方向)的方式被通告出去的,這裏的距離是根據度量來決定的。通俗點就是:往某個方向上的距離。
  每種路由協議都有本身的算法,路由協議在共享和傳遞路由更新信息,乃至收斂都由於算法的不一樣而不一樣。
  路由協議根據算法能夠分爲兩大類(也有說三類的—混合):距離矢量(Distance Ventor)和鏈路狀態(Link State)。
  例如:「朝下一個路由器X的方向能夠到達網絡A,距此5跳之遠」
  每臺路由器在信息上都依賴於本身的相鄰路由器,而它的相鄰路由器又是經過自它們本身的相鄰路由器那裏學習路由,依此類推,因此就好象街邊巷尾的小道新聞——一傳十,十傳百,很快就能弄到家喻戶曉了。呵呵。正由於如此,咱們通常把距離矢量路由協議稱之爲「依照傳聞的路由協議」

距離矢量算法

  距離矢量路由算法是動態路由算法。它是這樣工做的:每一個路由器維護一張矢量表,表中列出了當前已知的到 每一個目標的最佳距離,以及所使用的線路。經過在鄰居之間相互交換信息,路由器不斷地更新它們內部的表。
  距離矢量路由算法最多見的是Ford-Fulkerson算法。該算法的核心思想是使用標號的方法不斷尋找一個圖上的 可增廣路徑而且進行調整,直到找不到可增廣路徑爲止。距離矢量路由算法號召每一個路由器在每次更新時發送它 的整個路由表,但僅僅給它的鄰居。距離矢量路由算法傾向於路由循環,但比鏈路狀態路由算法計算更簡單。
  算法描述以下:
  給定帶杈有向圖G和源點s,求從s到G中任意頂點v的最短路徑,該算法經過在一個路由中重申跳數的個數九來尋 找一個最短路徑生成樹。
  在距離矢量路由選擇算法中,每一個路由器維持有一張子網中每個以其餘路由器爲索引的路由選擇表,表中的 每個項目都對應於子網中的每一個路由器。此表項包括兩個部分,即但願使用的到目的地的輸出線路和估計到達 目的地所需時間或距離。用度量標準可爲站點,估計的時間延遲(ms),該路出排隊的分組估計總數或相似的值。
  假定路由器知道它到每一個相鄰路由器的「距離」。若是度量標準爲站點,其距離就爲一個站點;若是度量標準是隊列長度,則路由器會簡單地檢查每一個隊列;若是度量標準是延遲,路由器能夠直接發送一個特別「響應」(ECHO)分組來測出延遲,接收者只對它加上時間標記後就儘快送回。

距離矢量路由協議

  一、IP路由信息協議–RIP
  二、Xerox網絡系統的XNS RIP
  三、Novell的IPX RIP
  四、Cisco的Internet網關路由選擇協議–IGRP
  五、DEC的DNA階段4
  六、Apple Talk的路由選擇表維護協議–RTMP
 
距離矢量路由的通用屬性
     1、按期更新(Periodic Updates
      按期更新意味着每通過特定時間週期就要發送更新信息。這個時間週期從10S90S。這裏有一個問題就是,更新週期越長,路由收斂越慢;更新週期越短,就越可能引發由於更新而形成的網絡擁塞。

      2
、鄰居(Neighbours
      鄰居一般是指共享着相同數據鏈路的路由器。距離矢量路由協議向相鄰路由器發送更新信息(有一些特定的主機也會焯仿酚篩灤畔ⅲ⒁攬苛誥永窗鎪萋酚篩灤畔ⅰR蛭腥稅丫嗬朧噶柯酚尚槌莆?/font>傳聞式的路由協議

      3
、廣播更新(Broadcast Updates

      當路由器剛開機或者剛啓動路由協議時,它如何尋找其餘的路由器呢?它如何向其餘路由器宣告本身的存在或者出現呢?你們能夠想一下,在現實生活中,咱們在一堆人中找某我的時,你會一個一個的去問仍是大喊一聲呢?顯而易見,在路由選擇協議的更新中,它使用了廣播的更新方式.
 
   四、包含整個路由表的更新
      就好象兩個知心好友同樣,推心置腹……把本身知道的什麼玩意兒都掏出來告訴對方。基本上全部的距離矢量路由協議都會採用這種簡便的辦法來向鄰居路由器通告本身所知道的全部信息——告訴其餘路由器本身的整張路由選擇表,鄰居在收到該信息後,去其糟粕,取其精華……完善本身的路由表。
 
   五、依照傳聞進行路由選擇。

   六、路由計時器(在後面講解RIP的時候會將到)。講述距離矢量的幾種計時器
  七、水平分割(Split Horizon)詳見CCNP-BSCI 002距離矢量路由協議–水平分割
  八、計數到無窮大(在後面講解RIP的時候會將到)
  九、觸發更新(Triggered Update)
  觸發更新又名快速更新:當路由收斂後,若是某臺路由器得知本身直連的一條鏈路的度量變化了,(不管好或者壞)那麼該路由器將當即發送更新信息,沒必要等到更新計時器的到期。
  十、抑制計時器(Holddown Timer)
  觸發更新爲正在進行收斂的網絡增長了應變能力,爲了下降接受錯誤路由信息的可能性,抑制計時器引入了某種程度的懷疑量
  若是到一個目標的度量發生改變(不管是增大仍是減少),那麼路由器將會將該路由條目置爲抑制狀態——即加上一個抑制計時器。直到計時器超時,路由器纔會接受有關此路由的信息。
  它雖然下降了錯誤路由的可能性,可是收斂時間卻會所以而變長,由於在對其進行配置的時候,必定要根據全網的狀況來配置一個合適的值。
  十一、異步更新(Asynchronous Update)
  假設有一組鏈接在以太網段上的路由器羣,你們都記得,以太網的工做方式。若是每臺路由器都共享一個廣播網絡的時候,極可能會出現更新同步的狀況——幾臺路由器的更新時間同時到期,同時更新。那麼就會形成報文的碰撞,而後根據CSMA/CD,它們會回退,可是,極可能這樣一來影響到整個系統的時延,最終會形成整個網絡的同步。因此,咱們一般使用兩種辦法來防止同步保持異步更新:
  ·每臺路由器的更新計時器都獨立於路由進程,由於不會受到路由器處理負載的影響
  ·在每一個更新週期中加入一個小的隨機偏移量。

鏈路狀態路由協議:
 
1、概述
 
若是把距離矢量路由選擇協議比做是由路標提供的信息,那麼鏈路狀態路由選擇協議就是一張交通線路圖;由於它有一張完整的網絡圖,因此它是不容易被欺騙而做出錯誤的路由決策的;鏈路狀態不一樣於距離矢量依照傳聞進行路由選擇的工做方式,每臺路由器都會產生一些關於本身、本地直連鏈路以及這些鏈路的狀態(以此而得名)和全部直接相連鄰居的信息。這些信息從一臺路由器傳送到另外一臺路由器,每臺路由器都作一份信息拷貝,可是決不改動這些信息,最終每臺路由器都有一個相同的有關網絡的信息,而且每臺路由器能夠獨立地計算各自的最優路徑;
鏈路狀態協議,有時也叫最短路徑優先協議或分佈式數據庫協議,是圍繞着圖論中的一個著名算法-E.W.Dijkstra的最短路徑算法設計的;鏈路狀態協議有如下幾種:
 
IP開放式最短路徑優先OSPF;
CLNS或IP ISO的中間系統到中間系統IS-IS;
DEC的DNA階段5;
Novell的NetWare鏈路服務協議NLSP.
 
鏈路狀態路由選擇協議的基本步驟以下:
 
一、每臺路由器與它的鄰居之間創建聯繫,這種聯繫稱爲鄰接關係;
二、每臺路由器向每一個鄰居發送鏈路狀態通告LSA。對每臺路由器鏈路都會生成一個LSA,LSA用於標識這條鏈路、鏈路狀態、路由器接口到鏈路的代價度量值以及鏈路所鏈接的全部鄰居。每一個鄰居在收到通告後將依次向它的鄰居轉發(泛洪)這些通告;
三、每臺路由器要在數據庫中保存一份它所收到的LSA的備份,若是全部路由器工做正常,那麼它們的鏈路狀態數據庫應該相同;
四、完整的拓撲數據庫,也叫作鏈路狀態數據庫,Dijkstra算法使用它對網絡圖進行計算得出到每臺路由器的最短路徑;接着鏈路狀態協議對鏈路狀態數據庫進行查詢找到每臺路由器所鏈接的子網,並把這些信息輸入到路由表中.
 
 
2、鄰居
 
鄰居發現是創建鏈路狀態環境並運轉的第一步,它將使用Hello協議(Hello Protocol)。Hello協議定義了一個Hello數據包的格式和交換數據包並處理數據包信息的過程;Hello數據包至少應包含一個路由器ID CRID和發送數據包的網絡地址。路由器ID能夠將發送該數據包的路由器與其餘路由器唯一地區分開,例如,路由器ID能夠是路由器一個接口的IP地址。數據包的其餘字段能夠攜帶子網掩碼、Hello間隔、線路類型描述符和幫助創建鄰居關係的標記,其中Hello間隔是路由器在宣佈鄰居死亡以前等待的最大週期;
 
當兩臺路由器已經互相發現並將對方視爲鄰居時,它們要進行數據庫同步過程,即交換和確認數據庫信息,直到數據庫相同爲至;爲了執行數據庫同步,鄰居之間必須創建鄰接關係,即這們必須就某些特定的協議參數,如計時器和對可選擇能力的支持,達成一致意見。經過使用 Hello數據包創建鄰接關係,鏈路狀態協議就能夠在受控的方式下交換信息,與距離矢量相比,這種方式僅在配置了路由選擇協議的接口上廣播更新信息(組播)!
 
除創建鄰接關係外,Hello數據包還可做爲監視鄰接關係的握手信號。若是在特定的時間內沒有從鄰接路由器收到Hello數據包,那麼就認爲鄰居路由器不可達,隨即鄰接關係被解除。典型的Hello數據包交換間隔爲10s,典型的死亡週期是交換間隔的4倍.
 
 
 
3、鏈路狀態泛洪擴散(Flooding)
 
在創建了鄰接關係以後,路由器開始發送LSA給每一個鄰居,同時,每一個鄰居保存接收到的LSA並依次向它的每一個鄰居轉發,除了發送該LSA的鄰居以外,在這裏優於距離矢量的一個特色是:LSA幾乎是當即被轉發的!所以,當網絡拓撲發生變化時,鏈路狀態協議的收斂速度要遠遠快於距離矢量協議;
泛洪擴散過程是鏈路狀態協議中最複雜的一部分,有幾種方式可使泛洪擴散更高效和更可靠,如使用單播和多播地址、校驗和以及主動確認,其中有兩個過程是極其重要的:排序和老化;
一、序列號
 
假設這樣一種狀況:路由器C先從B收到了A發出的一個LSA並保存到本身的拓撲數據庫中,接着又經過路由器F收到了一樣的這個由A發出的LSA,路由器C發現數據庫中已經存在了該LSA(知道是從B收到的),那麼路由器C從路由器F接收到的這個LSA是否應該向路由器B轉發?答案是不轉發!由於路由器B已經收到了這個LSA,因爲路由器C從路由器F接收到的LSA的序列號與早先從路由器B接受的LSA序列號相同,因此路由器C也知道這一狀況,因而將該LSA丟棄;
當路由器A發送LSA時,在每一個拷貝中的序列號都是相同的,此序列號和LSA的其餘部分一塊兒被保存在路由器的拓撲數據庫中,當路由器收到數據庫中已存在的LSA且序列號相同時,路由器將丟棄這些信息;若是信息相同但序列號更大,那麼接收的信息和新序列號被保存到數據庫中,而且泛洪擴散該LSA;
由於序列號被攜帶在LSA中的一個固定字段內,因此序列號必定有上限,那麼當序列號到達上限時會發生什麼呢?
 
1)線性序列號空間
一種辦法是使用一個很是大的線性序列號以致於根本不可能到達上限,如使用32位長字段(IS-IS就是這樣);若是一個鏈路狀態路由選擇進程用完了全部序列號,那麼它在從新使用最低序列號以前必須中止(從新啓動),並等待它所發出的LSA在全部數據庫中都再也不使用。假如最大的時間是1個小時或者更長,那麼這種方法是不可行的;
 
在路由器啓動期間會出現一種更常見的困難。若是路由器A重啓以後,它沒法記得上次使用的序列號,必須從新使用1.可是若是路由器A的鄰居仍然在數據庫中保留了路由器A上次的序列號,那麼越小的序列號也就是越舊的序列號,於是會被忽略;
 
更好的解決辦法是在泛洪擴散行爲中添加新的規則:若是一臺從新啓動的路由器向鄰居發送LSA的序列號比鄰居保存的序列號還要老,那麼鄰居會發回本身保存的LSA和序列號,這樣就臺路由器將知道啓動前本身使用的序列號並做出相應的調整;
 
然而仍須要當心,最近使用過的序列號不能接近上限,不然,從新啓動的路由器將不得再也不次從新啓動。必須設定規則限制路由器「跳躍」地使用序列號。例如,規則指明一次序列號增長不能超過整個序列號空間的二分之一(實際公式要複雜,由於要考慮年齡的限制);
 
2)循環序列號空間
 
這種方法數字是循環使用的,在32位空間內緊跟在4 294 967 295後面的是0;它在從新啓動路由器後也可能會遇到同線性序列號同樣的問題!其結構以下:
 
循環序列號創建了一個不合邏輯的奇特位。若是X是1到4 294 967 295之間的一個數,那麼0<X<0!在運行正常的網絡中經過聲明兩條規則能夠維持這種條件,其中聲明的規則來肯定何時一個序列號大於或小於另外一個序列號。假設序列號空間爲n,則兩個序列號a和b,若是知足如下任意一種條件,則認爲a更新(數量更大):
a<b,且(a-b)<=n/2
a<b,且(b-a)>n/2
 
假設這樣一種狀況:在一個網絡中使用6位序列號空間。如今其中的一臺路由器決定離線,當它在離線之間,忽然發送了3個相同且序列號爲44(101100)的LSA。不幸的是,一個鄰居也發生了故障,丟掉了幾位數據,丟失的數據位是第2個LSA和第3個LSA序列號中的1位,隨即該鄰居路由器向外泛洪了這3個LSA,結果形成3個LSA序列號各不相同:
 
應用循環規則可得:44比40更新,40比8更新,8又比40更新!這個結論使3個LSA都持續擴散下去,數據庫也不斷地被最新的LSA更新,直到數據庫緩存被塞滿,CPU超載爲止,最終整個網絡崩潰!
 
3)棒棒糖序列號空間
 
這種方法是線性序列號空間和循環序列號空間的綜合,它有一個線性組件和一個圓形組件;性線空間的缺點是不能循環使用序列號,即序列號是有限的,而圓形空間的缺點是不存在一個數小於其餘全部的數;其結構以下:
 
當路由器重啓時,它將從小於其餘全部數的a開始,鄰居將會識別出這個數,這時若是鄰居數據庫中還保留有上次序列號爲b的LSA,那麼它們會發送b給路由器A,則路由器A將跳至該序列號。在知道本身重啓前使用的序列號以前,路由器A可能會發送不止一個LSA,所以,在鄰居通知路由器A上次使用的序列號或上次使用的序列號從全部數據庫中消失以前,必須準備充足的啓動數以便路由器A不會用光全部重啓序列號;
 
這些線性重啓序列號開成了棒棒糖的棒;在這些數用完或鄰居提供了使路由器A跳轉的序列號以後,路由器A進行循環數空間,也就是棒棒糖的糖體部分。棒棒糖序列號空間使用了有符號數,即-k<0<k。從-k到-1的負數造成棒棒,從0到k的正數造成循環空間。其規則以下:
 
假設給出兩個數a、b及一個序列號空間n,當且僅當:
a < 0 且 a < b, 或
a > 0, a < b, 且 (b-a) < n/2, 或
a > 0, b > 0, a > b, 且 (a-b) > n/2
認爲b比a更新!
棒棒糖形序列號空間用在OSPFv1(RFC 1131)中。當前使用的OSPF版本2採用了線性和棒棒糖形序列號空間的最好的特性。OSPFv2像棒棒糖形序列號同樣使用了從0×80000001開始的有符號數空間,可是當序列號數變爲正數時,序列號間持續保持線性直至到達最大數0×7FFFFFFF爲止。此時,在重啓以前OSPF進程必須從全部鏈路狀態數據庫中刪除LSA。
  
二、老化(Aging)
 
LAS包格式中有一個年齡字段,當LSA被建立時,路由器將該字段設置爲0,隨着數據包的擴散,每臺路由器都會增長通告中的年齡。固然,另外一個選項是從某個最大年齡開始,而後遞減,OSPF是遞增,IS-IS是遞減;
 
老化過程爲泛洪擴散增長了可靠性,該協議爲網絡定義了一個最大年齡差距(MaxAgeDiff)值。路由器可能接收到一個LSA的多個副本,其中序列號相同,年齡不一樣。若是年齡的差距小於MaxAgeDiff,那麼認爲是因爲網絡的正常時延形成了年齡的差別,所以數據庫原有的LSA繼續保存,新收到的LSA(年齡更大)不被擴散;若是年齡差距超過MaxAgeDiff,那麼認爲網絡發生異常,由於新被髮送的LSA 的序列號值沒有增長。在這種狀況下,較新的LSA會被記錄下來,並將數據包擴散出去。典型的MaxAgeDiff值爲15min(用於OSPF);
 
若LSA駐留在數據庫中,則LSA的年齡會不斷增長。若是鏈路狀態記錄的年齡增長到某個最大值(MaxAge)-由特定的路由選擇協議-那麼一個帶有MaxAge值的LSA被泛洪擴散到全部鄰居,鄰居隨即從數據庫中刪除相關記錄;
 
當LSA的年齡到達MaxAge時,將被從全部的數據庫中刪除,這須要有一種機制來按期地確認LSA而且在達到最大年齡以前將它的計時器復位。鏈路狀態刷新計時器(LSRefesh Timer)就是作此用途的;一旦計時器超時,路由器將向全部鄰居泛洪擴散新的LSA,收到的鄰居會把有關路由器記錄的年齡設置爲新接收到的年齡。 OSPF定義MaxAge爲1小時,LSRefresh Time爲30min。
 
 
4、鏈路狀態數據庫
 
除了鄰居發現和泛洪擴散LSA,鏈路狀態路由選擇協議的第3個主要任務是創建鏈路狀態數據庫。鏈路狀態數據庫,也叫拓撲數據庫把LSA做爲一連串記錄保存下來。LSA包括兩類通用信息:
 
路由器鏈路信息-使用路由器ID、鄰居ID和代價通告路由器的鄰居路由器,這裏的代價是發送LSA路由器到其鄰居的代價;
末梢網絡信息  -使用路由器ID、網絡ID和代價通告路由器直接鏈接的末梢網絡(沒有鄰居的網絡);
 
注意:鏈路代價是按照出站接口的方向計算的!
 
 
5、SPF算法-Dijkstra算法

SPF算法的基本過程:

構建最短路徑樹時,路由器首先將它本身做爲根,而後使用拓撲數據庫中的信息,建立全部與它直連的鄰居列表。到一個鄰居的代價最小的路徑將成爲樹的一個分枝,該路由器的全部鄰居都被加入列表。檢查該列表,看是否有重複的路徑:若是有,代價高的路徑將從列表中刪除,代價低的路由器將被加入樹;路由器的鄰居也被加入列表,再次檢查該列表是否有重複路徑。此過程不斷重複,直到列表中沒有路由器爲止!
  
6、區域
 
一個區域是構成一個網絡的路由器的一個子集。將網絡劃分爲區域是針對鏈路狀態協議的3個不利影響所採起的措施:
 
必要的數據庫要求內存的數量比距離矢量協議更多;
複雜的算法要求CPU時間比距離矢量協議更多;
鏈路狀態泛洪擴散數據包對可用帶寬帶來了不利的影響,特別是不穩定的網絡.
當一個網絡中路由器的數量不少,以致數千臺的時候,那麼SPF算法給內存、CPU和帶寬帶來的負擔是不可想象的!經過劃分區域能夠減少這些影響。當一個網絡被劃分爲多個區域時,在一個區域內的路由器僅須要在本區域擴散LSA,於是只須要維護本區域的鏈路狀態數據庫。數據庫越小,意味着須要內存越少,運行SPF算法須要的CPU週期也越少。若是拓撲改變頻繁發生,引發的擴散將被限制在不穩定的區域!
 
區域邊界路由器是鏈接兩個區域的路由器,它屬於所鏈接的兩個區域,並且必須爲每一個區域維護各自的拓撲數據庫!
 
 
7、距離矢量路由選擇協議與鏈路狀態路由選擇協議的區別
 
距離矢量路由器發送它的整個路由表,而鏈路狀態路由器僅僅發送有關它直連鏈路(鄰居)的信息;
距離矢量路由器僅向這的鄰居發送路由信息,而鏈路狀態路由器向整個網絡中的全部路由器發送鄰居信息;
距離矢量路由器經過使用不一樣的Bellman-Ford算法,然後者則一般使用不一樣的Dijkstra算法。
相關文章
相關標籤/搜索