彌散更新算法(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小,所以路由器不會再次選擇一個經過自己的路徑.
這裏我們修改了mteric的K值,使用了
metric 0 0 0 1 0 0
即只使用delay作爲度量計算.之前也提到過,由於ospf也使用帶寬作爲度量值,所以,bandwidth這個參數最好不要隨便調整.
拓撲表中包括,路由條目和可行後繼.(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
每一個被髮送query消息的鄰居,都會被標記.直到所有被標記的鄰居都回復了reply消息後該路由器的diffusing computation纔算結束.在低速鏈路或者鏈路質量較差的大型網絡中,可能會出現某個節點無法收到reply的情況,導致全網拓撲無法再次收斂.這種情況叫做SIA(stuck-in-active).實際設計中有個active timer,按照原劇本,計時器超時後還沒有收到reply的話,就斷開鄰居關係.
active timer缺省配置3min,可以通過
timer active-timer
進行調整
關於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.