RIP

RIP

路由信息協議
RIP(Routing Information Protocol),路由信息協議(RIP)是内部網關協議IGP中最先得到廣泛使用的協議【1058】。[1]RIP是一種分布式的基于距離向量的路由選擇協議,是因特網的标準協議,其最大優點就是實現簡單,開銷較小。但RIP的缺點也較多。首先,其限制了網絡的規模,能使用的最大距離為15(16表示不可達)。其次路由器交換的信息是路由器的完整路由表,因而随着網絡規模的擴大,開銷也就增加。最後,“壞消息傳播得慢”,使更新過程的收斂時間過長。因此對于規模較大的網絡就應當使用OSPF協議。然而目前在規模較小的網絡中,使用RIP協議的仍占多數。
  • 中文名:路由信息協議
  • 英文名:RIP(Routing Information Protocol)
  • 類 型:内部網關協議IGP
  • 應 用:計算機行業

簡介

RIP:RoutinginformationProtocol

是應用較早、使用較普遍的内部網關協議(InteriorGatewayProtocol,簡稱IGP),适用于小型同類網絡,是典型的距離向量(distance-vector)協議。文檔見RFC1058、RFC1723。

RIP通過廣播UDP報文來交換路由信息,每30秒發送一次路由信息更新。RIP提供跳躍計數(hopcount)作為尺度來衡量路由距離,跳躍計數是一個包到達目标所必須經過的路由器的數目。如果到相同目标有二個不等速或不同帶寬的路由器,但跳躍計數相同,則RIP認為兩個路由是等距離的。RIP最多支持的跳數為15,即在源和目的網間所要經過的最多路由器的數目為15,跳數16表示不可達。

RIP報文格式

RIP使用特殊的報文來收集和共享至有關目的地的距離信息。下圖顯示了路由信息域中隻帶一個目的地的RIP報文。

RIP報文中至多可以出現25個AFI、互聯網絡地址和度量域。這樣允許使用一個RIP報文來更新一個路由器中的多個路由表項。包含多個路由表項的RIP報文隻是簡單地重複從AFI到度量域的結構,其中包括所有的零域。這個重複的結構附加在下圖結構的後面。具有兩個表項的RIP報文如圖所示。

地址域可以既包括發送者的地址也包括發送者路由表中的一系列IP地址。請求報文含有一個表項并包括請求者的地址。應答報文可以包括至多25個RIP路由表項。

整個的RIP報文大小限制是512B。因此,在更大的RIP網絡中,對整個路由表的更新請求需要傳送多個RIP報文。報文到達目的地時不提供順序化;一個路由表項不會分開在兩個RIP報文中。因此,任何RIP報文的内容都是完整的,即使它們可能僅僅是整個路由表的一個子集。當報文收到時接收節點可以任意處理更新,而不需對其進行順序化。

比如,一個RIP路由器的路由表中可以包括100項。與其他RIP路由器共享這些信息需要4個RIP報文,每個報文包括25項。如果一個接收節點(結點)首先收到了4号報文(包括從76至100的表項),它會首先簡單地更新路由表中的對應部分,這些報文之間沒有順序相關性。這樣使得RIP報文的轉發可以省去傳輸協議如TCP所特有的開銷。

1.命令域

命令域指出RIP報文是一個請求報文還是對請求的應答報文。兩種情形均使用相同的幀結構:

A.請求報文請求路由器發送整個或部分路由表。

B.應答報文包括和網絡中其他RIP節點共享的路由表項。應答報文可以是對請求的應答,也可以是主動的更新。

2.版本号域

版本号域包括生成RIP報文時所使用的版本。RIP是一個開放标準的路由協議,它會随時間而進行更新,這些更新反映在版本号中。雖然有許多像RIP一樣的路由協議出現,但RIP隻有兩個版本:版本1和版本2。

3.0域

嵌入在RIP報文中的多個0域證明了在RFC1058出現之前存在許多如RIP一樣的協議。大多數0域為的是為了向後兼容舊的如RIP一樣的協議,0域說明不支持它們所有的私有特性。

比如,兩個舊的機制traceon和traceoff。這些機制被RFC1058抛棄了,然而開放式标準RIP需要和支持這些機制的協議向後兼容。因此,RFC1058在報文中為其保留了空間,但卻要求這些空間恒置為0。當收到的報文中這些域不是0時就會被簡單地丢棄。

不是所有的0域都是為了向後兼容。至少有一個0域是為将來的使用而保留的。

4.AFI域

地址家族标識(AddressFamilyIdentifier,AFI)域指出了互聯網絡地址域中所出現的地址家族。雖然RFC1058是由IETF創建的,因此适用于網際協議(IP),但它的設計提供了和以前版本的兼容性。這意味着它必須提供大量互聯網絡地址構成或家族的路由信息的傳輸。因此,開放式标準RIP需要一種機制來決定其報文中所攜帶地址的類型。

5.互聯網絡地址域

4字節的互聯網絡地址域包含一個互聯網絡地址。這個地址可以是主機、網絡,甚至是一個缺省網關的地址碼。這個域内容如何變化的兩個例子如下:

A.在一個單表項請求報文中,這個域包括報文發送者的地址。

B.在一個多表項應答報文中,這些域将包括報文發送者路由表中存儲的IP地址。

6.度量标準域

RIP報文中的最後一個域是度量标準域,這個域包含報文的度量計數。這個值在經過路由器時被遞增。數量标準有效的範圍是在1~15之間。度量标準實際上可以遞增至16,但是這個值和無效路由對應。因此,16是度量标準域中的錯誤值,不在有效範圍内。

操作機制

使用距離-向量路由協議的路由器必須周期性地把路由表的内容發送給它的直接相鄰路由器。路由表中含有路由器與所知目的地之間的距離信息。這些目的地可以是主機、打印機或其他的網絡。

每個接收者給表加上一個距離向量,也就是,它自己的距離“值”,然後把改變了的表轉發給它的直接相鄰路由器。這個過程無方向地在相鄰者之間進行。下圖使用簡單的RIP互聯網絡顯示了直接相鄰者概念。

下圖中有4個路由器。網關路由器和其他每一台路由器互聯。它必須和這些路由器交換路由信息。路由器A、B和C隻有一條連接至網關。因此,它們隻能和網關直接交換信息。它們可以通過共享網關的信息來學習到其他主機的信息。這些信息與網關路由器共享。

更新路由表

RIP為每個目的地隻記錄一條路由的事實要求RIP積極地維護路由表的完整性。通過要求所有活躍的RIP路由器在固定時間間隔廣播其路由表内容至相鄰的RIP路由器來做到這一點,所有收到的更新自動代替已經存儲在路由表中的信息。

RIP依賴3個計時器來維護路由表:更新計時器路由超時計時器路由刷新計時器

更新計時器用于在節點一級初始化路由表更新。每個RIP節點隻使用一個更新計時器。相反的,路由超時計時器和路由刷新計時器為每一個路由維護一個。

如此看來,不同的超時和路由刷新計時器可以在每個路由表項中結合在一起。這些計時器一起能使RIP節點維護路由的完整性并且通過基于時間的觸發行為使網絡從故障中得到恢複。

1.初始化表更新

RIP路由器每隔30秒觸發一次表更新。更新計時器用于記錄時間量。一旦時間到,RIP節點就會産生一系列包含自身全部路由表的報文。

這些報文廣播到每一個相鄰節點。因此,每一個RIP路由器大約每隔30秒鐘應收到從每個相鄰RIP節點發來的更新。

注意在更大的基于RIP的自治系統中,這些周期性的更新會産生不能接受的流量。因此,一個節點一個節點地交錯進行更新更理想一些。RIP自動完成更新,每一次更新計時器會被複位,一個小的、任意的時間值加到時鐘上。

如果更新并沒有如所希望的一樣出現,說明互聯網絡中的某個地方發生了故障或錯誤。故障可能是簡單的如把包含更新内容的報文丢掉了。故障也可能是嚴重的如路由器故障,或者是介于這兩個極端之間的情況。顯然,采取合适的措施會因不同的故障而有很大區别。由于更新報文丢失而作廢一系列路由是不明智的(記住,RIP更新報文使用不可靠的傳輸協議以最小化開銷)。因此,當一個更新丢失時,不采取更正行為是合理的。為了幫助區别故障和錯誤的重要程度,RIP使用多個計時器來标識無效路由。

2.标識無效路由

有兩種方式使路由變為無效:

路由終止

路由器從其他路由器處學習到路由不可用

在任何一種情形下,RIP路由器需要改變路由表以反映給定路由已不可達。

一個路由如果在一個給定時間之内沒有收到更新就中止。比如,路由超時計時器通常設為180秒。當路由變為活躍或被更新時,這個時鐘被初始化。

180秒是大緻估計的時間,這個時間足以令一台路由器從它的相鄰路由器處收到6個路由表更新報文(假設它們每隔30秒發送一次路由更新),如果180秒消逝之後,RIP路由器沒收到關于那條路由的更新,RIP路由器就認為那個目的IP地址不再是可達的。因此,路由器就會把那條路由表項标記為無效。通過設置它的路由度量值為16來實現,并且要設置路由變化标志。這個信息可以通過周期性的路由表更新來與其相鄰路由器交流。

注意:對于RIP節點而言,16等于無窮。因此,簡單的設置耗費度量值為16能作廢一條路由。

接到路由新的無效狀态通知的相鄰節點使用此信息來更新它們自己的路由表。這是路由變為無效的第二種方式。

無效項在路由表中存在很短時間,路由器決定是否應該删除它。即使表項保持在路由表中,報文也不能發送到那個表項的目的地址:RIP不能把報文轉發至無效的目的地。

3.删除無效路由

一旦路由器認識到路由已無效,它會初始化一個秒計時器:路由刷新計時器。因此,在最後一次超時計時器初始化後180秒,路由刷新計時器被初始化。這個計時器通常設為90秒。

如果路由更新在270秒之後仍未收到(180秒超時加上90秒路由刷新時間),就從路由表中移去此路由(也就是刷新)。而為了路由刷新遞減計數的計時器稱為路由刷新計時器。這個計時器對于RIP從網絡故障中恢複的能力絕對必要。

主動和被動站點

注意到為了使RIP互聯網絡正常工作,網絡中的每一個網關必須參與進去這一點很重要。參與可以是主動參與也可以是被動參與,但所有的網關必須參與。主動節點是那些主動地進行共享路由信息的節點。它們從相鄰者處接收更新,并且轉發它們的路由表項拷貝至那些相鄰節點。

被動站點從相鄰者處接收更新,并且使用那些更新來維護它們的路由表。然而被動節點不主動地發布它們自己路由表項的拷貝。

被動維護路由表的能力在硬件路由器出現之前的日子裡是特别有用的特性,那時路由是一個運行在UNIX處理器下的後台程序,這樣會使UNIX主機上的路由開銷達到最小。

拓撲結構變化-收斂

到此為止,RIP的基本機制和特性已經以一種相當靜态的方式進行了讨論,然而通過考察這些機制如何相互作用來适應網絡的拓撲變化,可以獲得對RIP這些機制更深層的理解。

收斂

RIP互聯網絡中拓撲變化帶來的最重要可能是它會改變相鄰節點集,這種變化也會導緻下一次計算距離向量時得到不同的結果。因此,新的相鄰節點集必須得到彙聚,從不同的起始點彙聚到新拓撲結構的一緻看法,得到一緻性拓撲視圖的過程稱為收斂(convergence)。簡單地講,

收斂就是路由器獨立地獲得對網絡結構的共同看法。

下圖顯示了收斂過程;圖中畫出了兩條可能的從路由器A和網絡192.168.125到路由器D的路由。路由器D是一個網關路由器。到路由器D網絡的基本路由要通過路由器C。如果這條路由器出現故障,就需要一些時間使所有的路由器收斂至新的拓撲結構,這個拓撲中不再包括路由器C和D之間的鍊路。

路由器C和D之間的鍊路出現故障,它就不再可用,但是整個網絡卻需要相當一段時間才能知道這一事實。收斂的第一步是D認識到至C的鍊路發生故障。這裡假設路由器D的更新計時器先于C的計時器到期。因為這條鍊路本應傳輸從路由器D到路由器C的更新報文,所以C就不能收到D發送來的更新報文。C(A和B)仍沒有意識到C-D鍊路已經發生故障。互聯網絡中的所有路由器會繼續通過那條鍊路對尋址到路由器D網絡的報文進行轉發。收斂的第一階段顯示在下圖中。

一旦更新計時器超時,路由器D會試圖把對網絡拓撲變化的推測通知給它的相鄰路由器。直接相鄰者中隻有路由器B能直接聯系。收到更新報文,B會更新它的路由表,設置從B到D(通過C)的路由為無窮。這樣允許其通過B-D的鍊路與D進行通信。一旦B更新了自己的路由器,它會把關于拓撲結構的新變化廣播給它的其他相鄰者,A和C。

注意記住,RIP節點通過設置路由的度量為16來作廢一條路由—16對RIP而言相當于無窮。

A和C一收到更新報文并重新計算了網絡耗費之後,它們就能用B-D的鍊路來替換路由表中使用C-D鍊路的表項。以前所有的節點,包括B本身都不使用B-D的路由,因為它比C-D的鍊路耗費大。它的耗費度量為10,而C-D的耗費為1。現在,C-D鍊路發生了故障,B-D鍊路的耗費變為最低。因此,這條新的路由會代替相鄰節點路由表中超時的路由。

當所有的路由器認識到通過B是到D的最有效路由時,它們就收斂了,如下圖所示。

确定收斂完成之前所需的時間不容易。它因網絡不同而區别很大,這要依賴于許多因素,包括路由器和傳輸線路的健壯性、交通流量等等。

計值到無窮

在上面所舉的例子中,惟一的故障發生在連接C和D的鍊路上。路由器能夠收斂到新的拓撲結構,通過另一條路徑恢複對網關路由器D上網絡的訪問。如果D自身發生故障會造成更嚴重的結果。前面例子中的收斂過程開始于D能夠通知B發生了鍊路故障。如果是D,而不是到C的鍊路出現故障;B和C就都不能收到更新,通知它們拓撲發生了變化。

這種情況下收斂到新拓撲能導緻一種稱為計值到無窮的現象。當網絡變得完全不能訪問時,基于如下錯誤的想法:存在另一個路由器能訪問那個不可達的目的地,這種情形中的路由器會計值RIP度量到無窮。

為了從路由角度顯示這種災難性故障所帶來的内在危險性,重新考慮收斂圖中的拓撲結構。在下圖中,路由器D發生故障。

由于路由器D發生故障,位于網絡之中的所有主機從外部不能再被訪問。路由器C,在沒有收到路由器D的6個連續更新之後,會作廢掉C-D路由,并且廣播其為不可到達。這一點顯示在下圖中。路由器A和B對路由失效一無所知直到接到C的通知。

此時,A和C相信通過B能到達D。它們會重新計算自己的路由,包括這條更高耗費的迂回線路。下圖顯示了這一點。

這兩個路由器向它們的直接相鄰路由器B發送它們的下一個更新報文,路由器B,已經超時了自己至D的路由,相信通過A或C仍能訪問D。顯然,這樣是不可能的,因為A和C依賴于B剛作廢的鍊路。實質上,在A、B、C之間形成了一個環,這個環的形成是由下面的錯誤想法形成的,即A和C通過對方仍能到達路由器D。這是因為二者都有到B的連接,而B有一條到D的連接。

更新的每次疊代過程,耗費度量會因額外的下一跳而遞增到已經計算過的環上。這種形式的循環是由于時間延遲而引起的,而這種時間延遲是通過相鄰者發送更新報文的獨立收斂過程的特點。

理論上講,節點最終會認識到D是不可達的。然而,要想說出什麼時候才能收斂幾乎不可能。這個例子準确地反映了為什麼RIP對無窮的解釋設成如此小的值。一旦一個網絡不可訪問,通過更新來遞增量度到實用值時必須中止此過程。這意味着這個上界要設為多大,當計值到此上界時才能宣布一個目的地不可達。任何上界和一個路由網絡的直徑限制相對應。在RIP例子中,它的最初設計者覺得15跳對一個自治系統來說早已足夠大。比這更大的系統可以使用更複雜的路由協議。

RIP使用三種方法來避免計值到無窮循環問題:

 分割水平線

帶抑制逆轉位的分割水平線

觸發更新

1.分割水平線

可以很明顯地看出,上一節所描述的循環問題可以通過邏輯應用而得到防止,描述這個邏輯的術語為分割水平線。雖然RIP不支持分割水平線,但是理解了它有助于理解它所使用的稍複雜一些的變體—帶抑制逆轉位的分割水平線。

分割水平線的實質是,假設如果一條路由是從一個特定路由器處學習來的,RIP節點不廣播關于這個特定路由的更新到這個相鄰路由器。

路由器支持分割水平線邏輯。因此,路由器C(支持到路由器D的惟一路徑)不能收到從路由器A發來的關于網絡D的更新。這是因為A(甚至B)的這條路由信息依賴于C。這種分割循環的簡單方法是非常有效的,但卻有嚴重的功能限制:忽略掉廣播來的反向路由,每個節點必須等到至不可達目的地的路由超時。

在RIP中,隻有在6個更新消息沒有更新一個路由之後才發生超時。因此,一個被錯誤通知的節點把關于不可達目的地的信息錯誤地通知給其他節點的可能性有5種。就是這個延時可能造成無效路由信息形成環。由于這個不足,RIP支持一個稍加改動的版本稱為帶抑制逆轉的分割水平線。

2.帶抑制逆轉的分割水平線

簡單的分割水平線策略試圖通過中止把信息反傳給其發送者來控制環。雖然這種方法有效,但是有更有效的方法來中止循環。帶抑制逆轉的分割水平線采用了一種更主動的方法來中止環。

這種技術實際上是通過設置路由的度量為無窮來抑制環的形成。

路由器A能給路由器B提供關于如何到達路由器D的信息,但此路由的度量為16。因此,路由器B不能更新它的路由表,因為表中信息能更好地到達目的地。實際上,A廣播它不能到達D,這是真實的信息。這種廣播能立即有效地打破環。

一般來講,在距離-向量網絡中帶抑制逆轉的分割水平線比單純的分割水平線更安全。然而,二者都不是完美的。帶抑制逆轉的分割水平線在隻有兩個網關的拓撲中能有效地防止路由環。然而,在更大的互聯網絡中,RIP仍然會發生計值到無窮的問題。為了确保這樣的無限循環盡可能早地被發現,RIP支持觸發更新。

3.觸發更新

在三個網關連到一個公共網絡的情況下,仍然會形成路由環,這個環是由于網關之間彼此欺騙造成的。如下圖所示。在這個圖中有三個網關連到路由器D,它們是A、B和C。

在路由器D發生故障的情況下,路由器A可能相信路由器B仍可以訪問路由器D,路由器B可能相信路由器C仍可以訪問路由器D,而路由器C可能相信路由器A仍可以訪問路由器D,結果形成了一個無限路由環。

分割水平線邏輯在這種情況下因路由作廢前的延時而喪失作用。RIP使用一種不同的技術來加速收斂過程,這種技術稱為觸發更新。觸發更新是協議中的一個規則,它要求網關在改變一條路由度量時立即廣播一條更新消息,而不管30秒更新記時器還剩多少時間。

觸發更新通過把延遲減到最小從而克服了路由協議的脆弱性。

4.保持計時器

觸發更新不是萬能的!更新不會瞬時地傳遍整個網絡。因此,有可能(但不太可能)一個網關在從另一個網關處收到觸發更新之前恰好發送了一個周期性的更新報文。在這種情況下,無效路由會在整個網絡中被再次傳播。雖然,發生這種情況的可能性非常低,但是在一個RIP網絡之中還是有可能出現計值到無窮的循環(即使使用了觸發更新)。

對這種潛在問題的解決方法是使用保持計時器。保持計時器和觸發更新邏輯一同使用。實質上,一旦産生觸發更新報文,一個時鐘就會開始向下計數直到0。一旦計時器遞減到0,路由器就不再接收從任何相鄰路由器處發來的關于此路由或目的地的更新。

這種方式防止RIP路由器接收已經在一個配置時間内被作廢了的路由更新。也能防止路由器錯誤地認為另一個路由器有到達無效目的地的可靠路由。

固定度量

對跳數的讨論為考察RIP的下一個基本限制作了很好的鋪墊,這個限制就是:固定耗費度量。雖然耗費度量能由管理員配置,但它們本質上是靜态的。RIP不能實時地更新它們以适應網絡中遇到的變化。由管理員定義的耗費度量保持不變,直到手動更新。

這意味着RIP尤其不适合于高度動态的網絡,在這種環境中,路由必須實時計算以反映網絡條件的變化。舉個例子,假如網絡支持對時間敏感的應用,那麼使用能基于可測的傳輸線路延遲或者給定線路上存在的負載情況來計算路由的協議就是合理的想法。RIP使用固定度量,因此,它不能支持實時路由計算。

收斂慢

從人的角度來看,等待30秒進行一次更新不會感到不方便。然而,路由器和計算機以比人快得多的速度運行。不得不等上30秒進行一次更新會有很明顯的不利結果。

比僅僅等上30秒進行一次更新更具破壞性的卻是不得不等上180秒來作廢一條路由。而這隻是一台路由器開始進行收斂所需的時間量。依賴于互聯的路由器個數及它們的拓撲結構,可能需要重複更新才能完全收斂于新拓撲。RIP路由器收斂速度慢會創造許多機會使得無效路由仍被錯誤地作為有效路由進行廣播。顯然,這樣會降低網絡性能。

這本應充分地顯示RIP内在的收斂慢所帶來的危險性。

RIP-2協議簡介

路由器的關鍵作用是用于網絡的互連,每個路由器與兩個以上的實際網絡相連,負責在這些網絡之間轉發數據報。在讨論IP進行選路和對報文進行轉發時,我們總是假設路由器包含了正确的路由,而且路由器可以利用ICMP重定向機制來要求與之相連的主機更改路由(具體請看IP部分的相應章節)。但在實際情況下,IP進行選路之前必須先通過某種方法獲取正确的路由表。在小型的、變化緩慢的互連網絡中,管理者可以用手工方式來建立和更改路由表。而在大型的、迅速變化的環境下,人工更新的辦法慢得不能接受。這就需要自動更新路由表的方法,即所謂的動态路由協議,RIP是其中最簡單的一種。

RIP(routeinformationprotocol)協議是基于V-D算法(又稱為Bellman-Ford算法)的内部動态路由協議。V-D是Vector-Distance的縮寫,因此V-D算法又稱為距離向量算法。這種算法在ARPARNET早期就用于計算機網絡的路由的計算。RIP協議在目前已成為路由器、主機路由信息傳遞的标準之一,就因為這個原因,RIP協議被大多數IP路由器商業賣主廣泛使用。

先大緻解釋一下什麼是内部路由協議。由于曆史的原因,當前的INTERNET網被組成一系列的自治系統,各自治系統通過一個核心路由器連到主幹網上。而一個自治系統往往對應一個組織實體(比如一個公司或大學)内部的網絡與路由器集合。每個自治系統都有自己的路由技術,對不同的自治系統路由技術是不相同的。用于自治系統間接口上的單獨的協議稱為外部路由器協議,簡稱EGP(ExteriorGatewayProtocol)。用于自治系統内部的路由協議稱為内部路由器協議,簡稱IGP(InteriorGatewayProtocol)。内部路由器與外部路由器協議EGP不同,外部路由協議隻有一個,而内部路由器協議則是一族。各内部路由器協議的區别在于距離制式(distancemetric,即距離度量标準)不同,和路由刷新算法不同。RIP協議是最廣泛使用的IGP之一,著名的路徑刷新程序Routed便是根據RIP實現的。RIP協議被設計用于使用同種技術的中型網絡,因此适應于大多數的校園網和使用速率變化不是很大的連續線的地區性網絡。對于更複雜的環境,一般不使用RIP協議。

在實現時,RIP作為一個系統長駐進程(daemon)而存在于路由器中,它負責從網絡系統的其它路由器接收路由信息,從而對本地IP層路由表作動态的維護,保證IP層發送報文時選擇正确的路由,同時廣播本路由器的路由信息,通知相鄰路由器作相應的修改。RIP協議處于UDP協議的上層(如圖1.1),RIP所接收的路由信息都封裝在UDP的數據報中,RIP在520号端口上接收來自遠程路由器的路由修改信息,并對本地的路由表做相應的修改,同時通知其它路由器。通過這種方式,達到全局路由的有效。

距離向量算法

距離向量算法

距離向量算法的思想很簡單:所有參加RIP協議的路由器周期性地向外廣播路由刷新報文,主要内容是由很多路由項(entry)組成的路由刷新報文。對路由來說,最主要的内容是目的地址和下一跳地址(nexthop)。對動态路由協議來說,為了找到本協議概念中的最佳路由,還必須注意路由的開銷(metric)。所以路由項主要包括了目的地址、下一跳地址和路由開銷。其他的如路由标記(tag)等内容在講報文格式時,将具體講到。

在設計時,每個路由器的另外RIP管理了一個路由數據庫,該路由數據庫為系統中所有可能的信宿包含一個路由項,并為每個信宿保留如下信息:

目的地址:在算法的IP實現中,這指的是主機或網絡的IP地址。

下一跳地址:到信宿的路由中的第一個路由器。

接口:用于到下一跳物理網絡。

metric值:一個數,指明本路由器到信宿的開銷。

定時器:路由項最後一次被修改的時間。

路由标記:區分路由為内部路由協議的路由還是外部路由協議的路由的标記。

數據庫由與系統直接相連的實體的描述初始化,通過從相鄰路由器受到的報文修改維護。

路由器間交換的最重要的信息是修改報文,參加路由維護計劃的路由器發送當前存在于實體的描述路由數據庫的路由修改報文。僅通過相鄰路由器間交換路由信息是可以維護整個系統的最佳路由的,這在接下來的讨論中會逐步得到證明。

距離向量算法總是基于一個這樣的事實:路由數據庫中的路由已是目前通過報文交換而得到的最佳路由。同時,報文交換僅限于相鄰的實體間,也就是說,實體共享同一個網絡。當然,要定義路由是最佳的,就必須有衡量的辦法,這就用到前面所說的“metric”。RIP簡單的網絡中,通常用可行路由所經的路由器數簡單地計算metric值。在複雜的網絡中,metric一般代表該路由傳輸數據報的延遲或其它發送開銷。

令D(i,j)代表從實體i到實體j的最佳路由的metric值,d(i,j)代表從i直接到j的開銷,因為開銷是可加的,算法中最佳路由如此獲取表示:

D(i,i)=0,對所有的i

D(i,j)=MIN[d(i,j)+D(k,j),當i不等于k時

實體i從相鄰路由器k收到k到j的開銷的估計D(i,j),i将D(i,j)加上i到k的開銷估計d(i,j),i比較從所有相鄰路由器得到的數值,取得最小數,就得到了它到j的最佳路由。

具體地說,距離向量算法如下所述:

首先,路由器剛啟動時,對距離向量路由表(V-D路由表)進行初始化,該初始化路由表包含所有去往與本路由器直接相連的網絡的路徑。由于去往直接相連的網絡不經過中間路由器,所以初始化的V-D路由表中的各路由的距離均為0。

初始V-D路由表的一個示例。

然後,各路由器周期性地向外廣播其V-D路由表内容。與某路由器直接相連的(位于同一物理網絡)的路由器收到該路由表報文後,根據此報文對本地路由表進行刷新。刷新時,路由器逐項檢查來自相鄰路由器的V-D報文,遇到下述表目之一,須修改本地路由表(假設路由器Gi收到路由器Gj的V-D報文):

1)Gj列出的某表目Gi路由表中沒有。則Gi路由表中須增加相應表目,其“信宿”是Gj表目中的信宿,其“路徑”為“Gj”(即下一路由器為Gj)。

2)Gj去往某信宿的距離值比Gi去往該信宿的距離減1還小。

這種情況說明,Gi去往某信宿若經過Gj,距離會更短。則Gi修改本表目,其中“信宿”域不變,“距離”為Gj表目中距離加1,“路徑”為“Gj”。

3)Gi去往某信宿的路由經過Gj,而Gj去往該信宿的路由發生變化。

這裡分兩種情況:

a.Gj的V-D表不再包含去往某信宿的路由,則GI中相應路由須删除。

b.Gj的V-D表中去往某信宿的路由距離發生變化,則Gi中相應表目“距離”須修改,以Gj中的“距離”加1取代原來的距離。

上圖對以上描述給出直觀的說明,其中Gi、Gj為相鄰路由器。

(a)路由器Gi原路由表

(b)路由器Gj廣播的V-D報文

(c)路由器Gj刷新後的路由表

這裡要特别強調的是,V-D算法的路由刷新發生在相鄰路由器之間,所以V-D報文不一定以廣播方式發送出去,一種比較優化的思想是路由器直接向相鄰路由器發送V-D報文,不必采用廣播方式。

對過時路由的處理

根據V-D算法,一條路由隻在出現一條更優路由時才被刷新,否則,将繼續保留在路由數據庫中。這就忽略了這樣一種情況,即當某條路由突然崩潰,需要選擇一條新的路由來代替現存路由。但這靠V-D中的刷新算法來是不能得到解決的。

針對這種情況,在實際應用中,RIP規定,所有機器對其路由數據庫中的每一表目都設置一個時鐘,每增加一個新表目,就相應設置一個新時鐘。在收到V-D報文中假如有關于此路由的表目,則将時鐘清零,重新記時。假如在規定時間内,一直未收到該路由的刷新信息,時鐘期滿,則将該路由從路由數據庫中删除。

如果到指定的信宿有其它路由,則新的路由将從進一步收到的定時刷新報文中獲得,否則去往原信宿的路由不存在。

RIP協議的實現

RIP根據V-D算法的特點,将協議的參加者分為主動機和被動機兩種。主動機主動向外廣播路由刷新報文,被動機被動地接收路由刷新報文。一般情況下,主機作為被動機,路由器則既是主動機又是被動機,即在向外廣播路由刷新報文的同時,接受來自其它主動機的V-D報文,并進行路由刷新。

RIP規定,路由器每30秒向外廣播一個V-D報文,報文信息來自本地路由表。RIP的V-D報文中,其距離以驿站計:與信宿網絡直接相連的路由器規定為一個驿站,相隔一個路由器則為兩個驿站……以此類推。一條路由的距離為該路由(從信源機到信宿機)上的路由器數。為防止尋徑環長期存在,RIP規定,長度為16的路由為無限長路由,即不存在的路由。所以一條有效的路由長度不得超過15。正是這一規定限制了RIP的使用範圍,使RIP局限于中小型的網絡網點中。

為了保證路由的及時有效性,RIP采用觸發刷新技術和水平分割法。當本地路由表發生修改時,觸發廣播路由刷新報文,以迅速達到最新路由的廣播和全局路由的有效。水平分割法是指當路由器從某個網絡接口發送RIP路由刷新報文時,其中不包含從該接口獲取的路由信息。這是由于從某網絡接口獲取的路由信息對于該接口來說是無用信息,同時也解決了兩路由器間的慢收斂問題。

對于局域網的路由,RIP規定了路由的超時處理。主要是考慮到這樣一個情況,如果完全根據V-D算法,一條路由被刷新是因為出現一條路由開銷更小的路由,否則路由會在路由表中一直保存下去,即使該路由崩潰。這勢必造成一定的錯誤路由信息。為此,RIP規定,所有機器對其尋徑表中的每一條路由都設置一個時鐘,每增加一條新路由,相應設置一個新時鐘。在收到的V-D報文中假如有關于此路由的表目,則将時鐘清零,重新計時。假如在120秒内一直未收到該路由的刷新信息,則認為該路由崩潰,将其距離設為16,廣播該路由信息。如果再過60後仍未收到該路由的刷新信息,則将它從路由表中删除。如果某路由在距離被設為16後,在被删除前路由被刷新,亦将時鐘清零,重新計時,同時廣播被刷新的路由信息。至于路由被删除後是否有新的路由來代替被删除路由,取決于去往原路由所指信宿有無其它路由。假如有,相應路由器會廣播之。機器一旦收到其它路由的信息,自然會利用V-D算法建立一條新路由。否則,去往原信宿的路由不再存在。

RIP啟動和運行的整個過程如下所描述:

某路由器剛啟動RIP時,以廣播的形式向相鄰路由器發送請求報文,相鄰路由器的RIP收到請求報文後,響應請求,回發包含本地路由表信息的響應報文。RIP收到響應報文後,修改本地路由表的信息,同時以觸發修改的形式向相鄰路由器廣播本地路由修改信息。相鄰路由器收到觸發修改報文後,又向其各自的相鄰路由器發送觸發修改報文。在一連串的觸發修改廣播後,各路由器的路由都得到修改并保持最新信息。同時,RIP每30秒向相鄰路由器廣播本地路由表,各相鄰路由器的RIP在收到路由報文後,對本地路由進行的維護,在衆多路由中選擇一條最佳路由,并向各自的相鄰網廣播路由修改信息,使路由達到全局的有效。同時RIP采取一種超時機制對過時的路由進行超時處理,以保證路由的實時性和有效性。RIP作為内部路由器協議,正是通過這種報文交換的方式,提供路由器了解本自治系統内部個網絡路由信息的機制。

RIP-2支持版本1和版本2兩種版本的報文格式。在版本2中,RIP還提供了對子網的支持和提供認證報文形式。版本2的報文提供子網掩碼域,來提供對子網的支持;另外,當報文中的路由項地址域值為0xFFFF時,默認該路由項的剩餘部分為認證。RIP2對撥号網的支持則是參考需求RIP和觸發RIP的形式經修改而加入的新功能。這時,我們隻是要求在撥号網撥通之後對路由進行30秒一次的廣播,而在沒撥通時并不作如是要求,這是根據具體情況變通的結果。

報文格式的擴展

為了更好地處理撥号網上的路由刷新,參照RFC/1581/15822091/2092标準,對報文格式進行了的改進和擴充修改。對報文的修改主要是支持三種新的報文分組類型,在報文命令域數值标識:

9---------UpdateRequest修改請求

10-------UpdateResponse修改響應

11--------UpdateAcknowledge修改确認

其中Version域指的是各報文的版本号,而不是RIP的版本号,主要是基于向後兼容性考慮,這裡必須為1。

增添Flush域是對路由的及時性的一種考慮。如果對外發送響應報文是在收到請求後發送的,說明信宿有一個從不可達到可達的變化。如果該信宿中還保留有到其它路由器的路由信息,則這些路由信息很可能是過時的,從而需要進行更新。為了更快地更新路由器中的路由信息。在報文中增添一個Flush域,當路由器收到設置了Flush值的修改報文後,要将路由數據庫中的原有路由設為“臨時性路由”,進行超時處理。Flash域在設置時為1,在不設置時為0,取其他值則認為報文非法。

Sequencenumber是對報文的标記,用于識别各報文的确認報文,但隻對發送方有用。對發送方來說,Sequencenumber不能有相同值,修改報文的Sequencenumber一般采取以65535為一個輪回的遞增方式。而确認報文的Sequencenumber值取對應修改報文中的響應值。當路由器收到确認報文後,可根據Sequencenumber值來确認對應的修改報文已被收到。

RIP-2的對撥号網的支持

根據前面所說到的RIP協議不難看出,RIP進行報文刷新的基礎是網絡在刷新過程中一直保持連通,否則将有的路由器的報文一直不被收到,最終到達該路由器的路由将被其它路由器因超時而删除,而本路由器到其它路由器的路由亦将由于長期不被刷新而被删除。就這點來說,對于局域網和專線網來說,無疑是可行的;但對于撥号網絡(例如X.25網和ISDN網)來說,網絡在可以被撥通的情況下并非一直保持連接,自然亦不可能在不需要傳送數據時因為要發送RIP報文而每30秒撥通一次網絡。同時,路由信息亦可能因提供給撥号網上路由器的帶寬不夠而傳輸失敗。種種情況表明,前面所描述的RIP協議已遠遠不夠這種需求。

針對這種情況,我對RIP協議的實現作了進一步的改進和擴展,經過擴展和改進後,本文檔中描述的RIP協議已不是傳統意義上的RIP協議所能概括的了。

IPv6時代RIP路由協議的研究與實現

Internet的迅猛發展,使得網絡規模急劇膨脹,信息量直線上升,新應用層出不窮,原有的己發展20多年的網絡互連協議版本4——IPv4協議由于其先天的缺陷(地址空間不足、路由選擇效率不高、安全性差、服務質量不高以及缺乏對移動的有效支持等),己經不能從根本上适應網絡發展的需要。在這樣的背景下,下一代網絡标準——IPv6協議應運而生。本文探讨了RIPng用于IPv6網絡的RIP。在IPv6技術作為下一代互聯網IP層技術已成定局的情況下,深入研究未來網絡中路由技術的簡單,易用協議Ripng是一項走在信息技術學科前沿的課題之一,具有重要的經濟和社會意義。

一、RIP基本工作原理

路由信息協議RIP(RoutingInformationProtocol)是互聯網工程任務組(IETF)的内部網關協議工作組為IP網絡專門設計的路由協議,是一種基于距離矢量算法的内部網關動态路由協議。

每個運行RIP的路由器都維護着一張RIP路由表,該路由表的内容如圖所示。

其中,下一跳(nexthop)表示下一站數據包要到達的地址,度量(metric)代表把數據包從本路由器送達目的站所需的花費(cost)。RIP協議支持的最大有效度量為15,當一條路由的度量達到16後,那條路由就被認為無效,并且認為對應的目的地不可達。

标志位标志此路由最近是否發生變化,以備觸發更新時用到,年齡實際是個定時器,用于維護每條路由。在RIP中若哪條路由經過180秒後仍未被刷新,則該路由被認為不再有效,而把其度量置成16。

RIP路由器周期性地以多播形式向鄰居發送自己的路由表拷貝,即組,每個接收到該消息的路由器修改消息中路由的度量,在每條路由的度量上加上接收該路由消息接口的花費。然後,依據度量的大小來判斷路由的好壞,把度量最小的一條路由放入路由表,其判斷過程如下:

(1)查看路由表中是否已有到該目的的路由;(2)如果沒找到,則添加該路由;(3)如果找到,隻有在新度量更小時才更新路由,否則,忽略該路由。

圖2是RIP的工作流程。由此圖大家就可以很清楚的感受到RIP擁有如此簡單的工作流程。

如圖2所示,當在RouterA路由器的某接口上啟動RIP,接口以多播形式向鄰居發送路由表信息請求,請求鄰居給自己發送路由表信息;鄰居RouterB接收到路由表信息請求,發送整個路由表信息對請求進行響應;RouterA和RouterB在啟動後就開始周期發送并周期更新路由器;RouterA檢測到路由變化時,以多播形式向鄰居發送觸發更新,通知鄰居路由變化。

二、IPv6時代RIP的演變

衆所周知,如今的RIP已經從RIP-1發展到RIP-2,直到今天有變革意義的基于IPv6的Ripng!研究RIP的演變過程,剖析其各個發展階段的異同點對于優化、發展該協議具有重要的意義。

RIP-1隻在有子網劃分的網絡中支持子網,在該網絡外部由于子網掩碼很難得知,從而也就無法區分子網項和主機項,這樣就需要強制使用嚴格層次路由:外部路由器把分組傳遞到該網中距離最近的路由器,而不考慮目的站點屬于哪個子網。緊跟在嚴格層次路由之後是對連通性的要求,即這個網絡中的每一個路由器都應該知道如何去往任何一個子網!

基于上述缺點,RIP-2定義了一套有效的RIP改進方案,把RIP-1的格式中含有的一些“必須為零”的域,進行了重新定義。

基于安全考慮添加了新的AFI項(0xFFFF)用來傳送“驗證數據”;添加了“路由選擇域”、“下一跳域”,允許在單個路由器上運行多個RIP實例,指明發往目的IP地址的報文該發向哪裡,“下一跳域”屬性使得僅僅隻有一個運行别種協議的路由器通告所有的路由,并且使得運行RIP的路由器能夠找到正确運行别種協議的路由器作為下一跳以達到所有已知的别種協議的目的地址;添加了“子網掩碼”,達到可以支持VLSM(可變長子網掩碼)和CIDR(無類别域間路由)的目的,增強子網選擇路由的性能;添加了“路由标簽”,對外部路由進行标志。

RIP-2保留了RFC-1058中定義的“命令字”、“地址族标志符”、“IP地址”、“度量值”等域。

沒有最好隻有更好!在基于IPv4的RIP-1,RIP-2不斷完善的狀态下,IPv4雖然将一個成熟的互聯網架構支撐了20年之久,但人們早已形成共識,那就是IPv6最終取代IPv4是大勢所趨:128位地址格式所支持的IP地址數量可以徹底解決地址枯竭的問題;IPv4地址空間匮乏,路由選擇效率差,安全性差,移動性差,服務質量保證差。所有這些IPv4問題将毫不猶豫地要求IPv6協議解決,于是Ripng(v6版本)将要,也必然會成為寵兒。

Ripng雖然隸屬RIP家族,但畢竟它經曆了一場變革。與RIP-1,RIP-2在各個方面都有差别:使用端口不同;分組格式不同;最大報文長度不同;下一跳不同;編址考慮不同;特殊請求不同;安全考慮不同。

Ripng與RIP-2均有下一跳的說法,但是RIP-2的下一跳是固化在包格式之中的,也就是說下一跳無論添不添都給它留4個字節的空間。而Ripng把下一跳(nexthop)與路由表項分開,使用“度量域”中的值來判斷究竟是下一跳還是路由表項,若值是0xff則說明是下一跳!采用這種方法在無須添寫下一跳信息時,則可以省略不添,從而節省了寶貴空間。

在Ripng與RIP改頭換面的變化中,還有一個重大的變化!那就是在RIP-2包格式中有“子網掩碼域”,而在Ripng中用一個字節的前綴長度代替了“子網掩碼域”的功能,雖然這與IPv6協議的特點有着不可分割的關系,但是就其布局的合理性、優美性、簡化性也足可以使我們優先考慮使用它。

三、Ripng的實現

Ripng的實現分為六個功能模塊,即Ripng的啟動、Ripng的關閉、輸入處理、輸出處理、定時器處理及路由操作,如圖3所示。

Ripng啟動模塊:完成Ripng協議的初始化工作,建立通信套接口;Ripng關閉模塊:通知内核删除由RIPng進程導入的路由、釋放Ripng進程占用的内存空間;輸入處理模塊:把Ripng當作一個黑盒子來處理,鄰居所發送的數據包都是向該黑盒投放的信息,該模塊主要是對這些信息進行相應處理;輸出處理模塊:輸出處理主要包括周期更新和觸發更新的處理;定時器處理模塊:負責維護RIP中為支持尋路操作使用的三個定時器,同時還要負責處理觸發更新中為防止廣播風暴引入的定時機制;路由操作模塊:負責路由條目的處理和路由表的查找和添删。

Ripng作為解決未來IPv6網絡路由的首選,其簡單内部網關協議有強大的優勢和無限的潛力。一個優秀的路由技術,不僅僅是為數據傳輸找到一條高速的通道就行,還需要考慮所選路徑的傳輸容量和服務質量,即具有QoS能力的路由算法,并且還要分析全網負荷,以平衡網絡中各條通道的數據流量。在這些諸多因素考慮的基礎上研究基于IPv6的Ripng路由協議正是我們今後研究的熱點和重點。

RIP路由表

使用RIP報文中列出的項,RIP主機可以彼此之間交流路由信息。這些信息存儲在路由表中,路由表為每一個知道的、可達的目的地保留一項。每個目的地表項是到達那個目的地的最低開銷路由。

注意每個目的地的表項數可以随路由生産商的不同而變化。生産商可能選擇遵守規範,也可以對标準進行他們認為合适的“強化”。所以,用戶很可能會發現某個特殊商标的路由器為每一個網絡中的目的地存儲至多4條相同費用的路由。

每個路由表項包括以下各域:

目的IP地址域

距離-向量度量域

下一跳IP地址域

路由變化标志域

路由計時器域

注意雖然RFC1058是一個開放式标準,能支持大量互連網絡地址結構,然而它是由IETF設計用于Internet中自治系統内的協議。如此,使用這種形式RIP的自然是網絡互聯協議。

1.目的IP地址域

任何路由表中所包含的最重要信息是到所知目的地的IP地址。一旦一台RIP路由器收到一個數據報文,就會查找路由表中的目的IP地址以決定從哪裡轉發那個報文。

2.度量标準域

路由表中的度量域指出報文從起始點到特定目的地的總耗費。路由表中的度量是從路由器到特定目的地之間網絡鍊路的耗費總和。

3.下一跳IP地址域

下一跳IP地址域包括至目的地的網絡路徑上下一個路由器接口的IP地址。如果目的IP地址所在的網絡與路由器不直接相連時,路由器表中才出現此項。

4.路由變化标志域

路由變化标志域用于指出至目的IP地址的路由是否在最近發生了變化。這個域是重要的,因為RIP為每一個目的IP地址隻記錄一條路由。

5.路由計時器域

有兩個計時器與每條路由相聯系,一個是超時計時器,一個是路由刷新計時器。這些計時器一同工作來維護路由表中存儲的每條路由的有效性。路由表維護過程在12.2.2節中詳細描述。

相關詞條

相關搜索

其它詞條