tcpip協(xié)議詳解tcpip詳解 卷1協(xié)議09_ip選路_h_第1頁
tcpip協(xié)議詳解tcpip詳解 卷1協(xié)議09_ip選路_h_第2頁
tcpip協(xié)議詳解tcpip詳解 卷1協(xié)議09_ip選路_h_第3頁
tcpip協(xié)議詳解tcpip詳解 卷1協(xié)議09_ip選路_h_第4頁
tcpip協(xié)議詳解tcpip詳解 卷1協(xié)議09_ip選路_h_第5頁
已閱讀5頁,還剩7頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、 下載第9章IP選路9.1 引 言 選路是IP最重要的功能之一。圖 9-1是IP層處理過程的簡(jiǎn)單流程。需要進(jìn)行選路的數(shù)據(jù)報(bào)可以由本地主機(jī)產(chǎn)生,也可以由其他主機(jī)產(chǎn)生。在后一種情況下,主機(jī)必須配置成一個(gè)路由器,否則通過網(wǎng)絡(luò)接口接收到的數(shù)據(jù)報(bào),如果目的地址不是本機(jī)就要被丟棄(例如,悄無聲息地被丟棄)。 在圖9 -1中,我們還描述了一個(gè)路由守護(hù)程序( daemon),通常這是一個(gè)用戶進(jìn)程。在 一直存在)。在某個(gè)給定主機(jī)上運(yùn)行何種路由協(xié)議,如何在相鄰路由器上交換選路信息,以及選路協(xié)議是如何工作的,所有這些問題都是非常復(fù)雜的,其本身就可以用整本書來加以討論 (有興趣的讀者可以參考文獻(xiàn)Perlman 199

2、2以獲得更詳細(xì)的信息)。在第10章中,我們將簡(jiǎn)單討論動(dòng)態(tài)選路和選路信息協(xié)議RIP(Routing Information Protocol)。在本章中,我們主要的目的是了解單個(gè)IP層如何作出路由決策。 圖9-1所示的路由表經(jīng)常被IP訪問(在一個(gè)繁忙的主機(jī)上,一秒鐘內(nèi)可能要訪問幾百次),但是它被路由守護(hù)程序更新的頻度卻要低得多(可能大約 30秒種一次)。當(dāng)接收到ICMP重定向,報(bào)文時(shí),路由表也要被更新,這一點(diǎn)我們將在 9.5節(jié)討論route命令時(shí)加以介紹。在本章中, 我們還將用netstat命令來顯示路由表。 netstat 命令 路由守 護(hù)程序根據(jù)相鄰路由器更新路由表 UDP TCP ICMP

3、 是 是分組(IP地址之一或是廣 播地址)IP輸出: 計(jì)算下一站路由器(如果需要)路由表處理IP選項(xiàng)IP輸入隊(duì)列IP層網(wǎng)絡(luò)接口圖9-1 IP層工作流程 route命令 84TCP/IP詳解,卷1:協(xié)議9.2選路的原理 下載開始討論IP選路之前,首先要理解內(nèi)核是如何維護(hù)路由表的。路由表中包含的信息決定了IP層所做的所有決策。 在3.3節(jié)中,我們列出了IP搜索路由表的幾個(gè)步驟: 1) 搜索匹配的主機(jī)地址; 2) 搜索匹配的網(wǎng)絡(luò)地址; 3) 搜索默認(rèn)表項(xiàng)(默認(rèn)表項(xiàng)一般在路由表中被指定為一個(gè)網(wǎng)絡(luò)表項(xiàng),其網(wǎng)絡(luò)號(hào)為 0)。匹配主機(jī)地址步驟始終發(fā)生在匹配網(wǎng)絡(luò)地址步驟之前。 IP層進(jìn)行的選路實(shí)際上是一種選路機(jī)

4、制,它搜索路由表并決定向哪個(gè)網(wǎng)絡(luò)接口發(fā)送分組。這區(qū)別于選路策略,它只是一組決定把哪些路由放入路由表的規(guī)則。 IP執(zhí)行選路機(jī)制,而路 由守護(hù)程序則一般提供選路策略。 9.2.1 簡(jiǎn)單路由表 首先來看一看一些典型的主機(jī)路由表。在主機(jī)svr4上,我們先執(zhí)行帶-r選項(xiàng)的netstat命令列出路由表,然后以-n選項(xiàng)再次執(zhí)行該命令,以數(shù)字格式打印出IP地址(我們這樣做是因?yàn)槁酚杀碇械囊恍┍眄?xiàng)是網(wǎng)絡(luò)地址,而不是主機(jī)地址。如果沒有- n選項(xiàng),netstat命令將搜索文件 /etc/networks并列出其中的網(wǎng)絡(luò)名。這樣會(huì)與另一種形式的名字網(wǎng)絡(luò)名加主機(jī)名相混淆)。 第1行說明,如果目的地是 140.252.1

5、3.65(slip主機(jī)),那么網(wǎng)關(guān)(路由器)將把分組轉(zhuǎn)發(fā)給5(bsdi)。這正是我們所期望的,因?yàn)橹鳈C(jī) slip通過SLIP鏈路與bsdi相連接,而bsdi與該主機(jī)在同一個(gè)以太網(wǎng)上。 對(duì)于一個(gè)給定的路由器,可以打印出五種不同的標(biāo)志( flag): UG H該路由可以使用。 該路由是到一個(gè)網(wǎng)關(guān)(路由器)。如果沒有設(shè)置該標(biāo)志,說明目的地是直接相連的。 該路由是到一個(gè)主機(jī),也就是說,目的地址是一個(gè)完整的主機(jī)地址。如果沒有設(shè)置該標(biāo)志,說明該路由是到一個(gè)網(wǎng)絡(luò),而目的地址是一個(gè)網(wǎng)絡(luò)地址:一個(gè)網(wǎng)絡(luò)號(hào),或者網(wǎng)絡(luò)號(hào)與子網(wǎng)號(hào)的組合。 該路由是由重定向報(bào)文創(chuàng)建的( 9.5節(jié))。 DM 該路由

6、已被重定向報(bào)文修改( 9.5節(jié))。 標(biāo)志G是非常重要的,因?yàn)橛伤鼌^(qū)分了間接路由和直接路由(對(duì)于直接路由來說是不設(shè)置標(biāo)志G的)。其區(qū)別在于,發(fā)往直接路由的分組中不但具有指明目的端的 IP地址,還具有其鏈路層地址(見圖 3-3)。當(dāng)分組被發(fā)往一個(gè)間接路由時(shí), IP地址指明的是最終的目的地,但是鏈路層地址指明的是網(wǎng)關(guān)(即下一站路由器)。我們?cè)趫D3-4已看到這樣的例子。在這個(gè)路由表例子中,有一個(gè)間接路由(設(shè)置了標(biāo)志 G),因此采用這一項(xiàng)路由的分組其 IP地址是最終的目的地( 5),但是其鏈路層地址必須對(duì)應(yīng)于路由器 5。 第9章 IP路由選擇85 下載理解

7、G和H標(biāo)志之間的區(qū)別是很重要的。 G標(biāo)志區(qū)分了直接路由和間接路由,如上所述。但是H標(biāo)志表明,目的地址( netstat命令輸出第一行)是一個(gè)完整的主機(jī)地址。沒有設(shè)置H 標(biāo)志說明目的地址是一個(gè)網(wǎng)絡(luò)地址(主機(jī)號(hào)部分為 0)。當(dāng)為某個(gè)目的IP地址搜索路由表時(shí), 主機(jī)地址項(xiàng)必須與目的地址完全匹配,而網(wǎng)絡(luò)地址項(xiàng)只需要匹配目的地址的網(wǎng)絡(luò)號(hào)和子網(wǎng)號(hào)就可以了。另外,大多數(shù)版本的 netstat命令首先打印出所有的主機(jī)路由表項(xiàng),然后才是網(wǎng)絡(luò)路由表項(xiàng)。 參考記數(shù)Refcnt(Reference count)列給出的是正在使用路由的活動(dòng)進(jìn)程個(gè)數(shù)。面向連接的協(xié)議如TCP在建立連接時(shí)要固定路由。如果在主機(jī) svr4和s

8、lip之間建立Telnet連接,可以看到參考記數(shù)值變?yōu)?。建立另一個(gè)Telnet連接時(shí),它的值將增加為2,依此類推。 下一列(“use”)顯示的是通過該路由發(fā)送的分組數(shù)。如果我們是這個(gè)路由的唯一用戶,那么運(yùn)行ping程序發(fā)送5個(gè)分組后,它的值將變?yōu)?5。最后一列( interface)是本地接口的名字。 輸出的第2行是環(huán)回接口( 2.7節(jié)),它的名字始終為 lo0。沒有設(shè)置G標(biāo)志,因?yàn)樵撀酚刹皇且粋€(gè)網(wǎng)關(guān)。H標(biāo)志說明目的地址( )是一個(gè)主機(jī)地址,而不是一個(gè)網(wǎng)絡(luò)地址。由于沒有設(shè)置G標(biāo)志,說明這是一個(gè)直接路由,網(wǎng)關(guān)列給出的是外出 IP地址。 輸出的第3行是默認(rèn)路由。每個(gè)主機(jī)都有一個(gè)

9、或多個(gè)默認(rèn)路由。這一項(xiàng)表明,如果在表中沒有找到特定的路由,就把分組發(fā)送到路由器 3(sun主機(jī))。這說明當(dāng)前主機(jī) (svr4)利用這一個(gè)路由表項(xiàng)就可以通過 Internet經(jīng)路由器sun(及其SLIP鏈路)訪問其他的系統(tǒng)。建立默認(rèn)路由是一個(gè)功能很強(qiáng)的概念。該路由標(biāo)志( UG)表明它是一個(gè)網(wǎng)關(guān),這是我們所期望的。 這里,我們有意稱sun為路由器而不是主機(jī),因?yàn)樗划?dāng)作默認(rèn)路由器來使用,它發(fā)揮的是IP轉(zhuǎn)發(fā)功能,而不是主機(jī)功能。 Host Requirements RFC文檔特別說明,IP層必須支持多個(gè)默認(rèn)路由。但是,許多實(shí)現(xiàn)系統(tǒng)并不支持這一點(diǎn)。當(dāng)存在多個(gè)默認(rèn)路由時(shí),一般的技

10、術(shù)就成為它們周圍的知更鳥了,例如,Solaris 2.2就是這樣做的。 輸出中的最后一行是所在的以太網(wǎng)。 H標(biāo)志沒有設(shè)置,說明目的地址( 2)是一個(gè)網(wǎng)絡(luò)地址,其主機(jī)地址部分設(shè)為 0。事實(shí)上,是它的低 5位設(shè)為0(見圖3-11)。由于這是一個(gè)直接路由( G標(biāo)志沒有被設(shè)置),網(wǎng)關(guān)列指出的IP地址是外出地址。 netstat命令輸出的最后一項(xiàng)還隱含了另一個(gè)信息,那就是目的地址( 2) 的子網(wǎng)掩碼。如果要把該目的地址與 3進(jìn)行比較,那么在比較之前首先要把它與目的地址掩碼( 0xffffffe0,3.7節(jié))進(jìn)行邏輯與。由于內(nèi)核知道每

11、個(gè)路由表項(xiàng)對(duì)應(yīng)的接口,而且每個(gè)接口都有一個(gè)對(duì)應(yīng)的子網(wǎng)掩碼,因此每個(gè)路由表項(xiàng)都有一個(gè)隱含的子網(wǎng)掩碼。 主機(jī)路由表的復(fù)雜性取決于主機(jī)所在網(wǎng)絡(luò)的拓?fù)浣Y(jié)構(gòu)。 1) 最簡(jiǎn)單的(也是最不令人感興趣的)情況是主機(jī)根本沒有與任何網(wǎng)絡(luò)相連。 TCP/IP協(xié)議仍然能用于這樣的主機(jī),但是只能與自己本身通信!這種情況下的路由表只包含環(huán)回接口一項(xiàng)。 2) 接下來的情況是主機(jī)連在一個(gè)局域網(wǎng)上,只能訪問局域網(wǎng)上的主機(jī)。這時(shí)路由表包含兩項(xiàng):一項(xiàng)是環(huán)回接口,另一項(xiàng)是局域網(wǎng)(如以太網(wǎng))。 3) 如果主機(jī)能夠通過單個(gè)路由器訪問其他網(wǎng)絡(luò)(如 Internet)時(shí),那么就要進(jìn)行下一步。 86TCP/IP詳解,卷1:協(xié)議 下載一般情況下

12、增加一個(gè)默認(rèn)表項(xiàng)指向該路由器。 4) 如果要新增其他的特定主機(jī)或網(wǎng)絡(luò)路由,那么就要進(jìn)行最后一步。在我們的例子中, 到主機(jī)slip的路由要通過路由器bsdi就是這樣的例子。 我們根據(jù)上述IP操作的步驟使用這個(gè)路由表為主機(jī)svr4上的一些分組例子選擇路由。 1) 假定目的地址是主機(jī)sun,3。首先進(jìn)行主機(jī)地址的匹配。路由表中的兩個(gè)主機(jī)地址表項(xiàng)( slip和localhost)均不匹配,接著進(jìn)行網(wǎng)絡(luò)地址匹配。這一次匹配成功,找到表項(xiàng)2(網(wǎng)絡(luò)號(hào)和子網(wǎng)號(hào)都相同),因此使用emd0接口。這是一個(gè)直接路由,因此鏈路層地址將是目的端的地址。 2) 假定目的地址是

13、主機(jī)slip,5。首先在路由表搜索主機(jī)地址,并找到一個(gè)匹配地址。這是一個(gè)間接路由,因此目的端的 IP地址仍然是5,但是鏈路層地址必須是網(wǎng)關(guān)5的鏈路層地址,其接口名為emd0。 3) 這一次我們通過Internet給主機(jī)()發(fā)送一份數(shù)據(jù)報(bào)。首先在路由表中搜索主機(jī)地址,失敗后進(jìn)行網(wǎng)絡(luò)地址匹配。最后成功地找到默認(rèn)表項(xiàng)。該路由是一個(gè)間接路由,通過網(wǎng)關(guān)3,并使用接口名為emd0。 4) 在我們最后一個(gè)例子中,我們給本機(jī)發(fā)送一份數(shù)據(jù)報(bào)。有四種方法可以完成這件事,如用主機(jī)名、

14、主機(jī)IP地址、環(huán)回名或者環(huán)回IP地址: ftp ftp ftpftpsvr4 4localhost127 . 0 . 0 . 1在前兩種情況下,對(duì)路由表的第 2次搜索得到一個(gè)匹配的網(wǎng)絡(luò)地址 2,并把IP 報(bào)文傳送給以太網(wǎng)驅(qū)動(dòng)程序。正如圖 2-4所示的那樣, IP報(bào)文中的目的地址為本機(jī)IP地址,因此報(bào)文被送給環(huán)回驅(qū)動(dòng)程序,然后由驅(qū)動(dòng)程序把報(bào)文放入 IP輸出隊(duì)列中。 在后兩種情況下,由于指定了環(huán)回接口的名字或 IP地址,第一次搜索就找到匹配的主機(jī)地址,因此報(bào)文直接被送給環(huán)回驅(qū)動(dòng)程序,然后由驅(qū)動(dòng)程序把報(bào)文放入 IP輸出隊(duì)列中。 上述四種情況報(bào)文都要被送

15、給環(huán)回驅(qū)動(dòng)程序,但是采用的兩種路由決策是不相同的。 9.2.2 初始化路由表 我們從來沒有說過這些路由表是如何被創(chuàng)建的。每當(dāng)初始化一個(gè)接口時(shí)(通常是用ifconfig命令設(shè)置接口地址),就為接口自動(dòng)創(chuàng)建一個(gè)直接路由。對(duì)于點(diǎn)對(duì)點(diǎn)鏈路和環(huán)回接口來說,路由是到達(dá)主機(jī)(例如,設(shè)置 H標(biāo)志)。對(duì)于廣播接口來說,如以太網(wǎng),路由是到達(dá)網(wǎng)絡(luò)。 到達(dá)主機(jī)或網(wǎng)絡(luò)的路由如果不是直接相連的,那么就必須加入路由表。一個(gè)常用的方法是在系統(tǒng)引導(dǎo)時(shí)顯式地在初始化文件中運(yùn)行 route命令。在主機(jī)svr4上,我們運(yùn)行下面兩個(gè)命令來添加路由表中的表項(xiàng): route add default sun 1 route add slip

16、 bsdi1第3個(gè)參數(shù)( default和slip)代表目的端,第4個(gè)參數(shù)代表網(wǎng)關(guān)(路由器),最后一個(gè)參數(shù)代表路由的度量(metric)。route命令在度量值大于0時(shí)要為該路由設(shè)置G標(biāo)志,否則,當(dāng)耗費(fèi)值為0時(shí)就不設(shè)置G標(biāo)志。 第9章 IP路由選擇87不幸的是,幾乎沒有系統(tǒng)愿意在啟動(dòng)文件中包含route命令。在4.4BSD和BSD/386 系統(tǒng)中,啟動(dòng)文件是 / e t c / n e t s t a r t ;在 S V R 4 系統(tǒng)中,啟動(dòng)文件是 /etc/inet/rc.inet;在Solaris 2.x中,啟動(dòng)文件是/etc/rc2.d/S69inet;在SunOS 4.1.x中,啟動(dòng)

17、文件是/etc/rc.local;而AIX 3.2.2則使用文件/etc/。 一些系統(tǒng)允許在某個(gè)文件中指定默認(rèn)的路由器,如 /etc/defaultrouter。于是在每次重新啟動(dòng)系統(tǒng)時(shí)都要在路由表中加入該默認(rèn)項(xiàng)。 初始化路由表的其他方法是運(yùn)行路由守護(hù)程序(第 10章)或者用較新的路由器發(fā)現(xiàn)協(xié)議 (9.6節(jié))。 下載9.2.3 較復(fù)雜的路由表 在我們的子網(wǎng)上,主機(jī) sun是所有主機(jī)的默認(rèn)路由器,因?yàn)樗袚芴?hào) SLIP鏈路連接到Internet上(參見扉頁前圖)。 前兩項(xiàng)與主機(jī)svr4的前兩項(xiàng)一致:通過路由器 bsdi到達(dá)slip的特定主機(jī)路由,以及環(huán)回路由。 第3行是新加的。這是一

18、個(gè)直接到達(dá)主機(jī)的路由 (沒有設(shè)置G標(biāo)志,但設(shè)置了H標(biāo)志),對(duì)應(yīng)于點(diǎn)對(duì)點(diǎn)的鏈路,即SLIP接口。如果我們把它與ifconfig命令的輸出進(jìn)行比較: sun % ifconfig sl0sl0: flags= 1051 inet 9 - 83 netmask ffffff00可以發(fā)現(xiàn)路由表中的目的地址就是點(diǎn)對(duì)點(diǎn)鏈路的另一端 (即路由器netb), 網(wǎng)關(guān)地址為外出接口的本地IP地址(9)(前面已經(jīng)說過, netstat為直接路由打印出來的網(wǎng)關(guān)地址就是本地接口所用的IP地址)。 默認(rèn)的路由表項(xiàng)是一個(gè)到達(dá)網(wǎng)絡(luò)的間接路由 (設(shè)置了G標(biāo)志,但

19、沒有設(shè)置H標(biāo)志),這正是我們所希望的。網(wǎng)關(guān)地址是路由器的地址 (83,SLIP鏈路的另一端), 而不是SLIP鏈路的本地IP地址(9)。其原因還是因?yàn)槭情g接路由,不是直接路由。 還應(yīng)該指出的是, netstat輸出的第3和第4行(接口名為sl0)由SLIP軟件在啟動(dòng)時(shí)創(chuàng)建,并在關(guān)閉時(shí)刪除.9.2.4 沒有到達(dá)目的地的路由 我們所有的例子都假定對(duì)路由表的搜索能找到匹配的表項(xiàng),即使匹配的是默認(rèn)項(xiàng)。如果路由表中沒有默認(rèn)項(xiàng),而又沒有找到匹配項(xiàng),這時(shí)會(huì)發(fā)生什么情況呢? 結(jié)果取決于該IP數(shù)據(jù)報(bào)是由主機(jī)產(chǎn)生的還是被轉(zhuǎn)發(fā)的(例如,我們就充當(dāng)一個(gè)路由器)。如果數(shù)據(jù)報(bào)是

20、由本地主機(jī)產(chǎn)生的,那么就給發(fā)送該數(shù)據(jù)報(bào)的應(yīng)用程序返回一個(gè)差錯(cuò),或者是“主機(jī)不可達(dá)差錯(cuò)”或者是“網(wǎng)絡(luò)不可達(dá)差錯(cuò)”。如果是被轉(zhuǎn)發(fā)的數(shù)據(jù)報(bào),那么就給原始發(fā)送 88TCP/IP詳解,卷1:協(xié)議端發(fā)送一份ICMP主機(jī)不可達(dá)的差錯(cuò)報(bào)文。下一節(jié)將討論這種差錯(cuò)。 下載9.3ICMP主機(jī)與網(wǎng)絡(luò)不可達(dá)差錯(cuò) 當(dāng)路由器收到一份IP數(shù)據(jù)報(bào)但又不能轉(zhuǎn)發(fā)時(shí),就要發(fā)送一份 ICMP“主機(jī)不可達(dá)”差錯(cuò)報(bào)文( ICMP主機(jī)不可達(dá)報(bào)文的格式如圖 6-10所示)??梢院苋菀装l(fā)現(xiàn),在我們的網(wǎng)絡(luò)上把接在路由器sun上的撥號(hào)SLIP鏈路斷開,然后試圖通過該 SLIP鏈路發(fā)送分組給任何指定 sun為默認(rèn)路由器的主機(jī)。 較老版本的BSD產(chǎn)生一

21、個(gè)主機(jī)不可達(dá)或者網(wǎng)絡(luò)不可達(dá)差錯(cuò),這取決于目的端是否處于一個(gè)局域子網(wǎng)上。4.4 BSD只產(chǎn)生主機(jī)不可達(dá)差錯(cuò)。 我們?cè)谏弦还?jié)通過在路由器 sun上運(yùn)行netstat命令可以看到,當(dāng)接通SLIP鏈路啟動(dòng)時(shí)就要在路由表中增加一項(xiàng)使用 SLIP鏈路的表項(xiàng),而當(dāng)斷開SLIP鏈路時(shí)則刪除該表項(xiàng)。這說明當(dāng)SLIP鏈路斷開時(shí), sun的路由表中就沒有默認(rèn)項(xiàng)了。但是我們不想改變網(wǎng)絡(luò)上其他主機(jī)的路由表,即同時(shí)刪除它們的默認(rèn)路由。相反,對(duì)于 sun不能轉(zhuǎn)發(fā)的分組,我們對(duì)它產(chǎn)生的ICMP主機(jī)不可達(dá)差錯(cuò)報(bào)文進(jìn)行計(jì)數(shù)。 在主機(jī)svr4上運(yùn)行ping程序就可以看到這一點(diǎn),它在撥號(hào) SLIP鏈路的另一端(撥號(hào)鏈路已被斷開):

22、鍵入中斷鍵停止顯示在主機(jī)bsdi上運(yùn)行tcpdump命令的輸出如圖9-2所示。 圖9-2 響應(yīng)ping 命令的ICMP主機(jī)不可達(dá)報(bào)文 當(dāng)路由器sun發(fā)現(xiàn)找不到能到達(dá)主機(jī)gemini的路由時(shí),它就響應(yīng)一個(gè)主機(jī)不可達(dá)的回顯請(qǐng)求報(bào)文。 如果把SLIP鏈路接到Internet上,然后試圖ping一個(gè)與Internet沒有連接的IP地址,那么應(yīng)該會(huì) 產(chǎn)生差錯(cuò)。但令人感興趣的是,我們可以看到在返回差錯(cuò)報(bào)文之前,分組要在Internet上傳送多遠(yuǎn):該IP地址沒有連接到Internet上從圖8-5可以看出,在發(fā)現(xiàn)該IP地址是無效的之前,該分組已通過了 6個(gè)路由器。只有當(dāng)它到達(dá)NSFNET骨干網(wǎng)的邊界時(shí)才檢測(cè)到

23、差錯(cuò)。這說明, 6個(gè)路由器之所以能轉(zhuǎn)發(fā)分組是因?yàn)槁酚杀碇杏心J(rèn)項(xiàng)。只有當(dāng)分組到達(dá) NSFNET骨干網(wǎng)時(shí),路由器才能知道每個(gè)連接到 Internet上的每個(gè)網(wǎng)絡(luò)的信息。這說明許多路由器只能在局部范圍內(nèi)工作。 參考文獻(xiàn)Ford, Rekhter, and Braun 1993定義了頂層選路域( top-level routing domain), 由它來維護(hù)大多數(shù)Internet網(wǎng)站的路由信息,而不使用默認(rèn)路由。他們指出,在 Internet上存在 第9章 IP路由選擇89 下載5個(gè)這樣的頂層選路域: NSFNET主干網(wǎng)、商業(yè)互聯(lián)網(wǎng)交換( Commercial Internet Exchange:

24、 CIX)、N ASA科學(xué)互聯(lián)網(wǎng)( NASA Science Internet: NSI )、S print Link以及歐洲IP主干網(wǎng) (EBONE)。 9.4轉(zhuǎn)發(fā)或不轉(zhuǎn)發(fā)前面我們已經(jīng)提過幾次,一般都假定主機(jī)不轉(zhuǎn)發(fā) IP數(shù)據(jù)報(bào),除非對(duì)它們進(jìn)行特殊配置而作為路由器使用。如何進(jìn)行這樣的配置呢? 大多數(shù)伯克利派生出來的系統(tǒng)都有一個(gè)內(nèi)核變量 ipforwarding,或其他類似的名字 (參見附錄E)。一些系統(tǒng)(如BSD/386和SVR4)只有在該變量值不為0的情況下才轉(zhuǎn)發(fā)數(shù)據(jù)報(bào)。 SunOS 4.1.x允許該變量可以有三個(gè)不同的值:- 1表示始終不轉(zhuǎn)發(fā)并且始終不改變它的值; 0表示默認(rèn)條件下不轉(zhuǎn)發(fā),

25、但是當(dāng)打開兩個(gè)或更多個(gè)接口時(shí)就把該值設(shè)為 1 ;1表示始終轉(zhuǎn)發(fā)。Solaris 2.x把這三個(gè)值改為0(始終不轉(zhuǎn)發(fā))、1(始終轉(zhuǎn)發(fā))和2(在打開兩個(gè)或更多個(gè)接口時(shí)才轉(zhuǎn)發(fā))。 較早版本的4.2BSD主機(jī)在默認(rèn)條件下可以轉(zhuǎn)發(fā)數(shù)據(jù)報(bào),這給沒有進(jìn)行正確配置的系統(tǒng)帶來了許多問題。這就是內(nèi)核選項(xiàng)為什么要設(shè)成默認(rèn)的“始終不轉(zhuǎn)發(fā)”的原因,除非系統(tǒng)管理 員進(jìn)行特殊設(shè)置。 9.5ICMP重定向差錯(cuò) 當(dāng)IP數(shù)據(jù)該被發(fā)送到另一個(gè)路由器時(shí),收到數(shù)據(jù)報(bào)的路由器就要發(fā)送 ICMP重定向差 錯(cuò)報(bào)文給IP數(shù)據(jù)報(bào)的發(fā)送端。這在概念上是很簡(jiǎn)單的,正如圖 9-3所示的那樣。只有當(dāng)主機(jī)可以選擇路由器發(fā)送分組的情況下,我們才可能看到 I

26、CMP重定向報(bào)文(回憶我們?cè)趫D 7-6中看過的例子)。 1) 我們假定主機(jī)發(fā)送一份IP數(shù)據(jù)報(bào)給R1。這種選路決策經(jīng)常發(fā)生,因?yàn)?R1是該主機(jī)的默認(rèn)路由。 2) R1收到數(shù)據(jù)報(bào)并且檢查它的路由表,發(fā)現(xiàn) R2是發(fā)送該數(shù)據(jù)報(bào)的下一站。當(dāng)它把數(shù)據(jù)報(bào)發(fā)送給R2時(shí),R1檢測(cè)到它正在發(fā)送的接口與數(shù)據(jù)報(bào)到達(dá)接口是相同的(即主機(jī)和兩個(gè)路由器所在的LAN)。這樣就給路由器發(fā)送重定向報(bào)文給原始發(fā)送端提供了線索。 3) R1 發(fā)送一份ICMP重定向報(bào)文給主機(jī),告訴它以后把數(shù)據(jù)報(bào)發(fā)送給 R2而不是R1。 主機(jī) (1) IP數(shù)據(jù)報(bào)(3) ICMP重定向 (2) IP數(shù)據(jù)報(bào) R1 R2 最終目標(biāo)圖9-3 ICMP重定向的例

27、子 90TCP/IP詳解,卷1:協(xié)議 下載重定向一般用來讓具有很少選路信息的主機(jī)逐漸建立更完善的路由表。主機(jī)啟動(dòng)時(shí)路由 表中可以只有一個(gè)默認(rèn)表項(xiàng)(在圖 9-3所示的例子中,為R1或R2)。一旦默認(rèn)路由發(fā)生差錯(cuò),默認(rèn)路由器將它進(jìn)行重定向,并允許主機(jī)對(duì)路由表作相應(yīng)的改動(dòng)。 ICMP重定向允許 TCP/IP主機(jī)在進(jìn)行選路時(shí)不需要具備智能特性,而把所有的智能特性放在路由器端。顯然, 在我們的例子中, R1和R2 必須知道有關(guān)相連網(wǎng)絡(luò)的更多拓?fù)浣Y(jié)構(gòu)的信息,但是連在 LAN上的 所有主機(jī)在啟動(dòng)時(shí)只需一個(gè)默認(rèn)路由,通過接收重定向報(bào)文來逐步學(xué)習(xí)。 9.5.1 一個(gè)例子 可以在我們的網(wǎng)絡(luò)上觀察到 ICMP重定向

28、的操作過程(見封二的圖)。盡管在拓?fù)鋱D中只畫出了三臺(tái)主機(jī)( aix,solaris和gemini)和兩臺(tái)路由器( gateway和netb),但是整個(gè) 網(wǎng)絡(luò)有超過150臺(tái)主機(jī)和10臺(tái)另外的路由器。大多數(shù)的主機(jī)都把 gateway指定為默認(rèn)路由器, 因?yàn)樗峁┝薎nternet的入口。 子網(wǎng)140.252.1上的主機(jī)是如何訪問作者所在子網(wǎng)(圖中底下的四臺(tái)主機(jī))的呢?首先,如果在SLIP鏈路的一端只有一臺(tái)主機(jī),那么就要使用 ARP(4.6節(jié))。這意味著位于拓?fù)鋱D頂部的子網(wǎng)(140.252.1)中的主機(jī)不需要其他特殊條件就可以訪問主機(jī)sun(9)。位于netb上的ARP軟件處理

29、這些事情。 但是,當(dāng)網(wǎng)絡(luò)位于SLIP鏈路的另一端時(shí),就要涉及到選路了。一個(gè)辦法是讓所有的主機(jī)和路由器都知道路由器netb是網(wǎng)絡(luò)140.252.13的網(wǎng)關(guān)。這可以在每個(gè)主機(jī)的路由表中設(shè)置靜態(tài)路由,或者在每個(gè)主機(jī)上運(yùn)行守護(hù)程序來實(shí)現(xiàn)。另一個(gè)更簡(jiǎn)單的辦法(也是實(shí)際采用的方法)是利用ICMP重定向報(bào)文來實(shí)現(xiàn)。 在位于網(wǎng)絡(luò)頂部的主機(jī) solaris上運(yùn)行ping程序到主機(jī)bsdi(5)。由于子網(wǎng)號(hào)不相同,ARP不能使用。假定沒有安裝靜態(tài)路由,發(fā)送的第一個(gè)分組將采用到路由 器gateway的默認(rèn)路由。下面是我們運(yùn)行ping程序之前的路由表: (所在的表項(xiàng)是IP廣播

30、地址。我們將在第 12章討論)。如果為ping程序指定- v選項(xiàng), 可以看到主機(jī)接收到的任何ICMP報(bào)文。我們需要指定該選項(xiàng)以觀察發(fā)送的重定向報(bào)文。 鍵入中斷鍵停止顯示 在收到ping程序的第一個(gè)響應(yīng)之前,主機(jī)先收到一份來自默認(rèn)路由器 gateway發(fā)來的 第9章 IP路由選擇91下載ICMP重定向報(bào)文。如果這時(shí)查看路由表,就會(huì)發(fā)現(xiàn)已經(jīng)插入了一個(gè)到主機(jī) bsdi的新路由(該表項(xiàng)如以下黑體字所示)。 這是我們第一次看到D標(biāo)志,表示該路由是被ICMP重定向報(bào)文創(chuàng)建的。G標(biāo)志說明這是一份到達(dá)gateway(netb)的間接路由, H標(biāo)志則說明這是一個(gè)主機(jī)路由(正如我們期望的那樣),而不是一個(gè)網(wǎng)絡(luò)路由

31、。 由于這是一個(gè)被主機(jī)重定向報(bào)文增加的主機(jī)路由,因此它只處理到達(dá)主機(jī) bsdi的報(bào)文。如果我們接著訪問主機(jī) svr4,那么就要產(chǎn)生另一個(gè) ICMP重定向報(bào)文,創(chuàng)建另一個(gè)主機(jī)路由。類似地,訪問主機(jī) slip也創(chuàng)建另一個(gè)主機(jī)路由。位于子網(wǎng)上的三臺(tái)主機(jī)( bsdi, svr 4和slip)還可以由一個(gè)指向路由器 sun的網(wǎng)絡(luò)路由來進(jìn)行處理。但是 ICMP重定向報(bào)文創(chuàng)建的是主機(jī)路由,而不是網(wǎng)絡(luò)路由,這是因?yàn)樵诒纠校a(chǎn)生 ICMP重定向報(bào)文的路由器并不知道 位于140.252.13網(wǎng)絡(luò)上的子網(wǎng)信息。 9.5.2 更多的細(xì)節(jié) ICMP重定向報(bào)文的格式如圖9-4所示。 (5)類型(03)代碼 檢驗(yàn)和 8字

32、節(jié) IP首部(包括選項(xiàng))+原始IP數(shù)據(jù)報(bào)中的數(shù)據(jù)前8字節(jié) 圖9-4 ICMP重定向報(bào)文 有四種不同類型的重定向報(bào)文,有不同的代碼值,如圖 9-5所示。 ICMP重定向報(bào)文的接收者必須查看三個(gè) IP地址: (1)導(dǎo)致重定向的IP地址(即ICMP重定向報(bào)文的數(shù)據(jù)位于IP數(shù)據(jù)報(bào)的首部); (2)發(fā)送重定向報(bào)文的路由器的IP地址(包含重定向信息的IP數(shù)據(jù)報(bào)中的源地址; (3)代碼描 述網(wǎng)絡(luò)重定向主機(jī)重定向 服務(wù)類型和網(wǎng)絡(luò)重定向服務(wù)類型和主機(jī)重定向應(yīng)該采用的路由器IP地址(在ICMP報(bào)文中的47字節(jié))。 關(guān)于ICMP重定向報(bào)文有很多規(guī)則。首先,重定向報(bào)文只能由路由器生成,而不能由主機(jī)生成。另外,重定向報(bào)

33、文是為主機(jī)而不是為路由器使用的。假定路由器和其他一些路由器共同參與某一種選路協(xié)議,則該協(xié)議就能消除重定向的需要(這意味著在圖 9-1中的路由表應(yīng)該圖9-5ICMP重定向報(bào)文的不同代碼值 應(yīng)該使用的路由器IP地址 92TCP/IP詳解,卷1:協(xié)議 下載消除或者能被選路守護(hù)程序修改,或者能被重定向報(bào)文修改,但不能同時(shí)被二者修改)。 在4.4BSD系統(tǒng)中,當(dāng)主機(jī)作為路由器使用時(shí),要進(jìn)行下列檢查。在生成 ICMP重定向報(bào)文之前這些條件都要滿足。 1) 出接口必須等于入接口。 2) 用于向外傳送數(shù)據(jù)報(bào)的路由不能被ICMP重定向報(bào)文創(chuàng)建或修改過,而且不能是路由器的默認(rèn)路由。 3) 數(shù)據(jù)報(bào)不能用源站選路來轉(zhuǎn)

34、發(fā)。 4) 內(nèi)核必須配置成可以發(fā)送重定向報(bào)文。 內(nèi)核變量取名為ip_sendredirects或其他類似的名字(參見附錄E)。大多數(shù)當(dāng)前的系統(tǒng)(例如BSD、 SunOS 4.1.x、Solaris 2.x 及AIX 3.2.2)在默認(rèn)條件下都設(shè)置該變量,使系統(tǒng)可以發(fā)送重定向報(bào)文。其他系統(tǒng)如SVR4則關(guān)閉了該項(xiàng)功能。 另外,一臺(tái)4.4BSD主機(jī)收到ICMP重定向報(bào)文后,在修改路由表之前要作一些檢查。這是為了防止路由器或主機(jī)的誤操作,以及惡意用戶的破壞,導(dǎo)致錯(cuò)誤地修改系統(tǒng)路由表。 1) 新的路由器必須直接與網(wǎng)絡(luò)相連接。 2) 重定向報(bào)文必須來自當(dāng)前到目的地所選擇的路由器。 3) 重定向報(bào)文不能讓主

35、機(jī)本身作為路由器。 4) 被修改的路由必須是一個(gè)間接路由。 關(guān)于重定向最后要指出的是,路由器應(yīng)該發(fā)送的只是對(duì)主機(jī)的重定向(代碼 1或3,如圖9- 5所示),而不是對(duì)網(wǎng)絡(luò)的重定向。子網(wǎng)的存在使得難于準(zhǔn)確指明何時(shí)應(yīng)發(fā)送對(duì)網(wǎng)絡(luò)的重定向而不是對(duì)主機(jī)的重定向。只當(dāng)路由器發(fā)送了錯(cuò)誤的類型時(shí),一些主機(jī)才把收到的對(duì)網(wǎng)絡(luò)的重定向當(dāng)作對(duì)主機(jī)的重定向來處理。 9.6ICMP路由器發(fā)現(xiàn)報(bào)文在本章前面已提到過一種初始化路由表的方法,即在配置文件中指定靜態(tài)路由。這種方法經(jīng)常用來設(shè)置默認(rèn)路由。另一種新的方法是利用 ICMP路由器通告和請(qǐng)求報(bào)文。 一般認(rèn)為,主機(jī)在引導(dǎo)以后要廣播或多播傳送一份路由器請(qǐng)求報(bào)文。一臺(tái)或更多臺(tái)路由器

36、響應(yīng)一份路由器通告報(bào)文。另外,路由器定期地廣播或多播傳送它們的路由器通告報(bào)文, 允許每個(gè)正在的主機(jī)相應(yīng)地更新它們的路由表。 RFC 1256 Deering 1991確定了這兩種ICMP報(bào)文的格式。ICMP路由器請(qǐng)求報(bào)文的格式如圖9-6所示。ICMP路由器通告報(bào)文的格式如圖9-7所示。 路由器在一份報(bào)文中可以通告多個(gè)地址。地址數(shù)指的是報(bào)文中所含的地址數(shù)。地址項(xiàng)大小指的是每個(gè)路由器地址 32 bit字的數(shù)目,始終為 2。生存期指的是通告地址有效的時(shí)間(秒 數(shù))。 類型(10) 代碼(0) 檢驗(yàn)和 8字節(jié)圖9-6 ICMP路由器請(qǐng)求報(bào)文格式 未用(置為0發(fā)送) 第9章 IP路由選擇93下載 類型(

37、9)代碼(0) 檢驗(yàn)和 8字節(jié) 地址數(shù)地址項(xiàng)長(zhǎng)度(2) 生存時(shí)間 路由器地址1 優(yōu)先級(jí)1 路由器地址2 優(yōu)先級(jí)2圖9-7 ICMP路由器通告報(bào)文格式 接下來是一對(duì)或多對(duì) IP地址和優(yōu)先級(jí)。 IP地址必須是發(fā)送路由器的某個(gè)地址。優(yōu)先級(jí)是一個(gè)有符號(hào)的32 bit整數(shù),指出該IP地址作為默認(rèn)路由器地址的優(yōu)先等級(jí),這是與子網(wǎng)上的其他路由器相比較而言的。值越大說明優(yōu)先級(jí)越高。優(yōu)先級(jí)為 0x80000000說明對(duì)應(yīng)的地址不能 作為默認(rèn)路由器地址使用,盡管它也包含中通告報(bào)文中。優(yōu)先級(jí)的默認(rèn)值一般為 0。 9.6.1 路由器操作 當(dāng)路由器啟動(dòng)時(shí),它定期在所有廣播或多播傳送接口上發(fā)送通告報(bào)文。準(zhǔn)確地說,這些通告報(bào)文不是定期發(fā)送的,而是隨機(jī)傳送的,以減小與子網(wǎng)上其他路由器發(fā)生沖突的概率。一般每?jī)纱瓮ǜ骈g隔450秒和600秒。一份給定的通告報(bào)文默認(rèn)生命周期是 30分鐘。 使用生命周期域的另一個(gè)時(shí)機(jī)是當(dāng)路由器上的某個(gè)接口被關(guān)閉時(shí)。在這種情況下,路由器可以在該接口上發(fā)送最后一份通告報(bào)文,并把生命周期值設(shè)為 0。 除了定期發(fā)送主動(dòng)提供的通告報(bào)文以外,路由器還要由器通告報(bào)文以響應(yīng)這些請(qǐng)求報(bào)文。 來自主機(jī)的請(qǐng)求報(bào)文,并發(fā)送路如果子網(wǎng)上有多臺(tái)路由器,由系統(tǒng)管理員為每個(gè)路由器設(shè)置優(yōu)先等級(jí)。例如,主默認(rèn)路 由器就要比備份路由器具有更高的優(yōu)先級(jí)。 9.6.2 主機(jī)操作 主機(jī)在引導(dǎo)期間一般發(fā)送三份路

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論