1. 程式人生 > >TCP/IP詳解 (10) 動態選路協議

TCP/IP詳解 (10) 動態選路協議

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,現在已經不用了。

(下面是原書p.128①的譯文)
新的RFC [Almquist 1993]規定,實現任何動態選路協議的路由器必須同時支援
OSPF和RIP,還可以支援其它IGP協議。

外部閘道器協議EGP(Exterier Gateway Protocol)或域內選路協議的分隔選路協議
用於不同自治系統之間的路由器。在歷史上,(令人容易混淆)改進的EGP有著一個與
它名稱相同的協議:EGP。新EGP是當前在NSFNET骨幹網和一些連線到骨幹網的區域性網
絡上使用的是邊界閘道器協議BGP(Border Gateway Protocol)。BGP意在取代EGP。

10.3 Unix選路守護程式
Unix系統上常常執行名為routed 路由守護程式。幾乎在所有的TCP/IP實現中都提
供該程序。該程式只使用RIP進行通訊,我們將在下一節中討論該協議。這是一種用於
小型到中型網路中的協議。
另一個程式是gated。IGP和EGP都支援它。[Fedor 1998]描述了早期開發的gated。
圖10.1對routed和兩種不同版本的gated所支援的不同選路協議進行了比較。大多數運
行路由守護程式的系統都可以執行routed,除非它們需要支援gated所支援的其它協議。

圖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是在該協議實現數年
後才出現的。

報文格式
RIP報文包含中在UDP資料報中,如圖10.2所示。(我們在第11章中對UDP進行更為
詳細的描述。)

圖10.2 封裝在UDP資料報中的RIP報文

圖10.3給出了使用IP地址時的RIP報文格式。
命令欄位為1表示請求,2表示回答。還有兩個捨棄不用的命令(3和4),兩個非正
式的命令:輪詢(5)和輪詢表項(6)。請求表示要求其它系統傳送其全部或部分路由
表。回答則包含傳送者全部或部分路由表。
版本欄位通常為1,而第2版RIP(10.5節)將此欄位設定為2。
緊跟在後面的20位元組指定地址系列(address family)(對於IP地址來說,其值是
2),IP地址以及相應的度量。我們在本節的後面可以看出,RIP的度量是以跳計數的。
採用這種20位元組格式的RIP報文可以通告多達25條路由。上限25是用來保證RIP報文
的總長度為20×25 + 4 = 504,小於512位元組。由於每個報文最多攜帶25個路由,因此
為了傳送整個路由表,經常需要多個報文。

正常執行
讓我們來看一下采用RIP協議的routed程式正常執行的結果。RIP常用的UDP埠號
是520。
·初始化:在啟動一個路由守護程式時,它先判斷啟動了哪些介面,並在每個介面
上傳送一個請求報文,要求其它路由器傳送完整路由表。在點對點鏈路中,該請求是發
送給其它終點的。如果網路支援廣播的話,這種請求是以廣播形式傳送的。目的UDP端
口號是520(這是其它路由器的路由守護程式埠號)。
這種請求報文的命令欄位為1,但地址系列欄位設定為0,而度量欄位設定為16。這
是一種要求另一端完整路由表的特殊請求報文。
·接收到請求。如果這個請求是我們剛才提到的特殊請求,那麼路由器就將完整的
路由表傳送給請求者。否則的話,就處理請求中的每一個表項:如果我們有連線到指明
地址的路由,則將度量(metric)設定成我們的值,否則將度量置為16。(度量為16是一
種稱為“無窮大”的特殊值,它意味著我們沒有到達目的的路由。)然後發回響應。
·接收到響應。使響應生效,可能會更新路由表。可能會增加新表項,對已有的表
項進行修改,或是將已有表項刪除。
·定期選路更新。每過30秒,所有或部分路由器會將其完整路由表傳送給相鄰路由
器。傳送路由表可以是廣播形式的(如在乙太網上),或是傳送給點對點鏈路的其它終
點的。
·觸發更新。每當一條路由的度量發生變化時,就對它進行更新。不需要傳送完整
路由表,而只需要傳送那些發生變化的表項。
每條路由都有與之相關的定時器。如果執行RIP的系統發現一條路由在3分鐘內未更
新,就將該路由的度量設定成無窮大(16),並標註為刪除。這意味著我們已經在6個
30秒更新時間裡沒收到通告該路由的路由器的更新了。再過60秒,將從本地路由表中刪
除該路由,以保證該路由的失效已被傳播開。

度量
RIP所使用的度量是以跳(hop)計算的。所有直接連線介面的跳數為1。考慮圖10.4
所示的路由器和網路。我們畫出的4條虛線是廣播RIP報文。

圖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地址。

問題
這種方法看起來很簡單,但它有一些缺陷。首先,RIP沒有子網地址的概念。例如,
如果標準的B類地址中16 bit的主機號不為0,那麼RIP無法區分非零部分是一個子網號,
或者是一個主機地址。有一些實現中通過接收到的RIP資訊,來使用介面的網路掩碼,
而這有可能出錯。
其次,在路由器或鏈路發生故障後,需要很長的一段時間才能穩定下來。這段時間
通常需要幾分鐘。在這段建立時間裡,可能會發生路由環路。在實現RIP時,必須採用
很多微妙的措施來防止路由環路的出現,並使其儘快建立。RFC 1058 [Hedrick 1988a]
中指出了很多實現RIP的細節。
採用跳數作為路由度量忽略了其它一些應該考慮的因素。同時,度量最大值為15則
限制了可以使用RIP的網路的大小。

例子
我們將使用ripquery程式來查詢一些路由器中的路由表,該程式可以從gated中得
到。ripquery程式通過傳送一個非正式請求(圖10.3中命令欄位為5的“poll”)給路
由器,要求得到其完整的路由表。如果在5秒內未收到響應,則傳送標準的RIP請求
(command欄位為1)。(我們前面提到過的,將地址系列欄位置為0,度量欄位置為16
的請求,要求其它路由器傳送其完整路由表。)
圖10.5給出了我們將從sun主機上查詢其路由表的兩個路由器。如果我們在主機
sun上執行ripquery程式,以得到其下一站路由器netb的選路資訊,那麼我們可以得到
下面的結果:

sun % ripquery -n netb
504 bytes from netb (140.252.1.183): 第一份報文包含504位元組
-------------------- 這裡刪除了許多行
140.252.1.0, metric 1 圖10.5上面的乙太網
140.252.13.0, metric 1 圖10.5下面的乙太網
244 bytes from netb (140.252.1.183): 第二份報文包含剩下的244位元組
下面刪除了許多行

正如我們所猜想的那樣,netb告訴我們子網的度量為1。另外,與netb相連的位於
機端的乙太網(140.252.1.0)的metric也是1。(-n引數表示直接列印IP地址而不需要
去檢視其域名。)在本例中,將netb配置成認為所有位於140.252.13子網的主機都與其
直接相連——即,netb並不知道哪些主機真正與140.252.13子網相連。由於與
140.252.13子網只有一個連線點,因此,通告每個主機的度量實際上沒有太大意義。

圖10.5 我們將要查詢其路由表內容的兩個路由器netb和gateway

圖10.6給出了使用tcpdump交換的報文。我們採用-i s10引數指定SLIP介面。

圖10.6 執行ripquery程式的tcpdump輸出結果

第一個請求發出一個RIP輪詢命令(第1行)。這個請求在5秒後超時,發出一個常
規的RIP請求(第2行)。第1行和第2行最後的24表示請求報文的長度:4個位元組的RIP首
部(包括命令和版本),然後是單個20位元組的地址和度量。
第3行是第一個回答報文。該行最後的25表示包含了25個地址和度量對,我們在前
面已經計算過,其位元組數為504。這是上面的ripquery程式所打印出來的結果。我們為
tcpdump程式指定-s600選項,以讓它從網路中讀取600個位元組。這樣,它可以接收整個
UDP資料報(而不是報文的前半部),然後打印出RIP響應的內容。我們將該輸出結果省
略了。
第4行是來自路由器的第二個響應報文,它包含後面的12個地址和度量對。我們可
以計算出,該報文的長度為12×20 + 4=244,這正是ripquery程式前面所打印出來的結
果。
如果我們越過netb路由器,到gateway,那麼可以預測到我們子網(140.252.13.0)
的度量為2。我們可以執行下面的命令來進行驗證:

sun % ripquery -n gateway
504 bytes from gateway (140.252.1.4):
-------------------- 這裡刪除了許多行
---- 140.252.1.0, metric 1 圖10.5上面的乙太網
140.252.13.0, metric 1 圖10.5下面的乙太網

這裡,位於圖10.5上面的乙太網(140.252.1.0)的度量依然是1,這是因為該以太
網直接與gateway和netb相連。而我們的子網140.252.13.0正如預想的一樣,其度量為2。

另一個例子
我們現在察看乙太網上所有非主動請求的RIP更新,以看一看RIP定期給其鄰站傳送
的資訊。圖10.7是noao.edu網路的多種排列情況。為了簡化,我們不用本文其它地方所
採用的路由器表示方式,而以Rn來代表路由器,其中n是子網號。我們以虛線表示點對
點鏈路,並給出了這些鏈路對端的IP地址。

圖10.7 noao.edu 140.252的多個網路

我們在主機solaris上執行Solaris 2.x的snoop程式,它與tcpdump相類似。我們可
以在不需要超使用者許可權的條件下執行該程式,但它只捕獲廣播報文、多播報文,以及發
送給主機的報文。圖10.8給出了在60秒內所捕獲的報文。在這裡,我們將大部分正式的
主機名以Rn來表示。

圖10.8 solaris在60秒內所捕獲到的RIP廣播報文

-P 標誌以非混雜模式捕獲報文,-tr 打印出相應的時戳,而udp port 520 只捕獲
信源或信宿埠號為520的UDP資料報。
來自R6,R4,R2,R7,R8和R3的前6個報文,每個報文只通告一個網路。檢視這些
報文,我們可以發現R2通告前往140.252.6.0的跳數為1的一條路由,R4通告前往
140.252.4.0的跳數為1的一條路由,等等。
但是,gateway路由器卻通告了15條路由。我們可以通過執行 snoop程式時加上-v
引數來檢視RIP報文的全部內容。(這個標誌輸出全部報文的全部內容:乙太網首部,
IP首部,UDP首部,以及RIP報文。我們只保留了RIP資訊而刪除了其它資訊。)圖10.9
給出了輸出結果。
把這些子網140.252.1上通告報文經過的路由與圖10.7中的拓撲結構進行比較。
使人迷惑不解的一個問題是為什麼圖10.8輸出結果中,R10通告其有4個網路而在圖
10.7中顯示的只有3個。如果我們檢視帶snoop的RIP報文,就會得到以下通告路由:

RIP: Address Metric
RIP: 140.251.0.0 16 (not reachable)
RIP: 140.252.9.0 1
RIP: 140.252.10.0 1
RIP: 140.252.11.0 1

前往B類網路140.251的路由是假的,不應該通告它。(它屬於其它機構而不是
noao.edu。)

圖10.9 來自gateway的RIP響應

圖10.8中,對於 R10傳送的RIP報文,snoop輸出“BROADCAST”符號,它表示目的
IP地址是有限的廣播地址255.255.255.255(12.2節),而不是其它路由器用來指向子
網的廣播地址(140.252.1.255)。

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。
選路域(routing domain)是一個選路守護程式的識別符號,它指出了這個資料報的所
有者。在一個Unix實現中,它可以是選路守護程式的程序號。該域允許管理者在單個路
由器上執行多個RIP例項,每個例項在一個選路域內執行。
選路標記(routing tag)是為了支援外部閘道器協議而存在的。它攜帶著一個EGP和
BGP的自治系統號。
每個表項的子網掩碼應用於相應的IP地址上。下一站IP地址指明發往目的IP地址的
報文該發往哪裡。該欄位為0意味著發往目的地址的報文應該發給傳送RIP報文的系統。

圖10.10 RIP-2報文格式

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傳送的報文包含一個距離向量(跳數)。每個路由器都根據它所接收到鄰站的
這些距離向量來更新自己的路由表。
在一個鏈路狀態協議中,路由器並不與其鄰站交換距離資訊。它採用的是每個路由
器主動地測試與其鄰站相連鏈路的狀態,將這些資訊傳送給它的其它鄰站,而鄰站將這
些資訊在自治系統中傳播出去。每個路由器接收這些鏈路狀態資訊,並建立起完整的路
由表。
從實際角度來看,二者的不同點是鏈路狀態協議總是比距離向量協議收斂更快。收
斂的意思是在路由發生變化後,例如在路由器關閉或鏈路出故障後,可以穩定下來。
[Perlman 1992]的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是ARPANET所使用
的老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:無型別域間選路(Classless Interdomain Routing)
在第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有一
個InternetArchitecture Board's blessing [Huitema 1993]。RFC 1467 [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 bitIP地址和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類網路號,但他們地址的高7 bit是相同的。在歐洲以外的國家裡,
可以採用IP地址為0xc2000000和32 bit0xfe000000 (254.0.0.0) 為掩碼的單個路由表
表項來對所有這些65536個C類網路號選路到單個點上。C類地址的後面各位元位(即在
194或195後面各位元)也可以進行層次分配,例如以國家或服務提供商分配,以允許在
歐洲路由器之間,使用除了這32 bit掩碼的高7 bit外的其它位元進行概括。
CIDR同時還使用一種技術,使最佳匹配總是最長的匹配:即在32 bit掩碼中,它具
有最大值。我們繼續採用上一段中所用的例子,歐洲的一個服務提供商可能會採用一個
與其它歐洲服務提供商不同的接入點。如果給該提供商分配的地址組是從194.0.16.0到
194.0.31.255 (16個C類網路號),那麼可能只有這些網路的路由表項的IP地址是
194.0.16.0,掩碼為255.255.240.0 (0xfffff000)。發往194.0.22.1地址的資料報將同
時與這個路由表表項與其它歐洲C類地址的表項進行匹配。但是由於掩碼255.255.240比
254.0.0.0更“長”,因此將採用具有更長掩碼的路由表表項。
“無型別”的意思是現在的選路決策是基於整個32 bitIP地址的掩碼操作。而不管
其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]提供了許多細節。

習題:
10.1 在圖10.9中哪些路由是從路由器kpno進入gateway的?
10.2 假設一個路由器要使用RIP通告30個路由,這需要一個包含25條路由和另一個包含
5條路由的資料報。如果每過一個小時,第一個包含25條路由的資料報丟失一次,那麼
其結果如何?
10.3 OSPF報文格式中有一個校驗和欄位,而RIP報文則沒有此項,這是為什麼?
10.4 像OSPF這樣的負載平衡,對於傳輸層的影響是什麼?
10.5 查閱RFC 1058 關於實現RIP的其它資料。在圖10.8中,140.252.1網路的每個路由
器只通告它所提供的路由,而它並不能通過其它路由器的廣播中知道任何其它路由。這
種技術的名稱是什麼?
10.6 在3.4節中,我們說過除了圖10.7中所示的8個路由器外,140.252.1子網上還有超
過100個主機。那麼這100個主機是如何處理每30秒到達它們的8個廣播資訊呢(圖
10.8)?

10-1