eigrp原理(下)

彌散更新算法(DUAL)

DUAL認爲,即使短暫的路由環路對路由選擇也是有害的.DUAL最早是由E. W. Dijkstra 和 C. S. Scholten提出.

DUAL的預備知識:

爲了是DUAL能正常工作,需要滿足以下條件:  
1.節點可以在有限時間內檢測到鄰居的變動    
2.一個正在運行的鏈路上,所有信息都是在有限時間內正確按序接收到    
3.所有的信息(鏈路cost的變化,鏈路失效和發現新鄰居的通告)都應該一次一個的處理,並且被有順序的檢測到.    
Cisco以RTP及鄰居維護機制來解決上述前提

DUAL的幾個概念

  • 鄰接:兩個可以正常交換路由信息的路由器在邏輯上的關聯關係.這裏的路由更新消息包括路由器知道的所有路由條目及cost.

  • Feasible Distance:到達每一個目的網絡的最小度量值.

  • Feasible Condition:對於某條路由條目.鄰居通告的AD是否小於本地FD.

  • Feasible successor:鄰居滿足了FC,則會成爲本地的FS.

  • successor:實際路由表中的下一跳

FS和FC是DUAL保證無環的重點.因爲鄰居通告的AD比本地FD小,所以路由器不會再次選擇一個經過自己的路徑.

舉個例子    
1423871626636

這裏我們修改了mteric的K值,使用了 metric 0 0 0 1 0 0 即只使用delay作爲度量計算.之前也提到過,由於ospf也使用帶寬作爲度量值,所以,bandwidth這個參數最好不要隨便調整.

1423875897507

拓撲表中包括,路由條目和可行後繼.(768/256)這樣的字段表示FD/AD

FS如果通告了一條cost更小的路由條目,那麼這臺FS就會成爲successor.下面三種情況會引起這一變化:

  • 發現一條新的路由

  • 後繼路由器的度量值增加超過了FS

  • FS度量值減少到小於當前後繼

當一條路由失效時,會首先查找是否存在FS,如果存在FS則切換到FS而不是再次進行路由計算.所以EIGRP拓撲設計的關鍵在於,確保所有目的網段都有FS.

DUAL有限狀態機

DUAL不執行擴散計算時,路由條目處於passive狀態

觸發路由器重新評估路由條目的input:

  • 直連鏈路cost的變化

  • 直連鏈路的翻動

  • 收到一個update數據包

  • 收到一個query數據包

  • 收到一個reply數據包

重新評估的第一步就是對路由條目進行一個本地的計算,也就是對所有的可行後繼重新計算可行距離.可能出現的情況:

  • FS的cost比當前後繼低,則FS轉爲後繼

  • 新的cost比當前cost低,則更新successor的cost

  • cost出現變化的話,發update更新.

在進行local computing的時候,路由狀態依舊是passive.

如果發現有FS,則發送更新出去,沒有狀態產生變化.如果沒有發現FS,那麼悲劇了,要啓動Diffusing computation.此時拓撲表中的相關的條目狀態變爲active.在彌散計算完成之前,路由器不能:

  • 改變路由的後繼路由器

  • 改變正在通告的cost

  • 改變路由的FD

  • 開始進行該路由的另一個擴散計算

路由器開始發送query消息給所有鄰居,query消息包含了自己本地計算的到目的網段的cost. 收到query的鄰居,開始在自己身上執行local computation.執行完了有兩個結果:

  • 如果鄰居有可行後繼, 那麼回送reply消息給query始發路由器,消息中包含自己到目的網段的最小cost

  • 如果鄰居沒有可行後繼,則把自己active,並且開始執行diffusing computation.    
    1423878961084

每一個被髮送query消息的鄰居,都會被標記.直到所有被標記的鄰居都回復了reply消息後該路由器的diffusing computation纔算結束.在低速鏈路或者鏈路質量較差的大型網絡中,可能會出現某個節點無法收到reply的情況,導致全網拓撲無法再次收斂.這種情況叫做SIA(stuck-in-active).實際設計中有個active timer,按照原劇本,計時器超時後還沒有收到reply的話,就斷開鄰居關係.

active timer缺省配置3min,可以通過timer active-timer進行調整

DUAL有限狀態機    
1424999294051

1424999315807

關於debug消息      
debug eigrp packets      
*Mar 1 10:58:02.491: EIGRP: Sending UPDATE on Serial1/0 nbr 12.1.1.2      
*Mar 1 10:58:02.491: AS 90, Flags 0x0, Seq 2/1 idbQ 0/0 iidbQ un/rely 0/0 peerQ un/rely 0/1 serno 4-4      
flags:指出包頭中的相關標記      
seq:序列號/確認序列號      
idbq:輸入隊列數據包數/輸出隊列數據包數      
iidbq:接口上等待傳送的不可靠組播數據包數/等待傳送的可靠組播數據包數      
peerQ:接口上等待傳送的不可靠單播數據包數/等待傳送的可靠單播數據包數      
serno:只想某條路由的雙重連接的指針(搞不懂)

DUAL算法的核心內容:

  • Any time an input event occurs, perform a local calculation.

  • If one or more feasible successors are found in the topology table, take the ones with the lowest metric cost as the successors.

  • If no feasible successor can be found, make the route active and query the neighbors for a feasible successor.

  • Keep the route active until all queries are answered by reply or by the expiration of the active timer.

  • If the diffusing calculation does not result in the discovery of a feasible successor, declare the destination unreachable.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章