10.1 引言
在前面各章中明刷,我們討論了靜態(tài)選路廊酣。在配置接口時(shí)食侮,以默認(rèn)方式生成路由表項(xiàng)(對(duì)于直接連接的接口)荷并,并通過(guò)route命令增加表項(xiàng)(通常從系統(tǒng)自引導(dǎo)程序文件)合砂,或是通過(guò)ICMP重定向生成表項(xiàng)(通常是在默認(rèn)方式出錯(cuò)的情況下)。
在網(wǎng)絡(luò)很小璧坟,且與其他網(wǎng)絡(luò)只有單個(gè)連接點(diǎn)且沒(méi)有多余路由時(shí)(若主路由失敗既穆,可以使用備用路由),采用這種方法是可行的雀鹃。如果上述三種情況不能全部滿(mǎn)足幻工,通常使用動(dòng)態(tài)選
路。
本章討論動(dòng)態(tài)選路協(xié)議黎茎,它用于路由器間的通信囊颅。我們主要討論RIP,即選路信息協(xié)議(Routing Infromation Protocol)傅瞻,大多數(shù)TCP/IP實(shí)現(xiàn)都提供這個(gè)應(yīng)用廣泛的協(xié)議踢代。然后討論兩種新的選路協(xié)議,OSPF和BGP嗅骄。本章的最后研究一種名叫無(wú)分類(lèi)域間選路的新的選路技術(shù)胳挎,現(xiàn)在Internet上正在開(kāi)始采用該協(xié)議以保持B類(lèi)網(wǎng)絡(luò)的數(shù)量。
10.2 動(dòng)態(tài)選路
當(dāng)相鄰路由器之間進(jìn)行通信溺森,以告知對(duì)方每個(gè)路由器當(dāng)前所連接的網(wǎng)絡(luò)慕爬,這時(shí)就出現(xiàn)了動(dòng)態(tài)選路。路由器之間必須采用選路協(xié)議進(jìn)行通信屏积,這樣的選路協(xié)議有很多種医窿。路由器上有一個(gè)進(jìn)程稱(chēng)為路由守護(hù)程序(routing daemon),它運(yùn)行選路協(xié)議炊林,并與其相鄰的一些路由器進(jìn)行通信姥卢。正如圖9-1所示,路由守護(hù)程序根據(jù)它從相鄰路由器接收到的信息渣聚,更新內(nèi)核中的路由表独榴。
動(dòng)態(tài)選路并不改變我們?cè)?.2節(jié)中所描述的內(nèi)核在IP層的選路方式。這種選路方式稱(chēng)為選路機(jī)制(routing mechanism)饵逐。內(nèi)核搜索路由表括眠,查找主機(jī)路由、網(wǎng)絡(luò)路由以及默認(rèn)路由的方式并沒(méi)有改變倍权。僅僅是放置到路由表中的信息改變了—當(dāng)路由隨時(shí)間變化時(shí)掷豺,路由是由路由守護(hù)程序動(dòng)態(tài)地增加或刪除捞烟,而不是來(lái)自于自引導(dǎo)程序文件中的route命令。
正如前面所描述的那樣当船,路由守護(hù)程序?qū)⑦x路策略(routing policy)加入到系統(tǒng)中题画,選擇路由并加入到內(nèi)核的路由表中。如果守護(hù)程序發(fā)現(xiàn)前往同一信宿存在多條路由德频,那么它(以某種方法)將選擇最佳路由并加入內(nèi)核路由表中苍息。如果路由守護(hù)程序發(fā)現(xiàn)一條鏈路已經(jīng)斷開(kāi)(可能是路由器崩潰或電話(huà)線(xiàn)路不好),它可以刪除受影響的路由或增加另一條路由以繞過(guò)該問(wèn)題壹置。
在像Internet這樣的系統(tǒng)中竞思,目前采用了許多不同的選路協(xié)議。Internet是以一組自治系統(tǒng)(AS钞护,Autonomous System)的方式組織的盖喷,每個(gè)自治系統(tǒng)通常由單個(gè)實(shí)體管理。常常將一個(gè)公司或大學(xué)校園定義為一個(gè)自治系統(tǒng)难咕。NSFNET的Internet骨干網(wǎng)形成一個(gè)自治系統(tǒng)课梳,這是因?yàn)楣歉删W(wǎng)中的所有路由器都在單個(gè)的管理控制之下。
每個(gè)自治系統(tǒng)可以選擇該自治系統(tǒng)中各個(gè)路由器之間的選路協(xié)議余佃。這種協(xié)議我們稱(chēng)之為內(nèi)部網(wǎng)關(guān)協(xié)議IGP(Interior Gateway Protocol)或域內(nèi)選路協(xié)議(intradomain routing protocol)暮刃。最常用的IGP是選路信息協(xié)議RIP。一種新的IGP是開(kāi)放最短路徑優(yōu)先OSPF(Open Shortest Path First)協(xié)議爆土。它意在取代RIP椭懊。另一種1986年在原來(lái)NSFNET骨干網(wǎng)上使用的較早的IGP協(xié)議——HELLO,現(xiàn)在已經(jīng)不用了步势。
新的RFC[Almquist 1993]規(guī)定灾搏,實(shí)現(xiàn)任何動(dòng)態(tài)選路協(xié)議的路由器必須同時(shí)支持OSPF和RIP,還可以支持其他IGP協(xié)議立润。
外部網(wǎng)關(guān)協(xié)議EGP(Exterier Gateway Protocol)或域內(nèi)選路協(xié)議的分隔選路協(xié)議用于不同自治系統(tǒng)之間的路由器。在歷史上媳板,(令人容易混淆)改進(jìn)的EGP有著一個(gè)與它名稱(chēng)相同的協(xié)議:EGP桑腮。新EGP是當(dāng)前在NSFNET骨干網(wǎng)和一些連接到骨干網(wǎng)的區(qū)域性網(wǎng)絡(luò)上使用的是邊界網(wǎng)關(guān)協(xié)議BGP(Border Gateway Protocol)。BGP意在取代EGP蛉幸。
10.3 Unix選路守護(hù)程序
Unix系統(tǒng)上常常運(yùn)行名為routed路由守護(hù)程序破讨。幾乎在所有的TCP/IP實(shí)現(xiàn)中都提供該程序。該程序只使用RIP進(jìn)行通信奕纫,我們將在下一節(jié)中討論該協(xié)議提陶。這是一種用于小型到中型網(wǎng)絡(luò)中的協(xié)議。
另一個(gè)程序是gated匹层。IGP和EGP都支持它隙笆。[Fedor 1998]描述了早期開(kāi)發(fā)的gated锌蓄。圖10-1對(duì)routed和兩種不同版本的gated所支持的不同選路協(xié)議進(jìn)行了比較。大多數(shù)運(yùn)行路由守護(hù)程序的系統(tǒng)都可以運(yùn)行routed撑柔,除非它們需要支持gated所支持的其他協(xié)議瘸爽。
我們?cè)谙乱还?jié)中描述RIP版本1,10.5節(jié)描述它與RIP版本2的不同點(diǎn)铅忿,10.6節(jié)描述OSPF剪决,10.7節(jié)描述BGP。
10.4 RIP:選路信息協(xié)議
本節(jié)對(duì)RIP進(jìn)行了描述檀训,這是因?yàn)樗亲顝V為使用(也是最受攻擊)的選路協(xié)議柑潦。對(duì)于RIP的正式描述文件是RFC 1058 [Hedrick 1988a],但是該RFC是在該協(xié)議實(shí)現(xiàn)數(shù)年后才出現(xiàn)的峻凫。
10.4.1 報(bào)文格式
RIP報(bào)文包含中在UDP數(shù)據(jù)報(bào)中渗鬼,如圖10-2所示(在第11章中對(duì)UDP進(jìn)行更為詳細(xì)的描述)。
圖10-3給出了使用IP地址時(shí)的RIP報(bào)文格式蔚晨。
命令字段為1表示請(qǐng)求乍钻,2表示應(yīng)答。還有兩個(gè)舍棄不用的命令(3和4)铭腕,兩個(gè)非正式的命令:輪詢(xún)(5)和輪詢(xún)表項(xiàng)(6)银择。請(qǐng)求表示要求其他系統(tǒng)發(fā)送其全部或部分路由表。應(yīng)答則包含發(fā)送者全部或部分路由表累舷。
版本字段通常為1浩考,而第2版RIP(10.5節(jié))將此字段設(shè)置為2。
緊跟在后面的20字節(jié)指定地址系列(address family)(對(duì)于IP地址來(lái)說(shuō)被盈,其值是2)析孽、IP地址以及相應(yīng)的度量。在本節(jié)的后面可以看出只怎,RIP的度量是以跳計(jì)數(shù)的袜瞬。
采用這種20字節(jié)格式的RIP報(bào)文可以通告多達(dá)25條路由。上限25是用來(lái)保證RIP報(bào)文的總長(zhǎng)度為20×25+4=504身堡,小于512字節(jié)邓尤。由于每個(gè)報(bào)文最多攜帶25個(gè)路由,因此為了發(fā)送整個(gè)路由表贴谎,經(jīng)常需要多個(gè)報(bào)文汞扎。
10.4.2 正常運(yùn)行
讓我們來(lái)看一下采用RIP協(xié)議的routed程序正常運(yùn)行的結(jié)果。RIP常用的UDP端口號(hào)是520擅这。
1:初始化:在啟動(dòng)一個(gè)路由守護(hù)程序時(shí)澈魄,它先判斷啟動(dòng)了哪些接口,并在每個(gè)接口上發(fā)送一個(gè)請(qǐng)求報(bào)文仲翎,要求其他路由器發(fā)送完整路由表痹扇。在點(diǎn)對(duì)點(diǎn)鏈路中铛漓,該請(qǐng)求是發(fā)送給其他終點(diǎn)的。如果網(wǎng)絡(luò)支持廣播的話(huà)帘营,這種請(qǐng)求是以廣播形式發(fā)送的票渠。目的UDP端口號(hào)是520(這是其他路由器的路由守護(hù)程序端口號(hào))。 這種請(qǐng)求報(bào)文的命令字段為1芬迄,但地址系列字段設(shè)置為0问顷,而度量字段設(shè)置為16。這是一種要求另一端完整路由表的特殊請(qǐng)求報(bào)文禀梳。
2:接收到請(qǐng)求杜窄。如果這個(gè)請(qǐng)求是剛才提到的特殊請(qǐng)求,那么路由器就將完整的路由表發(fā)送給請(qǐng)求者算途。否則塞耕,就處理請(qǐng)求中的每一個(gè)表項(xiàng):如果有連接到指明地址的路由,則將度量設(shè)置成我們的值嘴瓤,否則將度量置為16(度量為16是一種稱(chēng)為“無(wú)窮大”的特殊值扫外,它意味著沒(méi)有到達(dá)目的的路由)。然后發(fā)回響應(yīng)廓脆。
3:接收到響應(yīng)筛谚。使響應(yīng)生效,可能會(huì)更新路由表停忿〖萁玻可能會(huì)增加新表項(xiàng),對(duì)已有的表項(xiàng)進(jìn)行修改席赂,或是將已有表項(xiàng)刪除吮铭。
4:定期選路更新。每過(guò)30秒颅停,所有或部分路由器會(huì)將其完整路由表發(fā)送給相鄰路由器谓晌。發(fā)送路由表可以是廣播形式的(如在以太網(wǎng)上),或是發(fā)送給點(diǎn)對(duì)點(diǎn)鏈路的其他終點(diǎn)的癞揉。
5:觸發(fā)更新扎谎。每當(dāng)一條路由的度量發(fā)生變化時(shí),就對(duì)它進(jìn)行更新烧董。不需要發(fā)送完整路由表,而只需要發(fā)送那些發(fā)生變化的表項(xiàng)胧奔。
每條路由都有與之相關(guān)的定時(shí)器逊移。如果運(yùn)行RIP的系統(tǒng)發(fā)現(xiàn)一條路由在3分鐘內(nèi)未更新,就將該路由的度量設(shè)置成無(wú)窮大(16)龙填,并標(biāo)注為刪除胳泉。這意味著已經(jīng)在6個(gè)30秒更新時(shí)間里沒(méi)收到通告該路由的路由器的更新了拐叉。再過(guò)60秒,將從本地路由表中刪除該路由扇商,以保證該路由的失效已被傳播開(kāi)凤瘦。
10.4.3 度量
RIP所使用的度量是以跳(hop)計(jì)算的。所有直接連接接口的跳數(shù)為1案铺∈呓妫考慮圖10-4所示的路由器和網(wǎng)絡(luò)。畫(huà)出的4條虛線(xiàn)是廣播RIP報(bào)文控汉。
路由器R1通過(guò)發(fā)送廣播到N1通告它與N2之間的跳數(shù)是1(發(fā)送給N1的廣播中通告它與N1之間的路由是無(wú)用的)笔诵。同時(shí)也通過(guò)發(fā)送廣播給N2通告它與N1之間的跳數(shù)為1。同樣姑子,R2通告它與N2的度量為1乎婿,與N3的度量為1。
如果相鄰路由器通告它與其他網(wǎng)絡(luò)由的跳數(shù)為1街佑,那么我們與那個(gè)網(wǎng)絡(luò)的度量就是2谢翎,這是因?yàn)闉榱税l(fā)送報(bào)文到該網(wǎng)絡(luò),我們必須經(jīng)過(guò)那個(gè)路由器沐旨。在我們的例子中森逮,R2到N1的度量是2,與R1到N3的度量一樣希俩。
由于每個(gè)路由器都發(fā)送其路由表給鄰站吊宋,因此,可以判斷在同一個(gè)自治系統(tǒng)AS內(nèi)到每個(gè)網(wǎng)絡(luò)的路由颜武。如果在該AS內(nèi)從一個(gè)路由器到一個(gè)網(wǎng)絡(luò)有多條路由璃搜,那么路由器將選擇跳數(shù)最小的路由,而忽略其他路由鳞上。
跳數(shù)的最大值是15这吻,這意味著RIP只能用在主機(jī)間最大跳數(shù)值為15的AS內(nèi)。度量為16表示到無(wú)路由到達(dá)該IP地址篙议。
10.4.4 問(wèn)題
這種方法看起來(lái)很簡(jiǎn)單唾糯,但它有一些缺陷。首先鬼贱,RIP沒(méi)有子網(wǎng)地址的概念移怯。例如,如果標(biāo)準(zhǔn)的B類(lèi)地址中16 bit的主機(jī)號(hào)不為0这难,那么RIP無(wú)法區(qū)分非零部分是一個(gè)子網(wǎng)號(hào)舟误,或者是一個(gè)主機(jī)地址。有一些實(shí)現(xiàn)中通過(guò)接收到的RIP信息姻乓,來(lái)使用接口的網(wǎng)絡(luò)掩碼嵌溢,而這有可能出錯(cuò)眯牧。
其次,在路由器或鏈路發(fā)生故障后赖草,需要很長(zhǎng)的一段時(shí)間才能穩(wěn)定下來(lái)学少。這段時(shí)間通常需要幾分鐘。在這段建立時(shí)間里秧骑,可能會(huì)發(fā)生路由環(huán)路版确。在實(shí)現(xiàn)RIP時(shí),必須采用很多微妙的措施來(lái)防止路由環(huán)路的出現(xiàn)腿堤,并使其盡快建立阀坏。RFC 1058 [Hedrick 1988a]中指出了很多實(shí)現(xiàn)RIP的細(xì)節(jié)。
采用跳數(shù)作為路由度量忽略了其他一些應(yīng)該考慮的因素笆檀。同時(shí)忌堂,度量最大值為15則限制了可以使用RIP的網(wǎng)絡(luò)的大小。
10.4.5 舉例
我們將使用ripquery程序來(lái)查詢(xún)一些路由器中的路由表酗洒,該程序可以從gated中得到士修。ripquery程序通過(guò)發(fā)送一個(gè)非正式請(qǐng)求(圖10-3中命令字段為5的“poll”)給路由器,要求得到其完整的路由表樱衷。如果在5秒內(nèi)未收到響應(yīng)棋嘲,則發(fā)送標(biāo)準(zhǔn)的RIP請(qǐng)求(command字段為1)(前面提到過(guò)的,將地址系列字段置為0矩桂,度量字段置為16的請(qǐng)求沸移,要求其他路由器發(fā)送其完整路由表)。
圖10-5給出了將從sun主機(jī)上查詢(xún)其路由表的兩個(gè)路由器侄榴。如果在主機(jī)sun上執(zhí)行ripquery程序雹锣,以得到其下一站路由器netb的選路信息,那么可以得到下面的結(jié)果:
正如我們所猜想的那樣癞蚕,netb告訴我們子網(wǎng)的度量為1蕊爵。另外,與netb相連的位于機(jī)端的以太網(wǎng)(140.252.1.0)的metric也是1(-n參數(shù)表示直接打印IP地址而不需要去查看其域名)桦山。在本例中攒射,將netb配置成認(rèn)為所有位于140.252.13子網(wǎng)的主機(jī)都與其直接相連—即,netb并不知道哪些主機(jī)真正與140.252.13子網(wǎng)相連恒水。由于與140.252.13子網(wǎng)只有一個(gè)連接點(diǎn)会放,因此,通告每個(gè)主機(jī)的度量實(shí)際上沒(méi)有太大意義钉凌。
圖10-6給出了使用tcpdump交換的報(bào)文咧最。采用-i s10選項(xiàng)指定SLIP接口。
第1個(gè)請(qǐng)求發(fā)出一個(gè)RIP輪詢(xún)命令(第1行)。這個(gè)請(qǐng)求在5秒后超時(shí)窗市,發(fā)出一個(gè)常規(guī)的RIP請(qǐng)求(第2行)。第1行和第2行最后的24表示請(qǐng)求報(bào)文的長(zhǎng)度:4個(gè)字節(jié)的RIP首部(包括命令和版本)饮笛,然后是單個(gè)20字節(jié)的地址和度量咨察。
第3行是第一個(gè)應(yīng)答報(bào)文。該行最后的25表示包含了25個(gè)地址和度量對(duì)福青,我們?cè)谇懊嬉呀?jīng)計(jì)算過(guò)摄狱,其字節(jié)數(shù)為504今缚。這是上面的ripquery程序所打印出來(lái)的結(jié)果参淹。我們?yōu)閠cpdump程序指定-s600選項(xiàng),以讓它從網(wǎng)絡(luò)中讀取600個(gè)字節(jié)围小。這樣宪迟,它可以接收整個(gè)UDP數(shù)據(jù)報(bào)(而不是報(bào)文的前半部)酣衷,然后打印出RIP響應(yīng)的內(nèi)容。該輸出結(jié)果省略了次泽。
第4行是來(lái)自路由器的第二個(gè)響應(yīng)報(bào)文穿仪,它包含后面的12個(gè)地址和度量對(duì)∫饣纾可以計(jì)算出該報(bào)文的長(zhǎng)度為12×20+4=244啊片,這正是ripquery程序所打印出來(lái)的結(jié)果。
如果越過(guò)netb路由器玖像,到gateway紫谷,那么可以預(yù)測(cè)到我們子網(wǎng)(140.252.13.0)的度量為2【枇龋可以運(yùn)行下面的命令來(lái)進(jìn)行驗(yàn)證:
這里笤昨,位于圖10-5上面的以太網(wǎng)(140.252.1.0)的度量依然是1,這是因?yàn)樵撘蕴W(wǎng)直接與gateway和netb相連上真。而我們的子網(wǎng)140.252.13.0正如預(yù)想的一樣咬腋,其度量為2。
10.4.6 另一個(gè)例子
現(xiàn)在察看以太網(wǎng)上所有非主動(dòng)請(qǐng)求的RIP更新睡互,以看一看RIP定期給其鄰站發(fā)送的信息根竿。圖10-7是noao.edu網(wǎng)絡(luò)的多種排列情況。為了簡(jiǎn)化就珠,我們不用本文其他地方所采用的路由器表示方式寇壳,而以Rn來(lái)代表路由器,其中n是子網(wǎng)號(hào)妻怎。以虛線(xiàn)表示點(diǎn)對(duì)點(diǎn)鏈路壳炎,并給出了這些鏈路對(duì)端的IP地址。
在主機(jī)solaris上運(yùn)行Solaris 2.x的snoop程序,它與tcpdump相類(lèi)似匿辩。我們可以在不需要超用戶(hù)權(quán)限的條件下運(yùn)行該程序腰耙,但它只捕獲廣播報(bào)文、多播報(bào)文以及發(fā)送給主機(jī)的報(bào)文铲球。圖10-8給出了在60秒內(nèi)所捕獲的報(bào)文挺庞。在這里,我們將大部分正式的主機(jī)名以Rn來(lái)表示稼病。
-P標(biāo)志以非混雜模式捕獲報(bào)文选侨,-tr打印出相應(yīng)的時(shí)戳,而udp port 520只捕獲信源或信宿端口號(hào)為520的UDP數(shù)據(jù)報(bào)然走。
來(lái)自R6援制、R4、R2芍瑞、R7晨仑、R8和R3的前6個(gè)報(bào)文,每個(gè)報(bào)文只通告一個(gè)網(wǎng)絡(luò)啄巧。查看這些報(bào)文寻歧,可以發(fā)現(xiàn)R2通告前往140.252.6.0的跳數(shù)為1的一條路由,R4通告前往140.252.4.0的跳數(shù)為1的一條路由秩仆,等等码泛。
但是,gateway路由器卻通告了15條路由澄耍。我們可以通過(guò)運(yùn)行snoop程序時(shí)加上-v參數(shù)來(lái)查看RIP報(bào)文的全部?jī)?nèi)容(這個(gè)標(biāo)志輸出全部報(bào)文的全部?jī)?nèi)容:以太網(wǎng)首部噪珊、IP首部、UDP首部以及RIP報(bào)文齐莲。我們只保留了RIP信息而刪除了其他信息)痢站。圖10-9給出了輸出結(jié)果。
把這些子網(wǎng)140.252.1上通告報(bào)文經(jīng)過(guò)的路由與圖10-7中的拓?fù)浣Y(jié)構(gòu)進(jìn)行比較选酗。
使人迷惑不解的一個(gè)問(wèn)題是為什么圖10-8輸出結(jié)果中阵难,R10通告其有4個(gè)網(wǎng)絡(luò)而在圖10-7中顯示的只有3個(gè)。如果查看帶snoop的RIP報(bào)文芒填,就會(huì)得到以下通告路由:
前往B類(lèi)網(wǎng)絡(luò)140.251的路由是假的呜叫,不應(yīng)該通告它(它屬于其他機(jī)構(gòu)而不是noao.edu)。
圖10-8中殿衰,對(duì)于R10發(fā)送的RIP報(bào)文朱庆,snoop輸出“BROADCAST”符號(hào),它表示目的IP地址是有限的廣播地址255.255.255.255(12.2節(jié))闷祥,而不是其他路由器用來(lái)指向子網(wǎng)的廣播地址(140.252.1.255)娱颊。
10.5 RIP版本2
RFC 1388 [Malkin 1993a]中對(duì)RIP定義進(jìn)行了擴(kuò)充,通常稱(chēng)其結(jié)果為RIP-2。這些擴(kuò)充并不改變協(xié)議本身箱硕,而是利用圖10-3中的一些標(biāo)注為“必須為0”的字段來(lái)傳遞一些額外的信息拴竹。如果RIP忽略這些必須為0的字段,那么剧罩,RIP和RIP-2可以互操作殖熟。
圖10-10重新給出了由RIP-2定義的圖。對(duì)于RIP-2來(lái)說(shuō)斑响,其版本字段為2。
選路域(routing domain)是一個(gè)選路守護(hù)程序的標(biāo)識(shí)符钳榨,它指出了這個(gè)數(shù)據(jù)報(bào)的所有者舰罚。在一個(gè)Unix實(shí)現(xiàn)中,它可以是選路守護(hù)程序的進(jìn)程號(hào)薛耻。該域允許管理者在單個(gè)路由器上運(yùn)行多個(gè)RIP實(shí)例营罢,每個(gè)實(shí)例在一個(gè)選路域內(nèi)運(yùn)行。
選路標(biāo)記(routing tag)是為了支持外部網(wǎng)關(guān)協(xié)議而存在的饼齿。它攜帶著一個(gè)EGP和BGP的自治系統(tǒng)號(hào)饲漾。
每個(gè)表項(xiàng)的子網(wǎng)掩碼應(yīng)用于相應(yīng)的IP地址上。下一站IP地址指明發(fā)往目的IP地址的報(bào)文該發(fā)往哪里缕溉。該字段為0意味著發(fā)往目的地址的報(bào)文應(yīng)該發(fā)給發(fā)送RIP報(bào)文的系統(tǒng)考传。
RIP-2提供了一種簡(jiǎn)單的鑒別機(jī)制≈づ福可以指定RIP報(bào)文的前20字節(jié)表項(xiàng)地址系列為0xffff僚楞,路由標(biāo)記為2。表項(xiàng)中的其余16字節(jié)包含一個(gè)明文口令枉层。
最后泉褐,RIP-2除了廣播(第12章)外,還支持多播鸟蜡。這可以減少不收聽(tīng)RIP-2報(bào)文的主機(jī)的負(fù)載膜赃。
10.6 OSPF:開(kāi)放最短路徑優(yōu)先
OSPF是除RIP外的另一個(gè)內(nèi)部網(wǎng)關(guān)協(xié)議。它克服了RIP的所有限制揉忘。RFC 1247[Moy 1991]中對(duì)第2版OSPF進(jìn)行了描述跳座。
與采用距離向量的RIP協(xié)議不同的是,OSPF是一個(gè)鏈路狀態(tài)協(xié)議癌淮。距離向量的意思是躺坟,RIP發(fā)送的報(bào)文包含一個(gè)距離向量(跳數(shù))。每個(gè)路由器都根據(jù)它所接收到鄰站的這些距離向量來(lái)更新自己的路由表乳蓄。
在一個(gè)鏈路狀態(tài)協(xié)議中咪橙,路由器并不與其鄰站交換距離信息。它采用的是每個(gè)路由器主動(dòng)地測(cè)試與其鄰站相連鏈路的狀態(tài),將這些信息發(fā)送給它的其他鄰站美侦,而鄰站將這些信息在自治系統(tǒng)中傳播出去产舞。每個(gè)路由器接收這些鏈路狀態(tài)信息,并建立起完整的路由表菠剩。
從實(shí)際角度來(lái)看易猫,二者的不同點(diǎn)是鏈路狀態(tài)協(xié)議總是比距離向量協(xié)議收斂更快。收斂的意思是在路由發(fā)生變化后具壮,例如在路由器關(guān)閉或鏈路出故障后准颓,可以穩(wěn)定下來(lái)。[Perlman1992]的9.3節(jié)對(duì)這兩種類(lèi)型的選路協(xié)議的其他方面進(jìn)行了比較棺妓。
OSPF與RIP(以及其他選路協(xié)議)的不同點(diǎn)在于攘已,OSPF直接使用IP。也就是說(shuō)怜跑,它并不使用UDP或TCP样勃。對(duì)于IP首部的protocol字段,OSPF有其自己的值(圖3-1)性芬。
另外峡眶,作為一種鏈路狀態(tài)協(xié)議而不是距離向量協(xié)議,OSPF還有著一些優(yōu)于RIP的特點(diǎn)植锉。
1:OSPF可以對(duì)每個(gè)IP服務(wù)類(lèi)型(圖3-2)計(jì)算各自的路由集辫樱。這意味著對(duì)于任何目的,可以有多個(gè)路由表表項(xiàng)俊庇,每個(gè)表項(xiàng)對(duì)應(yīng)著一個(gè)IP服務(wù)類(lèi)型搏熄。
2:給每個(gè)接口指派一個(gè)無(wú)維數(shù)的費(fèi)用∠境啵可以通過(guò)吞吐率心例、往返時(shí)間、可靠性或其他性能來(lái)進(jìn)行指派鞋囊≈购螅可以給每個(gè)IP服務(wù)類(lèi)型指派一個(gè)單獨(dú)的費(fèi)用。
3:當(dāng)對(duì)同一個(gè)目的地址存在著多個(gè)相同費(fèi)用的路由時(shí)溜腐,OSPF在這些路由上平均分配流量译株。我們稱(chēng)之為流量平衡。
4:OSPF支持子網(wǎng):子網(wǎng)掩碼與每個(gè)通告路由相連挺益。這樣就允許將一個(gè)任何類(lèi)型的IP地址分割成多個(gè)不同大小的子網(wǎng)(我們?cè)?.7節(jié)中給出了這樣的一個(gè)例子歉糜,稱(chēng)之為變長(zhǎng)度子網(wǎng))。到一個(gè)主機(jī)的路由是通過(guò)全1子網(wǎng)掩碼進(jìn)行通告的望众。默認(rèn)路由是以IP地址為0.0.0.0匪补、網(wǎng)絡(luò)掩碼為全0進(jìn)行通告的伞辛。
5:路由器之間的點(diǎn)對(duì)點(diǎn)鏈路不需要每端都有一個(gè)IP地址,我們稱(chēng)之為無(wú)編號(hào)網(wǎng)絡(luò)夯缺。這樣可以節(jié)省IP地址—現(xiàn)在非常緊缺的一種資源蚤氏。
6:采用了一種簡(jiǎn)單鑒別機(jī)制∮欢担可以采用類(lèi)似于RIP-2機(jī)制(10.5節(jié))的方法指定一個(gè)明文口令竿滨。
7:OSPF采用多播(第12章),而不是廣播形式捏境,以減少不參與OSPF的系統(tǒng)負(fù)載于游。隨著大部分廠(chǎng)商支持OSPF,在很多網(wǎng)絡(luò)中OSPF將逐步取代RIP垫言。
10.7 BGP:邊界網(wǎng)關(guān)協(xié)議
BGP是一種不同自治系統(tǒng)的路由器之間進(jìn)行通信的外部網(wǎng)關(guān)協(xié)議曙砂。BGP是ARPA NET所使用的老EGP的取代品。RFC1267 [Lougheed and Rekhter 1991]對(duì)第3版的BGP進(jìn)行了描述骏掀。
RFC 1268 [Rekhter and Gross 1991]描述了如何在Internet中使用BGP。下面對(duì)于BGP的大部分描述都來(lái)自于這兩個(gè)RFC文檔柱告。同時(shí)截驮,1993年開(kāi)發(fā)第4版的BGP(見(jiàn)RFC 1467 [Topolcic 1993]),以支持我們將在10.8節(jié)描述的CIDR际度。
BGP系統(tǒng)與其他BGP系統(tǒng)之間交換網(wǎng)絡(luò)可到達(dá)信息葵袭。這些信息包括數(shù)據(jù)到達(dá)這些網(wǎng)絡(luò)所必須經(jīng)過(guò)的自治系統(tǒng)AS中的所有路徑。這些信息足以構(gòu)造一幅自治系統(tǒng)連接圖乖菱。然后坡锡,可以根據(jù)連接圖刪除選路環(huán),制訂選路策略窒所。
首先鹉勒,我們將一個(gè)自治系統(tǒng)中的IP數(shù)據(jù)報(bào)分成本地流量和通過(guò)流量。在自治系統(tǒng)中吵取,本地流量是起始或終止于該自治系統(tǒng)的流量禽额。也就是說(shuō),其信源IP地址或信宿IP地址所指定的主機(jī)位于該自治系統(tǒng)中皮官。其他的流量則稱(chēng)為通過(guò)流量脯倒。在Internet中使用BGP的一個(gè)目的就是減少通過(guò)流量。
可以將自治系統(tǒng)分為以下幾種類(lèi)型:
1:殘樁自治系統(tǒng)(stub AS)捺氢,它與其他自治系統(tǒng)只有單個(gè)連接藻丢。stub AS只有本地流量。
2:多接口自治系統(tǒng)(multihomed AS)摄乒,它與其他自治系統(tǒng)有多個(gè)連接悠反,但拒絕傳送通過(guò)流量残黑。
3:轉(zhuǎn)送自治系統(tǒng)(transit AS),它與其他自治系統(tǒng)有多個(gè)連接问慎,在一些策略準(zhǔn)則之下萍摊,它可以傳送本地流量和通過(guò)流量。
這樣如叼,可以將Internet的總拓?fù)浣Y(jié)構(gòu)看成是由一些殘樁自治系統(tǒng)冰木、多接口自治系統(tǒng)以及轉(zhuǎn)送自治系統(tǒng)的任意互連。殘樁自治系統(tǒng)和多接口自治系統(tǒng)不需要使用BGP——它們通過(guò)運(yùn)行EGP在自治系統(tǒng)之間交換可到達(dá)信息笼恰。
BGP允許使用基于策略的選路踊沸。由自治系統(tǒng)管理員制訂策略,并通過(guò)配置文件將策略指定給BGP社证。制訂策略并不是協(xié)議的一部分逼龟,但指定策略允許BGP實(shí)現(xiàn)在存在多個(gè)可選路徑時(shí)選擇路徑,并控制信息的重發(fā)送追葡。選路策略與政治腺律、安全或經(jīng)濟(jì)因素有關(guān)。
BGP與RIP和OSPF的不同之處在于BGP使用TCP作為其傳輸層協(xié)議宜肉。兩個(gè)運(yùn)行BGP的系統(tǒng)之間建立一條TCP連接匀钧,然后交換整個(gè)BGP路由表。從這個(gè)時(shí)候開(kāi)始谬返,在路由表發(fā)生變化時(shí)之斯,再發(fā)送更新信號(hào)。
BGP是一個(gè)距離向量協(xié)議遣铝,但是與(通告到目的地址跳數(shù)的)RIP不同的是佑刷,BGP列舉了到每個(gè)目的地址的路由(自治系統(tǒng)到達(dá)目的地址的序列號(hào))。這樣就排除了一些距離向量協(xié)議的問(wèn)題酿炸。采用16 bit數(shù)字表示自治系統(tǒng)標(biāo)識(shí)瘫絮。
BGP通過(guò)定期發(fā)送keepalive報(bào)文給其鄰站來(lái)檢測(cè)TCP連接對(duì)端的鏈路或主機(jī)失敗。兩個(gè)報(bào)文之間的時(shí)間間隔建議值為30秒填硕。應(yīng)用層的keepalive報(bào)文與TCP的keepalive選項(xiàng)(第23章)是獨(dú)立的檀何。
10.8 CIDR:無(wú)類(lèi)型域間選路
在第3章中,我們指出了B類(lèi)地址的缺乏廷支,因此現(xiàn)在的多個(gè)網(wǎng)絡(luò)站點(diǎn)只能采用多個(gè)C類(lèi)網(wǎng)絡(luò)號(hào)频鉴,而不采用單個(gè)B類(lèi)網(wǎng)絡(luò)號(hào)。盡管分配這些C類(lèi)地址解決了一個(gè)問(wèn)題(B類(lèi)地址的缺乏)恋拍,但它卻帶來(lái)了另一個(gè)問(wèn)題:每個(gè)C類(lèi)網(wǎng)絡(luò)都需要一個(gè)路由表表項(xiàng)垛孔。無(wú)類(lèi)型域間選路(CIDR)是一個(gè)防止Internet路由表膨脹的方法,它也稱(chēng)為超網(wǎng)(supernetting)施敢。在RFC 1518 [Rekher and Li 1993]和RFC 1519 [Fuller et al.1993]中對(duì)它進(jìn)行了描述周荐,而[Ford,Rekhter,and Braun 1993]是它的綜述狭莱。CIDR有一個(gè)Internet Architecture Board’sblessing [Huitema 1993]。RFC1467 [Topolcic 1993]對(duì)Internet中CIDR的開(kāi)發(fā)狀況進(jìn)行了小結(jié)概作。
CIDR的基本觀點(diǎn)是采用一種分配多個(gè)IP地址的方式腋妙,使其能夠?qū)⒙酚杀碇械脑S多表項(xiàng)總和(summarization)成更少的數(shù)目。例如讯榕,如果給單個(gè)站點(diǎn)分配16個(gè)C類(lèi)地址骤素,以一種可以用總和的方式來(lái)分配這16個(gè)地址,這樣愚屁,所有這16個(gè)地址可以參照Internet上的單個(gè)路由表表項(xiàng)济竹。同時(shí),如果有8個(gè)不同的站點(diǎn)是通過(guò)同一個(gè)Internet服務(wù)提供商的同一個(gè)連接點(diǎn)接入Internet的霎槐,且這8個(gè)站點(diǎn)分配的8個(gè)不同IP地址可以進(jìn)行總和送浊,那么,對(duì)于這8個(gè)站點(diǎn)丘跌,在Internet上袭景,只需要單個(gè)路由表表項(xiàng)。
要使用這種總和闭树,必須滿(mǎn)足以下三種特性:
1:為進(jìn)行選路要對(duì)多個(gè)IP地址進(jìn)行總和時(shí)耸棒,這些IP地址必須具有相同的高位地址比特。
2:路由表和選路算法必須擴(kuò)展成根據(jù)32 bit IP地址和32 bit掩碼做出選路決策蔼啦。
3:必須擴(kuò)展選路協(xié)議使其除了32 bit地址外,還要有32 bit掩碼仰猖。OSPF(10.6節(jié))和RIP-2(10.5節(jié))都能夠攜帶第4版BGP所提出的32 bit掩碼捏肢。
例如,RFC 1466 [Gerich 1993]建議歐洲新的C類(lèi)地址的范圍是194.0.0.0~195.255.255.255饥侵。以16進(jìn)制表示鸵赫,這些地址的范圍是0xc2000000~0xc3ffffff。它代表了65536個(gè)不同的C類(lèi)網(wǎng)絡(luò)號(hào)躏升,但它們地址的高7bit是相同的辩棒。在歐洲以外的國(guó)家里,可以采用IP地址為0xc2000000和32 bit 0xfe000000(254.0.0.0)為掩碼的單個(gè)路由表表項(xiàng)來(lái)對(duì)所有這些65536個(gè)C類(lèi)網(wǎng)絡(luò)號(hào)選路到單個(gè)點(diǎn)上膨疏。C類(lèi)地址的后面各比特位(即在194或195后面各比特)也可以進(jìn)行層次分配一睁,例如以國(guó)家或服務(wù)提供商分配,以允許對(duì)在歐洲路由器之間使用除了這32 bit掩碼的高7bit外的其他比特進(jìn)行概括佃却。
CIDR同時(shí)還使用一種技術(shù)者吁,使最佳匹配總是最長(zhǎng)的匹配:即在32 bit掩碼中,它具有最大值饲帅。我們繼續(xù)采用上一段中所用的例子复凳,歐洲的一個(gè)服務(wù)提供商可能會(huì)采用一個(gè)與其他歐洲服務(wù)提供商不同的接入點(diǎn)瘤泪。如果給該提供商分配的地址組是從 194.0.16.0到 194.0.31.255(16個(gè)C類(lèi)網(wǎng)絡(luò)號(hào)),那么可能只有這些網(wǎng)絡(luò)的路由表項(xiàng)的IP地址是 194.0.16.0育八,掩碼為 255.255.240.0(0xfffff 000)对途。發(fā)往194.0.22.1地址的數(shù)據(jù)報(bào)將同時(shí)與這個(gè)路由表表項(xiàng)和其他歐洲C類(lèi)地址的表項(xiàng)進(jìn)行匹配。但是由于掩碼 255.255.240 比 254.0.0.0 更“長(zhǎng)”髓棋,因此將采用具有更長(zhǎng)掩碼的路由表表項(xiàng)实檀。
“無(wú)類(lèi)型”的意思是現(xiàn)在的選路決策是基于整個(gè)32 bit IP地址的掩碼操作,而不管其IP地址是A類(lèi)仲锄、B類(lèi)或是C類(lèi)劲妙,都沒(méi)有什么區(qū)別。
CIDR最初是針對(duì)新的C類(lèi)地址提出的儒喊。這種變化將使Internet路由表增長(zhǎng)的速度緩慢下來(lái)镣奋,但對(duì)于現(xiàn)存的選路則沒(méi)有任何幫助。這是一個(gè)短期解決方案怀愧。作為一個(gè)長(zhǎng)期解決方案侨颈,如果將CIDR應(yīng)用于所有IP地址,并根據(jù)各洲邊界和服務(wù)提供商對(duì)已經(jīng)存在的IP地址進(jìn)行重新分配(且所有現(xiàn)有主機(jī)重新進(jìn)行編址P疽濉)哈垢,那么[Ford, Rekhter, and Braun 1993]宣稱(chēng),目前包含10 000網(wǎng)絡(luò)表項(xiàng)的路由表將會(huì)減少成只有200個(gè)表項(xiàng)扛拨。
10.9 小結(jié)
有兩種基本的選路協(xié)議耘分,即用于同一自治系統(tǒng)各路由器之間的內(nèi)部網(wǎng)關(guān)協(xié)議(IGP)和用于不同自治系統(tǒng)內(nèi)路由器通信的外部網(wǎng)關(guān)協(xié)議(EGP)。
最常用的IGP是路由信息協(xié)議(RIP)绑警,而OSPF是一個(gè)正在得到廣泛使用的新IGP求泰。一種新近流行的EGP是邊界網(wǎng)關(guān)協(xié)議(BGP)。在本章中计盒,我們討論了RIP及其交換的報(bào)文類(lèi)型渴频。第2版RIP是其最近的一個(gè)改進(jìn)版,它支持子網(wǎng)北启,還有一些其他改進(jìn)技術(shù)卜朗。同時(shí)也對(duì)OSPF、BGP和無(wú)類(lèi)型域間選路(CIDR)進(jìn)行了描述咕村。CIDR是一種新技術(shù)场钉,可以減小Internet路由表的大小。
你可能還會(huì)遇到一些其他的OSI選路協(xié)議懈涛。域間選路協(xié)議(IDRP)最開(kāi)始時(shí)惹悄,是一個(gè)為了使用OSI地址而不是IP地址,而進(jìn)行修改的BGP版本肩钠。Intermediate System to Intermediate System協(xié)議(IS-IS)是OSI的標(biāo)準(zhǔn)IGP泣港≡葜常可以用它來(lái)選路CLNP(無(wú)連接網(wǎng)絡(luò)協(xié)議),這是一種與IP類(lèi)似的OSI協(xié)議当纱。IS-IS和OSPF相似呛每。
動(dòng)態(tài)選路仍然是一個(gè)網(wǎng)間互連的研究熱點(diǎn)。對(duì)使用的選路協(xié)議和運(yùn)行的路由守護(hù)程序進(jìn)行選擇坡氯,是一項(xiàng)復(fù)雜的工作晨横。[Perlman 1992]提供了許多細(xì)節(jié)。