路有基礎知識:教你快速看懂路由表信息
讀懂路由表信息是非常重要的,能夠幫助我們快速的解決路由器故障,我們從來沒有說過這些路由表信息是如何被創(chuàng)建的。每當初始化一個接口時(通常是用ifconfig命令設置接口地址),就為接口自動創(chuàng)建一個直接路由。對于點對點鏈路和環(huán)回接口來說,路由是到達主機(例如,設置H標志)。對于廣播接口來說,如以太網(wǎng),路由是到達網(wǎng)絡。
到達主機或網(wǎng)絡的路由如果不是直接相連的,那么就必須加入路由表。一個常用的方法是在系統(tǒng)引導時顯式地在初始化文件中運行route命令。第3個參數(shù)(default和slip)代表目的端,第4個參數(shù)代表網(wǎng)關(路由器),***一個參數(shù)代表路由的度量(metric)。route命令在度量值大于0時要為該路由設置G標志,否則,當耗費值為0時就不設置G標志。不幸的是,幾乎沒有系統(tǒng)愿意在啟動文件中包含route命令。在4.4BSD和 BSD/386系統(tǒng)中,啟動文件是/etc/netstart;在SVR4系統(tǒng)中,啟動文件是/etc/inet/rc.inet;在 Solaris2.x中,啟動文件是/etc/rc2.d/S69inet;在SunOS4.1.x中,啟動文件是/etc/rc.local;而 AIX3.2.2則使用文件/etc/rc.net。一些系統(tǒng)允許在某個文件中指定默認的路由器,如/etc/defaultrouter.于是在每次重新啟動系統(tǒng)時都要在路由表信息中加入該默認項。初始化路由表信息的其他方法是運行路由守護程序或者用較新的路由器發(fā)現(xiàn)協(xié)議。
較復雜的路由表
在我們的子網(wǎng)上,主機sun是所有主機的默認路由器,因為它有撥號SLIP鏈路連接到Internet上前兩項與主機svr4的前兩項一致:通過路由器bsdi到達slip的特定主機路由,以及環(huán)回路由。第3行是新加的。這是一個直接到達主機的路由(沒有設置 G標志,但設置了H標志),對應于點對點的鏈路,即SLIP接口。如果我們把它與ifconfig命令的輸出進行比較:sun% ifconfigsl0sl0:flags=1051inet140.252.1.29——>140.252.1.183netmaskffffff00可以發(fā)現(xiàn)路由表信息中的目的地址就是點對點鏈路的另一端(即路由器netb),網(wǎng)關地址為外出接口的本地IP地址(140.252.1.29)(前面已經(jīng)說過,netstat為直接路由打印出來的網(wǎng)關地址就是本地接口所用的IP地址)。
默認的路由表項是一個到達網(wǎng)絡的間接路由(設置了G標志,但沒有設置H標志),這正是我們所希望的。網(wǎng)關地址是路由器的地址(140.252.1.183, SLIP鏈路的另一端),而不是SLIP鏈路的本地IP地址(140.252.1.29)。其原因還是因為是間接路由,不是直接路由。還應該指出的是,netstat輸出的第3和第4行(接口名為sl0)由SLIP軟件在啟動時創(chuàng)建,并在關閉時刪除。
沒有到達目的地的路由
我們所有的例子都假定對路由表信息的搜索能找到匹配的表項,即使匹配的是默認項。如果路由表信息中沒有默認項,而又沒有找到匹配項,這時會發(fā)生什么情況呢?結果取決于該IP數(shù)據(jù)報是由主機產(chǎn)生的還是被轉發(fā)的(例如,我們就充當一個路由器)。如果數(shù)據(jù)報是由本地主機產(chǎn)生的,那么就給發(fā)送該數(shù)據(jù)報的應用程序返回一個差錯,或者是“主機不可達差錯”或者是“網(wǎng)絡不可達差錯”。如果是被轉發(fā)的數(shù)據(jù)報,那么就給原始發(fā)送端發(fā)送一份ICMP主機不可達的差錯報文。