1. 程式人生 > >計算機網路(六) 閘道器--內部閘道器協議RIP和OSPF

計算機網路(六) 閘道器--內部閘道器協議RIP和OSPF

內部閘道器協議RIP

RIP(Routing Information Protocol)是內部閘道器協議IGP中最先得到廣泛使用的協議。RIP是一種分散式的基於距離向量的路由選擇協議

RIP協議要求網路中每一個路由器都要維護從它自己到其他每一個目的網路的距離記錄。

RIP協議將“距離”定義為從一路由器到直接連線的網路的距離定義為1。RIP協議的“距離”也稱為“跳數”。

RIP允許一條路徑最多隻能包含15個路由器。“距離”等於16時相當於不可達。可見RIP只適用於小型網際網路

RIP不能在兩個網路之間同時使用多條路由。RIP選擇一條具有最少路由器的路由(即最短路由),哪怕還存在另一條高速(低時延)但路由器較多的路由。

RIP協議的特點:

1)僅和相鄰路由器交換資訊。

2)路由器交換的資訊是當前本路由器所知道的全部資訊,即自己的路由表。

3)按固定的時間間隔交換路由資訊,例如每隔30秒。當網路拓撲發生變化時,路由器也及時向相鄰路由器通告拓撲變化後的路由資訊。

路由表中最主要的資訊:到某個網路的距離(即最短距離),以及應經過的下一跳地址。

路由表更新的原則是找出到每個目的網路的最短距離。這種更新演算法又稱為距離向量演算法

距離向量演算法:

對每一個相鄰路由器傳送過來的RIP報文,進行以下步驟:

1)對地址為X的相鄰路由器發來的RIP報文,先修改此報文中的所有專案:把“下一跳”欄位中的地址都改為X,並把所有的“距離”欄位的值加一(見後面的解釋1)。每一個專案都有三個關鍵資料,即:到目的網路N,距離是d,下一跳路由器是X。

2)對修改後的RIP報文中的每一個專案,進行以下步驟:

       若原來的路由表中沒有目的網路N,則把該專案新增到路由表中(見解釋2)。

       否則(即在路由表中有目的網路N,這時就再檢視下一跳路由器地址)

                 若下一跳路由器地址是X,則把收到的專案替換原路由表中的專案(見解釋3)。

                 否則(即這個專案是:到目的網路N,但下一跳路由器不是X)

                           若收到的專案中的距離d小於路由表中的距離,則進行更新(見解釋4)。

                           否則什麼也不做(見解釋5)。

3)若3分鐘還沒有收到相鄰路由器的更新路由表,則把此相鄰路由器記為不可達的路由器,即把距離置為16(表示不可達)。

4)返回i。

距離向量演算法的基礎是Bellman-Ford演算法(或Ford-Fulkerson演算法)。這種演算法要點:設X是結點A到B的最短路徑上的一個結點。若把路徑A->B拆成兩段路徑A->X和X->B,則每一段路徑A->X和X->B也都分別是結點A到X和結點X到B的最短路徑。

解釋1:這樣做是為了便於進行本路由表的更新。

解釋2:表明這是新的目的網路,應當加入到路由表中。

解釋3:為什麼要替換呢?因為這是最新的訊息,要以最新的訊息為準。

解釋4:例如,若路由表中已有專案“Net2,5,P”,就要更新為“Net2,4,X”。因為到網路Net2的距離變短了。

解釋5:若距離更大了,顯然不應更新。

路由表
目的網路 距離 下一跳路由器
Net1 3 R1
Net2 4 R2
Net3 1 直接交付

RIP2協議的報文格式

RIP協議使用運輸層的使用者資料報UDP進行傳送(使用UDP的埠520)

RIP的首部佔4個位元組,命令欄位指出報文的意義。“1”表示請求路由資訊,“2”表示對請求路由資訊的響應或未被請求而發出的路由更新報文。首部後面必為0是為了4位元組的對齊。

RIP2報文中德路由部分由若干個路由資訊組成。每個路由資訊需要用20個位元組。地址族識別符號(又稱為地址類別)欄位用來標誌所使用的地址協議。如採用IP地址就令這個欄位的值為2(原來考慮RIP也可用其他非TCP/IP協議的情況)。路由標記填入自治系統號ASN(Autonoumous System Number),這是考慮使RIP有可能收到本自治系統以外的路由選擇資訊。

RIP2還具有簡單的鑑別功能。若使用鑑別功能,則將原來寫入第一個路由資訊的位置用作鑑別。這時將地址族識別符號置為全1(即0xFFFF),而路由標記寫入鑑別型別,剩下的16位元組為鑑別數據。

一個RIP報文最多可包括25個路由,因而RIP報文的最大長度是4+25*20=504位元組。若超過,必須再用一個RIP報文來傳送。

問題:當網路出現故障時,要經過比較長的時間才能將此資訊傳送到所有的路由器。

當網路Net出了故障,與之唯一相連的路由器A將到該網Net的距離改為16(表示不可達)。但由於路由器按固定的時間間隔交換路由資訊(例如30秒),所以該路由器A可能要等一段時間後才將更新訊息傳送出去。然而其他的路由器B可能把自己的路由表傳送過來了,該路由器A誤以為可經過其他路由器B到達該網(該路由器A唯一與該網Net相連,其他路由器B通過該路由器A與該網相連,所以其他路由器B到該網Net的距離比16小),所以路由器A將到該網Net的距離調整為其他路由器B的距離加一,而其他路由器B把收到的該路由器A到該網Net的路由資訊用來更新自己通過該路由器A(即下一跳為路由器A)到該網Net的距離。由此這樣的更新一直繼續下去,直到路由器到該網的距離都增大到16。

特點:好訊息傳播得快,而壞訊息傳播得慢。(因為更新機制,壞訊息可能被好訊息覆蓋,而該好訊息會一直更新為壞訊息為止)

為了使壞訊息傳播得更快些,可以採用多種措施。例如,讓路由器記錄收到某特定路由資訊的介面,而不讓同一路由資訊再通過此介面向反方向傳送。

優點:實現簡單,開銷小

缺點:最大距離為15限制了網路的規模。其次,路由器之間交換的路由資訊是路由器中德完整路由表,因而隨著網路規模的擴大,開銷也就大。最後,“壞訊息傳播得慢”,使更新過程的收斂時間過長。

內部閘道器協議OSPF

開放最短路徑優先OSPF(Open Shortest Path First)。

“開放”表明OSPF協議不是受某一家廠商控制,而是公開發表的。“最短路徑優先”是因為使用了Dijkstra提出的最短路徑演算法SPF。

注意:OSPF只是一個協議的名字,它並不表示其他的路由選擇協議不是“最短路徑優先”。

主要特徵:使用分散式的鏈路狀態協議(link state protocol)

OSPF的三個要點和RIP的都不一樣:

1)向本自治系統中所有路由器傳送資訊。   這裡使用的方法是洪泛法(flooding),這就是路由器通過所有輸出埠向所有相鄰的路由器傳送資訊。而每一個相鄰路由器又再將此資訊發往其所有的相鄰路由器(但不再發送給剛剛發來資訊的路由器)。這樣,最終整個區域中所有的路由器都得到了這個資訊的副本。更具體的做法後面還要討論。我們應注意,RIP協議是僅僅向自己相鄰的幾個路由器傳送資訊。

2)傳送的資訊就是與本路由器相鄰的所有路由器的鏈路狀態,但這只是路由器所知道的部分資訊。所謂“鏈路狀態”就是說明本路由器都和哪些路由器相鄰,以及該鏈路地的“度量(metric)”。OSPF將這個“度量”用來表示費用、距離、時延、頻寬等等。這些都由網路管理人員來決定。有時為方便稱這個度量為“代價”

3)只有當鏈路狀態發生變化時,路由器才向所有路由器用洪泛法傳送此資訊。

由於各路由器之間頻繁地交換鏈路狀態資訊,因此所有的路由器最終都能建立一個鏈路狀態資料庫(link-state database),這個資料庫實際上就是全網的拓撲結構圖。這個拓撲結構圖在全網範圍內是一致的(這稱為鏈路狀態資料庫的同步)。

為了使OSPF能夠用於規模很大的網路,OSPF將一個自治系統再劃分為若干個更小的範圍叫做區域(area).每一個區域都有一個32位的區域識別符號(用點分十進位制表示)。一個區域內的路由器最好不超過20個。

劃分區域的好處就是利用洪泛法交換鏈路狀態資訊的範圍侷限於每一個區域而不是整個的自治系統,這就減少了整個網路上的通訊量。


為了使每一個區域能夠和本區域以外的區域進行通訊,OSPF使用層次結構的區域劃分。在上層的區域叫做主幹區域(backbone area)。主幹區域的識別符號規定為0.0.0.0。主幹區域的作用是用來連通其他在下層的區域。從其他區域來的資訊都由區域邊界路由器(area border router)進行概括。每一個區域至少應當有一個區域邊界路由器。在主幹區域內的路由器叫做主幹路由器(backbone router)。在主幹區域內還要有一個路由器專門和本自治系統外的其他自治系統交換路由資訊。這樣的路由器叫做自治系統邊界路由器

採用分層次劃分區域的方法雖然使交換資訊的種類增多了,同時也使OSPF協議更加複雜,但卻使每一個區域內部交換路由資訊的通訊量大大減小。

OSPF不用UDP而是直接用IP資料報傳送(其IP資料報首部的協議欄位值為89)。OSPF構成的資料報很短。減少路由資訊的通訊量,不必將長的資料報分片傳送。分片傳送的資料報只要丟失一個,就無法組裝成原來的資料報,而整個資料報就必須重傳。

OSPF特點:

1)允許管理員給每條路由指派不同的代價。例如,高頻寬的衛星鏈路對於非實時的業務可設定為較低的代價。OSPF對於不同型別的業務可計算出不同的路由。鏈路的代價可以是1至65535中的任何一個無量綱的數。

2)如果到同一個目的網路有多條相同代價的路徑,那麼可以將通訊量分配給這幾條路徑。這叫作多路徑的負載平衡(load balancing)。在代價相同的多條路徑上分配通訊量是通訊量工程中的簡單形式。RIP只能找出到某個網路的一條路徑。

3)所有在OSPF路由器之間交換的分組(例如鏈路狀態更新分組)都具有鑑別的功能,因而保證了僅在可信賴的路由器之間交換鏈路狀態資訊。

4)OSPF支援可變長度的子網劃分和無分類的編址CIDR。

5)由於網路中的鏈路狀態可能經常發生變化,因此OSPF讓每一個鏈路狀態都帶上一個32位的序號,序號越大狀態就越新。OSPF規定鏈路狀態序號增長的速率不得超過每5秒鐘1次。這樣全部序號空間在600年內不會產生重複號。

OSPF共有以下五種分組型別:

1)問候(Hello)分組,用來發現和維持鄰站的可達性。

2)資料庫描述(Database Description)分組,向鄰站給出自己的鏈路狀態資料庫中的所有鏈路狀態專案的摘要資訊。

3)鏈路狀態請求(Link State Request)分組,向對方請求傳送某些鏈路狀態專案的詳細資訊。

4)鏈路狀態更新(Link State Update)分組,用洪泛法對全網更新鏈路狀態。這種分組是最複雜的,也是OSPF協議最核心的部分。路由器使用這種分組將其鏈路狀態通知給鄰站。鏈路狀態更新分組共有5種不同的鏈路狀態

5)鏈路狀態確認(Link State Acknowledgment)分組,對鏈路更新分組的確認。

OSPF規定,每兩個相鄰路由器每隔10秒鐘要交換一次問候分組。這樣就能確定哪些鄰站是可達的。對相鄰路由器來說,“可達”是最基本的要求,因為只有可達鄰站的鏈路狀態資訊才存入鏈路狀態資料庫(路由表就是根據鏈路狀態資料庫計算出來的)。在正常情況下,網路中傳送的絕大多數OSPF分組都是問候分組。若有40秒鐘沒有收到某個相鄰路由器發來的問候分組,則可認為該相鄰路由器是不可達的,應立即修改鏈路狀態資料庫,並重新計算路由表。

所謂同步就是指不同路由器的鏈路狀態資料庫的內容是一樣的。兩個同步的路由器叫做“完全鄰接的”(fully adjacent)路由器。不是完全鄰接的路由器表明它們雖然在物理上是相鄰的,但其鏈路狀體資料庫並沒有到達一致。

問題:一個路由器剛開始工作時,它只能通過問候分組得知它有哪些相鄰的路由器在工作,以及將資料發往相鄰路由器所需的“代價”。如果所有的路由器都把自己的本地鏈路狀態資訊對全網進行廣播,那麼各路由器只要將這些鏈路狀態資訊綜合起來就可得出鏈路狀態資料庫。但這樣做開銷太大。

解決方法:OSPF讓每一個路由器用資料庫描述分組和相鄰路由器交換本資料庫中已有的鏈路狀態摘要資訊。摘要資訊主要就是指出有哪些路由器的鏈路狀態資訊(以及其序號)已經寫入了資料庫。經過與相鄰路由器交換資料庫描述分組後,路由器就使用鏈路狀態請求分組,向對方請求傳送自己所缺少的某些鏈路狀態專案的詳細資訊。通過一系列的這種分組交換,全網同步的鏈路資料庫就建立了。

OSPF的基本操作,說明了兩個路由器需要交換各種型別的分組。

\

在網路執行的過程中,只要一個路由器的鏈路狀態發生變化,該路由器就要使用鏈路狀態更新分組,用洪泛法向全網更新鏈路狀態。

OSPF使用的是可靠的洪泛法。路由器R用洪泛法發出鏈路狀態更新分組。一些小的箭頭表示更新分組。第一次先發給相鄰的三個路由器。這三個路由器將收到的分組再進行轉發時,要將其上游路由器除外。可靠的洪泛法是在收到更新分組後要傳送確認(收到重複的更新分組只需要傳送一次確認)。空心箭頭表示確認分組。

為了確保鏈路狀態資料庫與全網的狀態保持一致,OSPF還規定每隔一段時間,如30分鐘,要重新整理一次資料庫中的鏈路狀態。

由於一個路由器的鏈路狀態只涉及到與相鄰路由器的連通狀態,因而與整個網際網路的規模並無直接關係。因此當網際網路規模很大時,OSPF協議要比距離向量協議RIP好得多。

若N個路由器連線在一個乙太網上,則每個路由器要向其他(N-1)個路由器傳送鏈路狀態資訊,因而共有(N-1)^2個鏈路狀態要在這個乙太網上傳送。OSPF協議對這種多點接入的區域網採用了指定的路由器(designated router)的方法,使廣播的資訊量大大減少。指定的路由器代表該區域網上所有的鏈路向連線到該網路上的各路由器傳送狀態資訊。