標籤:最小值 jks 圖片 ebe 節點 就是 nim 資料量 紅色
一、準備知識
????????鏈路狀態路路由選擇演算法是一種全域式路由選擇演算法。在此演算法中,我們是假設所有網路拓撲和鏈路費用都是已知的(實踐中通常是通過讓每個結點向網路中所有其他節點廣播鏈路狀態分組來完成的)【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)