簡介
RIP:Routing information Protocol
是套用較早、使用較普遍的內部網關協定(Interior Gateway Protocol,簡稱IGP),適用於小型同類網路,是典型的距離向量(distance-vector)協定。文檔見RFC1058、RFC1723。
RIP通過廣播UDP報文來交換路由信息,每30秒傳送一次路由信息更新。RIP提供跳躍計數(hop count)作為尺度來衡量路由距離,跳躍計數是一個包到達目標所必須經過的路由器的數目。如果到相同目標有二個不等速或不同頻寬的路由器,但跳躍計數相同,則RIP認為兩個路由是等距離的。RIP最多支持的跳數為15,即在源和目的網間所要經過的最多路由器的數目為15,跳數16表示不可達。
RIP報文格式
RIP使用特殊的報文來收集和共享至有關目的地的距離信息。下圖顯示了路由信息域中只帶一個目的地的RIP報文。
RIP報文中至多可以出現2 5個AFI、網際網路地址和度量域。這樣允許使用一個RIP報文來更新一個路由器中的多個路由表項。包含多個路由表項的R I P報文只是簡單地重複從AFI到度量域的結構,其中包括所有的零域。這個重複的結構附加在下圖結構的後面。具有兩個表項的R I P報文如圖所示。
地址域可以既包括傳送者的地址也包括傳送者路由表中的一系列IP位址。請求報文含有一個表項並包括請求者的地址。應答報文可以包括至多2 5個RIP路由表項。
整個的RIP報文大小限制是512B。因此,在更大的RIP網路中,對整個路由表的更新請求需要傳送多個RIP報文。報文到達目的地時不提供順序化;一個路由表項不會分開在兩個RIP報文中。因此,任何RIP報文的內容都是完整的,即使它們可能僅僅是整個路由表的一個子集。當報文收到時接收節點可以任意處理更新,而不需對其進行順序化。
比如,一個RIP路由器的路由表中可以包括100項。與其他RIP路由器共享這些信息需要4個RIP報文,每個報文包括25項。如果一個接收節點(結點)首先收到了4號報文(包括從76至100的表項),它會首先簡單地更新路由表中的對應部分,這些報文之間沒有順序相關性。這樣使得RIP報文的轉發可以省去傳輸協定如TCP所特有的開銷。
1. 命令域
命令域指出R I P報文是一個請求報文還是對請求的應答報文。兩種情形均使用相同的幀結構:
A.請求報文請求路由器傳送整個或部分路由表。
B.應答報文包括和網路中其他R I P節點共享的路由表項。應答報文可以是對請求的應答,也可以是主動的更新。
2. 版本號域
版本號域包括生成R I P報文時所使用的版本。R I P是一個開放標準的路由協定,它會隨時間而進行更新,這些更新反映在版本號中。雖然有許多像R I P一樣的路由協定出現,但R I P只有兩個版本:版本1和版本2。
3. 0域
嵌入在R I P報文中的多個0域證明了在RFC 1058出現之前存在許多如R I P一樣的協定。大多數0域為的是為了向後兼容舊的如R I P一樣的協定,0域說明不支持它們所有的私有特性。
比如,兩個舊的機制t r a c e o n和t r a c e o ff。這些機制被RFC 1058拋棄了,然而開放式標準R I P需要和支持這些機制的協定向後兼容。因此,RFC 1058在報文中為其保留了空間,但卻要求這些空間恆置為0。當收到的報文中這些域不是0時就會被簡單地丟棄。
不是所有的0域都是為了向後兼容。至少有一個0域是為將來的使用而保留的。
4. AFI域
地址家族標識(Address Family Identifier,A F I )域指出了網際網路地址域中所出現的地址家族。雖然RFC 1058是由I E T F創建的,因此適用於網際協定( I P ),但它的設計提供了和以前版本的兼容性。這意味著它必須提供大量網際網路地址構成或家族的路由信息的傳輸。因此,開放式標準R I P需要一種機制來決定其報文中所攜帶地址的類型。
5. 網際網路地址域
4位元組的網際網路地址域包含一個網際網路地址。這個地址可以是主機、網路,甚至是一個預設網關的地址碼。這個域內容如何變化的兩個例子如下:
A.在一個單表項請求報文中,這個域包括報文傳送者的地址。
B.在一個多表項應答報文中,這些域將包括報文傳送者路由表中存儲的I P地址。
6. 度量標準域
R I P報文中的最後一個域是度量標準域,這個域包含報文的度量計數。這個值在經過路由器時被遞增。數量標準有效的範圍是在1~1 5之間。度量標準實際上可以遞增至1 6,但是這個值和無效路由對應。因此, 1 6是度量標準域中的錯誤值,不在有效範圍內。
操作機制
使用距離-向量路由協定的路由器必須周期性地把路由表的內容傳送給它的直接相鄰路由器。路由表中含有路由器與所知目的地之間的距離信息。這些目的地可以是主機、印表機或其他的網路。每個接收者給表加上一個距離向量,也就是,它自己的距離“值”,然後把改變了的錶轉發給它的直接相鄰路由器。這個過程無方向地在相鄰者之間進行。下圖使用簡單的R I P網際網路顯示了直接相鄰者概念。
下圖中有4個路由器。網關路由器和其他每一台路由器互聯。它必須和這些路由器交換路由信息。路由器A、B和C只有一條連線至網關。因此,它們只能和網關直接交換信息。它們可以通過共享網關的信息來學習到其他主機的信息。這些信息與網關路由器共享。
更新路由表
R I P為每個目的地只記錄一條路由的事實要求R I P積極地維護路由表的完整性。通過要求所有活躍的R I P路由器在固定時間間隔廣播其路由表內容至相鄰的R I P路由器來做到這一點,所有收到的更新自動代替已經存儲在路由表中的信息。
R I P依賴3個計時器來維護路由表:
· 更新計時器
· 路由逾時計時器
· 路由刷新計時器
更新計時器用於在節點一級初始化路由表更新。每個R I P節點只使用一個更新計時器。相反的,路由逾時計時器和路由刷新計時器為每一個路由維護一個。
如此看來,不同的逾時和路由刷新計時器可以在每個路由表項中結合在一起。這些計時器一起能使R I P節點維護路由的完整性並且通過基於時間的觸發行為使網路從故障中得到恢復。
1. 初始化表更新
R I P路由器每隔3 0秒觸發一次表更新。更新計時器用於記錄時間量。一旦時間到,R I P節點就會產生一系列包含自身全部路由表的報文。
這些報文廣播到每一個相鄰節點。因此,每一個R I P路由器大約每隔3 0秒鐘應收到從每個相鄰R I P節點發來的更新。
注意在更大的基於R I P的自治系統中,這些周期性的更新會產生不能接受的流量。因此,一個節點一個節點地交錯進行更新更理想一些。R I P自動完成更新,每一次更新計時器會被復位,一個小的、任意的時間值加到時鐘上。
如果更新並沒有如所希望的一樣出現,說明網際網路中的某個地方發生了故障或錯誤。故障可能是簡單的如把包含更新內容的報文丟掉了。故障也可能是嚴重的如路由器故障,或者是介於這兩個極端之間的情況。顯然,採取合適的措施會因不同的故障而有很大區別。由於更新報文丟失而作廢一系列路由是不明智的(記住,R I P更新報文使用不可靠的傳輸協定以最小化開銷)。因此,當一個更新丟失時,不採取更正行為是合理的。為了幫助區別故障和錯誤的重要程度,R I P使用多個計時器來標識無效路由。
2. 標識無效路由
有兩種方式使路由變為無效:
. 路由終止
. 路由器從其他路由器處學習到路由不可用
在任何一種情形下, R I P路由器需要改變路由表以反映給定路由已不可達。
一個路由如果在一個給定時間之內沒有收到更新就中止。比如,路由逾時計時器通常設為1 8 0秒。當路由變為活躍或被更新時,這個時鐘被初始化。
1 8 0秒是大致估計的時間,這個時間足以令一台路由器從它的相鄰路由器處收到6個路由表更新報文(假設它們每隔3 0秒傳送一次路由更新),如果1 8 0秒消逝之後, R I P路由器沒收到關於那條路由的更新, R I P路由器就認為那個目的I P地址不再是可達的。因此,路由器就會把那條路由表項標記為無效。通過設定它的路由度量值為1 6來實現,並且要設定路由變化標誌。這個信息可以通過周期性的路由表更新來與其相鄰路由器交流。
注意:對於R I P節點而言,1 6等於無窮。因此,簡單的設定耗費度量值為1 6能作廢一條路由。
接到路由新的無效狀態通知的相鄰節點使用此信息來更新它們自己的路由表。這是路由變為無效的第二種方式。
無效項在路由表中存在很短時間,路由器決定是否應該刪除它。即使表項保持在路由表中,報文也不能傳送到那個表項的目的地址:R I P不能把報文轉發至無效的目的地。
3. 刪除無效路由
一旦路由器認識到路由已無效,它會初始化一個秒計時器:路由刷新計時器。因此,在最後一次逾時計時器初始化後1 8 0秒,路由刷新計時器被初始化。這個計時器通常設為9 0秒。
如果路由更新在2 7 0秒之後仍未收到( 1 8 0秒逾時加上9 0秒路由刷新時間),就從路由表中移去此路由(也就是刷新)。而為了路由刷新遞減計數的計時器稱為路由刷新計時器。這個計時器對於R I P從網路故障中恢復的能力絕對必要。
主動和被動站點
注意到為了使R I P網際網路正常工作,網路中的每一個網關必須參與進去這一點很重要。參與可以是主動參與也可以是被動參與,但所有的網關必須參與。主動節點是那些主動地進行共享路由信息的節點。它們從相鄰者處接收更新,並且轉發它們的路由表項拷貝至那些相鄰節點。
被動站點從相鄰者處接收更新,並且使用那些更新來維護它們的路由表。然而被動節點不主動地發布它們自己路由表項的拷貝。
被動維護路由表的能力在硬體路由器出現之前的日子裡是特別有用的特性,那時路由是一個運行在U N I X處理器下的後台程式,這樣會使U N I X主機上的路由開銷達到最小。
拓撲結構變化-收斂
到此為止,R I P的基本機制和特性已經以一種相當靜態的方式進行了討論,然而通過考察這些機制如何相互作用來適應網路的拓撲變化,可以獲得對R I P這些機制更深層的理解。
收斂
R I P網際網路中拓撲變化帶來的最重要可能是它會改變相鄰節點集,這種變化也會導致下一次計算距離向量時得到不同的結果。因此,新的相鄰節點集必須得到匯聚,從不同的起始點匯聚到新拓撲結構的一致看法,得到一致性拓撲視圖的過程稱為收斂( c o n v e rg e n c e )。簡單地講,
下圖顯示了收斂過程;圖中畫出了兩條可能的從路由器A和網路1 9 2 . 1 6 8 . 1 2 5到路由器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的鏈路耗費大。它的耗費度量為1 0,而C - D的耗費為1。現在, C - D鏈路發生了故障, B - D鏈路的耗費變為最低。因此,這條新的路由會代替相鄰節點路由表中逾時的路由。
當所有的路由器認識到通過B是到D的最有效路由時,它們就收斂了,如下圖所示。
確定收斂完成之前所需的時間不容易。它因網路不同而區別很大,這要依賴於許多因素,包括路由器和傳輸線路的健壯性、交通流量等等。
計值到無窮
在上面所舉的例子中,惟一的故障發生在連線C和D的鏈路上。路由器能夠收斂到新的拓撲結構,通過另一條路徑恢復對網關路由器D上網路的訪問。如果D自身發生故障會造成更嚴重的結果。前面例子中的收斂過程開始於D能夠通知B發生了鏈路故障。如果是D,而不是到C的鏈路出現故障;B和C就都不能收到更新,通知它們拓撲發生了變化。
這種情況下收斂到新拓撲能導致一種稱為計值到無窮的現象。當網路變得完全不能訪問時,基於如下錯誤的想法:存在另一個路由器能訪問那個不可達的目的地,這種情形中的路由器會計值R I P度量到無窮。
為了從路由角度顯示這種災難性故障所帶來的內在危險性,重新考慮收斂圖中的拓撲結構。在下圖中,路由器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是不可達的。然而,要想說出什麼時候才能收斂幾乎不可能。這個例子準確地反映了為什麼R I P對無窮的解釋設成如此小的值。一旦一個網路不可訪問,通過更新來遞增量度到實用值時必須中止此過程。這意味著這個上界要設為多大,當計值到此上界時才能宣布一個目的地不可達。任何上界和一個路由網路的直徑限制相對應。在R I P例子中,它的最初設計者覺得1 5跳對一個自治系統來說早已足夠大。比這更大的系統可以使用更複雜的路由協定。
R I P使用三種方法來避免計值到無窮循環問題:
· 分割水平線
· 帶抑制逆轉位的分割水平線
· 觸發更新
1. 分割水平線
可以很明顯地看出,上一節所描述的循環問題可以通過邏輯套用而得到防止,描述這個邏輯的術語為分割水平線。雖然R I P不支持分割水平線,但是理解了它有助於理解它所使用的稍複雜一些的變體—帶抑制逆轉位的分割水平線。
分割水平線的實質是,假設如果一條路由是從一個特定路由器處學習來的, R I P節點不廣播關於這個特定路由的更新到這個相鄰路由器。
路由器支持分割水平線邏輯。因此,路由器C (支持到路由器D的惟一路徑)不能收到從路由器A發來的關於網路D的更新。這是因為A (甚至B )的這條路由信息依賴於C。這種分割循環的簡單方法是非常有效的,但卻有嚴重的功能限制:忽略掉廣播來的反向路由,每個節點必須等到至不可達目的地的路由逾時。
在R I P中,只有在6個更新訊息沒有更新一個路由之後才發生逾時。因此,一個被錯誤通知的節點把關於不可達目的地的信息錯誤地通知給其他節點的可能性有5種。就是這個延時可能造成無效路由信息形成環。由於這個不足, R I P支持一個稍加改動的版本稱為帶抑制逆轉的分割水平線。
2. 帶抑制逆轉的分割水平線
簡單的分割水平線策略試圖通過中止把信息反傳給其傳送者來控制環。雖然這種方法有效,但是有更有效的方法來中止循環。帶抑制逆轉的分割水平線採用了一種更主動的方法來中止環。
這種技術實際上是通過設定路由的度量為無窮來抑制環的形成。
路由器A能給路由器B提供關於如何到達路由器D的信息,但此路由的度量為1 6。因此,路由器B不能更新它的路由表,因為表中信息能更好地到達目的地。實際上,A廣播它不能到達D,這是真實的信息。這種廣播能立即有效地打破環。
一般來講,在距離-向量網路中帶抑制逆轉的分割水平線比單純的分割水平線更安全。然而,二者都不是完美的。帶抑制逆轉的分割水平線在只有兩個網關的拓撲中能有效地防止路由環。然而,在更大的網際網路中, R I P仍然會發生計值到無窮的問題。為了確保這樣的無限循環儘可能早地被發現,R I P支持觸發更新。
3. 觸發更新
在三個網關連到一個公共網路的情況下,仍然會形成路由環,這個環是由於網關之間彼此欺騙造成的。如下圖所示。在這個圖中有三個網關連到路由器D,它們是A、B和C。
在路由器D發生故障的情況下,路由器A可能相信路由器B仍可以訪問路由器D,路由器B可能相信路由器C仍可以訪問路由器D,而路由器C可能相信路由器A仍可以訪問路由器D,結果形成了一個無限路由環。
分割水平線邏輯在這種情況下因路由作廢前的延時而喪失作用。R I P使用一種不同的技術來加速收斂過程,這種技術稱為觸發更新。觸發更新是協定中的一個規則,它要求網關在改變一條路由度量時立即廣播一條更新訊息,而不管3 0秒更新記時器還剩多少時間。
觸發更新通過把延遲減到最小從而克服了路由協定的脆弱性。
4. 保持計時器
觸發更新不是萬能的!更新不會瞬時地傳遍整個網路。因此,有可能(但不太可能)一個網關在從另一個網關處收到觸發更新之前恰好傳送了一個周期性的更新報文。在這種情況下,無效路由會在整個網路中被再次傳播。雖然,發生這種情況的可能性非常低,但是在一個R I P網路之中還是有可能出現計值到無窮的循環(即使使用了觸發更新)。
對這種潛在問題的解決方法是使用保持計時器。保持計時器和觸發更新邏輯一同使用。實質上,一旦產生觸發更新報文,一個時鐘就會開始向下計數直到0。一旦計時器遞減到0,路由器就不再接收從任何相鄰路由器處發來的關於此路由或目的地的更新。
這種方式防止R I P路由器接收已經在一個配置時間內被作廢了的路由更新。也能防止路由器錯誤地認為另一個路由器有到達無效目的地的可靠路由。
固定度量
對跳數的討論為考察R I P的下一個基本限制作了很好的鋪墊,這個限制就是:固定耗費度量。雖然耗費度量能由管理員配置,但它們本質上是靜態的。R I P不能實時地更新它們以適應網路中遇到的變化。由管理員定義的耗費度量保持不變,直到手動更新。
這意味著R I P尤其不適合於高度動態的網路,在這種環境中,路由必須實時計算以反映網路條件的變化。舉個例子,假如網路支持對時間敏感的套用,那么使用能基於可測的傳輸線路延遲或者給定線路上存在的負載情況來計算路由的協定就是合理的想法。R I P使用固定度量,因此,它不能支持實時路由計算。
收斂慢
從人的角度來看,等待3 0秒進行一次更新不會感到不方便。然而,路由器和計算機以比人快得多的速度運行。不得不等上3 0秒進行一次更新會有很明顯的不利結果。
比僅僅等上3 0秒進行一次更新更具破壞性的卻是不得不等上1 8 0秒來作廢一條路由。而這只是一台路由器開始進行收斂所需的時間量。依賴於互聯的路由器個數及它們的拓撲結構,可能需要重複更新才能完全收斂於新拓撲。R I P路由器收斂速度慢會創造許多機會使得無效路由仍被錯誤地作為有效路由進行廣播。顯然,這樣會降低網路性能。
這本應充分地顯示R I P內在的收斂慢所帶來的危險性。
RIP-2協定簡介
路由器的關鍵作用是用於網路的互連,每個路由器與兩個以上的實際網路相連,負責在這些網路之間轉發數據報。在討論 IP 進行選路和對報文進行轉發時,我們總是假設路由器包含了正確的路由,而且路由器可以利用 ICMP 重定向機制來要求與之相連的主機更改路由(具體請看 IP 部分的相應章節)。但在實際情況下 , IP 進行選路之前必須先通過某種方法獲取正確的路由表。在小型的、變化緩慢的互連網路中,管理者可以用手工方式來建立和更改路由表。而在大型的、迅速變化的環境下,人工更新的辦法慢得不能接受。這就需要自動更新路由表的方法,即所謂的動態路由協定, RIP 是其中最簡單的一種。
RIP(route information protocol)協定是基於V-D算法(又稱為Bellman-Ford算法)的內部動態路由協定。V-D是Vector-Distance的縮寫,因此V-D算法又稱為距離向量算法。這種算法在ARPARNET早期就用於計算機網路的路由的計算。RIP協定在目前已成為路由器、主機路由信息傳遞的標準之一,就因為這個原因,RIP協定被大多數IP路由器商業賣主廣泛使用。
先大致解釋一下什麼是內部路由協定。由於歷史的原因,當前的INTERNET網被組成一系列的自治系統,各自治系統通過一個核心路由器連到主幹網上。而一個自治系統往往對應一個組織實體(比如一個公司或大學)內部的網路與路由器集合。每個自治系統都有自己的路由技術,對不同的自治系統路由技術是不相同的。用於自治系統間接口上的單獨的協定稱為外部路由器協定,簡稱EGP(Exterior Gateway Protocol)。用於自治系統內部的路由協定稱為內部路由器協定,簡稱IGP(Interior Gateway Protocol)。 內部路由器與外部路由器協定EGP不同,外部路由協定只有一個,而內部路由器協定則是一族。各內部路由器協定的區別在於距離制式(distance metric, 即距離度量標準)不同,和路由刷新算法不同。RIP協定是最廣泛使用的IGP之一,著名的路徑刷新程式Routed便是根據RIP 實現的。RIP協定被設計用於使用同種技術的中型網路,因此適應於大多數的校園網和使用速率變化不是很大的連續線的地區性網路。對於更複雜的環境,一般不使用RIP協定。
在實現時,RIP作為一個系統長駐進程(daemon)而存在於路由器中,它負責從網路系統的其它路由器接收路由信息,從而對本地IP層路由表作動態的維護,保證IP層傳送報文時選擇正確的路由,同時廣播本路由器的路由信息,通知相鄰路由器作相應的修改。RIP協定處於UDP協定的上層(如圖1.1),RIP所接收的路由信息都封裝在UDP的數據報中,RIP 在520號連線埠上接收來自遠程路由器的路由修改信息,並對本地的路由表做相應的修改,同時通知其它路由器。通過這種方式,達到全局路由的有效。
距離向量算法
距離向量算法的思想很簡單:所有參加RIP協定的路由器周期性地向外廣播路由刷新報文,主要內容是由很多路由項(entry)組成的路由刷新報文。對路由來說,最主要的內容是目的地址和下一跳地址(next hop)。對動態路由協定來說,為了找到本協定概念中的最佳路由,還必須注意路由的開銷(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---------Update Request 修改請求
10------- Update Response 修改回響
11--------Update Acknowledge 修改確認
其中Version域指的是各報文的版本號,而不是RIP的版本號,主要是基於向後兼容性考慮,這裡必須為 1。
增添Flush域是對路由的及時性的一種考慮。如果對外傳送回響報文是在收到請求後傳送的,說明信宿有一個從不可達到可達的變化。如果該信宿中還保留有到其它路由器的路由信息,則這些路由信息很可能是過時的,從而需要進行更新。為了更快地更新路由器中的路由信息。在報文中增添一個Flush域,當路由器收到設定了Flush值的修改報文後,要將路由資料庫中的原有路由設為“臨時性路由”,進行逾時處理。Flash域在設定時為 1 ,在不設定時為 0 ,取其他值則認為報文非法。
Sequence number是對報文的標記,用於識別各報文的確認報文,但只對傳送方有用。對傳送方來說,Sequence number不能有相同值,修改報文的Sequence number一般採取以65535為一個輪迴的遞增方式。而確認報文的Sequence number值取對應修改報文中的回響值。當路由器收到確認報文後,可根據Sequence number 值來確認對應的修改報文已被收到。
RIP-2的對撥號網的支持
根據前面所說到的RIP協定不難看出,RIP進行報文刷新的基礎是網路在刷新過程中一直保持連通,否則將有的路由器的報文一直不被收到,最終到達該路由器的路由將被其它路由器因逾時而刪除,而本路由器到其它路由器的路由亦將由於長期不被刷新而被刪除。就這點來說,對於區域網路和專線網來說,無疑是可行的;但對於撥號網路(例如X.25網和ISDN網)來說,網路在可以被撥通的情況下並非一直保持連線,自然亦不可能在不需要傳送數據時因為要傳送RIP報文而每30秒撥通一次網路。同時,路由信息亦可能因提供給撥號網上路由器的頻寬不夠而傳輸失敗。種種情況表明,前面所描述的RIP協定已遠遠不夠這種需求。
針對這種情況,我對RIP協定的實現作了進一步的改進和擴展,經過擴展和改進後,本文檔中描述的RIP協定已不是傳統意義上的RIP協定所能概括的了。
傳統RIP協定--RIP協定的報文格式
RIP協定是來允許路由器(或相關產品)通過基於IP網路交換有關計算路由信息的一種距離向量協定。RIP傳送路由信息給信宿,信宿可以是路由器和主機,當信宿是主機時,主機必須有多個接口。
·RIP作為一個系統常駐進程(daemon)存在,它負責從網路信筒中其它路由器接收路由更改信息,從而對本地IP層的路由進行動態地維護,保證IP層傳送報文時選擇正確的路由。RIP協定處於UDP協定的上層,RIP所接收的路由修改信息都封裝在UDP的數據報中,RIP在520號連線埠上接收來自遠程路由器的路由修改信息,並對本地的路由表做相應的修改,同時通知其它的路由器,通過這種方式,達到全局路由的的有效。
RIP協定的報文格式
本協定在實現過程中支持RIP Version1和RIP Version2兩種格式的報文。RIP數據報一共有五類,由Command 域確定數據報的類型,如圖4.1所示。
其中第1、2類報文是最重要的一對,後者是從傳送該報文的路由器的尋徑表中取出的V-D報文。各種RIP報文的格式相同,包括一個固定的報頭和一個可選的V-D表。其格式如圖4.2和圖4.3所示,圖2是RIP Version 1的報文格式,圖3是RIP Version 2的報文格式。
RIP Version1 的報文格式:
RIP Version2的格式:
其中:
·Metric:到下一路由器的權值。
·Address Family Identifier:指示路由項中的地址種類,這裡應為2。
·Ip Address:地址域,包括網路類和IP 地址在內,RIP報文中對每一網路共有14個位元組的地址空間。
·RIP Version 2 報文的特有的一些屬性:
·Route Tag:外部路由標記,是表示路由是保留還是重播的屬性。它提供一種從外部路由中分離內部路由的方法,用於傳播從外部路由器協定(EGP)獲得的路由信息。
· Subnet mask:子網掩碼,套用於IP位址產生非主機部分地址,為0時表示不包括子網掩碼部分,使得RIP能夠適應更多的環境。
· Next Hop:下一驛站,可以對使用多路由協定的網路環境下的路由進行最佳化。
· 認證,確認合法的信息包,目前支持純文本的口令形式。
認證是每一報文的功能,因為在報文頭中只提供兩位元組的空間,而任一合理的認證表均要求多餘兩位元組的空間,故RIP Version 2認證表使用一個完整的RIP路由項。如果在報文中最初路由項Address Family Identifier域的值是0xFFFF,路由項的剩餘部分就是認證。包含認證RIP報文路由項採用如下格式:
·組播,為了降低那些沒有監聽RIP Version 2 報文的主機的不必要的開銷,IP多目傳送地址被用於定時廣播。IP 多目地址是224.0.0.9。為了支持向後兼容,多目地址的使用是可配置的。如果能夠多目傳送,則它將被支持它所有接口使用。
·管理信息庫,允許在路由軟體內部對RIP操作進行監聽和控制。
如果RIP-2路由器接收RIP-1的請求,它將以RIP-1的回響方式回響。如果路由器被配置成只傳送RIP-2報文,它將不回響RIP-1的請求。
關於一些路由協定的漏洞
此文章討論了有關對網路底層協定的攻擊和防止攻擊的方法,特別是關於路由和路由協定的漏洞,如Routing Information Protocol (RIP,路由信息協定), Border Gateway Protocol (邊緣網關協定), Open Shortest Path First (OSPF,開放最短路徑優先協定)等。
路由器在每個網路中起到關鍵的作用,如果一路由器被破壞或者一路由被成功的欺騙,網路的完整性將受到嚴重的破壞,如果使用路由的主機沒有使用加密通信那就更為嚴重,因為這樣的主機被控制的話,將存在著中間人(man-in-the-middle)攻擊,拒絕服務攻擊,數據丟失,網路整體性破壞,和信息被嗅探等攻擊。
路由是一個巨大又複雜的話題,所以本人只是在此提到一部分知識,而且水平的關係,請大家多多指教。
===============================================================================
關於一些很普遍的路由器安全問題
多種路由器存在各種眾所周知的安全問題,一些網路底層設備提供商如Cisco, Livingston, Bay等的普通安全問題大家可以參考下面地址,其中收集了不少安全漏洞:
http://www.antionline.com/cgi-bin/anticode/anticode.pl?dir=router-exploits
上面地址所收集的漏洞大部分無關於路由協定級的攻擊,而是一些由於錯誤配置,IP信息包錯誤處理,SNMP存在默認的communit name string,薄弱密碼或者加密算法不夠強壯而造成。上面的一些攻擊一般一個標準的NIDS都能夠探測出來。這些類型的攻擊對網路底層有一定的削弱性並可以組合一些高極別的協定進行攻擊。
正確的配置管理可以處理不少普通的漏洞,如你必須處理一些標準的規程:不使用SNMP(或者選擇強壯的密碼),保持補丁程式是最新的,正確處理訪問控制列表,出入過濾,防火牆,加密管理通道和密碼,路由過濾和使用MD5認證。當然在採用這些規程之前你必須知道這些安全規則的相關的含義和所影響到的服務。
================================================================================
近來有關的一些低部構造防衛檢測系統的開發
近來的在網路防護開發項目中比較不錯的是一個IDS叫JiNao,你可以在下面的地址找到相關的內容:http://www.anr.mcnc.org/projects/JiNao/JiNao.html. JiNao是由DARPA發起的,並現在成為一個合作研究項目由MCNC和北卡羅萊納州大學共同開發。JiNao在FreeBSD和Linux上運行的是線上模式(使用divert sockets),在Solaris運行在離線模式,並在3個網路上測試-MCNC,NCSU和由PC(作業系統做路由)和商業路由器組合的AF/Rome 實驗室。測試結果顯示了可以成功的防止多種類型的網路底層攻擊並能很好的高精度的探測這些攻擊。
當前,JiNao看起來在研究關於Open Shortest Path First (OSPF,開放最短路徑優先)協定,並且最終JiNao會延伸到各種協定。JiNao指出,防衛攻擊和入侵探測將會集成在網路管理內容中,所以JINao現在正趨向於網路防火牆,入侵探測系統和網路管理系統組合一體。
還有一個工具可以很好的分析高級的協定,如Agilent Advisor
(http://onenetworks.comms.agilent.com/)的網路分析工具,它能很好的支持多種路由協定並能定製過濾器來探測各種不正常的行為。
================================================================================
一些工作於路由協定的工具
-------------------------------
Linux divert sockets描述到:\"Divert socket能夠在末端主機也能在路由器上進行IP信息包捕獲和注入,信息包的捕獲和插入發生在IP層上,捕獲的信息包在用戶空間轉向到套接口中,因此這些信息包將不會達到它們的最終目的地,除非用戶空間套接口重插入它們。這樣在信息包捕獲和重新插入之間可以在系統系統核心之外允許各種不同的操作(如路由和防火牆).\"(http://www.anr.mcnc.org/~divert/).簡單的說divert socket就是由user space(用戶空間)的程式來處理kernel(核心)中的IP packet(IP信息包),這個divert socket最早套用與FreeBSD系統中,如NAT就是套用了divert socket。這樣使開發程式很容易,因為在用戶層,而處理IP packet(IP信息包)的效率也比較高,因為是直接處理kernel(核心)中的IP packet(IP信息包)。
大家可以在下面的地址中找到相關的Divert socket:http://www.anr.mcnc.org/~divert/. Divert socket就象上面說最早實現於FreeBSD中,現在已經移植到Linux中並作為JiNao IDS項目的一部分採用。
------------------------------
另一個叫nemesis Packet Injection suite,是一個比較強大的網路和安全工具,由Obecian開發,你可以在下面的地址獲得:http://www.packetninja.net.最新的nemesis-1.1發行在2000年6月24號。Nemesis是一個\"命令行式的UNIX網路信息包插入套件\",並是一個很好的測試防火牆,入侵探測系統,路由器和其他網路環境的工具。它可以被攻擊者使用和授權滲透探測者在主機和網路級的網路安全環境檢測。其中這個站點還有一個演化的Nemesis叫intravenous,發行於11/30/00. Intravenous看起來承載了Nemesis所有基本功能,其中不同的是增加了人工智慧引擎的內容。更多有關Intravenous的信息你可以在packetninja.net站點裡找到.
----------------------------
IRPAS,Internetwork Routing Protocol Attack Suite,由FX所寫,可以在下面的站點找到http://www.phenoelit.de/irpas/.IRPAS包含了各種可工作於Cisco路由設備的協定層的命令行工具,包括如下這些命令: cdp--可傳送Cisco router Discovery Protocol (CDP CISCO路由發現協定)訊息;
igrp是能插入Interior Gateway Routing Protocol (IGRP 內部網關路由協定)訊息;IRDP用來傳送ICMP Router Discovery Protocol (ICMP路由發現協定)訊息;
irdresponder--可使用精心製作的信息包來回響IRDP請求;
ass--Autonomous system Scanner(自主系統掃描器,現在可下載的版本只支持IGRP),這裡解釋下Autonomous system,即一般所說的AS,簡單的說是一組內部路由器,使用共同協定交流內部網路的信息,更直接的說法就是這些路由器自己自主,交流信息。與之相反的是我們經常知道的外部路由器如一般的電信節點處的路由器。典型的AS使用單一的路由協定在它的邊界產生和傳播路由信息。ass就類似於TCP連線埠掃描器一樣,只不過其是針對自主系統的。使用ass掃描的話,如果自主系統應答,將返迴路由進程中的所有路由信息。IRPAS 的網站也包含一條關於Generic Routing Encapsulation(GRE 一般路由封裝) 漏洞的文檔,其中這個Generic Routing Encapsulation (GRE 一般路由封裝)漏洞允許外部攻擊者繞過NAT和破壞一通過VPN的內部RFC1918網路。這份文檔大家可以在下面的地址獲得:http://www.phenoelit.de/irpas/gre.html,其中在其他章節還包含了更多的信息和通過irpas的可能攻擊策略.
irpas的開發者FX,傳送了由ass新版本2.14(還沒有發布)掃描的AS樣本和igrp怎樣利用ass的信息(AS #10和其他數據)來插入一欺騙的路由給222.222.222.0/24。雖然IGRP協定目前不是很多使用,但這個例子卻是相當的不錯。下面是FX測試的結果:
test# ./ass -mA -i eth0 -D 192.168.1.10 -b15 -v(這裡的-i是接口,-D是目的地址,-b15指的是自主系統0-15之間
ASS [Autonomous System Scanner] $Revision: 2.14 $
(c) 2k FX
Phenoelit (http://www.phenoelit.de)
No protocols selected; scanning all
Running scan with:
interface eth0
Autonomous systems 0 to 15
delay is 1
in ACTIVE mode
Building target list ...
192.168.1.10 is alive
Scanning ...
Scanning IGRP on 192.168.1.10
Scanning IRDP on 192.168.1.10
Scanning RIPv1 on 192.168.1.10
shutdown ...
OK,得到以下的結果
>>>>>>>>>>>> Results >>>>>>>>>>>
192.168.1.10
IGRP
#AS 00010 10.0.0.0 (50000,1111111,1476,255,1,0)
IRDP
192.168.1.10 (1800,0)
192.168.9.99 (1800,0)
RIPv1
10.0.0.0 (1)
test# ./igrp -i eth0 -f routes.txt -a 10 -S 192.168.1.254 -D 192.168.1.10
當然這裡的routes.txt需要你自己指定:
routes.txt:
# Format
# destination:delay:bandwith:mtu:reliability:load:hopcount
222.222.222.0:500:1:1500:255:1:0
Cisco#sh ip route
Codes: C - connected, S - static, I - IGRP, R - RIP, M - mobile, B - BGP
D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
E1 - OSPF external type 1, E2 - OSPF external type 2, E - EGP
i - IS-IS, L1 - IS-IS level-1, L2 - IS-IS level-2, * - candidate default
U - per-user static route
Gateway of last resort is not set
10.0.0.0/8 is variably subnetted, 2 subnets, 2 masks
C 10.1.2.0/30 is directly connected, Tunnel0
S 10.0.0.0/8 is directly connected, Tunnel0
C 192.168.9.0/24 is directly connected, Ethernet0
C 192.168.1.0/24 is directly connected, Ethernet0
I 222.222.222.0/24 [100/1600] via 192.168.1.254, 00:00:05, Ethernet0
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
看到沒有,到達222.222.222.0/24經由192.168.1.254
-----------------------------
Rprobe & srip--這個工具附帶在一篇關於RIP欺騙非常不錯的指南文檔中(由humble寫),你可以在下面的地址找到這篇文章http://www.technotronic.com/horizon/ripar.txt.Rprobe工具會從一路由daemon(守護程式)中請求一RIP路由表的拷貝,使用Tcpdump或者其他任何嗅探工具可以用來捕獲這些結果。接下來,srip可以用來從任意源IP傳送一偽造的RIPv1或者RIPv2訊息,Srip可以插入新的路由和使當前的路由無效,當然攻擊者/滲透測試者需要知道命令行中使用什麼參數。關於這些工具的介紹可參看Hacking Exposed 第二版Network Device節找到示例。
------------------------
當然還有其他工作與相關路由協定的工具可被攻擊者或者滲透測試者使用,如:Routed,gated, zebra, mrt, 和 gasp ,大家可以參看其他的文檔。
=================================================================================
下面是有關各種協定的淺釋和相關漏洞及可以採用的防衛措施
Routing Information Protocol (RIP,路由信息協定)
Routing Information Protocol (RIP,路由信息協定)是基於距離矢量的路由協定,其所有路由基於(hop)跳數來衡量。由Autonomous System (AS,自主系統) 來全面的管理整個由主機,路由器和其他網路設備組成的系統。RIP是作為一種內部網關協定(interior gateway protocol),即在自治系統內部執行路由功能。相反的大家都知道外部網關路由協定(exterior gateway protocol),如邊緣網關協定(BGP),在不同的自治系統間進行路由。RIP協定對大型網路來說不是一個好的選擇,因為它只支持15跳,RIPv1而且只能通信自身相關的路由信息,反之RIPv2能對其他路由器進行通信。RIP協定能和其他路由協定共同工作,依照Cisco,RIP協定經常用來與OSPF協定相關聯,雖然很多文盪指出OSPF需代替RIP. 應該知道經由RIP更新提交的路由可以通過其他路由協定重新分配,這樣如果一攻擊者能通過RIP來欺騙路由到網路,然後再通過其他協定如OSPF或者不用驗證的BGP協定來重新分配路由,這樣攻擊的範圍將可能擴大。
RIP協定相關的漏洞和防範措施
一個測試者或者攻擊者可以通過探測520 UDP連線埠來判斷是否使用RIP,你可以使用熟悉的工具如nmap來進行測試,如下所示,這個連線埠打開了並沒有使用任何訪問控制聯合任意類型的過濾:
[root@test]# nmap -sU -p 520 -v router.ip.address.2
interesting ports on (router.ip.address..2):
Port State Service
520/udp open route
掃描UDP520連線埠在網站http://www.dshield.org/的\"Top 10 Target Ports\"上被排列在第7位,你表明有許多人在掃描RIP,這當然和一些路由工具工具的不斷增加有一定的關聯。
RIPv1 天生就有不安全因素,因為它沒有使用認證機制並使用不可靠的UDP協定進行傳輸。RIPv2的分組格式中包含了一個選項可以設定16個字元的明文密碼字元串(表示可很容的被嗅探到)或者MD5簽字。雖然RIP信息包可以很容易的偽造,但在RIPv2中你使用了MD5簽字將會使欺騙的操作難度大大提高。一個類似可以操作的工具就是nemesis項目中的RIP命令--nemesis-rip,但由於這個工具有很多的命令行選項和需要必備的知識,所以nemesis-rip 比較難被Script Kiddies使用。想使用nemesis-rip成功進行一次有效的RIP欺騙或者類似的工具需要很多和一定程度的相關知識。不過\"Hacking Exposed\"第二版第10章:Network Devices提到的有些工具組合可以比較容易的進行RIP欺騙攻擊攻擊,這些工具是使用rprobe來獲得遠程網路RIP路由表,使用標準的tcpdump或者其他嗅探工具來查看路由表,srip來偽造RIP信息包(v1或者v2),再用fragrouter重定向路由來通過我們控制的主機,並使用類似dsniff的工具來最後收集一些通信中的明文密碼。
儘管大家知道欺騙比較容易,但仍然存在一些大的網路提供商仍舊依靠RIP來實現一些路由功能,雖然不知道他們是否採用來安全的措施。RIP顯然目前還是在使用,呵呵但希望很少人使用RIPv1,並且使用了採用MD5安全機制的RIPv2,或者已經移植到了使用MD5認證的OSPF來提高安全性。
Border Gateway Protocol (BGP,邊界網關協定)
BGP是Exterior Gateway Protocol (EGP,外部網關協定),此協定執行的時候自主系統之間的路由,現在BGP4是最近的流行標準,BGP使用幾種訊息類型,其中這文章相關的最重要的訊息是UPDATE訊息類型,這個訊息包含了路由表的更新信息,全球INTERNET大部分依靠BGP,因此一些安全問題必須很嚴肅的對待,L0pht幾年就宣稱過:他們能在很短的時間內利用路由協定的安全如BGP來搞垮整個Internet.
BGP協定相關的漏洞和防範措施
BGP使用TCP 179連線埠來進行通信,因此nmap必須探測TCP 179連線埠來判斷BGP的存在。
[root@test]# nmap -sS -p 179 -v router.ip.address.2
Interesting ports on (router.ip.address..2):
Port State Service
179/tcp open bgp
-一個開放的BGP連線埠,更容易被攻擊
[root@test]# nmap -sS -n -p 179 router.ip.address.6
Interesting ports on (router.ip.address.6):
Port State Service
179/tcp filtered bgp
BGP連線埠被過濾了,對攻擊有一定的抵抗力。
由於BGP使用了TCP的傳輸方式,它就會使BGP引起不少關於TCP方面的問題,如很普遍的SYN Flood攻擊,序列號預測,一般拒絕服務攻擊等。BGP沒有使用它們自身的序列而依靠TCP的序列號來代替,因此,如果設備採用了可預測序列號方案的話,就存在這種類型的攻擊,幸好的是,運行在Internet上大部分重要的路由器使用了Cisco設備,而其是沒有使用可預測序列號方案。
部分BGP的實現默認情況下沒有使用任何的認證機制,而有些可能存在和RIP同樣的問題就是使用了明文密碼。這樣假如認證方案不夠強壯的話,攻擊者傳送UPDATE信息來修改路由表的遠程攻擊的機會就會增加許多,導致進一步的破壞擴大。
BGP也可以傳播偽造的路由信息,如果攻擊者能夠從一協定如RIP中修改或者插入路由信息並由BGP重新分配。這個缺陷是存在與信任模組中而不是其協定本身。另外BGP的community 配置也會有某些類型的攻擊,原因是community name在某些情況下是作為信任token(標誌)可以被獲得。至於通過通過BGP的下層協定(TCP)對其攻擊看來是比較困難的,因為會話在點對點之間是通過一條單獨的物理線路進行通信的,但在一定環境如在兩AS系統通過交換機來連線則可能存在TCP插入的攻擊,在這樣的網路中,攻擊者在同一VLAN或者他有能力嗅探switch的通信(如使用dsniff工具通過ARP欺騙來獲得),監視TCP序列號,插入修改的信息包或者使用工具如hunt的進行hijack連線而獲得成功,但這種類型的攻擊一般只能在實驗室環境中演示比較容易,而在實際的網路中因為太過複雜而很難成功。
要使BGP更安全,你最好對連線埠179採用訪問列表控制,使用MD5認證,使用安全傳輸媒體進行安全BGP通信和執行路由過濾(你可以查看下面的文檔(see http://www.cisco.com/univercd/cc/td/doc/product/software/ios120/12cgcr/np1_c/1cprt1/1cbgp.htm#40309)以及一些標準的路由安全設定過濾配置。
------------------------
Open Shortest Path First (OSPF,開放最短路徑優先協定)
OSPF是動態連線狀態路由協定,其保持整個網路的一個動態的路由表並使用這個表來判斷網路間的最短路徑,OSPF是內部使用連線狀態路由協定,協定通過向同層結點傳送連線狀態信息(LSA)工作,當路由器接收到這些信息時,它就可以根據spf算法計算出到每個結點的最短路了。其他相臨路由器通過使用OSPF的hello協定每10秒傳送一個問候包給224.0.0.5,然後接收這些路由器發回的信息。一個OSPF的hello信息包頭可以通過iptraf來嗅探到,如下所示:
OSPF hlo (a=3479025376 r=192.168.19.35) (64 bytes) from 192.168.253.67 to 224.0.0.5 on eth0
192.168.253.67邊界路由器傳送一個helo信息包給多播(224.0.0.5)來告訴其他路由器和主機怎樣
從192.168.19.35聯繫區域a(a=3479025376).
一旦路由器接受到Hello信息包,它就開始同步自己的資料庫和其他路由一樣。
一個LAS頭包括以下幾個部分: LS age, option, LS type, Link state ID, Advertising Router ID,
LS sequence number, LS checksum, 和 length.
OSPF協定相關的漏洞和防範措施
OSPF使用協定類型89,因此你可以使用nmap協定掃描來判斷OSPF,除非網路通過配置訪問列表來不回響這些類型的查詢。如下所示:
root@test]# nmap -sO -router.ip.address.252
Interesting protocols on (router.ip.address.252):
Protocol State Name
89 open ospfigp
OSPF由於內建幾個安全機制所以比起RIP協定安全的多,但是,其中LSA的幾個組成部分也可以通過捕獲和重新注入OSPF信息包被修改,JiNao小組開發了一個FREEBSD divert socket的LINUX實現並在它們的測試中使用到。
OSPF可以被配置成沒有認證機制,或者使用明文密碼認證,或者MD5,這樣如果攻擊者能獲得一定程度的訪問,如他們可以使用如dsniff等工具來監視OSPF信息包和或者明文密碼,這個攻擊者可以運行divert socket或者其他可能的各種類型ARP欺騙工具來重定向通信。
JiNao小組發現了有關OSPF的4種拒絕服務的攻擊方法,下面是簡單的說明:
--Max Age attack攻擊 LSA的最大age為一小時(3600)
攻擊者傳送帶有最大MaxAge設定的LSA信息包,這樣,最開始的路由器通過產生刷新信息來傳送這個LSA,而後就引起在age項中的突然改變值的競爭。如果攻擊者持續的突然插入最大值到信息包給整個路由器群將會導致網路混亂和導致拒絕服務攻擊。
--Sequence++ 攻擊 即攻擊者持續插入比較大的LSA sequence(序列)號信息包,根據OSPF的RFC介紹因為LS sequence number(序列號)欄是被用來判斷舊的或者是否同樣的LSA,比較大的序列號表示 這個LSA越是新近的。所以到攻擊者持續插入比較大的LSA sequence(序列)號信息包時候,最開始的路由器就會產生髮送自己更新的LSA序列號來超過攻擊者序列號的競爭,這樣就導致了網路不穩定並導致拒絕服務攻擊。
--最大序列號攻擊
就是攻擊者把最大的序列號0x7FFFFFFF插入。根據OSPF的RFC介紹,當想超過最大序列號的時候,LSA就必須從路由domain(域)中刷新,有InitialSequenceNumber初始化序列號。這樣如果攻擊者的路由器序列號被插入最大序列號,並即將被初始化,理論上就會馬上導致最開始的路由器的競爭。但在實踐中,JiNao發現在某些情況下,擁有最大MaxSeq(序列號)的LSA並沒有被清除而是在連線狀態資料庫中保持一小時的時間。
--偽造LSA攻擊
這個攻擊主要是gated守護程式的錯誤引起的,需要所有gated進程停止並重新啟動來清除偽造的不正確的LSA,導致拒絕服務的產生。這個攻擊相似對硬體的路由器不影響並且對於新版本的gated也沒有效果。
上面的一些信息你可以參考http://www.ietf.org/rfc/rfc2328.txt和JiNao對OSPF的漏洞分析:On the Vulnerabilities and Protection of OSPF Routing Protocol (http://www.anr.mcnc.org/projects/JiNao/ic3n98.ps).
nemesis-ospf能對OSPF協定產生上述攻擊,但是,由於nemesis-ospf太多的選項和需要對OSPF有詳細深刻的了解,所以一般的攻擊者和管理人員難於實現這些攻擊。並且也聽說nemesis-ospf也不是一直正常正確的工作,就更限制了這個工具的使用價值。
OSPF認證需要KEY的交換,每次路由器必須來回傳遞這個KEY來認證自己和嘗試傳遞OSPF訊息,路由器的HELLO信息包在默認配置下是每10秒在路由器之間傳遞,這樣就給攻擊者比較的大機會來竊聽這個KEY,如果攻擊者能竊聽網路並獲得這個KEY的話,OSPF信息包就可能被偽造,更嚴重的會盲目重定向這些被偽造的OSPF信息包。當然這些攻擊少之又少,不光光是其難度,重要的是因為還有其他更容易的安全漏洞可以利用,誰不先捏軟柿子.
這裡建議如果一個主機不要使用動態路由,大多數的主機使用靜態路由就能很好的完成起功能。因為使用動態路由協定很會受到攻擊,例如,幾年以前gated軟體就被發現有一個認證的問題。
-------------------------
關於使用IRPAS對CDP和IRDP攻擊
IRPAS的cdp程式主要對傳送CDP (Cisco router Discovery Protocol)訊息給CISCO路由器並對內部網路段產生拒絕服務攻擊,傳送一些垃圾字元就會導致路由器重新啟動或者崩潰。它也能作為欺騙來使用,為其他更危險的程式打開方便的大門,一種可能的攻擊場景:如使用cdp來使路由器停止服務,然後使用irdp或者irdresponder工具傳送高優先值來通知一新的路由器,這樣如果我們的目標路由器不能與被拒絕服務攻擊而停止服務的通信,新的路由器的高優先值就會被採用,如果攻擊者設定的這個值被成功採用的話,攻擊者就能在他們的系統中輕鬆插入通信路徑。
這種類型的攻擊也可以套用在某些配置了使用IRDP協定的主機,如WINDOWS98默認情況下配置使用IRDP,WINNT需要手工配置支持IRDP環境,並在啟動的時候廣播3個ICMP Router Solicitation messages(ICMP路由請求訊息)。L0pht有文章詳細的描述關於WINDOWS和SUN機器上的採用IRDP而存在漏洞,你可以在下面的地址找到這篇文章:
http://www.atstake.com/
RIP路由協定快速入門
路由器的工作不外乎兩個,一是路徑選擇,二是數據轉發。進行數據轉發相對容易一些,難的是如何判斷到達目的網路的最佳路徑。所以,路徑選擇就成了路由器最重要的工作。
許多路由協定可以完成路徑選擇的工作,常見的有RIP,OSPF,IGRP和 EIGRP協定等等。這些算法中,我們不能簡單的說誰好誰壞,因為算法的優劣要依據使用的環境來判斷。比如RIP協定,它有時不能準確地選擇最優路徑,收斂的時間也略顯長了一些,但對於小規模的,沒有專業人員維護的網路來說,它是首選的路由協定,我們看中的是它的簡單性。
如果你手頭正有一個小的網路項目,那么,就讓我們來安排一個計畫,30分鐘讀完本文(一讀),20分鐘再細看一遍本文提及的命令和操作方法(二讀),用30分鐘配置網路上的所有路由器(小網路,沒有幾台路由器可以配的),最後20分鐘,檢查一下網路工作是否正常。好了,一百分鐘,你的RIP網路運轉起來了。就這么簡單,不信,請繼續往下看。
一、RIP是什麼
RIP(Routing Information Protocols,路由信息協定)是使用最廣泛的距離向量協定,它是由施樂(Xerox)在70年代開發的。當時,RIP是xns(Xerox Network Service,施樂網路服務)協定簇的一部分。TCP/IP版本的RIP是施樂協定的改進版。RIP最大的特點是,無論實現原理還是配置方法,都非常簡單。
度量方法
RIP的度量是基於跳數(hops count)的,每經過一台路由器,路徑的跳數加一。如此一來,跳數越多,路徑就越長,RIP算法會優先選擇跳數少的路徑。RIP支持的最大跳數是15,跳數為16的網路被認為不可達。
路由更新
RIP中路由的更新是通過定時廣播實現的。預設情況下,路由器每隔30秒向與它相連的網路廣播自己的路由表,接到廣播的路由器將收到的信息添加至自身的路由表中。每個路由器都如此廣播,最終網路上所有的路由器都會得知全部的路由信息。正常情況下,每30秒路由器就可以收到一次路由信息確認,如果經過180秒,即6個更新周期,一個路由項都沒有得到確認,路由器就認為它已失效了。如果經過240秒,即8個更新周期,路由項仍沒有得到確認,它就被從路由表中刪除。上面的30秒,180秒和240秒的延時都是由計時器控制的,它們分別是更新計時器(Update Timer)、無效計時器(Invalid Timer)和刷新計時器(Flush Timer)。
路由循環
距離向量類的算法容易產生路由循環,RIP是距離向量算法的一種,所以它也不例外。如果網路上有路由循環,信息就會循環傳遞,永遠不能到達目的地。為了避免這個問題,RIP等距離向量算法實現了下面4個機制。
水平分割(split horizon)。水平分割保證路由器記住每一條路由信息的來源,並且不在收到這條信息的連線埠上再次傳送它。這是保證不產生路由循環的最基本措施。
毒性逆轉(poison reverse)。當一條路徑信息變為無效之後,路由器並不立即將它從路由表中刪除,而是用16,即不可達的度量值將它廣播出去。這樣雖然增加了路由表的大小,但對消除路由循環很有幫助,它可以立即清除相鄰路由器之間的任何環路。
觸發更新(trigger update)。當路由表發生變化時,更新報文立即廣播給相鄰的所有路由器,而不是等待30秒的更新周期。同樣,當一個路由器剛啟動RIP時,它廣播請求報文。收到此廣播的相鄰路由器立即應答一個更新報文,而不必等到下一個更新周期。這樣,網路拓撲的變化會最快地在網路上傳播開,減少了路由循環產生的可能性。
抑制計時(holddown timer)。一條路由信息無效之後,一段時間內這條路由都處於抑制狀態,即在一定時間內不再接收關於同一目的地址的路由更新。如果,路由器從一個網段上得知一條路徑失效,然後,立即在另一個網段上得知這個路由有效。這個有效的信息往往是不正確的,抑制計時避免了這個問題,而且,當一條鏈路頻繁起停時,抑制計時減少了路由的浮動,增加了網路的穩定性。
即便採用了上面的4種方法,路由循環的問題也不能完全解決,只是得到了最大程度的減少。一旦路由循環真的出現,路由項的度量值就會出現計數到無窮大(Count to Infinity)的情況。這是因為路由信息被循環傳遞,每傳過一個路由器,度量值就加1,一直加到16,路徑就成為不可達的了。RIP選擇16作為不可達的度量值是很巧妙的,它既足夠的大,保證了多數網路能夠正常運行,又足夠小,使得計數到無窮大所花費的時間最短。
鄰居
有些網路是NBMA(Non-Broadcast MultiAccess,非廣播多路訪問)的,即網路上不允許廣播傳送數據。對於這種網路,RIP就不能依賴廣播傳遞路由表了。解決方法有很多,最簡單的是指定鄰居(neighbor),即指定將路由表傳送給某一台特定的路由器。
RIP的缺陷
RIP雖然簡單易行,並且久經考驗,但是也存在著一些很重要的缺陷,主要有以下幾點:
過於簡單,以跳數為依據計算度量值,經常得出非最優路由;
度量值以16為限,不適合大的網路;
安全性差,接受來自任何設備的路由更新;
不支持無類IP位址和VLSM(Variable Length Subnet Mask,變長子網掩碼);
收斂緩慢,時間經常大於5分鐘;
消耗頻寬很大。
二、路由器怎么配
路由器本身就是一台有多個網路接口的計算機,同普通計算機一樣,它也有中央處理器(CPU)、系統主存(RAM)和唯讀存儲器(ROM)等部件。
除此之外,一個很重要的部分是它的網路接口(Interface),為了連結不同類型的網路,路由器的網路接口種類繁多,比如套用在區域網路中的以太、快速以太、令牌環接口,套用於廣域網的V.35、RS232、ISDN BRI PRI接口等等。
路由器的外存儲器主要有兩種:NVRAM(Non-Volatile RAM,非易失性RAM)和Flash(快閃記憶體)。NVRAM存儲路由器的配置檔案,Flash用於存放作業系統IOS(Internet Operating System)。
配置模式
CISCO路由器最基本的配置模式有兩種:用戶(user)和特權(privileged)。在用戶模式下,只能顯示路由器的狀態,特權模式還可以更改路由器的配置。
特權模式下可以進入安裝(setup)模式、全局配置(global config)模式,局部配置(sub config)模式。
安裝模式提供選單提示,引導用戶進行路由器的基本配置。新路由器第一次啟動後,自動進入安裝模式。
全局配置模式中可以改變路由器的全局參數,如主機名、密碼等等。
局部配置改變路由器的局部參數,例如某一個網路接口的配置、某一種路由協定的配置等等。
配置方法
路由器的配置可以使用多種方法,下面這五種是最常見的:
使用超級終端類的工具通過串列口登錄控制台(console port)。
將數據機連結至路由器的輔助口(auxiliary port),遠程撥號登錄控制台。
遠程登錄(telnet)至路由器的某一IP 地址,通過VTY(virtue terminal line,虛擬終端)方式訪問路由器。
編輯配置檔案,並通過TFTP上傳至路由器。
通過網路管理軟體(network management system)遠程設定路由器參數。
安裝路由器
假設我們的項目網路中只有三台路由器。它們放在北京、上海和天津,名字分別叫testBJ、testSH和testTJ。我們採用B類保留IP位址172.16.0.0,共劃分了四個子網172.16.1.0、172.16.2.0、172.16.3.0和172.16.4.0,子網掩碼均為255.255.255.0。
基本配置
將包裝中附帶的串列電纜一端連線到Beijing路由器的console口上,另外一端連線到計算機的com口上。啟動超級終端程式(Win95/NT中),作適當配置,連線路由器。給路由器加電,連續鍵入數個回車,出現如下提示符,顯示路由器處於用戶模式。
testBJ>
由用戶模式轉入特權模式,使用enable命令。
testBJ> enable
testBJ#
和UNIX主機一樣,“#”代表特權(root)用戶的系統提示符,它表示你進入了特權模式。與enable作用相反,即從特權模式返回用戶模式的命令是disable。
特權模式下,可以使用config terminal命令進入全局配置模式。全局配置模式下,可以使用一些配置子項的名稱進入局部配置模式。返回的方法都是exit命令。其中,從局部配置模式直接返回特權模式的命令是end。如下所示。
testBJ#config terminal
Enter configuration commands, one per line. End with CNTL/Z.
testBJ(config)#router rip
testBJ(config-router)#exit
testBJ(config)#exit
testBJ#
CISCO IOS的一個非常引人的特色是它的命令行幫助,一個?解決了所有的問題。?可以顯示當前模式下的命令列表,可以顯示命令全稱,還可以顯示命令的參數和幫助信息。在任何對命令不確定的地方鍵入?,系統會給出提示信息。
CISCO路由器還支持命令簡寫功能,只要不引起歧義,可以用命令的前幾個字元替代整個命令,這樣,配置時的打字工作量就小多了。
路由器的全部配置信息都保存在配置檔案中,當前正在使用的配置檔案是running-config,它存放在系統記憶體里,我們在特權模式下對配置的修改會立即反映到running-config中。startup-config是存儲在NVRAM中的配置檔案,只有它是掉電不丟失的,所以如果想使所做的修改到下一次啟動時仍然有效,就必須保存當前配置。存檔命令如下:
testBJ#copy running-config startup-config
Building configuration...
[OK]
testBJ#
更改路由器名、密碼
路由器的名字可以用hostname命令修改。
Router(config)#hostname testBJ
testBJ(config)#
enable password和enable secret命令可以修改特權模式的密碼。
testBJ(config)#enable password cisco
testBJ(config)#enable secret cisco
進入line console局部配置模式下,修改console登錄密碼;進入line vty局部配置模式,修改telnet登錄的密碼。login命令指出需要登錄,修改密碼的命令都是password。
testBJ(config)#line console 0
testBJ(config-line)#login
testBJ(config-line)#password cisco
testBJ(config-line)#exit
testBJ(config)#line vty 0 4
testBJ(config-line)#login
testBJ(config-line)#password cisco
測試連通性
打開其餘兩台路由器,按上述方法進行配置,然後就可以檢查它們之間是否連通了。
測試線路連通性的方法有三種,ping、traceroute和telnet。ping可以檢測目的地是否可達;trace不僅檢測連通性,還給出到達目的地所經過的路徑;telnet測試套用層軟體的連通性,如下所示。
testBJ#ping 172.16.4.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP echos to 172.16.4.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 24/25/28 ms
testBJ#traceroute 172.16.4.2
Type escape sequence to abort.
中括弧里的內容是路由項的管理距離和度量值,RIP的預設管理距離是120,到達3、4子網的度量值是1,即經過1個路由器可達。
同樣的命令在另外兩台路由器上運行,結果如下。
testSH#sh ip route
Gateway of last resort is not set
172.16.0.0/24 is subnetted, 4 subnets
R 172.16.4.0 [120/1] via 172.16.3.2, 00:00:13, Ethernet0/0
C 172.16.1.0 is directly connected, Ethernet0/1
R 172.16.2.0 [120/1] via 172.16.1.2, 00:00:11, Ethernet0/1
[120/1] via 172.16.3.2, 00:00:13, Ethernet0/0
C 172.16.3.0 is directly connected, Ethernet0/0
testTJ#sh ip route
Gateway of last resort is not set
172.16.0.0/24 is subnetted, 4 subnets
C 172.16.4.0 is directly connected, Ethernet0/0
R 172.16.1.0 [120/1] via 172.16.3.3, 00:00:07, Ethernet0/1
[120/1] via 172.16.2.3, 00:00:19, Serial1/0
C 172.16.2.0 is directly connected, Serial1/0
C 172.16.3.0 is directly connected, Ethernet0/1
分析上述命令輸出時,一定要隨時參照拓撲圖,離開網路拓撲,上面的信息就沒有任何意義。動態路由的靈活性體現在一條鏈路出現故障,路由算法會自動切換到迂迴鏈路上。例如我們將testBJ和testTJ之間的串列線纜斷開,一段時間後,再檢查路由表,如下所示。
testBJ#sh ip route
Gateway of last resort is not set
172.16.0.0/24 is subnetted, 3 subnets
R 172.16.4.0 [120/2] via 172.16.1.3, 00:00:22, Ethernet0/1
C 172.16.1.0 is directly connected, Ethernet0/1
R 172.16.3.0 [120/1] via 172.16.1.3, 00:00:22, Ethernet0/1
我們發現串列鏈路所在的子網2斷開了,到網路172.16.4.0網路的數據包都將繞經testSH路由器。
sh ip protocols命令可以顯示當前路由協定的狀況,如下所示。
testBJ#sh ip protocols
Routing Protocol is "rip"
Sending updates every 30 seconds, next due in 19 seconds
Invalid after 180 seconds, hold down 180, flushed after 240
Outgoing update filter list for all interfaces is not set
Incoming update filter list for all interfaces is not set
Redistributing: connected, rip
Default version control: send version 1, receive any version
Interface Send Recv Key-chain
Ethernet0/1 1 1 2
Serial1/0 1 1 2
Routing for Networks:
172.16.0.0
Routing Information Sources:
Gateway Distance Last Update
172.16.2.2 120 00:00:05
172.16.1.3 120 00:00:27
Distance: (default is 120)
從命令輸出中,可以看出RIP協定的基本配置,還可以得知與當前路由器交換信息的路由器有testTJ(172.16.2.2)和testSH(172.16.1.3)兩台路由器,上次接收路由信息分別在5秒和27秒之前。
要了解路由器之間交換路由信息的詳情,可以使用debug ip rip命令。如下所示,輸入命令後,隔一段時間,控制台上出現接收或者傳送RIP廣播的信息。
testBJ#debug ip rip
RIP protocol debugging is on
testBJ#
RIP: received v1 update from 172.16.2.2 on Serial1/0
172.16.4.0 in 1 hops
172.16.3.0 in 1 hops
RIP: received v1 update from 172.16.1.3 on Ethernet0/1
172.16.4.0 in 2 hops
172.16.3.0 in 1 hops
RIP: sending v1 update to 255.255.255.255 via Ethernet0/1 (172.16.1.2)
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路由表
使用R I P報文中列出的項, R I P主機可以彼此之間交流路由信息。這些信息存儲在路由表中,路由表為每一個知道的、可達的目的地保留一項。每個目的地表項是到達那個目的地的最低開銷路由。
注意每個目的地的表項數可以隨路由生產商的不同而變化。生產商可能選擇遵守規範,也可以對標準進行他們認為合適的“強化”。所以,用戶很可能會發現某個特殊商標的路由器為每一個網路中的目的地存儲至多4條相同費用的路由。
每個路由表項包括以下各域:
目的I P地址域
距離-向量度量域
下一跳I P地址域
路由變化標誌域
路由計時器域
注意雖然RFC 1058是一個開放式標準,能支持大量互連網路地址結構,然而它是由I E T F設計用於I n t e r n e t中自治系統內的協定。如此,使用這種形式R I P的自然是網路互聯協定。
1. 目的I P地址域
任何路由表中所包含的最重要信息是到所知目的地的I P地址。一旦一台R I P路由器收到一個數據報文,就會查找路由表中的目的I P地址以決定從哪裡轉發那個報文。
2. 度量標準域
路由表中的度量域指出報文從起始點到特定目的地的總耗費。路由表中的度量是從路由器到特定目的地之間網路鏈路的耗費總和。
3. 下一跳I P地址域
下一跳I P地址域包括至目的地的網路路徑上下一個路由器接口的I P地址。如果目的I P地址所在的網路與路由器不直接相連時,路由器表中才出現此項。
4. 路由變化標誌域
路由變化標誌域用於指出至目的I P地址的路由是否在最近發生了變化。這個域是重要的,因為R I P為每一個目的I P地址只記錄一條路由。
5. 路由計時器域
有兩個計時器與每條路由相聯繫,一個是逾時計時器,一個是路由刷新計時器。這些計時器一同工作來維護路由表中存儲的每條路由的有效性。路由表維護過程在1 2 . 2 . 2節中詳細描述。