我們從來沒有說過這些路由表是如何被創(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):
routeadddefaultsun1
routeaddslipbsdi1
第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)志。不幸的是,幾乎沒有系統(tǒng)愿意在啟動(dòng)文件中包含route命令。在4.4BSD和BSD/386系統(tǒng)中,啟動(dòng)文件是/etc/netstart;在SVR4系統(tǒng)中,啟動(dòng)文件是/etc/inet/rc.inet;在Solaris2.x中,啟動(dòng)文件是/etc/rc2.d/S69inet;在SunOS4.1.x中,啟動(dòng)文件是/etc/rc.local;而AIX3.2.2則使用文件/etc/rc.net。
一些系統(tǒng)允許在某個(gè)文件中指定默認(rèn)的路由器,如/etc/defaultrouter。于是在每次重新啟動(dòng)系統(tǒng)時(shí)都要在路由表中加入該默認(rèn)項(xiàng)。初始化路由表的其他方法是運(yùn)行路由守護(hù)程序或者用較新的路由器發(fā)現(xiàn)協(xié)議
較復(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行是新加的。這是一個(gè)直接到達(dá)主機(jī)的路由(沒有設(shè)置G標(biāo)志,但設(shè)置了H標(biāo)志),對(duì)應(yīng)于點(diǎn)對(duì)點(diǎn)的鏈路,即SLIP接口。如果我們把它與ifconfig命令的輸出進(jìn)行比較:sun%ifconfigsl0sl0:flags=1051inet140.252.1.29-->140.252.1.183netmaskffffff00
可以發(fā)現(xiàn)路由表中的目的地址就是點(diǎn)對(duì)點(diǎn)鏈路的另一端(即路由器netb),網(wǎng)關(guān)地址為外出接口的本地IP地址(140.252.1.29)(前面已經(jīng)說過,netstat為直接路由打印出來的網(wǎng)關(guān)地址就是本地接口所用的IP地址)。
默認(rèn)的路由表項(xiàng)是一個(gè)到達(dá)網(wǎng)絡(luò)的間接路由(設(shè)置了G標(biāo)志,但沒有設(shè)置H標(biāo)志),這正是我們所希望的。網(wǎng)關(guān)地址是路由器的地址(140.252.1.183,SLIP鏈路的另一端),而不是SLIP鏈路的本地IP地址(140.252.1.29)。其原因還是因?yàn)槭情g接路由,不是直接路由。
還應(yīng)該指出的是,netstat輸出的第3和第4行(接口名為sl0)由SLIP軟件在啟動(dòng)時(shí)創(chuàng)建,并在關(guān)閉時(shí)刪除.
沒有到達(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)是由本地主機(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ā)送端發(fā)送一份ICMP主機(jī)不可達(dá)的差錯(cuò)報(bào)文。下一節(jié)將討論這種差錯(cuò)。
眾信咨詢:互聯(lián)網(wǎng)資質(zhì)代理誠信品牌