筆者單位的一臺電腦曾出現(xiàn)過這種故障,局域網(wǎng)內(nèi)一切正常,與其他機器連接正常,并與網(wǎng)關(guān)通信正常(能夠正常Ping通),但就是上不了外網(wǎng)。首先檢查了一下網(wǎng)絡(luò)配置信息,IP地址是自動獲取,DNS信息正確,網(wǎng)關(guān)信息正常,但奇怪的是多了一條網(wǎng)關(guān)信息(如圖1)。
網(wǎng)絡(luò)中沒有另外的網(wǎng)關(guān),只 有192.168.0.1,那 么192.168.0.2是怎么來的?再看其他辦公室的網(wǎng)絡(luò)配置,都只有一個網(wǎng)關(guān)信息。問題會是在這里嗎?如果系統(tǒng)始終與網(wǎng)關(guān)192.168.0.2相連, 因為根本不存在這個網(wǎng)關(guān),肯定是連不通外網(wǎng)的。
圖1 本地網(wǎng)絡(luò)配置信息
圖2 本地ARP緩存表
圖3 本地網(wǎng)絡(luò)路由信息表
為了驗證,我做了以下操作。在DOS下:ARP –D (清除ARP緩存信息)
PING WWW.SINA.COM.CN
ARP –A (查看ARP緩存信息)
結(jié)果得到如圖2所示的ARP緩存信息。
從圖2可以看出,系統(tǒng)先連接到網(wǎng)關(guān)192.168.0.2 上,因網(wǎng)絡(luò)中根本不存在這個網(wǎng)關(guān),所以得到一個無效的ARP地址。
現(xiàn)在有兩個問題需要弄清楚:這個多余的網(wǎng)關(guān)信息是如何來的?網(wǎng)絡(luò)為什么會選擇這個多余網(wǎng)關(guān),而不選擇正確的網(wǎng)關(guān)?這時我想到路由表,打開看了看:
route print
從圖3可以看出,單機內(nèi)部IP協(xié)議是怎樣維護著不同網(wǎng)絡(luò)段數(shù)據(jù)包的轉(zhuǎn)發(fā),也許你會認為電腦應只存在于一個網(wǎng)絡(luò)段,宏觀的看是這樣的,這里說的卻是從協(xié)議內(nèi)部微觀角度查看。
1.網(wǎng)絡(luò)地址(Network Destination)網(wǎng)絡(luò)目的地址范圍包含以下四種:
主機地址:某個特定主機的網(wǎng)絡(luò)地址。
子網(wǎng)地址:某個特定子網(wǎng)的網(wǎng)絡(luò)地址。
網(wǎng)絡(luò)地址:某個特定網(wǎng)絡(luò)的網(wǎng)絡(luò)地址。
默認路由:所有未在路由表中指定的網(wǎng)絡(luò)地址。
2.網(wǎng)絡(luò)掩碼(Netmask):用于標明本地計算機的網(wǎng)絡(luò)地址范圍。與網(wǎng)絡(luò)地址相與的結(jié)果用于定義本地計算機可以到達的網(wǎng)絡(luò)目的地址范圍。通常情況下,在添加路由時,Windows要求輸入的網(wǎng)絡(luò)地址和網(wǎng)絡(luò)掩碼相與后的結(jié)果必須等于網(wǎng)絡(luò)地址,否則路由添加會失敗。
圖4 正常的本地路由信息表
3.網(wǎng)關(guān)(Gateway,又稱下一跳服務器):在發(fā)送IP數(shù)據(jù)包時,網(wǎng)關(guān)定義了針對特定的網(wǎng)絡(luò)目的地址,數(shù)據(jù)包發(fā)送到的下一跳服務器。如果是本地計算機直接連接到的網(wǎng)絡(luò),網(wǎng)關(guān)通常是本地計算機對應的網(wǎng)絡(luò)接口,但此時接口必須和網(wǎng)關(guān)一致;如果是遠程網(wǎng)絡(luò)或默認路由,網(wǎng)關(guān)通常是本地計算機所連接到的網(wǎng)絡(luò)上的某個服務器或路由器。
4.接 口(Interface):接口定義了針對特定的網(wǎng)絡(luò)目的地址,本地計算機用于發(fā)送數(shù)據(jù)包的網(wǎng)絡(luò)接口。網(wǎng)關(guān)必須位于和接口相同的子網(wǎng)(默認網(wǎng)關(guān)除外),否則造成在使用此路由項時需調(diào)用其他路由項,從而可能會導致路由死鎖。
5.躍點數(shù)(Metric):躍點數(shù)用于指出路由的成本,通常代表到達目標地址所需要經(jīng)過的躍點數(shù)量,一個躍點代表經(jīng)過一個路由器。躍點數(shù)越低,代表路由成本越低;躍點數(shù)越高,則路由成本越高。當具有多條到達相同目的網(wǎng)絡(luò)的路由項時,TCP/IP會選擇具有更低躍點數(shù)的路由項。
當TCP/IP需要向某個IP地址發(fā)起通信時,它會對路由表進行評估,以確定如何發(fā)送數(shù)據(jù)包。評估過程如下: TCP/IP使用需要通信的目的IP地址和路由表中每一個路由項的網(wǎng)絡(luò)掩碼進行相與計算,如果相與后的結(jié)果匹配對應路由項的網(wǎng)絡(luò)地址,則記錄下此路由項。
當計算完路由表中所有的路由項后,TCP/IP選擇記錄下的路由項中的最長匹配路由(網(wǎng)絡(luò)掩碼中具有最多“1”位的路由項)來和此目的IP地址進行通信。如果存在多個最長匹配路由,那么選擇具有最低躍點數(shù)的路由項。如果所有目標不是多播、廣播、本地回路、本地IP的數(shù)據(jù)包,全部通過指定的網(wǎng)關(guān)進行轉(zhuǎn)發(fā)訪問。一般也就是表中第一項路由。
現(xiàn)在我們回過頭來看一下這臺電腦與外網(wǎng)連接的過程,因為是外網(wǎng),所以直接找到默認的網(wǎng)關(guān)了,但這里有兩個,選擇哪一個,看后面的躍點數(shù)(Metric),192.168.0.1 的躍 點 數(shù)(Metric) 為 20,而192.168.0.1的躍點數(shù)(Metric)為15,根據(jù)路由規(guī)則,自然選擇路點數(shù)少的那一個,也就是192.168.0.2。
現(xiàn)在問題找到了,至于這個路由項是怎么來的呢,我想可能是人為試用Route命令不小心加進去了,或者有病毒有意破壞了?,F(xiàn)在把網(wǎng)卡禁用,再啟用一次,重新獲得路由表信息,如圖4所示。
那個多余的路由項消失了,打開瀏覽器,一切正常了。為了驗證一下,我又試著加了一個路由選項:
route add 0.0.0.0 mask 0.0.0.0 192.168.0.2 Metric 25
這樣路由表又多了一個路由選項,只不過是Metric值大于原來的值。這時再打開瀏覽器,一切正常,與外網(wǎng)連接未受到影響?,F(xiàn)在總算弄清楚了??磥磉@小小的路由表也大有文章可作呀。