(兩百零六)TCP/IP詳解筆記-第10章 動態選路協議

10.1 引言

在前面各章中,我們討論了靜態選路。在配置接口時,以默認方式生成路由表項(對於直接連接的接口),並通過route命令增加表項(通常從系統自引導程序文件),或是通過ICMP重定向生成表項(通常是在默認方式出錯的情況下)。

在網絡很小,且與其他網絡只有單個連接點且沒有多餘路由時(若主路由失敗,可以使用備用路由),採用這種方法是可行的。如果上述三種情況不能全部滿足,通常使用動態選路。

本章討論動態選路協議,它用於路由器間的通信。我們主要討論RIP,即選路信息協議(Routing Infromation Protocol),大多數TCP/IP實現都提供這個應用廣泛的協議。然後討論兩種新的選路協議,OSPF和BGP。本章的最後研究一種名叫無分類域間選路的新的選路技術,現在Internet上正在開始採用該協議以保持B類網絡的數量。

 

10.2 動態選路

當相鄰路由器之間進行通信,以告知對方每個路由器當前所連接的網絡,這時就出現了動態選路。路由器之間必須採用選路協議進行通信,這樣的選路協議有很多種。路由器上有一個進程稱爲路由守護程序(routing daemon),它運行選路協議,並與其相鄰的一些路由器進行通信。正如圖9-1所示,路由守護程序根據它從相鄰路由器接收到的信息,更新內核中的路由表。

動態選路並不改變我們在9.2節中所描述的內核在IP層的選路方式。這種選路方式稱爲選路機制(routing mechanism)。內核搜索路由表,查找主機路由、網絡路由以及默認路由的方式並沒有改變。僅僅是放置到路由表中的信息改變了—當路由隨時間變化時,路由是由路由守護程序動態地增加或刪除,而不是來自於自引導程序文件中的route命令。

正如前面所描述的那樣,路由守護程序將選路策略(routing policy)加入到系統中,選擇路由並加入到內核的路由表中。如果守護程序發現前往同一信宿存在多條路由,那麼它(以某種方法)將選擇最佳路由並加入內核路由表中。如果路由守護程序發現一條鏈路已經斷開(可能是路由器崩潰或電話線路不好),它可以刪除受影響的路由或增加另一條路由以繞過該問題。

在像Internet這樣的系統中,目前採用了許多不同的選路協議。Internet是以一組自治系統(AS,Autonomous System)的方式組織的,每個自治系統通常由單個實體管理。常常將一個公司或大學校園定義爲一個自治系統。NSFNET的Internet骨幹網形成一個自治系統,這是因爲骨幹網中的所有路由器都在單個的管理控制之下。

每個自治系統可以選擇該自治系統中各個路由器之間的選路協議。這種協議我們稱之爲內部網關協議IGP(Interior Gateway Protocol)或域內選路協議(intradomain routing protocol)。最常用的IGP是選路信息協議RIP。一種新的IGP是開放最短路徑優先OSPF(Open Shortest Path First)協議。它意在取代RIP。另一種1986年在原來NSFNET骨幹網上使用的較早的IGP協議——HELLO,現在已經不用了。

 

10.3 Unix選路守護程序

Unix系統上常常運行名爲routed路由守護程序。幾乎在所有的TCP/IP實現中都提供該程序。該程序只使用RIP進行通信,我們將在下一節中討論該協議。這是一種用於小型到中型網絡中的協議。

另一個程序是gated。IGP和EGP都支持它。[Fedor 1998]描述了早期開發的gated。圖10-1對routed和兩種不同版本的gated所支持的不同選路協議進行了比較。大多數運行路由守護程序的系統都可以運行routed,除非它們需要支持gated所支持的其他協議。

 

第10章 動態選路協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖10-1 routed和gated所支持的選路協議

我們在下一節中描述RIP版本1,10.5節描述它與RIP版本2的不同點,10.6節描述OSPF,10.7節描述BGP。

 

10.4 RIP:選路信息協議

本節對RIP進行了描述,這是因爲它是最廣爲使用(也是最受攻擊)的選路協議。對於RIP的正式描述文件是RFC 1058 [Hedrick 1988a],但是該RFC是在該協議實現數年後纔出現的。

10.4.1 報文格式

RIP報文包含中在UDP數據報中,如圖10-2所示(在第11章中對UDP進行更爲詳細的描述)。

第10章 動態選路協議_即時通訊網(52im.net)

圖10-2 封裝在UDP數據報中的RIP報文

圖10-3給出了使用IP地址時的RIP報文格式。

命令字段爲1表示請求,2表示應答。還有兩個捨棄不用的命令(3和4),兩個非正式的命令:輪詢(5)和輪詢表項(6)。請求表示要求其他系統發送其全部或部分路由表。應答則包含發送者全部或部分路由表。

版本字段通常爲1,而第2版RIP(10.5節)將此字段設置爲2。

緊跟在後面的2字節指定地址系列(address family)(對於IP地址來說,其值是2)、IP地址以及相應的度量。在本節的後面可以看出,RIP的度量是以跳計數的。

採用這種20字節格式的RIP報文可以通告多達25條路由。上限25是用來保證RIP報文的總長度爲20×25+4=504,小於512字節。由於每個報文最多攜帶25個路由,因此爲了發送整個路由表,經常需要多個報文。

第10章 動態選路協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖10-3

 

10.4.2 正常運行

讓我們來看一下采用RIP協議的routed程序正常運行的結果。RIP常用的UDP端口號是520

  1. 初始化:在啓動一個路由守護程序時,它先判斷啓動了哪些接口,並在每個接口上發送一個請求報文,要求其他路由器發送完整路由表。在點對點鏈路中,該請求是發送給其他終點的。如果網絡支持廣播的話,這種請求是以廣播形式發送的。目的UDP端口號是520(這是其他路由器的路由守護程序端口號)。 這種請求報文的命令字段爲1,但地址系列字段設置爲0,而度量字段設置爲16。這是一種要求另一端完整路由表的特殊請求報文。
  2. 接收到請求。如果這個請求是剛纔提到的特殊請求,那麼路由器就將完整的路由表發送給請求者。否則,就處理請求中的每一個表項:如果有連接到指明地址的路由,則將度量設置成我們的值,否則將度量置爲16(度量爲16是一種稱爲“無窮大”的特殊值,它意味着沒有到達目的的路由)。然後發回響應。
  3. 接收到響應。使響應生效,可能會更新路由表。可能會增加新表項,對已有的表項進行修改,或是將已有表項刪除。
  4. 定期選路更新。每過30秒,所有或部分路由器會將其完整路由表發送給相鄰路由器。發送路由表可以是廣播形式的(如在以太網上),或是發送給點對點鏈路的其他終點的。
  5. 觸發更新。每當一條路由的度量發生變化時,就對它進行更新。不需要發送完整路由表,而只需要發送那些發生變化的表項。

每條路由都有與之相關的定時器。如果運行RIP的系統發現一條路由在3分鐘內未更新,就將該路由的度量設置成無窮大(16),並標註爲刪除。這意味着已經在6個30秒更新時間裏沒收到通告該路由的路由器的更新了。再過60秒,將從本地路由表中刪除該路由,以保證該路由的失效已被傳播開。

 

10.4.3 度量

RIP所使用的度量是以跳(hop)計算的。所有直接連接接口的跳數爲1。考慮圖10-4所示的路由器和網絡。畫出的4條虛線是廣播RIP報文。

第10章 動態選路協議_即時通訊網(52im.net)

圖10-4 路由器和網絡示例

路由器R1通過發送廣播到N1通告它與N2之間的跳數是1(發送給N1的廣播中通告它與N1之間的路由是無用的)。同時也通過發送廣播給N2通告它與N1之間的跳數爲1。同樣,R2通告它與N2的度量爲1,與N3的度量爲1。

如果相鄰路由器通告它與其他網絡由的跳數爲1,那麼我們與那個網絡的度量就是2,這是因爲爲了發送報文到該網絡,我們必須經過那個路由器。在我們的例子中,R2到N1的度量是2,與R1到N3的度量一樣。

由於每個路由器都發送其路由表給鄰站,因此,可以判斷在同一個自治系統AS內到每個網絡的路由。如果在該AS內從一個路由器到一個網絡有多條路由,那麼路由器將選擇跳數最小的路由,而忽略其他路由。

跳數的最大值是15,這意味着RIP只能用在主機間最大跳數值爲15的AS內。度量爲16表示到無路由到達該IP地址。

 

10.5 RIP版本2

RFC 1388 [Malkin 1993a]中對RIP定義進行了擴充,通常稱其結果爲RIP-2。這些擴充並不改變協議本身,而是利用圖10-3中的一些標註爲“必須爲0”的字段來傳遞一些額外的信息。如果RIP忽略這些必須爲0的字段,那麼,RIP和RIP-2可以互操作。

圖10-10重新給出了由RIP-2定義的圖。對於RIP-2來說,其版本字段爲2。

第10章 動態選路協議_TCP/IP詳解卷1 協議_即時通訊網(52im.net)

圖10-10 RIP-2報文格式

選路域(routing domain)是一個選路守護程序的標識符,它指出了這個數據報的所有者。在一個Unix實現中,它可以是選路守護程序的進程號。該域允許管理者在單個路由器上運行多個RIP實例,每個實例在一個選路域內運行。

選路標記(routing tag)是爲了支持外部網關協議而存在的。它攜帶着一個EGP和BGP的自治系統號。

每個表項的子網掩碼應用於相應的IP地址上。下一站IP地址指明發往目的IP地址的報文該發往哪裏。該字段爲0意味着發往目的地址的報文應該發給發送RIP報文的系統。

RIP-2提供了一種簡單的鑑別機制。可以指定RIP報文的前20字節表項地址系列爲0xffff,路由標記爲2。表項中的其餘16字節包含一個明文口令。

最後,RIP-2除了廣播(第12章)外,還支持多播。這可以減少不收聽RIP-2報文的主機的負載。

 

10.6 OSPF:開放最短路徑優先

OSPF是除RIP外的另一個內部網關協議。它克服了RIP的所有限制。RFC 1247[Moy 1991]中對第2版OSPF進行了描述。

與採用距離向量的RIP協議不同的是,OSPF是一個鏈路狀態協議。距離向量的意思是,RIP發送的報文包含一個距離向量(跳數)。每個路由器都根據它所接收到鄰站的這些距離向量來更新自己的路由表。

在一個鏈路狀態協議中,路由器並不與其鄰站交換距離信息。它採用的是每個路由器主動地測試與其鄰站相連鏈路的狀態,將這些信息發送給它的其他鄰站,而鄰站將這些信息在自治系統中傳播出去。每個路由器接收這些鏈路狀態信息,並建立起完整的路由表。

從實際角度來看,二者的不同點是鏈路狀態協議總是比距離向量協議收斂更快。收斂的意思是在路由發生變化後,例如在路由器關閉或鏈路出故障後,可以穩定下來。[Perlman1992]的9.3節對這兩種類型的選路協議的其他方面進行了比較。

OSPF與RIP(以及其他選路協議)的不同點在於,OSPF直接使用IP。也就是說,它並不使用UDP或TCP。對於IP首部的protocol字段,OSPF有其自己的值(圖3-1)。

另外,作爲一種鏈路狀態協議而不是距離向量協議,OSPF還有着一些優於RIP的特點。

  1. OSPF可以對每個IP服務類型(圖3-2)計算各自的路由集。這意味着對於任何目的,可以有多個路由表表項,每個表項對應着一個IP服務類型。
  2. 給每個接口指派一個無維數的費用。可以通過吞吐率、往返時間、可靠性或其他性能來進行指派。可以給每個IP服務類型指派一個單獨的費用。
  3. 當對同一個目的地址存在着多個相同費用的路由時,OSPF在這些路由上平均分配流量。我們稱之爲流量平衡。
  4. OSPF支持子網:子網掩碼與每個通告路由相連。這樣就允許將一個任何類型的IP地址分割成多個不同大小的子網(我們在3.7節中給出了這樣的一個例子,稱之爲變長度子網)。到一個主機的路由是通過全1子網掩碼進行通告的。默認路由是以IP地址爲0.0.0.0、網絡掩碼爲全0進行通告的。
  5. 路由器之間的點對點鏈路不需要每端都有一個IP地址,我們稱之爲無編號網絡。這樣可以節省IP地址—現在非常緊缺的一種資源。
  6. 採用了一種簡單鑑別機制。可以採用類似於RIP-2機制(10.5節)的方法指定一個明文口令。
  7. OSPF採用多播(第12章),而不是廣播形式,以減少不參與OSPF的系統負載。隨着大部分廠商支持OSPF,在很多網絡中OSPF將逐步取代RIP。

 

10.7 BGP:邊界網關協議

BGP是一種不同自治系統的路由器之間進行通信的外部網關協議。BGP是ARPA NET所使用的老EGP的取代品。RFC1267 [Lougheed and Rekhter 1991]對第3版的BGP進行了描述。

RFC 1268 [Rekhter and Gross 1991]描述瞭如何在Internet中使用BGP。下面對於BGP的大部分描述都來自於這兩個RFC文檔。同時,1993年開發第4版的BGP(見RFC 1467 [Topolcic 1993]),以支持我們將在10.8節描述的CIDR。

BGP系統與其他BGP系統之間交換網絡可到達信息。這些信息包括數據到達這些網絡所必須經過的自治系統AS中的所有路徑。這些信息足以構造一幅自治系統連接圖。然後,可以根據連接圖刪除選路環,制訂選路策略。

首先,我們將一個自治系統中的IP數據報分成本地流量和通過流量。在自治系統中,本地流量是起始或終止於該自治系統的流量。也就是說,其信源IP地址或信宿IP地址所指定的主機位於該自治系統中。其他的流量則稱爲通過流量。在Internet中使用BGP的一個目的就是減少通過流量。

可以將自治系統分爲以下幾種類型:

  1. 殘樁自治系統(stub AS),它與其他自治系統只有單個連接。stub AS只有本地流量。
  2. 多接口自治系統(multihomed AS),它與其他自治系統有多個連接,但拒絕傳送通過流量。
  3. 轉送自治系統(transit AS),它與其他自治系統有多個連接,在一些策略準則之下,它可以傳送本地流量和通過流量。

這樣,可以將Internet的總拓撲結構看成是由一些殘樁自治系統、多接口自治系統以及轉送自治系統的任意互連。殘樁自治系統和多接口自治系統不需要使用BGP——它們通過運行EGP在自治系統之間交換可到達信息。

BGP允許使用基於策略的選路。由自治系統管理員制訂策略,並通過配置文件將策略指定給BGP。制訂策略並不是協議的一部分,但指定策略允許BGP實現在存在多個可選路徑時選擇路徑,並控制信息的重發送。選路策略與政治、安全或經濟因素有關。

BGP與RIP和OSPF的不同之處在於BGP使用TCP作爲其傳輸層協議。兩個運行BGP的系統之間建立一條TCP連接,然後交換整個BGP路由表。從這個時候開始,在路由表發生變化時,再發送更新信號。

BGP是一個距離向量協議,但是與(通告到目的地址跳數的)RIP不同的是,BGP列舉了到每個目的地址的路由(自治系統到達目的地址的序列號)。這樣就排除了一些距離向量協議的問題。採用16 bit數字表示自治系統標識。

BGP通過定期發送keepalive報文給其鄰站來檢測TCP連接對端的鏈路或主機失敗。兩個報文之間的時間間隔建議值爲30秒。應用層的keepalive報文與TCP的keepalive選項(第23章)是獨立的。

 

10.8 CIDR:無類型域間選路

在第3章中,我們指出了B類地址的缺乏,因此現在的多個網絡站點只能採用多個C類網絡號,而不採用單個B類網絡號。儘管分配這些C類地址解決了一個問題(B類地址的缺乏),但它卻帶來了另一個問題:每個C類網絡都需要一個路由表表項。無類型域間選路(CIDR)是一個防止Internet路由表膨脹的方法,它也稱爲超網(supernetting)。在RFC 1518 [Rekher and Li 1993]和RFC 1519 [Fuller et al.1993]中對它進行了描述,而[Ford,Rekhter,and Braun 1993]是它的綜述。CIDR有一個Internet Architecture Board’sblessing [Huitema 1993]。RFC1467 [Topolcic 1993]對Internet中CIDR的開發狀況進行了小結。

CIDR的基本觀點是採用一種分配多個IP地址的方式,使其能夠將路由表中的許多表項總和(summarization)成更少的數目。例如,如果給單個站點分配16個C類地址,以一種可以用總和的方式來分配這16個地址,這樣,所有這16個地址可以參照Internet上的單個路由表表項。同時,如果有8個不同的站點是通過同一個Internet服務提供商的同一個連接點接入Internet的,且這8個站點分配的8個不同IP地址可以進行總和,那麼,對於這8個站點,在Internet上,只需要單個路由表表項。

要使用這種總和,必須滿足以下三種特性:

  1. 爲進行選路要對多個IP地址進行總和時,這些IP地址必須具有相同的高位地址比特。
  2. 路由表和選路算法必須擴展成根據32 bit IP地址和32 bit掩碼做出選路決策。
  3. 必須擴展選路協議使其除了32 bit地址外,還要有32 bit掩碼。OSPF(10.6節)和RIP-2(10.5節)都能夠攜帶第4版BGP所提出的32 bit掩碼。

例如,RFC 1466 [Gerich 1993]建議歐洲新的C類地址的範圍是194.0.0.0~195.255.255.255。以16進製表示,這些地址的範圍是0xc2000000~0xc3ffffff。它代表了65536個不同的C類網絡號,但它們地址的高7bit是相同的。在歐洲以外的國家裏,可以採用IP地址爲0xc2000000和32 bit 0xfe000000(254.0.0.0)爲掩碼的單個路由表表項來對所有這些65536個C類網絡號選路到單個點上。C類地址的後面各比特位(即在194或195後面各比特)也可以進行層次分配,例如以國家或服務提供商分配,以允許對在歐洲路由器之間使用除了這32 bit掩碼的高7bit外的其他比特進行概括。

CIDR同時還使用一種技術,使最佳匹配總是最長的匹配:即在32 bit掩碼中,它具有最大值。我們繼續採用上一段中所用的例子,歐洲的一個服務提供商可能會採用一個與其他歐洲服務提供商不同的接入點。如果給該提供商分配的地址組是從 194.0.16.0到 194.0.31.255(16個C類網絡號),那麼可能只有這些網絡的路由表項的IP地址是 194.0.16.0,掩碼爲 255.255.240.0(0xfffff 000)。發往194.0.22.1地址的數據報將同時與這個路由表表項和其他歐洲C類地址的表項進行匹配。但是由於掩碼 255.255.240 比 254.0.0.0 更“長”,因此將採用具有更長掩碼的路由表表項。

“無類型”的意思是現在的選路決策是基於整個32 bit IP地址的掩碼操作,而不管其IP地址是A類、B類或是C類,都沒有什麼區別。

CIDR最初是針對新的C類地址提出的。這種變化將使Internet路由表增長的速度緩慢下來,但對於現存的選路則沒有任何幫助。這是一個短期解決方案。作爲一個長期解決方案,如果將CIDR應用於所有IP地址,並根據各洲邊界和服務提供商對已經存在的IP地址進行重新分配(且所有現有主機重新進行編址!),那麼[Ford, Rekhter, and Braun 1993]宣稱,目前包含10 000網絡表項的路由表將會減少成只有200個表項。

 

10.9 小結

有兩種基本的選路協議,即用於同一自治系統各路由器之間的內部網關協議(IGP)和用於不同自治系統內路由器通信的外部網關協議(EGP)

最常用的IGP是路由信息協議(RIP),而OSPF是一個正在得到廣泛使用的新IGP。一種新近流行的EGP是邊界網關協議(BGP)。在本章中,我們討論了RIP及其交換的報文類型。第2版RIP是其最近的一個改進版,它支持子網,還有一些其他改進技術。同時也對OSPF、BGP和無類型域間選路(CIDR)進行了描述。CIDR是一種新技術,可以減小Internet路由表的大小。

你可能還會遇到一些其他的OSI選路協議。域間選路協議(IDRP)最開始時,是一個爲了使用OSI地址而不是IP地址,而進行修改的BGP版本。Intermediate System to Intermediate System協議(IS-IS)是OSI的標準IGP。可以用它來選路CLNP(無連接網絡協議),這是一種與IP類似的OSI協議。IS-IS和OSPF相似。

動態選路仍然是一個網間互連的研究熱點。對使用的選路協議和運行的路由守護程序進行選擇,是一項複雜的工作。[Perlman 1992]提供了許多細節。

 

 

發佈了197 篇原創文章 · 獲贊 57 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章