1. 程式人生 > >計算機網絡之鏈路狀態路由選擇算法(LS)

計算機網絡之鏈路狀態路由選擇算法(LS)

alt 一次 更新 最小 fff nag 狀態 imu n)

一、準備知識

????????鏈路狀態路路由選擇算法是一種全局式路由選擇算法。在此算法中,我們是假設所有網絡拓撲和鏈路費用都是已知的(實踐中通常是通過讓每個結點向網絡中所有其他節點廣播鏈路狀態分組來完成的)【OSPF協議】,通過節點廣播使所有結點具備了該網絡等同的完整視圖。獲得視圖之後,通過LS算法可以計算出從源節點到網絡任意結點的最低費用路徑。
.
????????我們下面給出的鏈路狀態路由選擇算法叫做Dijkstra算法,在了解此算法之前,我們首先明白以下幾個記號:

D(v):表示從源節點到目標結點v的最低費用路徑的費用
p(x):從源結點到目標節點v(最低費用路徑)的前一個結點(v的鄰居)
N‘:如果從源到v的最低費用路徑已知,那麽可以將v加入N‘集合中
w:可被加入到N‘ 中結點,且節點的費用最小

.

二、LS算法原理

????????我們通過圖來形象化描述路由選擇問題,G=(N,E)是一個有N個節點(代表路由器),E條邊(代表鏈路)的圖(代表網絡拓撲)。每條鏈路上的數字代表此鏈路的費用,如下圖所示:
技術分享圖片
????????????????????????????????圖1-1 網絡拓撲及鏈路費用圖
.

????????假設源節點為u,我們要找到從源節點到其他節點的最低消費路徑,其算法如下:

1、初始化:
   N‘ = {u}                                                                                      D(u)已知,將u加入到N‘集合中
   for all nodes for n                                                                    對於除u以外的所有節點n 
        if n is a neighbor of u                                                         如果n節點使u節點的相鄰節點
            then D(n) = c(u,n)                                                        那麽將n節點的D(n)為c(u,n)
        else D(n) = ∞                                                                      否則D(n)為無限大

2、循環階段
    find w not in N‘ such that D(w) is a minimum                      找出不在N‘中的w【最小的D(w)】
    add w to N‘                                                                             將w添加到N‘中
    update D(n) for each neighbor n of w and not in N‘           更新與w節點相鄰的節點n的D(n),且n不能在N‘中
        D(n) = min(  D(n) , D(w)+c(w,n)  )                                將D(n)置為D(n)和D(w)+c(w,n)中的最小值
    until N‘ = N                                                                             直到N‘ = N是結束循環

.

????????????????????????????????????????????????????????????????表1-1 圖1-1中網絡運行的狀態鏈路算法步驟
技術分享圖片
????????※ 初始化階段:找出所有與u相鄰的鄰居節點v,x,w,使D(v)=2,D(x)=1,D(w)=5;其余與u不相鄰的y,z節點,其鏈路費用D(y)=∞,D(z)=∞
????????※ 第一次循環:我們找出在初始化階段結束時具有最低費用的節點x,其費用為1,將節點x加入到N‘中,更新與x節點相鄰且不在N‘中的節點【其實就是v,w,y節點】的D(n)值,計算公式為D(n) = min( D(n) , D(x)+c(x,n) ),得D(v)=2,D(w)=4,D(y)=2

????????※ 第二次循環:我們找出在第一次循環階段結束時具有最低費用的節點v和y,我們先將y加入到N‘,並更新w,z節點的值,得D(w)=3,D(z)=4
........
????????直到所有節點都被加入到N‘中,循環結束,得到最低費用路徑:c(u,v)=2,,c(u,w)=3,c(u,x)=1,c(u,y)=2,c(u,z)=4
.

????????當LS算法終止時,對於每個目標節點,我們都可以從表中找到最短費用路徑的前一節點。而對於這個前一節點,又有最短路徑的前一節點。依次類推,我們可以得到源節點到任意目標節點最低消費路徑的完整路徑:
????????(u,v):u-v
????????(u,w):u-x-y-w
????????(u,x):u-x
????????(u,y):u-x-y
????????(u,z):u-x-y-u
????????所以,對於u節點路由,通過存儲到每個目的節點路由最低費用路徑的下一跳節點即可,於是u節點路由表生成如下:
技術分享圖片
.

三、LS震蕩現象

????????假設:1、鏈路費用是該鏈路所承載的數據量;2、初始路由是B逆時針發送1個單位給A,D順時針發送1個單位給A,C逆時針發送e個單位給B,B再給A
????????#註:紅色箭頭表示B、C、D路由器會有持續的1個單位,e個單位、1個單位的數據要發往路由器A
.

????????所以初始狀態將會如下圖3-1a)所示:
技術分享圖片
????????????????????????????????3-1a) 初始狀態網絡費用狀態
.

????????當再次運行LS算法之後,B、C、D路由都將會認為順時針路由費用最低,那麽將會產生如圖3-1b)所示的費用信息:
技術分享圖片
????????????????????????????????3-1b)再次執行LS算法後的網絡費用狀態
.

????????當記錄如圖3-1b)所示的費用信息之後,再次運行LS算法,B、C、D路由器又將會向逆時針方向交付分組,結果如圖3-1c)所示:
技術分享圖片
????????????????????????????????3-1c)第三次執行LS算法後的網絡費用狀態
.

????????再次運行LS算法之後,又變成順時針,如圖3-1d)所示:
技術分享圖片
????????????????????????????????3-1d)第三次執行LS算法後的網絡費用狀態
.

????????這樣的現象我們稱之為擁塞敏感的路由選擇震蕩現象,這種現象很可能會導致如下現象:
????????假設B路由現處於圖3-1b)狀態中,並將數據轉發給C,C轉發給D,但是此時D的路由表更新了,那麽此時鏈路狀態將會變成3-1c)的情況。D會將先前的數據又轉發給C,C又將轉發給B,如果此時路由表又開始更新的話,那麽將會變成圖3-1d)所示。如此一來,數據報將在B、C、D之間來回轉發並且到達不了A,當數據的TTL=0時,數據報將會被丟棄
.

????????針對這種現象,鏈路狀態算法通產會采取某種機制:讓每臺路由器發送鏈路通告的時間隨機化,以確保不是所有的路由器都同時運行LS算法(即每臺路由器執行LS算法的實際是不同的)

計算機網絡之鏈路狀態路由選擇算法(LS)